UNPKG

9.49 MBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack:///packages/perspective-viewer/webpack/universalModuleDefinition","webpack:///packages/node_modules/awesomplete/awesomplete.js","webpack:///packages/node_modules/core-js/internals/a-function.js","webpack:///packages/node_modules/core-js/internals/a-possible-prototype.js","webpack:///packages/node_modules/core-js/internals/add-to-unscopables.js","webpack:///packages/node_modules/core-js/internals/advance-string-index.js","webpack:///packages/node_modules/core-js/internals/an-object.js","webpack:///packages/node_modules/core-js/internals/array-includes.js","webpack:///packages/node_modules/core-js/internals/array-method-is-strict.js","webpack:///packages/node_modules/core-js/internals/array-method-uses-to-length.js","webpack:///packages/node_modules/core-js/internals/array-reduce.js","webpack:///packages/node_modules/core-js/internals/classof-raw.js","webpack:///packages/node_modules/core-js/internals/copy-constructor-properties.js","webpack:///packages/node_modules/core-js/internals/correct-prototype-getter.js","webpack:///packages/node_modules/core-js/internals/create-iterator-constructor.js","webpack:///packages/node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///packages/node_modules/core-js/internals/create-property-descriptor.js","webpack:///packages/node_modules/core-js/internals/define-iterator.js","webpack:///packages/node_modules/core-js/internals/descriptors.js","webpack:///packages/node_modules/core-js/internals/document-create-element.js","webpack:///packages/node_modules/core-js/internals/dom-iterables.js","webpack:///packages/node_modules/core-js/internals/engine-is-node.js","webpack:///packages/node_modules/core-js/internals/engine-user-agent.js","webpack:///packages/node_modules/core-js/internals/engine-v8-version.js","webpack:///packages/node_modules/core-js/internals/enum-bug-keys.js","webpack:///packages/node_modules/core-js/internals/export.js","webpack:///packages/node_modules/core-js/internals/fails.js","webpack:///packages/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack:///packages/node_modules/core-js/internals/get-built-in.js","webpack:///packages/node_modules/core-js/internals/get-substitution.js","webpack:///packages/node_modules/core-js/internals/global.js","webpack:///packages/node_modules/core-js/internals/has.js","webpack:///packages/node_modules/core-js/internals/hidden-keys.js","webpack:///packages/node_modules/core-js/internals/html.js","webpack:///packages/node_modules/core-js/internals/ie8-dom-define.js","webpack:///packages/node_modules/core-js/internals/indexed-object.js","webpack:///packages/node_modules/core-js/internals/inspect-source.js","webpack:///packages/node_modules/core-js/internals/internal-state.js","webpack:///packages/node_modules/core-js/internals/is-forced.js","webpack:///packages/node_modules/core-js/internals/is-object.js","webpack:///packages/node_modules/core-js/internals/is-pure.js","webpack:///packages/node_modules/core-js/internals/iterators-core.js","webpack:///packages/node_modules/core-js/internals/iterators.js","webpack:///packages/node_modules/core-js/internals/native-promise-constructor.js","webpack:///packages/node_modules/core-js/internals/native-symbol.js","webpack:///packages/node_modules/core-js/internals/native-weak-map.js","webpack:///packages/node_modules/core-js/internals/new-promise-capability.js","webpack:///packages/node_modules/core-js/internals/object-create.js","webpack:///packages/node_modules/core-js/internals/object-define-properties.js","webpack:///packages/node_modules/core-js/internals/object-define-property.js","webpack:///packages/node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///packages/node_modules/core-js/internals/object-get-own-property-names.js","webpack:///packages/node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///packages/node_modules/core-js/internals/object-get-prototype-of.js","webpack:///packages/node_modules/core-js/internals/object-keys-internal.js","webpack:///packages/node_modules/core-js/internals/object-keys.js","webpack:///packages/node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///packages/node_modules/core-js/internals/object-set-prototype-of.js","webpack:///packages/node_modules/core-js/internals/own-keys.js","webpack:///packages/node_modules/core-js/internals/path.js","webpack:///packages/node_modules/core-js/internals/promise-resolve.js","webpack:///packages/node_modules/core-js/internals/redefine.js","webpack:///packages/node_modules/core-js/internals/regexp-exec-abstract.js","webpack:///packages/node_modules/core-js/internals/regexp-exec.js","webpack:///packages/node_modules/core-js/internals/regexp-flags.js","webpack:///packages/node_modules/core-js/internals/regexp-sticky-helpers.js","webpack:///packages/node_modules/core-js/internals/require-object-coercible.js","webpack:///packages/node_modules/core-js/internals/set-global.js","webpack:///packages/node_modules/core-js/internals/set-to-string-tag.js","webpack:///packages/node_modules/core-js/internals/shared-key.js","webpack:///packages/node_modules/core-js/internals/shared-store.js","webpack:///packages/node_modules/core-js/internals/shared.js","webpack:///packages/node_modules/core-js/internals/species-constructor.js","webpack:///packages/node_modules/core-js/internals/string-multibyte.js","webpack:///packages/node_modules/core-js/internals/to-absolute-index.js","webpack:///packages/node_modules/core-js/internals/to-indexed-object.js","webpack:///packages/node_modules/core-js/internals/to-integer.js","webpack:///packages/node_modules/core-js/internals/to-length.js","webpack:///packages/node_modules/core-js/internals/to-object.js","webpack:///packages/node_modules/core-js/internals/to-primitive.js","webpack:///packages/node_modules/core-js/internals/uid.js","webpack:///packages/node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///packages/node_modules/core-js/internals/well-known-symbol.js","webpack:///packages/node_modules/core-js/modules/es.array.iterator.js","webpack:///packages/node_modules/core-js/modules/es.array.reduce.js","webpack:///packages/node_modules/core-js/modules/es.promise.finally.js","webpack:///packages/node_modules/core-js/modules/es.regexp.exec.js","webpack:///packages/node_modules/core-js/modules/es.string.replace.js","webpack:///packages/node_modules/core-js/modules/web.dom-collections.iterator.js","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/actionbar/actionbar.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/aria/aria.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/button/button.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/checkbox/checkbox.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/codicons/codicon/codicon-modifiers.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/codicons/codicon/codicon.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/contextview/contextview.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/countBadge/countBadge.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/dropdown/dropdown.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/findinput/findInput.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/hover/hover.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/iconLabel/iconlabel.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/inputbox/inputBox.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/keybindingLabel/keybindingLabel.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/list/list.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/mouseCursor/mouseCursor.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/progressbar/progressbar.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/sash/sash.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/media/scrollbars.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/splitview/splitview.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/table/table.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/media/tree.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/base/parts/quickinput/browser/media/quickInput.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaHandler.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/decorations/decorations.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/indentGuides/indentGuides.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lineNumbers/lineNumbers.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/viewLines.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/linesDecorations/linesDecorations.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/marginDecorations/marginDecorations.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimap.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/rulers/rulers.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/selections/selections.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewCursors/viewCursors.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/widget/media/diffEditor.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/widget/media/diffReview.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/browser/widget/media/editor.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/anchorSelect/anchorSelect.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/bracketMatching/bracketMatching.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/codeAction/lightBulbWidget.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/codelens/codelensWidget.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/colorPicker/colorPicker.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/dnd/dnd.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/find/findWidget.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/folding/folding.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/gotoError/media/gotoErrorWidget.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/peek/referencesWidget.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/links/links.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/message/messageController.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/parameterHints/parameterHints.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/peekView/media/peekViewWidget.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/rename/renameInputField.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/snippet/snippetSession.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/media/suggest.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/contrib/zoneWidget/zoneWidget.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/standalone/browser/inspectTokens/inspectTokens.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInput.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standalone-tokens.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/platform/actions/browser/menuEntryActionViewItem.css","webpack:///packages/node_modules/css-loader/node_modules/postcss-loader/dist/node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextMenuHandler.css","webpack:///packages/node_modules/css-loader/lib/css-base.js","webpack:///packages/node_modules/css-loader/lib/url/escape.js","webpack:///packages/node_modules/file-loader/dist/node_modules/monaco-editor/esm/vs/base/browser/ui/codicons/codicon/codicon.ttf","webpack:///packages/node_modules/lodash/_Symbol.js","webpack:///packages/node_modules/lodash/_baseGetTag.js","webpack:///packages/node_modules/lodash/_freeGlobal.js","webpack:///packages/node_modules/lodash/_getRawTag.js","webpack:///packages/node_modules/lodash/_objectToString.js","webpack:///packages/node_modules/lodash/_root.js","webpack:///packages/node_modules/lodash/debounce.js","webpack:///packages/node_modules/lodash/isObject.js","webpack:///packages/node_modules/lodash/isObjectLike.js","webpack:///packages/node_modules/lodash/isSymbol.js","webpack:///packages/node_modules/lodash/now.js","webpack:///packages/node_modules/lodash/toNumber.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/browser.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/canIUse.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/dnd.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/dom.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/event.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/fastDomNode.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/formattedTextRenderer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/globalMouseMoveMonitor.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/iframe.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/keyboardEvent.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/mouseEvent.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/touch.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/actionbar/actionViewItems.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/actionbar/actionbar.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/aria/aria.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/codicons/codiconStyles.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/countBadge/countBadge.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/highlightedlabel/highlightedLabel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabels.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/navigator.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/history.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/inputbox/inputBox.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/list/rangeMap.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/list/rowCache.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/list/listView.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/list/list.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/list/splice.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/list/listWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/mouseCursor/mouseCursor.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/sash/sash.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarArrow.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/abstractScrollbar.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarState.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/horizontalScrollbar.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/verticalScrollbar.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollableElement.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/splitview/splitview.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/widget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/actions.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/arrays.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/assert.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/async.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/buffer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/cancellation.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/codicons.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/collections.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/color.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/decorators.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/diff/diffChange.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/diff/diff.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/errors.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/event.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/extpath.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/filters.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/functional.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/glob.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/hash.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/iconLabels.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/idGenerator.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/iterator.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/keyCodes.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/keybindingLabels.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/lifecycle.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/linkedList.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/map.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/marked/marked.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/marshalling.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/network.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/numbers.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/objects.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/process.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/path.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/platform.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/range.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/resources.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/scrollable.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/severity.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/stopwatch.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/strings.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/types.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/uint.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/uri.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/parts/quickinput/common/quickInput.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/config/charWidthReader.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/config/configuration.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/config/elementSizeObserver.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorColumnSelection.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/controller/coreCommands.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaInput.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaState.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/core/keybindingCancellation.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/core/editorState.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/editorBrowser.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/editorExtensions.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/services/bulkEditService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/services/codeEditorService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/services/markerDecorations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/editorDom.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewEventHandler.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/view/viewPart.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/view/renderingContext.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/rangeUtil.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/viewLine.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/controller/mouseTarget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/controller/mouseHandler.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/controller/pointerHandler.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/view/dynamicViewOverlay.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lineNumbers/lineNumbers.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/margin/margin.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaHandler.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/view/viewController.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/view/viewUserInputEvents.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/view/viewLayer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/view/viewOverlays.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/decorations/decorations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/indentGuides/indentGuides.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/viewLines.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/linesDecorations/linesDecorations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/marginDecorations/marginDecorations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/core/rgba.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewModel/minimapTokensColorTracker.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharSheet.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharRenderer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapPreBaked.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharRendererFactory.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimap.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/rulers/rulers.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/selections/selections.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewCursors/viewCursor.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewCursors/viewCursors.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewZones/viewZones.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/view/viewContext.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLinesViewportData.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/view/viewImpl.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/oneCursor.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorCollection.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/view/viewEvents.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelEventDispatcher.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/cursor.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewLayout/linesLayout.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLayout.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewModel/splitLinesCollection.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelDecorations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelImpl.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewModel/monospaceLineBreaksComputer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/view/domLineBreaksComputer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/widget/codeEditorWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/widget/diffReview.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/widget/inlineDiffMargin.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditorWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/widget/diffNavigator.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/commands/replaceCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/commands/shiftCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/config/commonEditorConfig.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/config/editorOptions.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/config/editorZoom.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/config/fontInfo.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorAtomicMoveOperations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorCommon.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorDeleteOperations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorMoveCommands.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorMoveOperations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/commands/surroundSelectionCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorTypeOperations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/cursorWordOperations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/controller/wordCharacterClassifier.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/core/characterClassifier.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/core/editOperation.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/core/lineTokens.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/core/position.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/core/range.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/core/selection.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/core/stringBuilder.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/core/token.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/editorAction.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/editorCommon.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/editorContextKeys.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/editStack.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/textChange.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/indentationGuesser.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/intervalTree.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/textModelEvents.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/textModelTokens.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/textModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/textModelSearch.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/tokensStore.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/wordHelper.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/tokenizationRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/languageConfiguration.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/characterPair.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/electricCharacter.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/indentRules.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/onEnter.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/languageConfigurationRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/languageSelector.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/languageFeatureRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/modesRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/nullMode.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/supports.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/richEditBrackets.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/textToHtmlTokenizer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/editorWorkerService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/semanticTokensDto.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/getSemanticTokens.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/markersDecorationService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/modeService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/modelService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/modelServiceImpl.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/resolverService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/semanticTokensProviderStyling.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/textResourceConfigurationService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/standaloneStrings.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/view/editorColorRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/view/overviewZoneManager.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewLayout/lineDecorations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLineRenderer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewModel/prefixSumComputer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/extensions/common/extensions.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/format/format.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/format/formattingEdit.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/standalone/standaloneEnums.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/standalone/standaloneBase.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/editor/common/editor.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/services/openerService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/worker/simpleWorker.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/worker/defaultWorkerFactory.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/diff/diffComputer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/linkComputer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/inplaceReplaceSupport.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/editorSimpleWorker.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/model/mirrorTextModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/editorWorkerServiceImpl.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/webWorker.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchCommon.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchLexer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/colorizer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/configuration/common/configurationModels.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/keybinding/common/abstractKeybindingService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybindingResolver.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/keybinding/common/resolvedKeybindingItem.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/keybinding/common/baseResolvedKeybinding.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/keybinding/common/usLayoutResolvedKeybinding.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/simpleServices.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/services/abstractCodeEditorService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/services/codeEditorServiceImpl.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneCodeServiceImpl.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneCodeEditor.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/abstractMode.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/mime.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/languagesRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/modeServiceImpl.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/modes/supports/tokenization.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/common/themes.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneThemeServiceImpl.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/theme/browser/iconsStyleSheet.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/contextkey/browser/contextKeyService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/contextview/contextview.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/menu/menu.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextMenuHandler.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextMenuService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/layout/browser/layoutService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextViewService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/instantiation/common/graph.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/instantiation/common/instantiationService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/markers/common/markerService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/actions/common/menuService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/markerDecorationsServiceImpl.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/accessibility/common/accessibilityService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/clipboard/browser/clipboardService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/undoRedo/common/undoRedoService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/comparers.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/parts/quickinput/browser/quickInputUtils.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/keybindingLabel/keybindingLabel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/parts/quickinput/browser/quickInputList.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/parts/quickinput/browser/quickInputBox.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/progressbar/progressbar.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/button/button.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/parts/quickinput/browser/quickInput.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickInput.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInputServiceImpl.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneServices.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneEditor.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchCompile.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneLanguages.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/editor.api.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/common/standaloneThemeService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/nls.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/accessibility/common/accessibility.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/actions/common/actions.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/clipboard/common/clipboardService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/commands/common/commands.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/configuration/common/configuration.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/configuration/common/configurationRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/contextkey/common/contextkey.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/contextkey/common/contextkeys.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextView.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/dialogs/common/dialogs.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/instantiation/common/descriptors.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/instantiation/common/extensions.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/instantiation/common/instantiation.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/instantiation/common/serviceCollection.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/jsonschemas/common/jsonContributionRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybinding.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybindingsRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/label/common/label.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/list/listPaging.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/tree.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/indexTreeModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/treeIcons.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/abstractTree.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/objectTreeModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/objectTree.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/asyncDataTree.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/tree/dataTree.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/table/tableWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/list/browser/listService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/log/common/log.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/markers/common/markers.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/notification/common/notification.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/opener/common/opener.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/progress/common/progress.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/quickinput/common/quickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/quickinput/common/quickInput.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/registry/common/platform.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/parts/storage/common/storage.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/storage/common/storage.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/telemetry/common/telemetry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/theme/common/colorRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/theme/common/iconRegistry.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/theme/common/styler.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/theme/common/theme.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/theme/common/themeService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/undoRedo/common/undoRedo.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/workspace/common/workspace.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/htmlContent.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/anchorSelect/anchorSelect.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/bracketMatching/bracketMatching.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/caretOperations/moveCaretCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/caretOperations/caretOperations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/caretOperations/transpose.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/clipboard/clipboard.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/lazy.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codeAction/types.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codeAction/codeAction.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/message/messageController.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codeAction/codeActionMenu.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codeAction/lightBulbWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codeAction/codeActionUi.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codeAction/codeActionModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codeAction/codeActionCommands.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codeAction/codeActionContributions.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codelens/codelens.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codelens/codelensWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codelens/codeLensCache.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/codelens/codelensController.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/colorPicker/color.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/colorPicker/colorDetector.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/colorPicker/colorPickerModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/colorPicker/colorPickerWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/hover/hoverOperation.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/hover/hoverWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/labels.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/widget/embeddedCodeEditorWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/zoneWidget/zoneWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/dropdown/dropdown.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/actions/browser/menuEntryActionViewItem.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/peekView/peekView.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/severityIcon/common/severityIcon.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoError/gotoErrorWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoError/markerNavigationService.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoError/gotoError.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/hover/markerHoverParticipant.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/insane/insane.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/markdownRenderer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/browser/core/markdownRenderer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/hover/getHover.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/hover/markdownHoverParticipant.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/hover/modesContentHover.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/hover/hoverWidgets.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/hover/modesGlyphHover.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/referencesModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/goToSymbol.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/peek/referencesTree.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/peek/referencesWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/peek/referencesController.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/symbolNavigation.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/goToCommands.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/link/clickLinkGesture.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/gotoSymbol/link/goToDefinitionAtPosition.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/hover/hover.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/colorPicker/colorContributions.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/comment/blockCommentCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/comment/lineCommentCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/comment/comment.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/contextmenu/contextmenu.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/cursorUndo/cursorUndo.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/dnd/dragAndDropCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/dnd/dnd.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/documentSymbols/outlineModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/documentSymbols/documentSymbols.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/find/findDecorations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/find/replaceAllCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/search.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/find/replacePattern.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/find/findModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/checkbox/checkbox.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/findinput/findInputCheckboxes.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/find/findOptionsWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/find/findState.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/findinput/findInput.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/browser/ui/findinput/replaceInput.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/browser/contextScopedHistoryWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/find/findWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/find/findController.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/folding/foldingRanges.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/folding/foldingModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/folding/foldingDecorations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/folding/hiddenRangeModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/folding/indentRangeProvider.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/folding/syntaxRangeProvider.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/folding/intializingRangeProvider.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/folding/folding.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/fontZoom/fontZoom.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/format/formatActions.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/inPlaceReplace/inPlaceReplaceCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/inPlaceReplace/inPlaceReplace.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/indentation/indentUtils.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/indentation/indentation.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/inlineHints/inlineHintsController.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/commands/trimTrailingWhitespaceCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/linesOperations/copyLinesCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/linesOperations/moveLinesCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/linesOperations/sortLinesCommand.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/linesOperations/linesOperations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/linkedEditing/linkedEditing.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/links/getLinks.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/links/links.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/multicursor/multicursor.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/parameterHints/provideSignatureHelp.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/parameterHints/parameterHintsModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/parameterHints/parameterHintsWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/parameterHints/parameterHints.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/rename/renameInputField.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/rename/rename.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/smartSelect/bracketSelections.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/smartSelect/smartSelect.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/smartSelect/wordSelections.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/snippet/snippetParser.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggest.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/workspaces/common/workspaces.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/uuid.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/snippet/snippetVariables.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/snippet/snippetSession.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/snippet/snippetController2.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggestMemory.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggestAlternatives.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/completionModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/wordDistance.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggestModel.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/symbolIcons/symbolIcons.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/resizable.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggestWidgetDetails.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggestWidgetStatus.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/files/common/files.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/common/services/getIconClasses.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggestWidgetRenderer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggestWidget.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/wordContextKey.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggestCommitCharacters.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggestOvertypingCapturer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/suggest/suggestController.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/toggleTabFocusMode/toggleTabFocusMode.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/unusualLineTerminators/unusualLineTerminators.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/viewportSemanticTokens/viewportSemanticTokens.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/wordHighlighter/wordHighlighter.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/wordOperations/wordOperations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/wordPartOperations/wordPartOperations.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/accessibilityHelp/accessibilityHelp.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/inspectTokens/inspectTokens.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/quickinput/browser/pickerQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/errorMessage.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/quickinput/browser/commandsQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/quickAccess/commandsQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/quickAccess/editorNavigationQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/quickAccess/gotoLineQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/base/common/fuzzyScorer.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/contrib/quickAccess/gotoSymbolQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/platform/quickinput/browser/helpQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/quickAccess/standaloneHelpQuickAccess.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/referenceSearch/standaloneReferenceSearch.js","webpack:///packages/node_modules/monaco-editor/esm/vs/editor/standalone/browser/toggleHighContrast/toggleHighContrast.js","webpack:///packages/perspective-viewer/dist/esm/@finos/perspective-vieux/pkg/snippets/perspective_vieux-1a532b116e65df54/inline0.js","webpack:///packages/node_modules/worker-loader/dist/node_modules/monaco-editor/esm/vs/editor/editor.worker.js","webpack:///packages/perspective-viewer/dist/esm/@finos/perspective-vieux/pkg/perspective_vieux.js","webpack:///packages/perspective-viewer/dist/esm/@finos/perspective-vieux/pkg/snippets/perspective_vieux-1a532b116e65df54/inline2.js","webpack:///packages/perspective-viewer/dist/esm/@finos/perspective-vieux/pkg/snippets/perspective_vieux-1a532b116e65df54/inline1.js","webpack:///packages/perspective-viewer/dist/esm/@finos/perspective-vieux/pkg/perspective_vieux_bg.wasm","webpack:///packages/src/js/config/constants.js","webpack:///packages/node_modules/lit-html/lib/directive.js","webpack:///packages/node_modules/lit-html/lib/dom.js","webpack:///packages/node_modules/lit-html/lib/part.js","webpack:///packages/node_modules/lit-html/lib/template.js","webpack:///packages/node_modules/lit-html/lib/template-instance.js","webpack:///packages/node_modules/lit-html/lib/template-result.js","webpack:///packages/node_modules/lit-html/lib/parts.js","webpack:///packages/node_modules/lit-html/lib/default-template-processor.js","webpack:///packages/node_modules/lit-html/lib/template-factory.js","webpack:///packages/node_modules/lit-html/lib/render.js","webpack:///packages/node_modules/lit-html/lit-html.js","webpack:///packages/perspective-viewer/@finos/perspective-vieux/src/js/vieux.js","webpack:///packages/src/js/plugins.js","webpack:///packages/src/js/polyfill.js","webpack:///packages/src/js/utils.js","webpack:///packages/src/js/row.js","webpack:///packages/src/js/viewer/dragdrop.js","webpack:///packages/src/js/viewer/state_element.js","webpack:///packages/src/js/viewer/perspective_element.js","webpack:///packages/src/js/viewer/dom_element.js","webpack:///packages/src/js/viewer/action_element.js","webpack:///packages/src/js/viewer.js","webpack:///packages/src/js/config/index.js","webpack:///packages/src/js/config/settings.js","webpack:///packages/node_modules/worker-loader/dist/runtime/inline.js","webpack:///packages/perspective-viewer/webpack/bootstrap","webpack:///packages/perspective-viewer/webpack/startup","webpack:///packages/perspective-viewer/webpack/runtime/amd options","webpack:///packages/perspective-viewer/webpack/runtime/compat get default export","webpack:///packages/perspective-viewer/webpack/runtime/define property getters","webpack:///packages/perspective-viewer/webpack/runtime/global","webpack:///packages/perspective-viewer/webpack/runtime/hasOwnProperty shorthand","webpack:///packages/perspective-viewer/webpack/runtime/make namespace object","webpack:///packages/perspective-viewer/webpack/runtime/publicPath"],"names":["root","factory","exports","module","define","amd","a","i","self","_","input","o","me","this","count","isOpened","$","setAttribute","options","instance","properties","initial","attrValue","getAttribute","toLowerCase","parseInt","Function","configure","minChars","maxItems","autoFirst","data","DATA","filter","FILTER_CONTAINS","sort","SORT_BYLENGTH","container","CONTAINER","item","ITEM","replace","REPLACE","tabSelect","index","ul","create","hidden","role","id","inside","status","className","textContent","_events","evaluate","bind","close","reason","evt","c","keyCode","opened","selected","preventDefault","select","undefined","form","li","target","test","nodeName","parentNode","button","hasAttribute","list","removeAttribute","all","push","Suggestion","Array","isArray","label","value","prototype","_list","indexOf","split","children","items","slice","apply","forEach","el","disabled","text","trim","document","activeElement","fire","open","goto","destroy","unbind","insertBefore","removeChild","indexOfAwesomplete","splice","next","length","previous","pos","lis","scrollTop","offsetTop","clientHeight","suggestions","origin","originalEvent","siblingIndex","suggestion","innerHTML","map","appendChild","RegExp","regExpEscape","FILTER_STARTSWITH","b","around","item_id","html","Object","defineProperty","String","get","toString","valueOf","expr","con","querySelector","$$","call","querySelectorAll","init","tag","element","createElement","val","ref","focus","event","callback","addEventListener","removeEventListener","type","createEvent","j","initEvent","dispatchEvent","s","previousElementSibling","Awesomplete","Document","readyState","it","TypeError","isObject","wellKnownSymbol","definePropertyModule","UNSCOPABLES","ArrayPrototype","f","configurable","key","charAt","S","unicode","toIndexedObject","toLength","toAbsoluteIndex","createMethod","IS_INCLUDES","$this","fromIndex","O","includes","fails","METHOD_NAME","argument","method","DESCRIPTORS","has","cache","thrower","ACCESSORS","argument0","argument1","enumerable","aFunction","toObject","IndexedObject","IS_RIGHT","that","callbackfn","argumentsLength","memo","left","right","ownKeys","getOwnPropertyDescriptorModule","source","keys","getOwnPropertyDescriptor","F","constructor","getPrototypeOf","IteratorPrototype","createPropertyDescriptor","setToStringTag","Iterators","returnThis","IteratorConstructor","NAME","TO_STRING_TAG","object","bitmap","writable","createIteratorConstructor","setPrototypeOf","createNonEnumerableProperty","redefine","IS_PURE","IteratorsCore","BUGGY_SAFARI_ITERATORS","ITERATOR","KEYS","VALUES","ENTRIES","Iterable","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","entries","name","values","proto","forced","global","EXISTS","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","classof","process","getBuiltIn","match","version","userAgent","versions","v8","setGlobal","copyConstructorProperties","isForced","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","sham","exec","error","regexpExec","SPECIES","REPLACE_SUPPORTS_NAMED_GROUPS","re","result","groups","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","arguments","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","flags","nativeRegExpMethod","nativeMethod","regexp","str","arg2","forceStringMethod","done","stringMethod","regexMethod","string","arg","path","variable","namespace","floor","Math","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","position","captures","namedCaptures","replacement","tailPos","m","symbols","ch","capture","n","check","globalThis","window","g","hasOwnProperty","propertyIsEnumerable","store","functionToString","inspectSource","set","NATIVE_WEAK_MAP","objectHas","shared","sharedKey","hiddenKeys","WeakMap","state","wmget","wmhas","wmset","metadata","facade","STATE","enforce","getterFor","TYPE","feature","detection","normalize","POLYFILL","NATIVE","PrototypeOfArrayIteratorPrototype","arrayIterator","Promise","getOwnPropertySymbols","Symbol","PromiseCapability","C","resolve","reject","promise","$$resolve","$$reject","activeXDocument","anObject","defineProperties","enumBugKeys","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObject","domain","ActiveXObject","iframeDocument","iframe","write","temp","parentWindow","NullProtoObjectViaActiveX","style","display","src","contentWindow","Properties","objectKeys","IE8_DOM_DEFINE","toPrimitive","nativeDefineProperty","P","Attributes","propertyIsEnumerableModule","nativeGetOwnPropertyDescriptor","internalObjectKeys","concat","getOwnPropertyNames","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","names","nativePropertyIsEnumerable","NASHORN_BUG","1","V","aPossiblePrototype","setter","CORRECT_SETTER","__proto__","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","newPromiseCapability","x","promiseCapability","InternalStateModule","getInternalState","enforceInternalState","TEMPLATE","unsafe","simple","join","R","re1","re2","regexpFlags","stickyHelpers","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","lastIndex","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","sticky","charsAdded","strCopy","multiline","ignoreCase","dotAll","RE","TAG","uid","SHARED","mode","copyright","defaultConstructor","toInteger","requireObjectCoercible","CONVERT_TO_STRING","first","second","size","charCodeAt","codeAt","max","min","integer","ceil","isNaN","PREFERRED_STRING","fn","postfix","random","NATIVE_SYMBOL","iterator","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","addToUnscopables","defineIterator","ARRAY_ITERATOR","setInternalState","iterated","kind","Arguments","$reduce","arrayMethodIsStrict","arrayMethodUsesToLength","CHROME_VERSION","IS_NODE","STRICT_METHOD","USES_TO_LENGTH","reduce","NativePromise","speciesConstructor","promiseResolve","real","then","onFinally","isFunction","e","fixRegExpWellKnownSymbolLogic","advanceStringIndex","getSubstitution","regExpExec","maybeCallNative","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","res","rx","functionalReplace","fullUnicode","results","accumulatedResult","nextSourcePosition","replacerArgs","DOMIterables","ArrayIteratorMethods","ArrayValues","COLLECTION_NAME","Collection","CollectionPrototype","escape","useSourceMap","cssMapping","btoa","sourceMapping","sourceMap","unescape","encodeURIComponent","JSON","stringify","sourceURLs","sources","sourceRoot","cssWithMappingToString","modules","mediaQuery","alreadyImportedModules","url","getRawTag","objectToString","symToStringTag","toStringTag","freeGlobal","objectProto","nativeObjectToString","isOwn","unmasked","freeSelf","now","toNumber","nativeMax","nativeMin","func","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","args","thisArg","leadingEdge","setTimeout","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","clearTimeout","cancel","flush","baseGetTag","isObjectLike","Date","isSymbol","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","other","isBinary","WindowManager","_zoomLevel","_lastZoomLevelChangeTime","_onDidChangeZoomLevel","onDidChangeZoomLevel","_zoomFactor","ctx","getContext","devicePixelRatio","webkitBackingStorePixelRatio","mozBackingStorePixelRatio","msBackingStorePixelRatio","oBackingStorePixelRatio","backingStorePixelRatio","getZoomLevel","INSTANCE","getTimeSinceLastZoomLevelChanged","getZoomFactor","getPixelRatio","navigator","isFirefox","isWebKit","isChrome","isSafari","isWebkitWebView","isIPad","maxTouchPoints","isAndroid","isStandalone","matchMedia","matches","BrowserFeatures","clipboard","writeText","queryCommandSupported","readText","keyboard","touch","msMaxTouchPoints","pointerEvents","PointerEvent","DataTransfers","RESOURCES","DOWNLOAD_URL","FILES","TEXT","DragAndDropData","StaticDND","CurrentDragAndDropData","clearNode","node","firstChild","remove","isInDOM","_a","isConnected","DomListener","handler","_node","_type","_handler","_options","addDisposableListener","useCaptureOrOptions","_wrapAsStandardMouseEvent","addStandardDisposableListener","useCapture","wrapHandler","_wrapAsStandardKeyboardEvent","addStandardDisposableGenericMouseDownListner","addDisposableGenericMouseDownListner","EventType","POINTER_DOWN","MOUSE_DOWN","addDisposableGenericMouseUpListner","POINTER_UP","MOUSE_UP","addDisposableNonBubblingMouseOutListener","toElement","addDisposableNonBubblingPointerOutListener","runAtThisOrScheduleAtNextAnimationFrame","scheduleAtNextAnimationFrame","_animationFrame","AnimationFrameQueueItem","runner","priority","_runner","_canceled","NEXT_QUEUE","CURRENT_QUEUE","animFrameRequested","inAnimationFrameRunner","animationFrameRunner","shift","execute","emulatedRequestAnimationFrame","getTime","requestAnimationFrame","msRequestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","doRequestAnimationFrame","DEFAULT_EVENT_MERGER","lastEvent","currentEvent","TimeoutThrottledDomListener","eventMerger","minimumTimeMs","super","lastHandlerTime","timeout","_register","invokeHandler","elapsedTime","setIfNotSet","addDisposableThrottledListener","getComputedStyle","defaultView","getClientArea","body","Dimension","clientWidth","visualViewport","width","height","innerWidth","innerHeight","documentElement","Error","SizeUtils","parseFloat","cssPropertyName","jsPropertyName","computedStyle","getPropertyValue","convertToPixels","getDimension","obj","getTopLeftOffset","offsetParent","top","offsetLeft","isShadowRoot","direction","scrollLeft","getBorderLeftWidth","getBorderTopWidth","getDomNodePagePosition","domNode","bb","getBoundingClientRect","StandardWindow","scrollX","scrollY","getTotalWidth","margin","getMarginLeft","getMarginRight","offsetWidth","getContentWidth","border","getBorderRightWidth","padding","getPaddingLeft","getPaddingRight","getContentHeight","getBorderBottomWidth","getPaddingTop","getPaddingBottom","offsetHeight","getTotalHeight","getMarginTop","getMarginBottom","isAncestor","testChild","testAncestor","findParentWithClass","clazz","stopAtClazzOrNode","nodeType","ELEMENT_NODE","classList","contains","hasParentWithClass","host","isInShadowDOM","getShadowRoot","getActiveElement","shadowRoot","createStyleSheet","getElementsByTagName","media","_sharedStyleSheet","getSharedStyleSheet","createCSSRule","selector","cssText","sheet","insertRule","removeCSSRulesContainingSelector","ruleName","rules","_b","cssRules","getDynamicStyleSheetRules","toDelete","selectorText","deleteRule","isHTMLElement","HTMLElement","CLICK","AUXCLICK","DBLCLICK","MOUSE_OVER","MOUSE_MOVE","MOUSE_OUT","MOUSE_ENTER","MOUSE_LEAVE","MOUSE_WHEEL","POINTER_MOVE","CONTEXT_MENU","WHEEL","KEY_DOWN","KEY_PRESS","KEY_UP","LOAD","BEFORE_UNLOAD","UNLOAD","ABORT","ERROR","RESIZE","SCROLL","FULLSCREEN_CHANGE","WK_FULLSCREEN_CHANGE","SELECT","CHANGE","SUBMIT","RESET","FOCUS","FOCUS_IN","FOCUS_OUT","BLUR","INPUT","STORAGE","DRAG_START","DRAG","DRAG_ENTER","DRAG_LEAVE","DRAG_OVER","DROP","DRAG_END","ANIMATION_START","ANIMATION_END","ANIMATION_ITERATION","EventHelper","stop","cancelBubble","returnValue","stopPropagation","saveParentsScrollTop","r","restoreParentsScrollTop","FocusTracker","_onDidFocus","onDidFocus","_onDidBlur","onDidBlur","hasFocus","loosingFocus","onFocus","onBlur","_refreshStateHandler","trackFocus","append","parent","reset","innerText","SELECTOR_REGEX","Namespace","_$","description","attrs","assign","tagName","HTML","createElementNS","show","elements","hide","computeScreenAwareSize","cssPx","screenPx","windowOpenNoOpener","animate","step","stepDisposable","dispose","asCSSUrl","uri","asCSSPropertyValue","SVG","location","href","ModifierKeyEmitter","_subscriptions","_keyStatus","altKey","shiftKey","ctrlKey","metaKey","add","repeat","lastKeyPressed","lastKeyReleased","buttons","resetKeyStatus","doResetKeyStatus","addMatchMediaChangeListener","query","mediaQueryList","addListener","domEvent","emitter","onFirstListenerAdd","onLastListenerRemove","stopEvent","FastDomNode","_maxWidth","_width","_height","_top","_left","_bottom","_right","_fontFamily","_fontWeight","_fontSize","_fontFeatureSettings","_lineHeight","_letterSpacing","_className","_display","_position","_visibility","_backgroundColor","_layerHint","_contain","_boxShadow","maxWidth","bottom","fontFamily","fontWeight","fontSize","fontFeatureSettings","lineHeight","letterSpacing","shouldHaveIt","toggle","visibility","backgroundColor","layerHint","transform","boxShadow","contain","child","createFastDomNode","renderText","renderFormattedText","formattedText","_renderFormattedText","parseCodeSegments","actionViewItemIndex","current","stack","stream","StringStream","eos","isEscapedFormatType","formatTagType","peek","isFormatTag","advance","pop","newCurrent","textCurrent","parseFormattedText","renderCodeSegements","actionHandler","inline","treeNode","createTextNode","disposeables","nodeChild","char","supportCodeSegments","standardMouseMoveMerger","ev","leftButton","posx","posy","GlobalMouseMoveMonitor","_hooks","_mouseMoveEventMerger","_mouseMoveCallback","_onStopCallback","stopMonitoring","invokeStopCallback","browserEvent","isMonitoring","clear","onStopCallback","initialElement","initialButtons","mouseMoveEventMerger","mouseMoveCallback","windowChain","listenTo","unshift","lastSameOriginAncestor","hasDifferentOriginAncestorFlag","sameOriginWindowChainCache","getParentWindowIfSameOrigin","w","parentLocation","protocol","hostname","port","IframeUtils","iframeElement","frameElement","getSameOriginWindowChain","childWindow","ancestorWindow","windowChainEl","boundingRect","KEY_CODE_MAP","INVERSE_KEY_CODE_MAP","code","ctrlKeyMod","metaKeyMod","StandardKeyboardEvent","_standardKeyboardEventBrand","charCode","fromCharCode","toUpperCase","extractKeyCode","_asKeybinding","_computeKeybinding","_asRuntimeKeybinding","_computeRuntimeKeybinding","StandardMouseEvent","timestamp","middleButton","rightButton","detail","pageX","pageY","clientX","clientY","iframeOffsets","view","StandardWheelEvent","deltaX","deltaY","targetNode","srcElement","e1","e2","wheelDeltaY","VERTICAL_AXIS","axis","deltaMode","DOM_DELTA_LINE","wheelDeltaX","HORIZONTAL_AXIS","wheelDelta","__decorate","decorators","desc","d","Reflect","decorate","Tap","Change","Start","End","Contextmenu","Gesture","dispatched","activeTouches","handle","targets","ignoreTargets","_lastSetTapCountTime","onTouchStart","passive","onTouchEnd","onTouchMove","isTouchDevice","t","len","targetTouches","identifier","initialTarget","initialTimeStamp","initialPageX","initialPageY","rollingTimestamps","rollingPageX","rollingPageY","newGestureEvent","activeTouchCount","changedTouches","console","warn","holdTime","HOLD_DELAY","abs","finalX","finalY","deltaT","dispatchTo","Node","inertia","tapCount","currentTime","setTapCount","CLEAR_TAP_COUNT_TIME","t1","vX","dirX","vY","dirY","y","delta_pos_x","delta_pos_y","stopped","SCROLL_FRICTION","translationX","translationY","BaseActionViewItem","context","action","_context","_action","onDidChange","handleActionChangeEvent","enabled","updateEnabled","checked","updateChecked","class","updateClass","updateLabel","updateTooltip","tooltip","_actionRunner","actionRunner","newContext","enableDragging","draggable","dataTransfer","setData","onClick","isMenu","useEventAsContext","run","tabIndex","blur","focusable","ActionViewItem","icon","cssClass","render","keybinding","getAction","title","comment","__awaiter","_arguments","generator","fulfilled","rejected","ActionBar","_c","_d","_e","_f","previousKeys","nextKeys","triggerKeyDown","_onDidCancel","cancelHasListener","onDidCancel","_onDidRun","onDidRun","_onBeforeRun","onBeforeRun","_orientation","orientation","_triggerKeys","keyDown","triggerKeys","_actionIds","viewItems","focusedItem","animated","eventHandled","equals","focusPrevious","focusNext","focusFirst","focusLast","trapsArrowNavigation","isTriggerKeyEvent","doTrigger","updateFocusedItem","focusTracker","actionsList","ariaLabel","ret","elem","setActionContext","actions","actionViewItemElement","allowContextMenu","actionViewItemProvider","setFocusable","selectFirst","firstEnabled","findIndex","isEnabled","updateFocus","startIndex","preventLoopNavigation","focusOnlyEnabledItems","fromRight","preventScroll","actionViewItem","focusItem","getContainer","ariaContainer","alertContainer","alertContainer2","statusContainer","statusContainer2","setARIAContainer","createAlertContainer","createStatusContainer","alert","msg","insertMessage","substr","formatRule","def","definition","fontCharacter","defaultOpts","badgeBackground","badgeForeground","CountBadge","badgeBorder","countFormat","titleFormat","setCount","applyStyles","styles","background","foreground","color","borderWidth","borderStyle","borderColor","HighlightedLabel","supportIcons","highlights","didEverRender","escapeNewLines","highlight","end","start","substring","extraClasses","total","extra","offset","FastLabelNode","_element","disposed","_textContent","empty","_empty","marginLeft","IconLabel","hoverDelegate","customHovers","Map","labelContainer","nameContainer","descriptionContainer","supportHighlights","nameNode","LabelWithHighlights","Label","supportDescriptionHighlights","descriptionNodeFactory","classes","italic","strikethrough","setupHover","setLabel","descriptionNode","descriptionMatches","descriptionTitle","htmlElement","previousCustomHover","delete","setupCustomHover","setupNativeHover","hoverOptions","mouseX","isHovering","showHover","markdownTooltip","markdown","tokenSource","hoverDisposable","getTooltipForCustom","mouseOverDisposable","mouseLeaveOrDown","isMouseDown","fromElement","mouseLeaveDisposable","mouseDownDisposable","mouseMoveDisposable","targetElements","hoverPosition","adjustXAndShowCustomHover","resolvedTooltip","token","markdownNotSupportedFallback","delay","stringTooltip","singleLabel","domId","l","separator","labelEscapeNewLines","labels","labelStart","labelRange","range","splitMatches","labelWithIconsRegex","renderLabelWithIcons","textStart","textStop","escaped","codicon","renderIcon","ArrayNavigator","HistoryNavigator","history","limit","_initialize","_limit","_onChange","_history","_currentPosition","_elements","_navigator","last","_reduceToLimit","currentElement","Set","entry","dom","inputBackground","inputForeground","inputValidationInfoBorder","inputValidationInfoBackground","inputValidationWarningBorder","inputValidationWarningBackground","inputValidationErrorBorder","inputValidationErrorBackground","InputBox","contextViewProvider","maxHeight","Number","POSITIVE_INFINITY","_onDidChange","_onDidHeightChange","onDidHeightChange","message","placeholder","inputBorder","inputValidationInfoForeground","inputValidationWarningForeground","inputValidationErrorForeground","validationOptions","validation","flexibleHeight","wrapper","onfocus","onblur","flexibleMaxHeight","mirror","scrollableElement","vertical","flexibleWidth","whiteSpace","wordWrap","getDomNode","onScroll","onSelectionChange","selection","getSelection","anchorNode","updateScrollDimensions","setPlaceHolder","setTooltip","oninput","onValueChange","ignoreGesture","updateMirror","actionbar","_hideMessage","_showMessage","placeHolder","newValue","cachedHeight","setSelectionRange","scrollWidth","selectionEnd","selectionStart","horizontalPadding","paddingLeft","paddingRight","cachedContentHeight","scrollHeight","setScrollDimensions","setScrollPosition","force","classForType","stylesForType","errorMsg","inputElement","showMessage","hideMessage","div","alertText","layout","showContextView","getAnchor","anchorAlignment","renderOptions","spanElement","formatContent","onHide","nls","aria","hideContextView","validate","suffix","previousHeight","HistoryInputBox","getCurrentValue","addToHistory","getNextValue","getPreviousValue","currentValue","groupIntersect","intersection","much","RangeMap","_size","deleteCount","diff","before","after","middle","previousGroup","group","consolidate","newSize","indexAt","groupCount","newCount","RowCache","renderers","templateId","getTemplateCache","templateData","getRenderer","renderTemplate","row","releaseRow","parentElement","removeFromParent","cachedRows","cachedRow","disposeTemplate","renderer","DefaultOptions","useShadows","verticalScrollMode","setRowLineHeight","setRowHeight","supportDynamicHeights","dnd","getDragElements","getDragURI","onDragOver","horizontalScrolling","transformOptimization","alwaysConsumeMouseWheel","ElementsDragAndDropData","ExternalElementsDragAndDropData","NativeDragAndDropData","types","files","file","ListViewAccessibilityProvider","accessibilityProvider","getSetSize","getPosInSet","getRole","isChecked","ListView","virtualDelegate","InstanceCount","renderWidth","_scrollHeight","scrollableElementUpdateDisposable","scrollableElementWidthDelayer","splicing","dragOverAnimationStopDisposable","dragOverMouseY","canDrop","currentDragFeedbackDisposable","onDragLeaveTimeout","disposables","_onDidChangeContentHeight","_horizontalScrolling","itemId","rangeMap","lastRenderTop","lastRenderHeight","mouseSupport","additionalScrollHeight","rowsContainer","scrollable","smoothScrolling","cb","horizontal","onTouchChange","toDragEvent","onDrop","onDragLeave","onDragEnd","measureItemWidth","updateScrollWidth","setSmoothScrollDuration","_splice","contentHeight","previousRenderRange","getRenderRange","deleteRange","removeRange","rowsToDispose","dragStartDisposable","rows","disposeElement","previousRestRange","previousRenderedRestRange","previousUnrenderedRestRanges","inserted","getTemplateId","getHeight","hasDynamicHeight","lastDynamicHeightWidth","dropTarget","deleted","delta","renderRange","renderedRestRange","updateRange","updateItemInDOM","removeRanges","removeItemFromDOM","unrenderedRestRanges","insertRanges","beforeElement","getNextToLastElement","insertItemInDOM","release","eventuallyUpdateScrollDimensions","_rerender","renderHeight","trigger","getScrollDimensions","positionAt","indexAfter","scrollDimensions","renderTop","renderLeft","updateItemsInDOM","rangesToInsert","rangesToRemove","rangesToUpdate","alloc","renderElement","onDragStart","eventuallyUpdateScrollWidth","elementTop","getElementDomId","getScrollPosition","reuseAnimation","getScrollTop","setScrollTop","toMouseEvent","toTouchEvent","toGestureEvent","getItemIndexFromEventTarget","inSmoothScrolling","err","effectAllowed","setDragImage","getDragLabel","dragImage","currentDragData","setupDragAndDropScrollTopAnimation","accept","currentDragFeedback","feedback","dropEffect","effect","f1","f2","clearDragOverFeedback","dragData","teardownDragAndDropScrollTopAnimation","update","drop","dragOverAnimationDisposable","viewTop","animateDragAndDropScrollTop","upperLimit","rawIndex","anchorElementIndex","anchorElementTopDelta","heightDiff","didChange","probeDynamicHeight","unrenderRanges","renderRanges","afterIndex","beforeRow","deltaScrollTop","getFutureScrollPosition","newScrollTop","setDynamicHeight","ranges","lastRange","nextToLastItem","ListError","user","CombinedSpliceable","spliceables","TypeLabelControllerState","TraitRenderer","trait","renderedElements","renderedElementIndex","rendered","unrender","renderIndex","insertCount","renderedElement","indexes","Trait","_trait","sortedIndexes","onChange","hasTrait","_set","numericSort","sortedResult","toRender","disjunction","renderIndexes","SelectionTrait","setAriaSelected","TraitSpliceable","identityProvider","pastElementsWithTrait","getId","elementsWithTrait","isInputElement","isMonacoEditor","KeyboardController","multipleSelectionSupport","onKeyDown","on","onEnter","onUpArrow","onDownArrow","onPageUpArrow","onPageDownArrow","onEscape","platform","onCtrlA","setSelection","getFocus","reveal","focusPreviousPage","focusNextPage","DefaultKeyboardNavigationDelegate","TypeLabelController","keyboardNavigationLabelProvider","delegate","Idle","automaticKeyboardNavigation","triggered","previouslyFocused","enabledDisposables","updateOptions","enableKeyboardNavigation","enable","disable","onChar","mightProducePrintableCharacter","onClear","onInput","getAriaLabel","word","Typing","getKeyboardNavigationLabel","labelStr","setFocus","DOMFocusController","onTab","focusedDomElement","domElement","tabIndexElement","isSelectionSingleChangeEvent","isSelectionRangeChangeEvent","DefaultMultipleSelectionController","MouseController","_onPointer","onPointer","multipleSelectionController","onMouseDown","onContextMenu","onMouseDblClick","onDoubleClick","getHTMLElement","onMouseClick","onMouseMiddleClick","onTap","onViewPointer","domFocus","setAnchor","isSelectionChangeEvent","changeSelection","MouseEvent","anchor","rangeSelection","contiguousRange","reverse","getContiguousRangeContaining","newSelection","one","relativeComplement","DefaultStyleController","styleElement","selectorSuffix","listBackground","isOpaque","listFocusBackground","listFocusForeground","listActiveSelectionBackground","listActiveSelectionForeground","listFocusAndSelectionBackground","listFocusAndSelectionForeground","listInactiveFocusForeground","listInactiveFocusBackground","listInactiveSelectionBackground","listInactiveSelectionForeground","listHoverBackground","listHoverForeground","listSelectionOutline","listFocusOutline","listInactiveFocusOutline","listHoverOutline","listDropBackground","listFilterWidgetBackground","listFilterWidgetOutline","listFilterWidgetNoMatchesOutline","listMatchesShadow","tableColumnsBorder","defaultStyles","treeIndentGuidesStroke","transparent","keyboardSupport","PipelineRenderer","_templateId","AccessibiltyRenderer","ariaLevel","getAriaLevel","ListViewDragAndDrop","getSelectedElements","targetElement","targetIndex","List","eventBufferer","_ariaLabel","_onDidDispose","onDidDispose","getWidgetRole","baseRenderers","onDidChangeActiveDescendant","viewOptions","styleController","spliceable","controller","keyboardNavigationDelegate","typeLabelController","mouseController","createMouseController","onDidChangeFocus","_onFocusChange","onDidChangeSelection","_onSelectionChange","getWidgetAriaLabel","wrapEvent","toListEvent","didJustPressContextMenuKey","fromKeyDown","fromKeyUp","fromMouse","optionsUpdate","bufferEvents","rerender","loop","findNextIndex","findPreviousIndex","lastPageIndex","lastPageElement","currentlyFocusedElement","getFocusedElements","lastGoodPageIndex","previousScrollTop","elementHeight","firstPageIndex","firstPageElement","firstGoodPageIndex","focusNth","relativeTop","viewItemBottom","scrollBottom","getActiveDescendantId","MOUSE_CURSOR_TEXT_CSS_CLASS_NAME","OrthogonalEdge","onDidChangeGlobalSize","onDidChangeHoverDelay","Sash","layoutProvider","hoverDelay","hoverDelayer","_state","_onDidEnablementChange","onDidEnablementChange","_onDidStart","onDidStart","_onDidReset","onDidReset","_onDidEnd","onDidEnd","linkedSash","orthogonalStartSashDisposables","orthogonalStartDragHandleDisposables","orthogonalEndSashDisposables","orthogonalEndDragHandleDisposables","orthogonalEdge","onMouseDoubleClick","onMouseEnter","onMouseLeave","orthogonalStartSash","orthogonalEndSash","_orthogonalStartSash","sash","_orthogonalStartDragHandle","_orthogonalEndSash","_orthogonalEndDragHandle","isMultisashResize","__orthogonalSashEvent","orthogonalSash","getOrthogonalSash","__linkedSashEvent","iframes","mouseDownEvent","startX","startY","startEvent","currentX","currentY","updateStyle","cursor","mouseMoveEvent","listeners","fromLinkedSash","verticalProvider","getVerticalSashLeft","getVerticalSashTop","getVerticalSashHeight","horizontalProvider","getHorizontalSashTop","getHorizontalSashLeft","getHorizontalSashWidth","ARROW_IMG_SIZE","ScrollbarArrow","opts","_onActivate","onActivate","bgDomNode","bgWidth","bgHeight","classNamesArray","_mouseMoveMonitor","onmousedown","_arrowMouseDown","_mousedownRepeatTimer","_mousedownScheduleRepeatTimer","cancelAndSet","startMonitoring","mouseMoveData","ScrollbarVisibilityController","visibleClassName","invisibleClassName","_visibleClassName","_invisibleClassName","_domNode","_isVisible","_isNeeded","_shouldBeVisible","_revealTimer","shouldBeVisible","rawShouldBeVisible","applyVisibilitySetting","ensureVisibility","isNeeded","setClassName","setShouldBeVisible","_reveal","_hide","withFadeAway","AbstractScrollbar","_lazyRender","lazyRender","_host","_scrollable","_scrollByPage","scrollByPage","_scrollbarState","scrollbarState","_visibilityController","extraScrollbarClassName","setIsNeeded","_shouldRender","setDomNode","setPosition","_domNodeMouseDown","arrow","slider","setTop","setLeft","setWidth","setHeight","setLayerHinting","setContain","_sliderMouseDown","onclick","visibleSize","setVisibleSize","elementScrollSize","setScrollSize","elementScrollPosition","_renderDomNode","getRectangleLargeSize","getRectangleSmallSize","_updateSlider","getSliderSize","getArrowSize","getSliderPosition","_onMouseDown","domTop","getClientRects","sliderStart","sliderStop","mousePos","_sliderMousePosition","offsetX","offsetY","domNodePosition","_mouseDownRelativePosition","_setDesiredScrollPositionNow","getDesiredScrollPositionFromOffsetPaged","getDesiredScrollPositionFromOffset","onDragFinished","initialMousePosition","initialMouseOrthogonalPosition","_sliderOrthogonalMousePosition","initialScrollbarState","clone","toggleClassName","mouseOrthogonalPosition","mouseOrthogonalDelta","mouseDelta","getDesiredScrollPositionFromDelta","_desiredScrollPosition","desiredScrollPosition","writeScrollPosition","setScrollPositionNow","scrollbarSize","_updateScrollbarSize","setScrollbarSize","ScrollbarState","arrowSize","oppositeScrollbarSize","scrollSize","scrollPosition","_scrollbarSize","round","_oppositeScrollbarSize","_arrowSize","_visibleSize","_scrollSize","_scrollPosition","_computedAvailableSize","_computedIsNeeded","_computedSliderSize","_computedSliderRatio","_computedSliderPosition","_refreshComputedValues","iVisibleSize","iScrollSize","iScrollPosition","computedAvailableSize","computedRepresentableSize","computedIsNeeded","computedSliderSize","computedSliderRatio","computedSliderPosition","_computeValues","desiredSliderPosition","correctedOffset","scrollbarButtonLeftIcon","scrollbarButtonRightIcon","HorizontalScrollbar","getCurrentScrollPosition","horizontalHasArrows","horizontalScrollbarSize","verticalScrollbarSize","arrowDelta","scrollbarDelta","_createArrow","onMouseWheel","_createSlider","horizontalSliderSize","sliderSize","sliderPosition","largeSize","smallSize","setBottom","_onElementScrollSize","_onElementScrollPosition","_onElementSize","scrollbarButtonUpIcon","scrollbarButtonDownIcon","VerticalScrollbar","verticalHasArrows","verticalSliderSize","setRight","MouseWheelClassifierItem","score","MouseWheelClassifier","_capacity","_memory","_front","_rear","remainingInfluence","iteration","influence","pow","_computeScore","_isAlmostInt","AbstractScrollableElement","_onScroll","_onWillScroll","overflow","handleMouseWheel","flipAxes","consumeMouseWheelIfScrollbarIsNeeded","scrollYToX","mouseWheelScrollSensitivity","fastScrollSensitivity","scrollPredominantAxis","mouseWheelSmoothScroll","listenOnDomNode","resolveOptions","_onDidScroll","scrollbarHost","mouseWheelEvent","_onMouseWheel","_onDragStart","_onDragEnd","_verticalScrollbar","_horizontalScrollbar","_leftShadowDomNode","_topShadowDomNode","_topLeftShadowDomNode","_listenOnDomNode","_mouseWheelToDispose","_setListeningToMouseWheel","onmouseover","_onMouseOver","onnonbubblingmouseout","_onMouseOut","_hideTimeout","_isDragging","_mouseIsOver","_revealOnScroll","delegateMouseDown","dimensions","newClassName","newOptions","updateScrollbarSize","_render","shouldListen","classifier","osZoomFactor","didScroll","shiftConvert","futureScrollPosition","desiredScrollTop","desiredScrollLeft","validateScrollPosition","isPhysicalMouseWheel","setScrollPositionSmooth","consumeMouseWheel","onDidScroll","scrollState","enableTop","enableLeft","leftClassName","topClassName","topLeftClassName","beginReveal","_scheduleHide","beginHide","ScrollableElement","SmoothScrollableElement","DomScrollableElement","scrollTopChanged","scrollLeftChanged","scanDomNode","separatorBorder","ViewItem","disposable","_cachedVisibleSize","cachedVisibleSize","visible","viewMinimumSize","viewMaximumSize","setVisible","minimumSize","maximumSize","snap","layoutContext","layoutContainer","VerticalViewItem","HorizontalViewItem","State","Sizing","Distribute","Split","Invisible","SplitView","contentSize","proportions","sashItems","_onDidSashChange","onDidSashChange","_onDidSashReset","_startSnappingEnabled","_endSnappingEnabled","inverseAltBehavior","proportionalLayout","getSashOrthogonalSize","sashContainer","viewContainer","scrollbarVisibility","views","viewDescriptor","sizing","doAddView","saveProportions","sashItem","startSnappingEnabled","updateSashEnablement","endSnappingEnabled","isTransparent","removeProperty","setProperty","skipLayout","previousSize","lowPriorityIndexes","highPriorityIndexes","resize","distributeEmptySpace","layoutViews","alt","resetSashDragState","sashDragState","sizes","snapBefore","snapAfter","minDelta","NEGATIVE_INFINITY","maxDelta","viewItem","upIndexes","downIndexes","minDeltaUp","maxDeltaUp","maxDeltaDown","minDeltaDown","snapBeforeIndex","findFirstSnapIndex","snapAfterIndex","halfSize","limitDelta","newDelta","isLastSash","newSizes","viewItemIndex","newMinDelta","newMaxDelta","resizeIndex","relayout","Busy","flexibleViewItems","flexibleSize","onChangeDisposable","onViewChange","containerDisposable","viewSize","getViewSize","getSashPosition","sashEventMapper","onStartDisposable","onStart","onSashStart","onSashChange","onEndDisposable","onEnd","onSashEnd","onDidResetDisposable","distributeViewSizes","overloadMinDelta","overloadMaxDelta","upItems","upSizes","downItems","downSizes","snapped","snapView","deltaUp","deltaDown","lowPriorityIndex","emptyDelta","updateScrollableElement","collapsesDown","expandsDown","reverseViews","collapsesUp","expandsUp","snappedBefore","snappedAfter","Widget","listener","Action","actionCallback","_enabled","_checked","_id","_label","_cssClass","_actionCallback","_setLabel","_tooltip","_setTooltip","_setClass","_setEnabled","_setChecked","ActionRunner","runAction","Separator","ID","SubmenuAction","_actions","EmptySubmenuAction","tail","array","tail2","arr","itemEquals","binarySearch","comparator","low","high","mid","comp","findFirstInSorted","p","quickSelect","nth","compare","pivotValue","lower","higher","pivots","groupBy","currentGroup","coalesce","isFalsyOrEmpty","isNonEmptyArray","distinct","keyFn","seen","distinctES6","firstOrDefault","notFoundValue","flatten","to","from","arrayInsert","insertIndex","insertArr","pushToStart","pushToEnd","asArray","ok","isThenable","createCancelablePromise","thenable","onCancellationRequested","onfinally","finally","raceCancellation","defaultValue","race","Throttler","activePromise","queuedPromise","queuedPromiseFactory","promiseFactory","onComplete","queue","Delayer","defaultDelay","completionPromise","doResolve","doReject","task","cancelTimeout","ThrottledDelayer","delayer","throttler","millis","disposableTimeout","timer","promiseFactories","shouldStop","TimeoutTimer","_token","IntervalTimer","clearInterval","interval","setInterval","RunOnceScheduler","timeoutToken","timeoutHandler","onTimeout","isScheduled","doRun","runWhenIdle","requestIdleCallback","cancelIdleCallback","dummyIdle","freeze","didTimeout","timeRemaining","IdleValue","executor","_didRun","_executor","_value","_error","_handle","Promises","allSettled","promises","allSettledNative","allSettledShim","settled","firstError","hasBuffer","Buffer","hasTextDecoder","TextDecoder","textDecoder","VSBuffer","buffer","byteLength","actual","isBuffer","byteOffset","decode","readUInt16LE","writeUInt16LE","destination","readUInt32BE","writeUInt32BE","readUInt8","writeUInt8","shortcutEvent","CancellationToken","isCancellationToken","thing","None","Cancelled","MutableToken","isCancellationRequested","_isCancelled","_emitter","CancellationTokenSource","_parentListener","_registry","_icons","_onDidRegister","existing","iconRegistry","registerCodicon","Codicon","getCodiconAriaLabel","_match","codiconName","CSSIcon","iconNameSegment","iconNameExpression","iconModifierExpression","cssIconIdRegex","asClassNameArray","modifier","classNames","asClassName","asCSSSelector","plus","gistNew","repoCreate","lightbulb","lightBulb","repo","repoDelete","gistFork","repoForked","gitPullRequest","gitPullRequestAbandoned","recordKeys","tagAdd","tagRemove","person","personFollow","personOutline","personFilled","gitBranch","gitBranchCreate","gitBranchDelete","sourceControl","mirrorPublic","star","starAdd","starDelete","starEmpty","commentAdd","warning","search","searchSave","logOut","signOut","logIn","signIn","eye","eyeUnwatch","eyeWatch","circleFilled","primitiveDot","closeDirty","debugBreakpoint","debugBreakpointDisabled","debugHint","primitiveSquare","edit","pencil","info","issueOpened","gistPrivate","gitForkPrivate","lock","mirrorPrivate","removeClose","repoSync","sync","desktopDownload","beaker","microscope","vm","deviceDesktop","fileText","more","ellipsis","kebabHorizontal","mailReply","reply","organization","organizationFilled","organizationOutline","newFile","fileAdd","newFolder","fileDirectoryCreate","trash","trashcan","clock","folder","fileDirectory","symbolFolder","logoGithub","markGithub","github","terminal","repl","zap","symbolEvent","symbolVariable","symbolArray","symbolModule","symbolPackage","symbolNamespace","symbolObject","symbolMethod","symbolFunction","symbolConstructor","symbolBoolean","symbolNull","symbolNumeric","symbolNumber","symbolStructure","symbolStruct","symbolParameter","symbolTypeParameter","symbolKey","symbolText","symbolReference","goToFile","symbolEnum","symbolValue","symbolRuler","symbolUnit","activateBreakpoints","archive","arrowBoth","arrowDown","arrowLeft","arrowRight","arrowSmallDown","arrowSmallLeft","arrowSmallRight","arrowSmallUp","arrowUp","bell","bold","book","bookmark","debugBreakpointConditionalUnverified","debugBreakpointConditional","debugBreakpointConditionalDisabled","debugBreakpointDataUnverified","debugBreakpointData","debugBreakpointDataDisabled","debugBreakpointLogUnverified","debugBreakpointLog","debugBreakpointLogDisabled","briefcase","broadcast","browser","bug","calendar","caseSensitive","checklist","chevronDown","chevronLeft","chevronRight","chevronUp","chromeClose","chromeMaximize","chromeMinimize","chromeRestore","circleOutline","debugBreakpointUnverified","circleSlash","circuitBoard","clearAll","clippy","closeAll","cloudDownload","cloudUpload","collapseAll","colorMode","commentDiscussion","compareChanges","creditCard","dash","dashboard","database","debugContinue","debugDisconnect","debugPause","debugRestart","debugStart","debugStepInto","debugStepOut","debugStepOver","debugStop","debug","deviceCameraVideo","deviceCamera","deviceMobile","diffAdded","diffIgnored","diffModified","diffRemoved","diffRenamed","discard","editorLayout","emptyWindow","exclude","extensions","eyeClosed","fileBinary","fileCode","fileMedia","filePdf","fileSubmodule","fileSymlinkDirectory","fileSymlinkFile","fileZip","flame","foldDown","foldUp","fold","folderActive","folderOpened","gear","gift","gistSecret","gist","gitCommit","gitCompare","gitMerge","githubAction","githubAlt","globe","grabber","graph","gripper","heart","home","horizontalRule","hubot","inbox","issueClosed","issueReopened","issues","jersey","json","kebabVertical","law","lightbulbAutofix","linkExternal","link","listOrdered","listUnordered","liveShare","loading","mailRead","mail","megaphone","mention","milestone","mortarBoard","move","multipleWindows","mute","noNewline","note","octoface","openPreview","package_","paintcan","pin","play","plug","preserveCase","preview","project","pulse","question","quote","radioTower","reactions","references","refresh","regex","remoteExplorer","remote","replaceAll","repoClone","repoForcePush","repoPull","repoPush","report","requestChanges","rocket","rootFolderOpened","rootFolder","rss","ruby","saveAll","saveAs","save","screenFull","screenNormal","searchStop","server","settingsGear","settings","shield","smiley","sortPrecedence","splitHorizontal","splitVertical","squirrel","starFull","starHalf","symbolClass","symbolColor","symbolConstant","symbolEnumMember","symbolField","symbolFile","symbolInterface","symbolKeyword","symbolMisc","symbolOperator","symbolProperty","wrench","wrenchSubaction","symbolSnippet","tasklist","telescope","textSize","threeBars","thumbsdown","thumbsup","tools","triangleDown","triangleLeft","triangleRight","triangleUp","twitter","unfold","unlock","unmute","unverified","verified","vmActive","vmOutline","vmRunning","watch","whitespace","wholeWord","zoomIn","zoomOut","listFilter","listFlat","listSelection","listTree","debugBreakpointFunctionUnverified","debugBreakpointFunction","debugBreakpointFunctionDisabled","debugStackframeActive","debugStackframeDot","debugStackframe","debugStackframeFocused","debugBreakpointUnsupported","symbolString","debugReverseContinue","debugStepBack","debugRestartFrame","callIncoming","callOutgoing","menu","expandAll","groupByRefType","ungroupByRefType","account","bellDot","debugConsole","library","output","runAll","syncIgnored","pinned","githubInverted","debugAlt","serverProcess","serverEnvironment","pass","stopCircle","playCircle","record","debugAltSmall","vmConnect","cloud","merge","exportIcon","graphLeft","magnet","notebook","redo","checkAll","pinnedDirty","passFilled","circleLargeFilled","circleLargeOutline","combine","gather","table","variableGroup","typeHierarchy","typeHierarchySub","typeHierarchySuper","gitPullRequestCreate","runAbove","runBelow","notebookTemplate","debugRerun","workspaceTrusted","workspaceUntrusted","workspaceUnspecified","terminalCmd","terminalDebian","terminalLinux","terminalPowershell","terminalTmux","terminalUbuntu","terminalBash","arrowSwap","copy","personAdd","filterFilled","wand","debugLineByLine","dropDownButton","SetMap","roundFloat","number","decimalPoints","decimal","RGBA","HSLA","h","rgba","chroma","q","hsla","_hue2rgb","HSVA","v","cmax","hsva","Color","_hsla","toRGBA","_hsva","hex","Format","CSS","parseHex","red","fromRGBA","_relativeLuminanceForComponent","another","getRelativeLuminance","factor","format","of","relative","isLighterThan","lum1","lum2","lighten","isDarkerThan","darken","white","black","blue","cyan","lightgrey","_toTwoDigitHex","_parseHexDigit","formatRGB","formatRGBA","toFixed","formatHSL","formatHSLA","formatHex","formatHexA","compact","memoizeId","memoize","memoizeKeyPrefix","fnKey","memoizeKey","property","createMemoizer","DiffChange","originalStart","originalLength","modifiedStart","modifiedLength","StringDiffSequence","characters","Int32Array","stringDiff","original","modified","pretty","LcsDiff","ComputeDiff","changes","Debug","condition","MyArray","sourceArray","sourceIndex","destinationArray","destinationIndex","DiffChangeHelper","m_changes","m_originalStart","m_modifiedStart","m_originalCount","m_modifiedCount","originalIndex","modifiedIndex","MarkNextChange","originalSequence","modifiedSequence","continueProcessingPredicate","ContinueProcessingPredicate","originalStringElements","originalElementsOrHash","originalHasStrings","_getElements","modifiedStringElements","modifiedElementsOrHash","modifiedHasStrings","_hasStrings","_originalStringElements","_originalElementsOrHash","_modifiedStringElements","_modifiedElementsOrHash","m_forwardHistory","m_reverseHistory","sequence","getElements","_isStringArray","hashes","newIndex","index1","index2","_ComputeDiff","originalEnd","modifiedEnd","quitEarlyArr","ComputeDiffRecursive","PrettifyChanges","quitEarly","ElementsAreEqual","Assert","midOriginalArr","midModifiedArr","ComputeRecursionPoint","midOriginal","midModified","leftChanges","rightChanges","ConcatenateChanges","diagonalForwardBase","diagonalForwardStart","diagonalForwardEnd","diagonalForwardOffset","diagonalReverseBase","diagonalReverseStart","diagonalReverseEnd","diagonalReverseOffset","forwardPoints","reversePoints","deltaIsEven","forwardChanges","reverseChanges","changeHelper","diagonalMin","diagonalMax","diagonalRelative","lastOriginalIndex","historyIndex","diagonal","AddModifiedElement","AddOriginalElement","getReverseChanges","originalStartPoint","modifiedStartPoint","lastForwardChange","getOriginalEnd","getModifiedEnd","getChanges","maxDifferences","numDiagonals","numDifferences","furthestOriginalIndex","furthestModifiedIndex","ClipDiagonalBound","tempOriginalIndex","WALKTRACE","matchLengthOfLongest","Copy2","change","originalStop","modifiedStop","checkOriginal","checkModified","OriginalElementsAreEqual","ModifiedElementsAreEqual","mergedChangeArr","ChangesOverlap","prevChange","bestDelta","bestScore","_boundaryScore","aChange","bChange","matchedLength","aOriginalStart","bOriginalEnd","abOriginalLength","aModifiedStart","bModifiedEnd","abModifiedLength","_findBetterContiguousSequence","originalMatchStart","modifiedMatchStart","desiredLength","originalMax","modifiedMax","bestOriginalStart","bestModifiedStart","_contiguousSequenceScore","_OriginalIsBoundary","_ModifiedIsBoundary","_OriginalRegionIsBoundary","_ModifiedRegionIsBoundary","Copy","diagonalBaseIndex","diffEven","errorHandler","unexpectedErrorHandler","emit","onUnexpectedError","isPromiseCanceledError","onUnexpectedExternalError","transformErrorForSerialization","$isError","stacktrace","canceledName","canceled","illegalArgument","illegalState","Event","once","thisArgs","didFire","snapshot","each","Emitter","debounce","leakWarningThreshold","subscription","numDebouncedCalls","cur","_output","latch","firstCall","shouldEmit","signal","any","events","stopwatch","nextTick","_buffer","ChainableEvent","chain","fromNodeEventEmitter","eventName","removeListener","fromDOMEventEmitter","fromPromise","toPromise","EventProfiling","_listenerCount","_invocationCount","_elapsedOverall","_name","_idPool","listenerCount","_stopWatch","elapsed","_disposed","_leakageMon","_perfMon","_profName","_event","_listeners","firstListener","isEmpty","onFirstListenerDidAdd","onListenerDidAdd","removeMonitor","_noop","_deliveryQueue","PauseableEmitter","_isPaused","_eventQueue","_mergeFn","EventBufferer","buffers","Relay","listening","inputEvent","inputEventListener","toSlashes","osPath","isEqualOrParent","base","parentCandidate","sepOffset","isRootOrDriveLetter","pathNormalized","hasDriveLetter","char0","or","wordToMatchAgainst","matchesPrefix","matchesContiguousSubString","_matchesSubString","isLower","isUpper","isNumber","isWhitespace","wordSeparators","isWordSeparator","isAlphanumeric","head","nextAnchor","camelCaseWord","_matchesCamelCase","nextUpperIndex","matchesCamelCase","upper","isCamelCasePattern","analysis","alpha","numeric","upperPercent","lowerPercent","alphaPercent","numericPercent","analyzeCamelCaseWord","isCamelCaseWord","isUpperCaseWord","matchesWords","contiguous","_matchesWords","nextWord","codeA","codeB","nextWordIndex","fuzzyContiguousFilter","fuzzySeparateFilter","fuzzyRegExpCache","matchesFuzzy","enableSeparateSubstringMatching","anyScore","pattern","lowPattern","patternPos","lowWord","wordPos","fuzzyScore","createMatches","_maxLen","initTable","initArr","maxLen","_minWordMatchPos","_maxWordMatchPos","_diag","_table","_arrows","isSeparatorAtPos","codePointAt","isWhitespaceAtPos","isUpperCaseAtPos","wordLow","FuzzyScore","patternLow","patternStart","wordStart","firstMatchCanBeWeak","patternLen","wordLen","fillMinWordPosArr","isPatternInWord","_fillInMaxWordMatchPos","column","hasStrongFirstMatch","minWordMatchPos","maxWordMatchPos","nextMaxWordMatchPos","MIN_SAFE_INTEGER","canComeDiag","_doScore","diagScore","MAX_SAFE_INTEGER","canComeLeft","leftScore","canComeLeftLeft","leftLeftScore","backwardsDiagLength","maxMatchColumn","diagColumn","skippedCharsCount","newMatchStart","outFirstMatchStrong","isGapLocation","fuzzyScoreGracefulAggressive","aggressive","tries","movingPatternPos","newPattern","nextTypoPermutation","candidate","fuzzyScoreWithPermutations","swap1","swap2","Default","isDefault","_this","didCall","GLOBSTAR","PATH_REGEX","NO_PATH_REGEX","ALL_FORWARD_SLASHES","starsToRegExp","starCount","splitGlobAware","splitChar","segments","inBraces","inBrackets","curVal","parseRegExp","regEx","every","previousSegmentWasGlobStar","segment","braceVal","bracketVal","braceRegExp","T1","T2","T3","T3_2","T4","T5","CACHE","FALSE","NULL","parsePattern","arg1","patternKey","trimForExclusions","parsedPattern","wrapRelativePattern","basename","endsWith","originalPattern","slashBase","backslashBase","basenames","patterns","allBasenames","trivia2","parsedPatterns","aggregateBasenameMatches","withBasenames","find","allPaths","trivia3","trivia4and5","regExp","toRegExp","targetPath","matchPathEnds","usingPosixSep","nativePath","nativePathEnd","targetPathEnd","testPath","hasSibling","rp","isRelativePattern","resultPattern","expression","when","requiresSiblings","parseExpressionPattern","some","resultExpression","parsedExpression","parse","basenamePatterns","aggregate","aggregatedPatterns","hash","doHash","hashVal","numberHash","initialHashVal","stringHash","objectHash","booleanHash","leftRotate","bits","totalBits","fill","dest","toHexString","bufferOrValue","bitsize","ArrayBuffer","Uint8Array","padStart","leftPad","StringSHA1","_h0","_h1","_h2","_h3","_h4","_buff","_buffDV","DataView","_buffLen","_totalLen","_leftoverHighSurrogate","_finished","strLen","buff","buffLen","leftoverHighSurrogate","codePoint","nextCharCode","_push","_step","_wrapUp","ml","setUint32","bigBlock32","_bigBlock32","getUint32","k","iconStartMarker","iconsRegex","escapeIconsRegex","escapeIcons","markdownEscapedIconsRegex","markdownEscapeEscapedIcons","stripIconsRegex","stripIcons","preWhitespace","postWhitespace","parseLabelWithIcons","firstIconIndex","iconOffsets","textWithoutIcons","appendChars","chars","iconsOffset","nextChar","currentIconStart","currentIconValue","doParseLabelWithIcons","matchesFuzzyIconAware","wordToMatchAgainstWithoutIconsTrimmed","leadingWhitespaceOffset","iconOffset","IdGenerator","prefix","_prefix","_lastId","defaultGenerator","is","single","iterable","predicate","iterables","concatNested","reducer","initialValue","consume","atMost","consumed","at","bt","ai","bi","an","bn","KeyCodeStrMap","_keyCodeToStr","_strToKeyCode","uiMap","userSettingsUSMap","userSettingsGeneralMap","KeyCodeUtils","KeyChord","firstPart","secondPart","createKeybinding","OS","chordPart","ChordKeybinding","createSimpleKeybinding","ctrlCmd","winCtrl","SimpleKeybinding","uiLabel","usUserSettingsLabel","generalUserSettingsLabel","keyCodeToStr","fromString","strToKeyCode","toUserSettingsUS","toUserSettingsGeneral","fromUserSettings","parts","ResolvedKeybindingPart","kbLabel","kbAriaLabel","keyLabel","keyAriaLabel","ResolvedKeybinding","ModifierLabelProvider","mac","windows","linux","modifierLabels","keyLabelProvider","part","_simpleAsString","UILabelProvider","AriaLabelProvider","modifiers","disposableTracker","markTracked","trackDisposable","MultiDisposeError","errors","isDisposable","combinedDisposable","toDisposable","DisposableStore","_toDispose","_isDisposed","DISABLE_DISPOSED_WARNING","Disposable","_store","MutableDisposable","ImmortalReference","Undefined","prev","LinkedList","_first","_last","_insert","atTheEnd","newNode","oldLast","oldFirst","didRemove","_remove","StringIterator","_pos","ConfigKeysIterator","_caseSensitive","_from","_to","justSeps","PathIterator","_splitOnBackslash","UriIterator","_ignorePathCasing","_states","_stateIdx","scheme","authority","_pathIterator","fragment","hasNext","cmp","TernarySearchTreeNode","TernarySearchTree","_iter","ignorePathCasing","_root","iter","oldElement","_getNode","_delete","superStr","dir","_entries","ResourceMap","mapOrKeyFn","toKey","defaultToKey","resource","clb","tuple","LinkedMap","_map","_head","_tail","addItemLast","addItemFirst","removeItem","currentSize","LRUCache","ratio","_ratio","checkTrim","trimOld","_defineProperties","props","_createClass","Constructor","protoProps","staticProps","_unsupportedIterableToArray","minLen","_arrayLikeToArray","arr2","_createForOfIteratorHelperLoose","allowArrayLike","createCommonjsModule","defaults","getDefaults","baseUrl","breaks","gfm","headerIds","headerPrefix","langPrefix","mangle","pedantic","sanitize","sanitizer","silent","smartLists","smartypants","tokenizer","walkTokens","xhtml","changeDefaults","newDefaults","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","encode","unescapeTest","caret","opt","getRegex","nonWordAndColonTest","originIndependentUrl","cleanUrl","prot","decodeURIComponent","resolveUrl","encodeURI","baseUrls","justDomain","rtrim","relativeBase","splitCells","tableRow","cells","curr","invert","suffLen","currChar","findClosingBracket","level","checkSanitizeDeprecation","repeatString","helpers","noopTest","defaults$1","rtrim$1","splitCells$1","_escape","findClosingBracket$1","outputLink","cap","raw","indentCodeCompensation","matchIndentToCode","indentToCode","matchIndentInNode","Tokenizer_1","Tokenizer","_proto","space","block","newline","codeBlockStyle","fences","lang","heading","trimmed","depth","nptable","header","align","hr","blockquote","bcurr","bnext","addBack","loose","istask","ischecked","bull","isordered","ordered","itemMatch","listItemStart","pre","lheading","paragraph","inLink","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","reflink","links","nolink","emStrong","maskedSrc","prevChar","lDelim","punctuation","rDelim","rLength","lLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","tokens","prevCapZero","_backpedal","inlineText","noopTest$1","edit$1","merge$1","_paragraph","_title","bullet","_tag","_comment","normal","reflinkSearch","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","endAst","endUnd","em","_extended_email","defaults$2","block$1","inline$1","repeatString$1","out","Lexer_1","Lexer","lex","lexInline","inlineTokens","blockTokens","lastToken","errMsg","l2","keepPrevChar","lastIndexOf","_lastToken","_lastToken2","defaults$3","cleanUrl$1","escape$1","Renderer_1","Renderer","_code","infostring","_html","slugger","slug","listitem","checkbox","tablerow","tablecell","image","_text","TextRenderer_1","TextRenderer","Slugger_1","Slugger","serialize","getNextSafeSlug","originalSlug","isDryRun","occurenceAccumulator","dryrun","defaults$4","unescape$1","Parser_1","Parser","textRenderer","parseInline","l3","cell","itemBody","merge$2","checkSanitizeDeprecation$1","escape$2","defaults$5","marked","pending","_tokens","setOptions","use","extension","_loop","prop","prevRenderer","_len","_key","_loop2","prevTokenizer","_len2","_key2","_iterator","_step2","_iterator2","_step3","_iterator3","_step4","_iterator4","_cell","parser","lexer","revive","$mid","Schemas","inMemory","vscode","internal","walkThrough","walkThroughSnippet","http","https","mailto","untitled","command","vscodeRemote","vscodeRemoteResource","userData","vscodeCustomEditor","vscodeNotebook","vscodeNotebookCell","vscodeNotebookCellMetadata","vscodeSettings","vscodeWorkspaceTrust","vscodeTerminal","webviewPanel","vscodeWebview","vscodeFileResource","tmp","RemoteAuthorities","_hosts","_ports","_connectionTokens","_preferredWebSchema","_delegate","schema","connectionToken","FileAccess","FALLBACK_AUTHORITY","uriOrModule","moduleIdToUrl","__forceCodeFileUri","toUri","rewrite","with","toUrl","clamp","MovingAverage","_n","_val","deepClone","deepFreeze","_hasOwnProperty","isFrozen","cloneAndChange","changer","_cloneAndChange","changed","r1","r2","i2","mixin","overwrite","oneKeys","otherKeys","getOrDefault","safeProcess","sandboxProcess","env","cwd","CHAR_DOT","CHAR_FORWARD_SLASH","CHAR_BACKWARD_SLASH","CHAR_COLON","ErrorInvalidArgType","expected","determiner","validateString","isPathSeparator","isPosixPathSeparator","isWindowsDeviceRoot","normalizeString","allowAboveRoot","lastSegmentLength","lastSlash","dots","lastSlashIndex","_format","sep","pathObject","ext","win32","pathSegments","resolvedDevice","resolvedTail","resolvedAbsolute","rootEnd","device","isAbsolute","paths","joined","needsReplace","slashCount","firstLen","fromOrig","toOrig","fromStart","fromEnd","fromLen","toStart","toEnd","toLen","lastCommonSep","fromCode","resolvedPath","matchedSlash","extIdx","firstNonSlashEnd","startDot","startPart","preDotState","delimiter","posix","trailingSeparator","toNamespacedPath","hasRoot","dirname","extname","LANGUAGE_DEFAULT","_locale","_translationsConfigFile","_userAgent","_isWindows","_isMacintosh","_isLinux","_isLinuxSnap","_isNative","_isWeb","_isIOS","_language","globals","nodeProcess","isElectronRenderer","electron","isElectronSandboxed","sandboxed","isPreferringBrowserCodeLoad","rawNlsConfig","nlsConfig","resolved","availableLanguages","locale","language","_platform","isWindows","isMacintosh","isLinux","isNative","isWeb","isIOS","setImmediate","postMessage","importScripts","vscodeSetImmediateId","lastId","myId","_promise","_isLittleEndian","_isLittleEndianComputed","isLittleEndian","Uint16Array","Range","intersect","intersects","originalFSPath","extUri","uri1","uri2","ignoreFragment","getComparisonKey","pathFragment","normalizedPath","newURI","isEqual","basenameOrAuthority","joinPath","normalizePath","resolvePath","DataUri","META_DATA_LABEL","META_DATA_DESCRIPTION","META_DATA_SIZE","META_DATA_MIME","parseMetaData","dataUri","mime","ScrollState","rawScrollLeft","rawScrollTop","useRawScrollPositions","widthChanged","scrollWidthChanged","heightChanged","scrollHeightChanged","oldWidth","oldScrollWidth","oldScrollLeft","oldHeight","oldScrollHeight","oldScrollTop","Scrollable","smoothScrollDuration","_smoothScrollDuration","_scheduleAtNextAnimationFrame","_smoothScrolling","withScrollPosition","newState","withScrollDimensions","_setState","Boolean","acceptScrollDimensions","validTarget","newSmoothScrolling","SmoothScrollingOperation","startTime","duration","animationFrameDisposable","_performSmoothScrolling","tick","isDone","oldState","createScrollEvent","SmoothScrollingUpdate","createEaseOutCubic","completion","easeInCubic","_initAnimations","_initAnimation","viewportSize","stop1","stop2","cut","_tick","newScrollLeft","Severity","_warning","_info","fromValue","Warning","Info","Ignore","severity","hasPerformanceNow","StopWatch","highResolution","_highResolution","_startTime","_now","_stopTime","isFalsyOrWhitespace","_formatRegexp","idx","escapeRegExpCharacters","haystack","needle","ltrim","needleLen","haystackLen","convertSimple2RegExpPattern","stripWildcards","createRegExp","searchString","isRegex","matchCase","regExpLeadsToEndlessLoop","regExpFlags","splitLines","firstNonWhitespaceIndex","chCode","getLeadingWhitespace","lastNonWhitespaceIndex","compareSubstring","aStart","aEnd","bStart","bEnd","aLen","bLen","compareIgnoreCase","compareSubstringIgnoreCase","isUpperAsciiLetter","isLowerAsciiLetter","isAsciiLetter","equalsIgnoreCase","doEqualsIgnoreCase","stopAt","startsWithIgnoreCase","candidateLength","commonPrefixLength","commonSuffixLength","aLastIndex","bLastIndex","isHighSurrogate","isLowSurrogate","computeCodePoint","highSurrogate","lowSurrogate","getNextCodePoint","getPrevCodePoint","prevCharCode","nextCharLength","graphemeBreakTree","GraphemeBreakTree","getInstance","initialOffset","initialCodePoint","graphemeBreakType","getGraphemeBreakType","nextCodePoint","nextGraphemeBreakType","breakBetweenGraphemeBreakType","prevCharLength","prevCodePoint","prevGraphemeBreakType","decodeUTF8","v0","uPrime","w1","w2","CONTAINS_RTL","containsRTL","CONTAINS_EMOJI","containsEmoji","IS_BASIC_ASCII","isBasicASCII","UNUSUAL_LINE_TERMINATORS","containsUnusualLineTerminators","containsFullWidthCharacter","isFullWidthCharacter","isEmojiImprecise","UTF8_BOM_CHARACTER","startsWithUTF8BOM","containsUppercaseCharacter","ignoreEscapedChars","singleLetterHash","breakTypeA","breakTypeB","_data","_INSTANCE","nodeCount","nodeIndex","isString","isBoolean","isUndefined","isUndefinedOrNull","assertType","assertIsDefined","validateConstraints","constraints","validateConstraint","constraint","getAllMethodNames","getAllPropertyNames","createProxyObject","methodNames","invoke","createProxyMethod","methodName","withNullAsUndefined","toUint8","toUint32","_schemePattern","_singleSlashStart","_doubleSlashStart","_slash","_regexp","URI","schemeOrData","_strict","_schemeFix","_referenceResolution","_validateUri","fsPath","uriToFsPath","Uri","percentDecode","components","newPath","skipEncoding","_asFormatted","_formatted","external","_fsPath","_sep","_pathSepMarker","encodeTable","encodeURIComponentFast","uriComponent","allowSlash","nativeEncodePos","encodeURIComponentMinimal","keepDriveLetterCasing","encoder","userinfo","decodeURIComponentGraceful","_rEncodedAsHex","NO_KEY_MODS","QuickInputHideReason","ItemActivation","CharWidthRequest","chr","DomCharWidthReader","bareFontInfo","requests","_bareFontInfo","_requests","_container","_testElements","_createDomElements","_readFromDomElements","regularDomNode","getMassagedFontFamily","boldDomNode","italicDomNode","fontStyle","testElements","request","testElement","htmlString","testString","fulfill","CSSBasedConfigurationCache","_keys","_values","clearAllFontInfos","CSSBasedConfiguration","clearCache","_cache","_evictUntrustedReadingsTimeout","put","isTrusted","_evictUntrustedReadings","getValues","somethingRemoved","readConfig","_actualReadConfiguration","typicalHalfwidthCharacterWidth","typicalFullwidthCharacterWidth","spaceWidth","maxDigitWidth","zoomLevel","pixelRatio","isMonospace","canUseHalfwidthRightwardsArrow","middotWidth","wsmiddotWidth","_writeToCache","monospace","typicalHalfwidthCharacter","createRequest","typicalFullwidthCharacter","digit0","digit1","digit2","digit3","digit4","digit5","digit6","digit7","digit8","digit9","rightwardsArrow","halfwidthRightwardsArrow","middot","read","readCharWidths","referenceWidth","canTrustBrowserZoomLevel","Configuration","isSimpleWidget","referenceDomElement","accessibilityService","_elementSizeObserver","dimension","_recomputeOptions","_validatedOptions","startObserving","onDidChangeScreenReaderOptimized","fontInfo","setFontFamily","setFontWeight","setFontSize","setFontFeatureSettings","setLineHeight","setLetterSpacing","observe","extraEditorClassName","_getExtraEditorClassName","outerWidth","getWidth","outerHeight","emptySelectionClipboard","accessibilitySupport","isScreenReaderOptimized","getAccessibilitySupport","readConfiguration","ElementSizeObserver","changeCallback","resizeObserver","measureReferenceDomElementToken","measureReferenceDomElement","stopObserving","ResizeObserver","contentRect","disconnect","callChangeCallback","observedWidth","observedHeight","ColumnSelection","config","model","fromLineNumber","fromVisibleColumn","toLineNumber","toVisibleColumn","lineCount","reversed","isRTL","isLTR","lineNumber","startColumn","endColumn","visibleStartColumn","visibleEndColumn","maxColumn","getLineMaxColumn","viewStates","fromVisualColumn","toVisualColumn","prevColumnSelectData","toViewVisualColumn","columnSelect","fromViewLineNumber","fromViewVisualColumn","toViewLineNumber","maxVisualViewColumn","minViewLineNumber","maxViewLineNumber","lineMaxViewColumn","lineMaxVisualViewColumn","isPaged","linesCount","pageSize","getLineCount","CoreEditorCommand","accessor","editor","viewModel","_getViewModel","runCoreEditorCommand","EditorScroll_","RevealLine_","CoreNavigationCommands","scrollArg","by","revealCursor","RawDirection","Up","Down","RawUnit","Line","WrappedLine","Page","HalfPage","unit","reveaLineArg","RawAtArgument","Top","Center","Bottom","EditorOrNativeTextInputCommand","addImplementation","focusedEditor","getFocusedCodeEditor","hasTextFocus","_runEditorCommand","runDOMCommand","activeEditor","getActiveCodeEditor","runEditorCommand","BaseMoveToCommand","_inSelectionMode","inSelectionMode","pushStackElement","setCursorStates","getPrimaryCursorState","viewPosition","revealPrimaryCursor","MoveTo","precondition","MoveToSelect","ColumnSelectCommand","_getColumnSelectResult","getCursorColumnSelectData","viewState","setCursorColumnSelectData","isReal","revealTopMostCursor","revealBottomMostCursor","ColumnSelect","primary","validatedPosition","validatePosition","validatedViewPosition","coordinatesConverter","validateViewPosition","doColumnSelect","mouseColumn","cursorConfig","CursorColumnSelectLeft","kbOpts","weight","kbExpr","columnSelectLeft","CursorColumnSelectRight","columnSelectRight","ColumnSelectUpCommand","_isPaged","columnSelectUp","CursorColumnSelectUp","CursorColumnSelectPageUp","ColumnSelectDownCommand","columnSelectDown","CursorColumnSelectDown","CursorColumnSelectPageDown","CursorMoveImpl","parsed","_runCursorMove","_move","getCursorStates","cursors","CursorMove","CursorMoveBasedCommand","_staticArgs","dynamicArgs","CursorLeft","secondary","CursorLeftSelect","CursorRight","CursorRightSelect","CursorUp","CursorUpSelect","CursorPageUp","CursorPageUpSelect","CursorDown","CursorDownSelect","CursorPageDown","CursorPageDownSelect","CreateCursor","wholeLine","states","newModelPosition","modelState","newViewPosition","containsPosition","LastCursorMoveToSelect","lastAddedCursorIndex","getLastAddedCursorIndex","newStates","HomeCommand","CursorHome","CursorHomeSelect","LineStartCommand","_exec","CursorLineStart","CursorLineStartSelect","EndCommand","CursorEnd","default","CursorEndSelect","LineEndCommand","CursorLineEnd","CursorLineEndSelect","TopCommand","CursorTop","CursorTopSelect","BottomCommand","CursorBottom","CursorBottomSelect","EditorScrollImpl","_runEditorScroll","_computeDesiredScrollTop","desiredVisibleViewRange","getCompletelyVisibleViewRangeAtScrollTop","visibleViewRange","getCompletelyVisibleViewRange","visibleModelRange","convertViewRangeToModelRange","desiredTopModelLineNumber","startLineNumber","convertModelPositionToViewPosition","getVerticalOffsetForLineNumber","noOfLines","deltaLines","EditorScroll","ScrollLineUp","ScrollPageUp","win","ScrollLineDown","ScrollPageDown","WordCommand","WordSelect","WordSelectDrag","LastCursorWordSelect","lastAddedState","hasSelection","LineCommand","LineSelect","LineSelectDrag","LastCursorLineCommand","LastCursorLineSelect","LastCursorLineSelectDrag","ExpandLineSelection","CancelSelection","RemoveSecondaryCursors","CORE_WEIGHT","RevealLine","revealLineArg","lineNumberArg","revealAt","viewRange","convertModelRangeToViewRange","revealRange","SelectAll","execCommand","SetSelection","columnSelectionCondition","registerColumnSelection","registerCommand","register","CoreEditingCommands","CoreEditingCommand","runCoreEditingCommand","LineBreakInsert","pushUndoStop","executeCommands","Outdent","Tab","DeleteLeft","shouldPushStackElementBefore","commands","getPrevEditOperationType","getCursorAutoClosedCharacters","setPrevEditOperationType","DeleteRight","Undo","hasModel","getOption","getModel","undo","Redo","EditorHandlerCommand","handlerId","_handlerId","registerOverwritableCommand","TextAreaSyntethicEvents","CopyOptions","forceCopyWithSyntaxHighlighting","InMemoryClipboardMetadataManager","_lastState","lastCopiedValue","pastedText","TextAreaInput","textArea","_onFocus","_onBlur","_onKeyDown","_onKeyUp","onKeyUp","_onCut","onCut","_onPaste","onPaste","_onType","onType","_onCompositionStart","onCompositionStart","_onCompositionUpdate","onCompositionUpdate","_onCompositionEnd","onCompositionEnd","_onSelectionChangeRequest","onSelectionChangeRequest","_textArea","TextAreaWrapper","_asyncTriggerCut","_asyncFocusGainWriteScreenReaderContent","writeScreenReaderContent","_textAreaState","_selectionChangeListener","_hasFocus","_isDoingComposition","_nextCommand","lastKeyDown","log","selectionStartPosition","selectionEndPosition","revealDeltaColumns","_setAndWriteTextAreaState","deduceInputFromTextAreaValue","couldBeEmojiInput","deduceAndroidCompositionInput","deduceComposition","replacePrevCharCnt","replaceNextCharCnt","positionDelta","typeInput","setIgnoreSelectionChangeTime","_firePaste","_ensureClipboardGetsEditorSelection","schedule","ClipboardEventUtils","canUseTextData","pastePlainText","getTextData","getSelectionStart","getSelectionEnd","hadFocus","_setHasFocus","previousSelectionChangeEventTime","delta1","delta2","getIgnoreSelectionChangeTime","resetSelectionChangeTime","getValue","newSelectionStart","newSelectionEnd","_newSelectionStartPosition","deduceEditorPosition","newSelectionStartPosition","deduceModelPosition","_newSelectionEndPosition","newSelectionEndPosition","refreshFocusState","newHasFocus","_installSelectionChangeListener","textAreaState","collapseSelection","writeToTextArea","getScreenReaderContent","dataToCopy","getDataToCopy","storedMetadata","isFromEmptySelection","multicursorText","setTextData","clipboardData","getData","rawmetadata","_actual","_ignoreSelectionChangeTime","selectionDirection","currentIsFocused","currentSelectionStart","currentSelectionEnd","_debugComposition","TextAreaState","setValue","_finishDeduceEditorPosition","str1","str2","deltaText","signum","lineFeedCnt","lastLineFeedIndex","previousState","currentState","previousValue","previousSelectionStart","previousSelectionEnd","previousSuffix","currentSuffix","suffixLength","previousPrefix","currentPrefix","prefixLength","potentialEmojiInput","startsWith","replacePreviousCharacters","EMPTY","PagedScreenReaderStrategy","linesPerPage","page","endLineNumber","trimLongText","selectionStartPage","_getPageOfLine","selectionStartPageRange","_getRangeForPage","selectionEndPage","selectionEndPageRange","pretextRange","intersectRanges","pretext","getValueInRange","lastLine","lastLineMaxColumn","posttextRange","posttext","selectionRange1","selectionRange2","LIMIT_CHARS","IEditorCancellationTokens","ctxCancellableOperation","cts","removeFn","invokeWithinContext","bindTo","EditorKeybindingCancellationTokenSource","_unregister","EditorState","modelVersionId","strings","getVersionId","getPosition","getScrollLeft","equalsRange","_equals","EditorStateCancellationTokenSource","_listener","onDidChangeCursorPosition","onDidChangeCursorSelection","onDidScrollChange","onDidChangeModel","onDidChangeModelContent","TextModelCancellationTokenSource","onDidChangeContent","StableEditorScrollState","_visiblePosition","_visiblePositionScrollDelta","_cursorPosition","visiblePosition","visiblePositionScrollDelta","visibleRanges","getVisibleRanges","getStartPosition","visiblePositionScrollTop","getTopForPosition","currentCursorPosition","getTopForLineNumber","isCodeEditor","getEditorType","isDiffEditor","getCodeEditor","getModifiedEditor","EditorExtensionsRegistry","Command","_kbOpts","_menuOpts","menuOpts","_description","_registerMenuItem","kbWhen","runCommand","menuId","order","MultiCommand","_implementations","implementation","logService","impl","trace","ProxyCommand","EditorCommand","controllerGetter","_callback","codeEditorService","editorAccessor","contextMatchesRules","EditorAction","convertOptions","alias","withDefaults","contextMenuOpts","reportTelemetry","publicLog2","MultiEditorAction","registerModelAndPositionCommand","editorPosition","createModelReference","reference","textEditorModel","registerModelCommand","registerEditorCommand","editorCommand","EditorContributionRegistry","registerEditorAction","ctor","registerMultiEditorAction","registerInstantiatedEditorAction","editorAction","registerEditorContribution","getEditorCommand","commandId","getEditorActions","getEditorContributions","getSomeEditorContributions","ids","getDiffEditorContributions","editorContributions","diffEditorContributions","editorActions","editorCommands","UndoCommand","RedoCommand","SelectAllCommand","IBulkEditService","ResourceEdit","edits","ResourceTextEdit","newUri","oldUri","isWorkspaceFileEdit","ResourceFileEdit","textEdit","versionId","oldResource","newResource","ICodeEditorService","__param","paramIndex","decorator","MarkerDecorationsContribution","_editor","_markerDecorationsService","PageCoordinates","ClientCoordinates","EditorPagePosition","createEditorPagePosition","editorViewDomNode","editorPos","EditorMouseEvent","EditorMouseEventFactory","_editorViewDomNode","_create","merger","EditorPointerEventFactory","GlobalEditorMouseMoveMonitor","_globalMouseMoveMonitor","_keydownListener","toKeybinding","isModifierKey","ViewEventHandler","shouldRender","onConfigurationChanged","onCursorStateChanged","onDecorationsChanged","onFlushed","onFocusChanged","onLanguageConfigurationChanged","onLineMappingChanged","onLinesChanged","onLinesDeleted","onLinesInserted","onRevealRangeRequest","onScrollChanged","onTokensChanged","onThemeChanged","onTokensColorsChanged","onZonesChanged","ViewPart","addEventHandler","removeEventHandler","PartFingerprints","partId","resultLen","RenderingContext","viewLayout","viewportData","_viewLayout","getScrollWidth","getScrollHeight","visibleRange","bigNumbersDelta","vInfo","getCurrentViewport","viewportWidth","viewportHeight","absoluteTop","getDecorationsInViewport","viewLines","_viewLines","includeNewLines","linesVisibleRangesForRange","visibleRangeForPosition","LineVisibleRanges","outsideRenderedLine","HorizontalRange","HorizontalPosition","VisibleRanges","FloatHorizontalRange","RangeUtil","_handyReadyRange","createRange","endNode","selectNodeContents","startElement","startOffset","endElement","endOffset","_createRange","setStart","setEnd","_detachRange","prevLeft","prevWidth","myLeft","myWidth","clientRects","clientRectDeltaLeft","clientRect","_mergeAdjacentRanges","startChildIndex","endChildIndex","_createHorizontalRangesFromClientRects","_readClientRects","canUseFastRenderedViewLine","monospaceAssumptionsAreValid","DomReadingContext","_clientRectDeltaLeft","_clientRectDeltaLeftRead","ViewLineOptions","themeType","renderWhitespace","renderControlCharacters","useMonospaceOptimizations","stopRenderingLineAfter","fontLigatures","ViewLine","_isMaybeInvalid","_renderedViewLine","deltaTop","sb","lineData","getViewLineRenderingData","actualInlineDecorations","inlineDecorations","minColumn","selectionsOnLine","selections","renderLineInput","continuesWithWrappedLine","tabSize","startVisibleColumn","appendASCIIString","CLASS_NAME","renderedViewLine","containsForeignElements","lineTokens","getCount","FastRenderedViewLine","characterMapping","createRenderedLine","getWidthIsFast","toSlowRenderedLine","lineContent","horizontalRanges","getVisibleRangesForRange","spanNode","getColumnOfNodeOffset","_characterMapping","_charWidth","_getCharPosition","expectedWidth","actualWidth","startPosition","endPosition","charOffset","getAbsoluteOffsets","spanNodeTextContentLength","spanIndex","previousSibling","partDataToCharOffset","RenderedViewLine","_isWhitespaceOnly","_containsForeignElements","_cachedWidth","_pixelOffsetCache","myDomNode","_getReadingTarget","_readPixelOffset","_readVisibleRangesForRange","pixelOffset","_readRawVisibleRangesForRange","readingTarget","cachedPixelOffset","_actualReadPixelOffset","readHorizontalRanges","partData","charOffsetToPartData","partIndex","charOffsetInPart","expectedResult","startPartData","startPartIndex","startCharOffsetInPart","endPartData","endPartIndex","endCharOffsetInPart","WebKitRenderedViewLine","endPixelOffset","createWebKitRenderedLine","createNormalRenderedLine","PointerHandlerLastRenderData","lastViewCursorsRenderData","lastTextareaPosition","MouseTarget","_typeToString","ElementPath","HitTestContext","viewHelper","lastRenderData","configuration","layoutInfo","viewDomNode","stickyTabStops","_viewHelper","mouseVerticalOffset","getZoneAtCoord","viewZoneWhitespace","getWhitespaceAtVerticalOffset","viewZoneMiddle","verticalOffset","positionBefore","positionAfter","afterLineNumber","viewZoneId","isAfterLines","maxLineColumn","getLineNumberAtVerticalOffset","isInTopPadding","isInBottomPadding","attr","_findAttribute","getLineWidth","getPositionFromDOMInfo","getCurrentScrollTop","getCurrentScrollLeft","HitTestRequest","mouseContentHorizontalOffset","contentLeft","isInMarginArea","glyphMarginLeft","isInContentArea","MouseTargetFactory","_getMouseColumn","_ctx","collect","outerHTML","getLineContent","getTextModelOptions","EMPTY_CONTENT_AFTER_LINES","createEmptyContentDataInLines","horizontalDistanceToText","isChildOfContentWidgets","isChildOfOverflowingContentWidgets","isChildOfOverlayWidgets","_createMouseTarget","domHitTestExecuted","hitTestResult","_doHitTest","createMouseTargetFromHitTestPosition","withTarget","hitTarget","resolvedRequest","_hitTestContentWidget","_hitTestOverlayWidget","_hitTestMinimap","_hitTestScrollbarSlider","_hitTestViewZone","_hitTestMargin","_hitTestViewCursor","_hitTestTextArea","_hitTestViewLines","_hitTestScrollbar","widgetId","findAttribute","cursorVerticalOffset","viewZoneData","mouseTargetType","isTextArea","getFullLineRangeAtCoord","glyphMarginWidth","lineNumbersWidth","isChildOfViewLines","isStrictChildOfViewLines","getLineLength","lineWidth","isChildOfMinimap","possibleLineNumber","isChildOfScrollableElement","columnHorizontalOffset","points","rng","lineCenteredVerticalOffset","adjustedPageY","adjustedPage","_actualDoHitTestWithCaretRangeFromPoint","toClientCoordinates","coords","caretRangeFromPoint","elementFromPoint","TEXT_NODE","lastChild","rect","font","pixelCursor","charWidthReader","CharWidthReader","getCharWidth","shadowCaretRangeFromPoint","startContainer","parent1","parent2","parent3","hitResult","caretPositionFromPoint","offsetNode","parent1ClassName","parent2ClassName","tokenSpan","childNodes","newPosition","_doHitTestWithCaretRangeFromPoint","_doHitTestWithCaretPositionFromPoint","_snapToSoftTabBoundary","_canvas","cacheKey","measureText","createMouseMoveEventMerger","mouseTargetFactory","targetIsWidget","mouseTargetIsWidget","MouseHandler","viewController","_mouseDownOperation","MouseDownOperation","testEventTarget","lastMouseLeaveTime","mouseEvents","_onContextMenu","onMouseMoveThrottled","_onMouseMove","MOUSE_MOVE_MINIMUM_TIME","onMouseUp","_onMouseUp","_onMouseLeave","emitMouseWheel","hasChanged","onHeightChanged","toPageCoordinates","createMouseTarget","getLastRenderData","getMouseColumn","emitContextMenu","isActive","emitMouseMove","emitMouseLeave","emitMouseUp","targetIsContent","targetIsGutter","targetIsLineNumbers","selectOnLineNumbers","targetIsViewZone","shouldHandle","focusTextArea","shouldSuppressMouseDownOnViewZone","shouldSuppressMouseDownOnWidget","emitMouseDown","_viewController","_onScrollTimeout","_mouseState","MouseDownState","_currentSelection","_isActive","_lastMouseEvent","setModifiers","_findMousePosition","isDragAndDrop","emitMouseDrag","_dispatchMouse","targetType","setStartedOnLineNumbers","setStartButtons","trySetCount","_onMouseDownThenMove","KeyboardEvent","emitMouseDropCanceled","emitMouseDrop","_stop","editorContent","_helpPositionJumpOverViewZone","aboveLineNumber","belowLineNumber","positionOutsideEditor","_getPositionOutsideEditor","selectionStartLineNumber","selectionStartColumn","isBefore","dispatchMouse","startedOnLineNumbers","mouseDownCount","_altKey","_ctrlKey","_metaKey","_shiftKey","_leftButton","_middleButton","_startedOnLineNumbers","_lastMouseDownPosition","_lastMouseDownPositionEqualCount","_lastMouseDownCount","_lastSetMouseDownCountTime","setMouseDownCount","newMouseDownPosition","CLEAR_MOUSE_DOWN_COUNT_TIME","PointerEventHandler","linesContentDomNode","_lastPointerType","pointerType","onPointerMoveThrottled","onPointerUp","onPointerLeave","onPointerDown","deltaScrollNow","TouchHandler","dispatchTextAreaEvent","moveTo","PointerHandler","TouchEvent","getTargetAtClientPoint","DynamicViewOverlay","LineNumbersOverlay","_readConfig","_lastCursorModelPosition","_renderResult","_activeLineNumber","lineNumbers","_renderLineNumbers","renderType","_renderCustomLineNumbers","renderFn","_renderFinalNewline","_lineNumbersLeft","lineNumbersLeft","_lineNumbersWidth","primaryViewPosition","convertViewPositionToModelPosition","viewLineNumber","modelPosition","modelLineNumber","lineHeightClassName","visibleStartLineNumber","visibleEndLineNumber","common","lineIndex","renderLineNumber","_getLineRenderLineNumber","theme","collector","getColor","addRule","activeLineNumber","Margin","_canUseLayerHinting","_contentLeft","_glyphMarginLeft","_glyphMarginWidth","OUTER_CLASS_NAME","_glyphMarginBackgroundDomNode","adjustedScrollTop","VisibleTextAreaData","canUseZeroSizeTextarea","TextAreaHandler","_primaryCursorPosition","_primaryCursorVisibleRange","_scrollLeft","_scrollTop","_setAccessibilityOptions","_contentWidth","contentWidth","_contentHeight","_fontInfo","_emptySelectionClipboard","_copyWithSyntaxHighlighting","_visibleTextArea","_selections","_modelSelections","_lastRenderPosition","_getAriaLabel","textAreaCover","simpleModel","eol","textAreaInputHost","generateHTML","rawTextToCopy","getPlainTextToCopy","newLineCharacter","getEOL","richText","getRichTextToCopy","_accessibilitySupport","textBefore","_getWordBeforePosition","_getCharacterBeforePosition","wordAtPosition","positionOffsetInWord","_getAndroidWordAtPosition","_accessibilityPageSize","viewAnchorPosition","deltaOffset","deduceModelPositionRelativeToViewPosition","_textAreaInput","emitKeyDown","emitKeyUp","pasteOnNewLine","paste","compositionType","modelSelection","visibleRangeForPositionRelativeToEditor","compositionStart","metrics","compositionEnd","setHasFocus","goingLeft","goingRight","distance","charBefore","accessibilityPageSize","modelSelections","isFocused","activeDescendant","positionLineNumber","positionColumn","_renderInsideEditor","_renderAtTopLeft","renderedPosition","ta","tac","ViewController","userInputEvents","commandDelegate","startComposition","endComposition","getLineMinColumn","selectionClipboardIsOn","columnSelection","_columnSelect","_hasMulticursorModifier","_lastCursorLineSelect","_createCursor","_lineSelectDrag","_lineSelect","_selectAll","_lastCursorLineSelectDrag","_lastCursorWordSelect","_wordSelectDrag","_wordSelect","_hasNonMulticursorModifier","_lastCursorMoveToSelect","_moveToSelect","_validateViewColumn","_convertViewToModelPosition","_usualArgs","ViewUserInputEvents","onMouseMove","onMouseDrag","onMouseDrop","onMouseDropCanceled","_coordinatesConverter","_convertViewToModelMouseEvent","_convertViewToModelMouseTarget","convertViewToModelMouseTarget","ExternalMouseTarget","RenderedLinesCollection","createLine","_createLine","rendLineNumberStart","lines","_lines","_rendLineNumberStart","deleteFromLineNumber","deleteToLineNumber","getStartLineNumber","getEndLineNumber","deleteCnt","deleteStartIndex","deleteAboveCount","changeFromLineNumber","changeToLineNumber","someoneNotified","changedLineNumber","onContentChanged","insertFromLineNumber","insertToLineNumber","insertCnt","newLines","beforeLines","afterLines","deletedLines","notifiedSomeone","VisibleLinesCollection","_createDomNode","_linesCollection","createVisibleLine","lineDomNode","getLine","inp","_get","ViewLayerRenderer","linesLength","resCtx","relativeVerticalOffset","inContext","stopLineNumber","_finishRendering","_renderUntouchedLines","_insertLinesBefore","removeCnt","_removeLinesBefore","_insertLinesAfter","_removeLinesAfter","endIndex","deltaLN","layoutLine","newLinesLen","removeCount","removeIndex","domNodeIsEmpty","newLinesHTML","wasNew","_ttPolicy","createHTML","insertAdjacentHTML","currChild","line","invalidLinesHTML","wasInvalid","hugeDomNode","replaceChild","_sb","hadNewLine","renderLine","_finishRenderingNewLines","build","hadInvalidLine","_finishRenderingInvalidLines","trustedTypes","createPolicy","ViewOverlays","_visibleLines","_dynamicOverlays","_isFocused","ViewOverlayLine","overlay","getVisibleLine","dynamicOverlay","prepareRender","onDidRender","_viewOverlaysRender","renderLines","dynamicOverlays","_configuration","_renderedContent","ContentViewOverlays","MarginViewOverlays","Coordinate","ViewContentWidgets","_viewDomNode","_widgets","overflowingContentWidgetsDomNode","_widget","myWidget","allowEditorOverflow","setShouldRender","widget","preference","suppressMouseDown","onBeforeRender","_fixedOverflowWidgets","_range","_viewRange","_preference","_cachedDomNodeClientWidth","_cachedDomNodeClientHeight","_getMaxWidth","_renderData","setVisibility","setMaxWidth","_setPosition","validModelRange","validateModelRange","modelPositionIsVisible","getEndPosition","topLeft","bottomLeft","aboveLineTop","heightAboveLine","underLineTop","aboveTop","fitsAbove","belowTop","fitsBelow","actualAboveLeft","actualBelowLeft","aboveLeft","belowLeft","windowSize","MIN_LIMIT","MAX_LIMIT","absoluteLeft","absoluteAboveTop","absoluteBelowTop","absoluteAboveLeft","_layoutHorizontalSegmentInPage","absoluteBelowLeft","visibleRangesForRange","firstLine","visibleRangesForLine","firstLineMinLeft","lastLineMinLeft","topForPosition","topForBottomLine","_getTopAndBottomLeft","preferredDimensions","beforeRender","safeInvoke","placement","_layoutBoxInPage","_layoutBoxInViewport","pref","coordinate","_prepareRenderWidgetAtExactPositionOverflowing","_prepareRenderWidget","afterRender","isRenderedUsingBorder","AbstractLineHighlightOverlay","_renderLineHighlight","_renderLineHighlightOnlyWhenFocus","_selectionIsEmpty","_focused","_cursorLineNumbers","renderSelections","cursorsLineNumbers","arrays","selectionIsEmpty","_readFromSelections","_shouldRenderThis","renderedLine","_renderOne","renderData","CurrentLineHighlightOverlay","_shouldRenderOther","CurrentLineMarginHighlightOverlay","_shouldRenderMargin","lineHighlight","defines","lineHighlightBorder","DecorationsOverlay","_typicalHalfwidthCharacterWidth","_decorations","decorations","decorationsLen","zIndex","aClassName","bClassName","_renderWholeLineDecorations","_renderNormalDecorations","lenI","isWholeLine","decorationOutput","prevClassName","prevShowIfCollapsed","prevRange","showIfCollapsed","_renderNormalDecoration","linesVisibleRanges","lenJ","lineVisibleRanges","singleVisibleRange","lenK","EditorScrollbar","linesContent","overflowGuardDomNode","scrollbar","scrollbarOptions","getScrollable","scrollbarDomNode","_setLayout","onBrowserDesperateReveal","lookAtScrollTop","lookAtScrollLeft","newScrollPosition","deltaLeft","side","minimap","minimapWidth","getOverviewRulerLayoutInfo","delegateVerticalScrollbarMouseDown","newOpts","updateClassName","renderNow","DecorationToRender","DedupOverlay","prevEndLineIndex","startLineIndex","endLineIndex","GlyphMarginOverlay","_glyphMargin","rLen","glyphMarginClassName","_getDecorations","IndentGuidesOverlay","_primaryLineNumber","wrappingInfo","_spaceWidth","_activeIndentEnabled","_maxIndentLeft","wrappingColumn","newPrimaryLineNumber","indentSize","indentWidth","indents","getLinesIndentGuides","activeIndentStartLineNumber","activeIndentEndLineNumber","activeIndentLevel","activeIndentInfo","getActiveIndentGuide","indent","containsActiveIndentGuide","leftMostVisiblePosition","editorIndentGuidesColor","editorActiveIndentGuidesColor","LastRenderedData","_currentVisibleRange","currentVisibleRange","HorizontalRevealRangeRequest","startScrollTop","stopScrollTop","scrollType","minLineNumber","maxLineNumber","HorizontalRevealSelectionsRequest","ViewLines","_linesContent","_textRangeRestingSpot","conf","_isViewportWrapping","isViewportWrapping","_revealHorizontalRightPadding","_cursorSurroundingLines","_cursorSurroundingLinesStyle","_viewLineOptions","_maxLineWidth","_asyncUpdateLineWidths","_updateLineWidthsSlow","_asyncCheckMonospaceFontAssumptions","_checkMonospaceFontAssumptions","_lastRenderedData","_horizontalRevealRequest","_onOptionsMaybeChanged","newViewLineOptions","onOptionsChanged","rendStartLineNumber","rendEndLineNumber","onSelectionChanged","_computeScrollTopToRevealRange","getFutureViewport","verticalType","revealHorizontal","setMaxLineWidth","viewLineDomNode","_getViewLineDomNode","_getLineNumberFor","originalEndLineNumber","getCurrentVisibleRange","visibleRangesLen","domReadingContext","nextLineModelLineNumber","currentLineModelLineNumber","_visibleRangesForLineRange","_updateLineWidths","fast","localMaxLineWidth","allWidthsComputed","visibleLine","_ensureMaxLineWidth","longestLineNumber","longestWidth","needsMonospaceFontCheck","onMonospaceAssumptionsInvalidated","setCurrentVisibleRange","horizontalRevealRequest","_computeScrollLeftToReveal","maxHorizontalOffset","_updateLineWidthsFast","iLineWidth","viewport","viewportStartY","viewportEndY","boxIsSingleRange","boxStartY","boxEndY","minScrollTop","boxMiddleY","_computeMinimumScrolling","viewportStartX","viewportEndX","boxStartX","boxEndX","HORIZONTAL_EXTRA_PX","viewportStart","viewportEnd","boxStart","boxEnd","revealAtStart","revealAtEnd","viewportLength","LinesDecorationsOverlay","_decorationsLeft","decorationsLeft","_decorationsWidth","decorationsWidth","linesDecorationsClassName","firstLineDecorationClassName","lineOutput","MarginViewLineDecorationsOverlay","marginClassName","RGBA8","_clamp","Empty","MinimapTokensColorTracker","_updateColorMap","changedColorMap","colorMap","_colors","_backgroundIsLight","colorId","backgroundLuminosity","allCharCodes","MinimapCharRenderer","charData","scale","charDataNormal","soften","charDataLight","Uint8ClampedArray","dx","dy","fontScale","useLighterFont","force1pxHeight","charWidth","charHeight","charIndex","getCharIndex","destWidth","backgroundR","backgroundG","backgroundB","deltaR","deltaG","deltaB","sourceOffset","colorR","colorG","colorB","charTable","A","B","D","E","decodeData","prebakedMiniMaps","2","MinimapCharRendererFactory","lastCreated","lastFontFamily","createFromSampleData","createSampleData","canvas","fillStyle","textBaseline","fillText","getImageData","_downsample","destOffset","brightest","sourceY1","sourceY2","sourceX1","sourceX2","samples","sy","sourceRow","yBalance","sx","xBalance","final","pixelsPerCharacter","resultOffset","_downsampleChar","adjust","MinimapOptions","tokensColorTracker","minimapLayout","minimapOpts","renderMinimap","minimapHeightIsEditorHeight","scrollBeyondLastLine","showSlider","minimapLeft","minimapHeight","canvasInnerWidth","minimapCanvasInnerWidth","canvasInnerHeight","minimapCanvasInnerHeight","canvasOuterWidth","minimapCanvasOuterWidth","canvasOuterHeight","minimapCanvasOuterHeight","isSampling","minimapIsSampling","editorHeight","minimapScale","minimapLineHeight","minimapCharWidth","charRenderer","_getMinimapBackground","themeColor","MinimapLayout","sliderNeeded","sliderTop","sliderHeight","viewportStartLineNumber","viewportEndLineNumber","viewportStartLineNumberVerticalOffset","viewportContainsWhitespaceGaps","realLineCount","previousLayout","minimapLinesFitting","logicalScrollHeight","maxMinimapSliderTop","maxLinesFitting","viewportLineCount","expectedViewportLineCount","extraLinesAtTheBottom","MinimapLine","INVALID","RenderData","renderedLayout","imageData","_imageData","_renderedLines","scrollEquals","MinimapBuffers","WIDTH","HEIGHT","_backgroundFillData","_createBackgroundFillData","_buffers","createImageData","_lastUsedBuffer","MinimapSamplingState","samplingRatio","minimapLines","viewLineCount","oldSamplingState","minimapLineCount","halfRatio","oldMinimapLines","oldLength","oldIndex","oldDeltaLineCount","oldMinimapLineNumber","_oldIndex","selectedViewLineNumber","_i","fromLineIndex","modelLineToMinimapLine","toLineIndex","sampledLineNumber","minimapLineStart","minimapLineEnd","deletedLineCount","changeStartIndex","changeEndIndex","insertedLineCount","Minimap","_minimapSelections","samplingState","compute","_samplingState","_shouldCheckSampling","InnerMinimap","_recreateLineSampling","onDidChangeOptions","affectsMinimap","minimapLineRange","modelLineRangeToMinimapLineRange","invalidateMinimapColorCache","minimapCtx","whitespaceViewportData","wasSampling","needed","getViewLineData","getMinimapLinesRenderingData","decorationLineRangeToMinimapLineRange","modelStartLineNumber","modelEndLineNumber","decoration","minimapStartLineNumber","minimapEndLineNumber","_renderDecorations","_gestureInProgress","_theme","_model","_lastRenderData","_selectionColor","_getMinimapDomNodeClassName","_shadow","_decorationsCanvas","_slider","_sliderHorizontal","_applyLayout","_mouseDownListener","initialPosY","_startSliderDragging","internalOffsetY","revealLineNumber","_sliderMouseMoveMonitor","_sliderMouseDownListener","_gestureDisposable","_sliderTouchStartListener","scrollDueToTouchEvent","_sliderTouchMoveListener","_sliderTouchEndListener","initialPosX","initialSliderState","handleMouseMove","getDesiredScrollTopFromDelta","getDesiredScrollTopFromTouchLocation","getBuffer","renderingCtx","getRealLineCount","setDisplay","scrollLeftChars","horizontalSliderLeft","renderDecorations","getSelections","getMinimapDecorationsInViewport","characterWidth","getOptions","canvasContext","clearRect","lineOffsetMap","renderDecorationOnLine","decorationColor","renderDecoration","decorationRange","lineIndexToXOffset","isFirstDecorationForLine","endColumnForLine","renderLineHighlight","fillRect","linesEquals","_lastData","_getBuffer","_dirtyY1","_dirtyY2","lineInfo","backgroundIsLight","renderMinimapLineHeight","innerLinePadding","renderedLines","_renderLine","dirtyY1","dirtyHeight","putImageData","lastTargetData","lastStartLineNumber","lastLines","lastLinesLength","targetData","maxDestPixel","dirtyPixel1","dirtyPixel2","copySourceStart","copySourceEnd","copyDestStart","copyDestEnd","dest_dy","lastLineIndex","source_dy","sourceStart","sourceEnd","destStart","destEnd","subarray","colorTracker","minimapCharRenderer","maxDx","tabsCharDelta","tokenIndex","tokensLen","tokenEndIndex","getEndOffset","tokenColorId","getForeground","tokenColor","insertSpacesCount","blockRenderChar","renderChar","minimapBackgroundValue","sliderBackground","sliderHoverBackground","sliderActiveBackground","shadow","ViewOverlayWidgets","_verticalScrollbarWidth","verticalScrollbarWidth","_minimapWidth","_horizontalScrollbarHeight","horizontalScrollbarHeight","_editorHeight","_editorWidth","widgetData","widgetHeight","unsetTop","_renderWidget","Settings","overviewRulerLanes","renderBorder","hideCursor","cursorColor","minimapEnabled","minimapSide","overviewRuler","domWidth","domHeight","canvasWidth","canvasHeight","_initLanes","canvasLeftOffset","laneCount","remainingWidth","leftWidth","rightWidth","centerWidth","centerOffset","DecorationsOverviewRuler","_updateSettings","_tokensColorTrackerListener","_cursorPositions","newSettings","_settings","affectsOverviewRuler","invalidateOverviewRulerColorCache","editorCtx","setBackgroundColor","heightRatio","getAllOverviewRulerDecorations","minDecorationHeight","halfMinDecorationHeight","canvasCtx","colors","cIndex","cLen","colorDecorations","prevLane","prevY1","prevY2","lane","y1","y2","yCenter","cursorHeight","halfCursorHeight","cursorX","cursorW","beginPath","strokeStyle","lineTo","stroke","OverviewRuler","cssClassName","_zoneManager","setDOMWidth","setDOMHeight","setOuterHeight","setPixelRatio","getDOMWidth","getDOMHeight","getCanvasWidth","getCanvasHeight","zones","setZones","getOuterHeight","colorZones","resolveColorZones","id2Color","getId2Color","_renderOneLane","currentColorId","currentFrom","currentTo","zone","zoneColorId","zoneFrom","zoneTo","Rulers","_renderedRulers","_rulers","currentCount","desiredCount","rulerWidth","addCount","_ensureRulersCount","ruler","setBoxShadow","rulerColor","ScrollDecorationViewPart","_updateWidth","_shouldShow","_useShadows","newShouldShow","_updateShouldShow","HorizontalRangeWithStyle","startStyle","endStyle","LineVisibleRangesWithStyle","toStyledRange","toStyled","SelectionsOverlay","_previousFrameVisibleRangesWithStyle","_roundedSelection","previousFrame","epsilon","previousFrameTop","previousFrameBottom","topLineNumber","bottomLineNumber","curLineRange","curLeft","curRight","prevRight","nextLeft","nextRight","_visibleRangesHaveGaps","_enrichVisibleRangesWithStyle","output2","hasMultipleSelections","visibleRangesHaveStyle","fullLineHeight","reducedLineHeight","firstLineNumber","lastLineNumber","innerCornerOutput","restOfSelectionOutput","_createSelectionPiece","SELECTION_CLASS_NAME","ROUNDED_PIECE_WIDTH","EDITOR_BACKGROUND_CLASS_NAME","SELECTION_TOP_RIGHT","SELECTION_BOTTOM_RIGHT","SELECTION_TOP_LEFT","SELECTION_BOTTOM_LEFT","thisFrameVisibleRangesWithStyle","visibleRangesWithStyle","_getVisibleRangesWithStyle","_actualRenderOneSelection","internalCorners","restOfSelection","editorSelectionColor","editorInactiveSelectionColor","editorSelectionForegroundColor","ViewCursorRenderData","textContentClassName","ViewCursor","_cursorStyle","_lineCursorWidth","_lastRenderedContent","visibleRangeForCharacter","firstVisibleRangeForCharacter","findTokenIndexAtOffset","getClassName","_prepareRender","ViewCursors","_readOnly","_cursorBlinking","_cursorSmoothCaretAnimation","_isComposingInput","_primaryCursor","_secondaryCursors","_updateDomClassName","_startCursorBlinkAnimation","_cursorFlatBlinkInterval","_blinkingEnabled","_editorHasFocus","_updateBlinking","secondaryPositions","onCursorPositionChanged","addCnt","newCursor","nextSibling","positions","_onCursorPositionChanged","secondaryCursor","blinkingStyle","_getCursorBlinking","isHidden","isSolid","_show","BLINK_INTERVAL","_getClassName","renderDataLen","primaryRenderData","secondaryRenderData","caretBackground","opposite","invalidFunc","ViewZones","marginDomNode","_zones","whitespaces","getWhitespaces","oldWhitespaces","hadAChange","changeWhitespace","whitespaceAccessor","_computeWhitespaceProps","oldWhitespace","afterViewLineNumber","heightInPx","changeOneWhitespace","_safeCallOnComputedHeight","_recomputeWhitespacesProps","afterColumn","_heightInPixels","minWidthInPx","_minWidthInPixels","zoneAfterModelPosition","zoneBeforeModelPosition","validateModelPosition","validAfterLineNumber","getModelLineMaxColumn","isVisible","zonesHaveChanged","changeAccessor","addZone","_addZone","removeZone","_removeZone","layoutZone","_layoutZone","safeInvoke1Arg","myZone","whitespaceId","insertWhitespace","_getZoneOrdinal","removeWhitespace","heightInLines","onComputedHeight","onDomNodeTop","visibleWhitespaces","visibleZones","hasVisibleZone","newTop","newHeight","newDisplay","_safeCallOnDomNodeTop","getScrolledTopFromAbsoluteTop","EditorTheme","ViewContext","eventHandler","addViewEventHandler","removeViewEventHandler","ViewportData","partialData","View","themeService","overflowWidgetsDomNode","_renderAnimationFrame","getColorTheme","_configPixelRatio","onDidColorThemeChange","_viewParts","_textAreaHandler","_createTextAreaHandlerHelper","_getEditorClassName","_overflowGuardContainer","_scrollbar","_viewZones","decorationsOverviewRuler","scrollDecoration","contentViewOverlays","addDynamicOverlay","marginViewOverlays","_contentWidgets","_viewCursors","_overlayWidgets","rulers","overviewRulerData","_pointerHandler","_createPointerHandlerHelper","_renderNow","_flushAccumulatedAndRenderNow","focused","handleEvents","_scheduleRender","viewPart","_onRenderScheduled","safeInvokeNoArg","_actualRender","viewPartsToRender","_getViewPartsToRender","partialViewportData","getLinesViewportData","setViewport","centeredLineNumber","getWhitespaceViewportData","renderingContext","updatePixelRatio","tokenizeViewport","updateLineWidths","modelColumn","mouseTarget","changeViewZones","everything","forceShouldRender","setAriaOptions","addWidget","layoutContentWidget","newRange","newPreference","setWidgetPosition","removeWidget","layoutOverlayWidget","OneCursor","_selTrackedRange","_trackSelection","_removeTrackedRange","_updateTrackedRange","_setTrackedRange","_getTrackedRange","getDirection","validateRange","selectionStartLeftoverVisibleColumns","leftoverVisibleColumns","viewSelectionStart","validateViewRange","viewSelectionStart1","viewSelectionStart2","CursorCollection","primaryCursor","secondaryCursors","killSecondaryCursors","startTrackingSelection","stopTrackingSelection","ensureValidState","readSelectionFromMarkers","asCursorState","isBeforeOrEqual","setStates","setState","_setSecondaryStates","secondaryStates","secondaryCursorsLength","secondaryStatesLength","createCnt","_addSecondaryCursor","_removeSecondaryCursor","_getAll","sortedCursors","sortedCursorIndex","currentSelection","nextSelection","multiCursorMergeOverlapping","shouldMergeCursors","winnerSortedCursorIndex","looserSortedCursorIndex","looserIndex","winnerIndex","looserSelection","winnerSelection","equalsSelection","resultingRange","plusRange","looserSelectionIsLTR","winnerSelectionIsLTR","resultingSelectionIsLTR","resultingSelection","resultingState","sortedCursor","ViewCompositionStartEvent","ViewCompositionEndEvent","ViewConfigurationChangedEvent","_source","ViewCursorStateChangedEvent","ViewDecorationsChangedEvent","ViewFlushedEvent","ViewFocusChangedEvent","ViewLanguageConfigurationEvent","ViewLineMappingChangedEvent","ViewLinesChangedEvent","ViewLinesDeletedEvent","ViewLinesInsertedEvent","ViewRevealRangeRequestEvent","ViewScrollChangedEvent","ViewThemeChangedEvent","ViewTokensChangedEvent","ViewTokensColorsChangedEvent","ViewZonesChangedEvent","ViewModelEventDispatcher","_onEvent","onEvent","_eventHandlers","_viewEventQueue","_isConsumingViewEventQueue","_collector","_collectorCnt","_outgoingEvents","_addOutgoingEvent","_emitOugoingEvents","isNoOp","ViewModelEventsCollector","outgoingEvents","viewEvents","outgoingEvent","_emitMany","beginEmitViewEvents","emitViewEvent","endEmitViewEvents","_consumeViewEventQueue","_doConsumeQueue","eventHandlers","ContentSizeChangedEvent","oldContentWidth","oldContentHeight","_oldContentWidth","_oldContentHeight","contentWidthChanged","contentHeightChanged","FocusChangedEvent","oldHasFocus","ScrollChangedEvent","_oldScrollWidth","_oldScrollLeft","_oldScrollHeight","_oldScrollTop","CursorStateChangedEvent","oldSelections","oldModelVersionId","reachedMaxCursorCount","_selectionsAreEqual","ReadOnlyEditAttemptEvent","CursorModelState","cursorState","AutoClosedAction","autoClosedCharactersDecorations","autoClosedEnclosingDecorations","_autoClosedCharactersDecorations","_autoClosedEnclosingDecorations","autoClosedActions","autoClosedCharacters","autoClosedAction","getAutoClosedCharactersRanges","deltaDecorations","getDecorationRange","enclosingRanges","strictContainsRange","Cursor","_knownModelVersionId","_viewModel","_cursors","_isHandling","_selectionsWhenCompositionStarted","_columnSelectData","_autoClosedActions","_prevEditOperationType","updateContext","eventsCollector","isValid","getPrimaryCursor","getAll","MAX_CURSOR_COUNT","_validateAutoClosedActions","_emitStateChangedIfNecessary","columnSelectData","viewPositions","getViewPositions","_emitCursorRevealRange","getViewSelections","viewSelections","desiredSelections","revealPrimary","hadFlushEvent","containsEvent","isUndoing","isRedoing","_revealPrimaryCursor","selectionsFromMarkers","getTopMostViewPosition","getBottomMostViewPosition","autoClosedCharactersRanges","autoClosedEnclosingRanges","autoClosedCharactersDeltaDecorations","autoClosedEnclosingDeltaDecorations","inlineClassName","stickiness","opResult","selectionsBefore","trackedRanges","trackedRangesDirection","_innerExecuteCommands","_arrayIsEmpty","commandsData","_getEditOperations","operations","rawOperations","loserCursorsMap","_getLoserCursorMap","filteredOperations","major","hadTrackedEditOperation","_isTracked","selectionsAfter","pushEditOperations","inverseEditOperations","groupedInverseEditOperations","op","minorBasedSorter","minor","cursorSelections","computeCursorState","getInverseEditOperations","getTrackedSelection","losingCursors","losingCursorIndex","losingCursor","_getEditOperationsFromCommand","majorIdentifier","operationMinor","addEditOperation","forceMoveMarkers","isAutoWhitespaceEdit","insertsAutoWhitespace","addTrackedEditOperation","editOperationBuilder","trackSelection","_selection","trackPreviousOnEmpty","getEditOperations","previousOp","currentOp","loserMajor","_interpretCommandResult","enclosingRange","closeCharacterRange","_pushAutoClosedAction","shouldPushStackElementAfter","setSelections","newCursorState","emitOutgoingEvent","indices","closeChar","autoClosingPairsCandidates","autoClosingPairs","autoClosingPairsCloseSingleChar","openChar","closeCharIndex","openCharIndex","cursorStateComputer","autoClosingIndices","_findAutoClosingPairs","undoEdits","openCharInnerIndex","closeCharInnerIndex","undoEdit","cursorChangeReason","readOnly","stopTrackingSelections","startTrackingSelections","isDoingComposition","getAllAutoClosedCharacters","_executeEdit","_executeEditOperation","getAutoClosedCharacters","charLength","newSelections","PendingChanges","_hasPending","_inserts","_changes","_removes","linesLayout","inserts","removes","_commitPendingChanges","EditorWhitespace","ordinal","minWidth","prefixSum","LinesLayout","paddingTop","paddingBottom","_instanceId","INSTANCE_COUNT","_pendingChanges","_lastWhitespaceId","_arr","_prefixSumValidIndex","_minWidth","_lineCount","_paddingTop","_paddingBottom","_checkPendingChanges","insert","newAfterLineNumber","commit","_insertWhitespace","_changeOneWhitespace","_findWhitespaceIndex","_removeWhitespace","toRemove","toChange","applyRemoveAndChange","mustCommit","findInsertionIndex","getWhitespacesAccumulatedHeight","getWhitespacesTotalHeight","lastWhitespaceBeforeLineNumber","_findLastWhitespaceBeforeLineNumber","firstWhitespaceAfterLineNumber","_findFirstWhitespaceAfterLineNumber","previousLinesHeight","getWhitespaceAccumulatedHeightBeforeLineNumber","getLinesTotalHeight","midLineNumber","midLineNumberVerticalOffset","verticalOffset1","verticalOffset2","getLineNumberAtOrAfterVerticalOffset","startLineNumberVerticalOffset","whitespaceIndex","getFirstWhitespaceIndexAfterLineNumber","whitespaceCount","getWhitespacesCount","currentWhitespaceHeight","currentWhitespaceAfterLineNumber","getAfterLineNumberForWhitespaceIndex","getHeightForWhitespaceIndex","currentVerticalOffset","currentLineRelativeOffset","STEP_SIZE","linesOffsets","verticalCenter","currentLineTop","currentLineBottom","endLineNumberVerticalOffset","completelyVisibleStartLineNumber","completelyVisibleEndLineNumber","previousWhitespacesHeight","minWhitespaceIndex","maxWhitespaceIndex","getVerticalOffsetForWhitespaceIndex","midWhitespaceIndex","midWhitespaceVerticalOffset","candidateIndex","getWhitespaceIndexAtOrAfterVerticallOffset","candidateTop","candidateHeight","getIdForWhitespaceIndex","EditorScrollDimensions","EditorScrollable","_onDidContentSizeChange","onDidContentSizeChange","_dimensions","oldDimensions","ViewLayout","_linesLayout","_configureSmoothScrollDuration","_updateHeight","setPadding","_getContentHeight","_getHorizontalScrollbarHeight","currentScrollPosition","maxLineWidth","extraHorizontalSpace","whitespaceMinWidth","getWhitespaceMinWidth","_computeContentWidth","firstLineNumberInViewport","scrollTopWithoutViewZones","onHeightMaybeChanged","visibleBox","deltaScrollLeft","CoordinatesConverter","expectedModelPosition","expectedModelRange","modelRange","getModelLineViewLineCount","LineNumberMapper","viewLineCounts","_counts","_isValid","_validEndIndex","_modelToView","_viewToModel","viewLinesAbove","_invalidate","_ensureValid","accumulatedValue","modelLineIndex","SplitLinesCollection","domLineBreaksComputerFactory","monospaceLineBreaksComputerFactory","wrappingStrategy","wrappingIndent","_validModelVersionId","_domLineBreaksComputerFactory","_monospaceLineBreaksComputerFactory","_constructLines","hiddenAreasIds","resetHiddenAreas","previousLineBreaks","getLinesContent","lineBreaksComputer","createLineBreaksComputer","addRequest","linesBreaks","finalize","hiddenAreas","areaId","hiddenAreaStart","hiddenAreaEnd","hiddenAreaIdx","nextLineNumberToUpdateHiddenArea","isInHiddenArea","createSplitLine","getViewLineCount","prefixSumComputer","decId","_ranges","currentRangeStart","currentRangeEnd","newRanges","_reduceRanges","oldRanges","hasDifference","newDecorations","hasVisibleLine","lineChanged","newOutputLineCount","changeValue","setHiddenAreas","_modelColumn","newTabSize","equalFontInfo","equalWrappingStrategy","equalWrappingColumn","equalWrappingIndent","onlyWrappingColumnChanged","getLineBreakData","outputFromLineNumber","getAccumulatedValue","outputToLineNumber","removeValues","_toLineNumber","lineBreaks","totalOutputLineCount","insertLines","insertPrefixSumValues","outputLineCount","insertValues","lineBreakData","oldOutputLineCount","lineMappingChanged","changeFrom","changeTo","insertFrom","insertTo","deleteFrom","deleteTo","getTotalValue","_toValidViewLineNumber","getViewLineMinColumn","modelMinPosition","modelMaxPosition","viewStartPosition","viewEndPosition","viewStartLineNumber","viewEndLineNumber","modelStart","modelEnd","getViewLineMaxColumn","resultRepeatCount","resultRepeatOption","modelStartLineIndex","modelEndLineIndex","reqStart","viewLineStartIndex","getViewLineNumberOfModelPosition","viewLineEndIndex","option","viewIndents","currIndex","blockAtIndex","getIndexOf","remainder","getViewLineContent","getViewLineLength","startModelLineIndex","startRemainder","fromViewLineIndex","remainingViewLineCount","toViewLineIndex","getViewLinesData","viewColumn","computedModelColumn","getModelColumnOfViewPosition","validViewStart","validViewEnd","inputColumn","_modelLineNumber","validPosition","inputLineNumber","lineIndexChanged","deltaLineNumber","getViewPositionOfModelPosition","ownerId","filterOutValidation","getOverviewRulerDecorations","OverviewRulerDecorations","_getViewLineNumberForModelPosition","getDecorationsInRange","finalResult","finalResultLen","prevDecId","dec","VisibleIdentitySplitLine","InvisibleIdentitySplitLine","_outputLineIndex","getLineTokens","inflate","_fromOuputLineIndex","_toOutputLineIndex","globalStartIndex","outputColumn","_inputColumn","_globalStartIndex","_needed","_result","_outputColumn","_deltaLineNumber","SplitLine","_lineBreakData","breakOffsets","outputLineIndex","getInputStartOffsetOfOutputLineIndex","getInputEndOffsetOfOutputLineIndex","spaces","wrappedTextIndentLength","deltaStartIndex","breakOffsetsVisibleColumn","sliceAndInflate","fromOuputLineIndex","toOutputLineIndex","globalIndex","adjustedColumn","outputOffset","_spaces","_makeSpaces","IdentityCoordinatesConverter","_validPosition","_validRange","_viewPosition","IdentityLinesCollection","_newTabSize","_wrappingStrategy","_wrappingColumn","_wrappingIndent","lineText","previousLineBreakData","_versionId","_minLineNumber","_maxLineNumber","prevEndLineNumber","ViewModelDecorations","editorId","linesCollection","_decorationsCache","_cachedModelDecorationsResolver","_cachedModelDecorationsResolverViewRange","_clearCachedModelDecorationsResolver","modelDecoration","cacheIsValid","_getDecorationsViewportData","viewportRange","modelDecorations","decorationsInViewport","decorationsInViewportLen","decorationOptions","viewModelDecoration","_getOrCreateViewModelDecoration","inlineDecoration","inlineClassNameAffectsLetterSpacing","intersectedStartLineNumber","intersectedEndLineNumber","beforeContentClassName","afterContentClassName","ViewModel","_editorId","_eventDispatcher","getLanguageIdentifier","_tokenizeViewportSoon","_updateConfigurationViewLineCount","_updateConfigurationViewLineCountNow","_viewportStartLine","_viewportStartLineTrackedRange","_viewportStartLineDelta","isTooLargeForTokenization","createCoordinatesConverter","_cursor","emitSingleViewEvent","_registerModelEvents","onDidChangeFast","_onConfigurationChanged","setViewLineCount","linesViewportData","previousViewportStartModelPosition","previousViewportStartViewPosition","restorePreviousViewportStart","setWrappingSettings","viewPositionTop","updateConfiguration","onDidChangeRawContentFast","hadOtherModelChange","hadModelLineChangeThatChangedLineMapping","changeType","lineBreaksOffset","onModelFlushed","linesDeletedEvent","onModelLinesDeleted","insertedLineBreaks","linesInsertedEvent","onModelLinesInserted","changedLineBreakData","linesChangedEvent","onModelLineChanged","acceptVersionId","setMaxLineNumber","getAttachedEditorCount","onModelContentChanged","onDidChangeTokens","viewRanges","tokenizationSupportChanged","onDidChangeLanguageConfiguration","onDidChangeLanguage","setTabSize","onDidChangeDecorations","onModelDecorationsChanged","linesAround","startViewLineNumber","endViewLineNumber","_toModelVisibleRanges","getHiddenAreas","hiddenStartLineNumber","hiddenEndLineNumber","getLinesViewportDataAtScrollTop","compatViewState","saveState","firstViewLineNumber","firstPosition","firstPositionDeltaTop","_reduceRestoreStateCompatibility","viewportStartLineTop","getViewLinesIndentGuides","getDecorationsViewportData","mightContainRTL","mightContainNonBasicASCII","getTabSize","invalidateCachedColor","getAllDecorations","modelAnchor","getOffsetAt","getPositionAt","modelRanges","forceCRLF","hasEmptyRange","hasNonEmptyRange","modelLineNumbers","prevModelLineNumber","languageId","_getColorMap","_getHTMLToCopy","_withViewEventsCollector","restoreState","_executeCursorEdit","executeEdits","setIsDoingComposition","executeCommand","WrappingCharacterClassifier","BREAK_BEFORE","BREAK_AFTER","_asciiMap","_defaultValue","arrPool1","arrPool2","MonospaceLineBreaksComputerFactory","breakBeforeChars","breakAfterChars","previousBreakingData","columnsForFullWidthChar","createLineBreaksFromPreviousLineBreaks","createLineBreaks","firstLineBreakColumn","prevBreakingOffsets","prevBreakingOffsetsVisibleColumn","computeWrappedTextIndentLength","wrappedLineBreakColumn","breakingOffsets","breakingOffsetsVisibleColumn","breakingOffsetsCount","lastBreakingOffset","lastBreakingOffsetVisibleColumn","breakingColumn","prevLen","prevIndex","bestDistance","prevBreakOffset","prevBreakOffsetVisibleColumn","breakOffset","breakOffsetVisibleColumn","forcedBreakOffset","forcedBreakOffsetVisibleColumn","visibleColumn","prevCharCodeClass","entireLineFits","charStartOffset","charCodeClass","computeCharWidth","canBreak","hitATabCharacter","prevCharWidth","remainingWidthOfNextLine","charCodeAtForcedBreakOffset","tabCharacterWidth","numberOfAdditionalTabs","ttPolicy","DOMLineBreaksComputerFactory","overallWidth","containerDomNode","firstNonWhitespaceIndices","wrappedTextIndentLengths","renderLineContents","allCharOffsets","allVisibleColumns","renderLineContent","trustedhtml","lineDomNodes","readLineBreaks","visibleColumns","initialVisibleColumn","charOffsets","producedCharacters","write1","appendASCII","spans","discoverBreaks","lowRects","highRects","readClientRect","midRects","EDITOR_ID","ModelData","hasRealView","listenersToRemove","onBeforeDetached","CodeEditorWidget","codeEditorWidgetOptions","instantiationService","commandService","contextKeyService","notificationService","_onDidChangeModelContent","_onDidChangeModelLanguage","onDidChangeModelLanguage","_onDidChangeModelLanguageConfiguration","onDidChangeModelLanguageConfiguration","_onDidChangeModelOptions","onDidChangeModelOptions","_onDidChangeModelDecorations","onDidChangeModelDecorations","_onDidChangeConfiguration","onDidChangeConfiguration","_onDidChangeModel","_onDidChangeCursorPosition","_onDidChangeCursorSelection","_onDidAttemptReadOnlyEdit","onDidAttemptReadOnlyEdit","_onDidLayoutChange","onDidLayoutChange","_editorTextFocus","BooleanEventEmitter","onDidFocusEditorText","onDidChangeToTrue","onDidBlurEditorText","onDidChangeToFalse","_editorWidgetFocus","onDidFocusEditorWidget","onDidBlurEditorWidget","_onWillType","onWillType","_onDidType","onDidType","_onDidCompositionStart","onDidCompositionStart","_onDidCompositionEnd","onDidCompositionEnd","_onDidPaste","onDidPaste","_onMouseDrag","_onMouseDrop","_onMouseDropCanceled","_onDidScrollChange","_onDidChangeViewZones","onDidChangeViewZones","contributions","_domElement","_overflowWidgetsDomNode","_decorationTypeKeysToIds","_decorationTypeSubtypes","_telemetryData","telemetryData","_createConfiguration","_contextKeyService","createScoped","_notificationService","_codeEditorService","_commandService","_themeService","EditorContextKeysManager","EditorModeContext","_instantiationService","createChild","_modelData","_contributions","_focusTracker","CodeEditorWidgetFocusTracker","contribution","createInstance","internalAction","invokeFunction","addCodeEditor","editorCommon","removeCodeEditor","contributionId","_removeDecorationTypes","_postDetachModelCleanup","_detachModel","getRawOptions","preserveBOM","eolPreference","lineEnding","detachedModel","_attachModel","oldModelUrl","newModelUrl","decorationType","subTypes","subType","_removeDecorationType","getVisibleRangesPlusViewportAboveBelow","modelData","_getVerticalOffsetForPosition","rawPosition","validatedModelRange","_revealLine","revealType","_sendRevealRange","_revealPosition","something","isSelection","isRange","_setSelectionImpl","sel","_revealLines","revealVerticalInCenter","_revealRange","contributionsState","saveViewState","saveCursorState","codeEditorState","restoreCursorState","restoreViewState","reducedState","reduceRestoreState","getActions","isSupported","payload","_startComposition","_endComposition","_compositionType","replaceCharCnt","_paste","_cut","_triggerEditorCommand","_triggerCommand","popStackElement","endCursorState","changeDecorations","getLineDecorations","oldDecorations","decorationTypeKey","oldDecorationsIds","createOverviewRuler","observeReferenceElement","addContentWidget","removeContentWidget","addOverlayWidget","removeOverlayWidget","getOffsetForColumn","forceRedraw","setIsDominatedByLongLines","isDominatedByLongLines","onBeforeAttached","onWillDispose","setModel","secondarySelections","_createView","viewUserInputEvents","removeAllDecorationsWithOwnerId","removeDomNode","removeDecorationType","_onDidChangeToTrue","_onDidChangeToFalse","createKey","_editorSimpleInput","_editorFocus","_textInputFocus","_editorTabMovesFocus","_editorReadonly","_inDiffEditor","_editorColumnSelection","_hasMultipleSelections","_hasNonEmptySelection","_canUndo","_canRedo","_updateFromConfig","_updateFromSelection","_updateFromFocus","_updateFromModel","hasWidgetFocus","canUndo","canRedo","_langId","_hasCompletionItemProvider","_hasCodeActionsProvider","_hasCodeLensProvider","_hasDefinitionProvider","_hasDeclarationProvider","_hasImplementationProvider","_hasTypeDefinitionProvider","_hasHoverProvider","_hasDocumentHighlightProvider","_hasDocumentSymbolProvider","_hasReferenceProvider","_hasRenameProvider","_hasSignatureHelpProvider","_hasInlineHintsProvider","_hasDocumentFormattingProvider","_hasDocumentSelectionFormattingProvider","_hasMultipleDocumentFormattingProvider","_hasMultipleDocumentSelectionFormattingProvider","_isInWalkThrough","_update","modes","bufferChangeEvents","_domFocusTracker","squigglyStart","squigglyEnd","getSquigglySVGData","dotdotdotStart","dotdotdotEnd","errorBorderColor","errorForeground","errorBackground","warningBorderColor","warningForeground","warningBackground","infoBorderColor","infoForeground","infoBackground","hintBorderColor","hintForeground","getDotDotDotSVGData","unnecessaryForeground","unnecessaryBorder","deprecatedForeground","DiffEntry","originalLineStart","originalLineEnd","modifiedLineStart","modifiedLineEnd","Diff","diffReviewInsertIcon","diffReviewRemoveIcon","diffReviewCloseIcon","DiffReview","diffEditor","_diffEditor","actionBarContainer","_actionBar","_content","onDidUpdateDiff","_diffs","_compute","_goToRow","_getNextRow","_getPrevRow","_currentDiff","currentIndex","_findDiffIndex","doLayout","jumpToLineNumber","_getCurrentFocusedRow","revealPosition","_getFirstRow","nextElementSibling","lineChanges","getLineChanges","originalModel","getOriginalEditor","modifiedModel","_mergeAdjacent","originalLineCount","modifiedLineCount","diffs","diffsLength","lineChange","originalStartLineNumber","modifiedStartLineNumber","modifiedEndLineNumber","originalEqualAbove","modifiedEqualAbove","minOriginal","minModified","prevLineChange","fromOriginal","fromModified","originalEqualBelow","modifiedEqualBelow","maxOriginal","maxModified","nextLineChange","toOriginal","toModified","thisDiff","currLast","thisFirst","getType","originalOptions","modifiedOptions","originalModelOpts","modifiedModelOpts","diffIndex","minOriginalLine","maxOriginalLine","minModifiedLine","maxModifiedLine","diffEntry","originalChangedLinesCnt","modifiedChangedLinesCnt","getAriaLines","originalChangedLinesCntAria","modifiedChangedLinesCntAria","modLine","_renderSection","rowClassName","lineNumbersExtraClassName","spacerIcon","cnt","originalLayoutInfo","originalLineNumbersWidth","modifiedLayoutInfo","modifiedLineNumbersWidth","originalLine","modifiedLine","originalLineNumber","modifiedLineNumber","spacer","spacerCodicon","Uint32Array","DiffReviewNext","findFocusedDiffEditor","diffReviewNext","DiffReviewPrev","diffReviewPrev","diffEditors","listDiffEditors","activeCodeEditor","InlineDiffMargin","_viewZoneId","_marginDomNode","_contextMenuService","_clipboardService","_diffActions","lineFeed","deletedText","copyLineAction","currentLineNumberOffset","showContextMenu","autoSelectFirstItem","pad","_updateLightBulbPosition","lineNumberOffset","acc","VisualEditorState","_inlineDiffMargins","_zonesMap","allViewZones","z","viewChangeAccessor","zoneId","restoreScrollState","inlineDiffMargin","viewZone","restore","overviewZones","DIFF_EDITOR_ID","diffInsertIcon","diffRemoveIcon","DiffEditorWidget","clipboardService","editorWorkerService","contextMenuService","_editorProgressService","_onDidUpdateDiff","_lastOriginalWarning","_lastModifiedWarning","_editorWorkerService","_updatingDiffProgress","_renderSideBySide","renderSideBySide","_maxComputationTime","maxComputationTime","_ignoreTrimWhitespace","ignoreTrimWhitespace","_renderIndicators","renderIndicators","_originalIsEditable","originalEditable","_diffCodeLens","diffCodeLens","_diffWordWrap","validateDiffWordWrap","diffWordWrap","isInEmbeddedEditor","_renderOverviewRuler","renderOverviewRuler","_updateDecorationsRunner","_updateDecorations","_containerDomElement","_overviewViewportDomElement","_overviewDomElement","_modifiedEditor","_originalDomNode","_modifiedDomNode","_beginUpdateDecorationsTimeout","_currentlyChangingViewZones","_diffComputationToken","_originalEditorState","_modifiedEditorState","_isHandlingScrollEvent","_onDidContainerSizeChanged","automaticLayout","_diffComputationResult","_originalEditor","_createLeftHandSideEditor","originalEditor","_createRightHandSideEditor","modifiedEditor","_originalOverviewRuler","_modifiedOverviewRuler","_reviewPane","_enableSplitViewResizing","enableSplitViewResizing","_setStrategy","DiffEditorWidgetSideBySide","_createDataSource","DiffEditorWidgetInline","_strategy","applyColors","addDiffEditor","_layoutOverviewRulers","_createInnerEditor","_adjustOptionsForLeftHandSide","_layoutOverviewViewport","_onViewZonesChanged","_beginUpdateDecorationsSoon","isInDiffLeftEditorKey","ONE_OVERVIEW_WIDTH","_adjustOptionsForRightHandSide","isInDiffRightEditorKey","editorWidgetOptions","removeDiffEditor","_cleanViewZonesAndDecorations","renderSideBySideChanged","beginUpdateDecorations","_beginUpdateDecorations","setEnableSplitViewResizing","_recreateOverviewRulers","getVisibleColumnFromPosition","revealLine","revealLineInCenter","revealLineInCenterIfOutsideViewport","revealLineNearTop","revealPositionInCenter","revealPositionInCenterIfOutsideViewport","revealPositionNearTop","revealLines","revealLinesInCenter","revealLinesInCenterIfOutsideViewport","revealLinesNearTop","revealRangeInCenter","revealRangeInCenterIfOutsideViewport","revealRangeNearTop","revealRangeNearTopIfOutsideViewport","revealRangeAtTop","getSupportedActions","diffEditorState","_doLayout","reviewHeight","_getReviewHeight","freeSpace","ENTIRE_DIFF_OVERVIEW_WIDTH","getLayoutInfo","setLayout","UPDATE_DIFF_DECORATIONS_DELAY","currentOriginalModel","currentModifiedModel","currentToken","canComputeDiff","computeDiff","clean","foreignOriginal","getForeignViewZones","foreignModified","diffDecorations","getEditorsDiffDecorations","clonedOptions","inDiffEditor","folding","codeLens","fixedOverflowWidgets","_adjustOptionsForSubEditor","wordWrapOverride1","originalAriaLabel","modifiedAriaLabel","revealHorizontalRightPadding","splitPoint","_computeOverviewViewport","computedRatio","getContainerDomNode","relayoutEditors","newStrategy","startLineNumberExtractor","midStart","midEnd","_getLineChangeAtOrBeforeLineNumber","originalEquivalentLineNumber","modifiedEquivalentLineNumber","lineChangeOriginalLength","lineChangeModifiedLength","equivalentLineNumber","_getEquivalentLineForOriginalLineNumber","_getEquivalentLineForModifiedLineNumber","DiffEditorWidgetStyle","dataSource","_dataSource","_insertColor","_removeColor","newInsertColor","newRemoveColor","hasChanges","originalWhitespaces","modifiedWhitespaces","_getViewZones","originalDecorations","_getOriginalEditorDecorations","modifiedDecorations","_getModifiedEditorDecorations","ForeignViewZonesIterator","_index","ViewZonesComputer","_lineChanges","_originalForeignVZ","_modifiedForeignVZ","getViewRange","originalLineHeight","modifiedLineHeight","originalHasWrapping","modifiedHasWrapping","hasWrapping","originalCoordinatesConverter","modifiedCoordinatesConverter","originalEndEquivalentLineNumber","modifiedEndEquivalentLineNumber","sortMyViewZones","addAndCombineIfPossible","lastItem","modifiedForeignVZ","originalForeignVZ","lastOriginalLineNumber","lastModifiedLineNumber","_getViewLineCount","stepOriginal","stepModified","originalViewLineCount","modifiedViewLineCount","viewZoneLineNumber","_createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion","isChangeOrInsert","_produceOriginalFromDiff","isChangeOrDelete","_produceModifiedFromDiff","stepOriginalIndex","stepModifiedIndex","originalDelta","modifiedDelta","shouldNotShrink","_ensureDomNodes","createFakeLinesDiv","createDecoration","DECORATIONS","charDelete","charDeleteWholeLine","charInsert","charInsertWholeLine","lineInsert","lineInsertWithSign","lineDelete","lineDeleteWithSign","lineDeleteMargin","_disableSash","_sashRatio","_sashPosition","_startSashPosition","_sash","_onSashDragStart","_onSashDrag","_onSashDragEnd","_onSashReset","newDisableSash","sashRatio","sashPosition","midPoint","MINIMUM_EDITOR_WIDTH","SideBySideViewZonesComputer","getViewZones","overviewZoneColor","originalViewModel","charChanges","charChange","originalStartColumn","getLineFirstNonWhitespaceColumn","originalEndColumn","getLineLastNonWhitespaceColumn","modifiedViewModel","modifiedStartColumn","modifiedEndColumn","InlineViewZonesComputer","_originalModel","_pendingLineChange","_pendingViewZones","_lineBreaksComputer","_finalize","modifiedEditorOptions","disableMonospaceOptimizations","scrollBeyondLastColumn","lineDecorationsWidth","lineBreakIndex","hasCharChanges","maxCharsPerLine","renderedLineCount","actualDecorations","lastBreakOffset","viewLineTokens","viewLineContent","_renderOriginalLine","marginDomNode2","marginElement","absoluteOffsets","added","removed","addedOutline","removedOutline","scrollbarSliderBackgroundColor","scrollbarSliderHoverBackgroundColor","scrollbarSliderActiveBackgroundColor","diffDiagonalFillColor","defaultOptions","followsCaret","ignoreCharChanges","alwaysRevealFirst","DiffNavigator","_onDidUpdate","nextIdx","ignoreSelectionChange","revealFirst","_onDiffUpdated","_init","rhs","fwd","found","canNavigate","_initIdx","ReplaceCommand","builder","helper","srcRange","ReplaceCommandThatSelectsText","ReplaceCommandWithoutChangingPosition","ReplaceCommandWithOffsetCursorState","lineNumberDeltaOffset","columnDeltaOffset","_columnDeltaOffset","_lineNumberDeltaOffset","ReplaceCommandThatPreservesSelection","editRange","initialSelection","_initialSelection","_forceMoveMarkers","_selectionId","repeatCache","cachedStringRepeat","ShiftCommand","_opts","_useLastEditRangeForCursorEndPosition","_selectionStartColumnStaysPut","insertSpaces","contentStartVisibleColumn","startLine","endLine","shouldIndentEmptyLines","useTabStops","previousLineExtraSpaces","extraSpaces","desiredIndent","indentationEndIndex","isUnshift","isCheapToTokenize","enterAction","autoIndent","appendText","removeText","unshiftIndent","shiftIndent","_addEditOperation","oneIndent","lastOp","initialStartColumn","TabFocus","_tabFocus","_onDidChangeTabFocus","onDidChangeTabFocus","tabFocusMode","ComputedEditorOptions","RawEditorOptions","EditorConfiguration2","editorOption","_write","_read","_deepEquals","somethingChanged","deepCloneAndMigrateOptions","autoClosingBrackets","autoClosingQuotes","autoSurround","cursorBlinking","acceptSuggestionOnEnter","tabCompletion","suggest","filteredTypes","mapping","hover","parameterHints","matchBrackets","migrateOptions","CommonEditorConfiguration","_onDidChangeFast","_isDominatedByLongLines","_computeOptionsMemory","_viewLineCount","_lineNumbersDigitCount","_rawOptions","_readOptions","readOptions","validateOptions","oldOptions","_computeInternalOptions","changeEvent","checkEquals","partialEnv","_getEnvConfiguration","memory","lineNumbersDigitCount","getTabFocusMode","computeOptions","subset","subsetValue","baseValue","_subsetEquals","_newOptions","_digitCount","editorConfigurationBaseNode","scope","configurationRegistry","editorConfiguration","minimum","markdownDescription","enum","enumDescriptions","markdownEnumDescriptions","anyOf","cachedEditorConfigurationKeys","getEditorConfigurationKeys","isEditorConfigurationKey","isDiffEditorConfigurationKey","registerConfiguration","MINIMAP_GUTTER_WIDTH","ConfigurationChangedEvent","ValidatedEditorOptions","ComputeOptionsMemory","stableMinimapLayoutInput","stableFitMaxMinimapScale","stableFitRemainingWidth","BaseEditorOption","ComputedEditorOption","deps","SimpleEditorOption","boolean","EditorBooleanOption","EditorIntOption","maximum","clampedInt","EditorFloatOption","validationFn","float","EditorStringOption","stringSet","allowedValues","EditorStringEnumOption","_allowedValues","EditorEnumOption","defaultStringValue","convert","_convert","TextEditorCursorStyle","EditorFontLigatures","OFF","ON","EditorFontWeight","EDITOR_FONT_DEFAULTS","MINIMUM_VALUE","MAXIMUM_VALUE","errorMessage","SUGGESTION_VALUES","EditorLayoutInfoComputer","computeLayout","typicalViewportLineCount","extraLinesBeyondLastLine","desiredRatio","couldUseMemory","renderCharacters","minimapRenderCharacters","minimapMaxColumn","minimapSize","baseCharHeight","minimapWidthMultiplier","computeContainedMinimapLineCount","fitBecomesFill","maxMinimapScale","effectiveMinimapHeight","configuredMinimapScale","minimapMaxWidth","wordWrapOverride2","wordWrapColumn","showGlyphMargin","showLineNumbers","lineNumbersMinChars","verticalScrollbarHasArrows","scrollbarArrowSize","rawLineDecorationsWidth","multiple","digitCount","isWordWrapMinified","_computeMinimapLayout","viewportColumn","verticalArrowSize","filterValidationDecorations","renderValidationDecorations","_scrollbarVisibilityFromString","EDITOR_MODEL_DEFAULTS","detectIndentation","trimAutoWhitespace","largeFileOptimizations","editorOptionsRegistry","EditorOptions","acceptSuggestionOnCommitCharacter","autoClosingDelete","autoClosingOvertype","codeLensFontFamily","codeLensFontSize","colorDecorators","comments","insertSpace","ignoreEmptyLines","_input","contextmenu","copyWithSyntaxHighlighting","cursorBlinkingStyle","cursorSmoothCaretAnimation","cursorStyle","Block","Underline","LineThin","BlockOutline","UnderlineThin","cursorSurroundingLines","cursorSurroundingLinesStyle","cursorWidth","disableLayerHinting","domReadOnly","dragAndDrop","cursorMoveOnType","seedSearchStringFromSelection","autoFindInSelection","globalFindClipboard","addExtraSpaceOnTop","included","foldingStrategy","foldingHighlight","unfoldOnClickAfterEndOfLine","fontLigatures2","formatOnPaste","formatOnType","glyphMargin","gotoLocation","multipleDefinitions","multipleTypeDefinitions","multipleDeclarations","multipleImplementations","multipleReferences","alternativeDefinitionCommand","alternativeTypeDefinitionCommand","alternativeDeclarationCommand","alternativeImplementationCommand","alternativeReferenceCommand","jsonSubset","alternativeCommandOptions","deprecationMessage","hideCursorInOverviewRuler","highlightActiveIndentGuide","linkedEditing","mouseStyle","mouseWheelZoom","multiCursorModifier","multiCursorPaste","occurrencesHighlight","overviewRulerBorder","cycle","peekWidgetDefaultFocus","definitionLinkOpensInPeek","quickSuggestions","quickSuggestionsDelay","renameOnType","markdownDeprecationMessage","renderIndentGuides","renderFinalNewline","renderLineHighlightOnlyWhenFocus","roundedSelection","columnSchema","selectionClipboard","selectionHighlight","showFoldingControls","showUnused","showDeprecated","inlineHints","snippetSuggestions","smartSelect","selectLeadingAndTrailingWhitespace","insertMode","filterGraceful","snippetsPreventQuickSuggestions","localityBonus","shareSuggestSelections","showIcons","showStatusBar","showInlineDetails","showMethods","showFunctions","showConstructors","showFields","showVariables","showClasses","showStructs","showInterfaces","showModules","showProperties","showEvents","showOperators","showUnits","showValues","showConstants","showEnums","showEnumMembers","showKeywords","showWords","showColors","showFiles","showReferences","showFolders","showTypeParameters","showSnippets","showUsers","showIssues","suggestFontSize","suggestLineHeight","suggestOnTriggerCharacters","suggestSelection","unusualLineTerminators","useShadowDOM","wordWrapBreakAfterCharacters","wordWrapBreakBeforeCharacters","editorClassName","EditorZoom","GOLDEN_LINE_HEIGHT_RATIO","BareFontInfo","ignoreEditorZoom","editorZoomLevelMultiplier","FontInfo","AtomicTabMoveOperations","lineLength","prevTabStopPosition","prevTabStopVisibleColumn","whitespaceVisibleColumn","currentVisibleColumn","targetVisibleColumn","autoCloseAlways","autoCloseNever","autoCloseBeforeWhitespace","CursorConfiguration","languageIdentifier","modelOptions","_languageIdentifier","surroundingPairs","_electricChars","shouldAutoCloseBefore","_getShouldAutoClose","bracket","_getSurroundingPairs","pair","electricChars","_getElectricCharacters","autoCloseConfig","_getLanguageDefinedShouldAutoClose","autoCloseBeforeSet","SingleCursorState","_computeSelection","CursorContext","PartialModelCursorState","PartialViewCursorState","CursorState","fromModelState","fromModelSelection","EditOperationResult","CursorColumns","lineContentLength","nextRenderTabStop","visibleColumnFromColumn","beforeVisibleColumn","beforeColumn","afterVisibleColumn","columnFromVisibleColumn","isQuote","DeleteOperations","prevEditOperationType","deleteSelection","rightOfPosition","autoClosingPairsOpen","character","autoClosingPairCandidates","afterCharacter","foundAutoClosingPair","autoClosingPairCandidate","autoClosedCharacter","isAutoClosingPairDelete","autoClosingPairsOpenByEnd","_runAutoClosingPairDelete","lastIndentationColumn","toColumn","leftOfPosition","CursorMoveCommands","useLogicalLine","_moveToLineStart","currentViewStateColumn","isFirstLineOfWrappedLine","currentViewStatelineNumber","firstNonBlankColumn","_moveToLineStartByModel","_moveToLineStartByView","_moveToLineEnd","viewStatePosition","viewModelMaxColumn","isEndOfViewLine","modelStatePosition","modelMaxColumn","isEndLineOfWrappedLine","_moveToLineEndByModel","_moveToLineEndByView","selectToLineNumber","selectToColumn","enteringLineNumber","selectToViewLineNumber","selectToViewColumn","endPositionOfSelectionStart","_moveHalfLineLeft","_moveLeft","_moveHalfLineRight","_moveRight","_moveUpByViewLines","_moveUpByModelLines","_moveDownByViewLines","_moveDownByModelLines","_moveToViewMinColumn","_moveToViewFirstNonWhitespaceColumn","_moveToViewCenterColumn","_moveToViewMaxColumn","_moveToViewLastNonWhitespaceColumn","_firstLineNumberInRange","_moveToModelPosition","_lastLineNumberInRange","findPositionInViewportIfOutside","_moveToViewPosition","noOfColumns","hasMultipleCursors","skipWrappingPointStop","newViewState","halfLine","toViewColumn","toModelLineNumber","toModelColumn","cursorMoveArg","Left","Right","PrevBlankLine","NextBlankLine","WrappedLineStart","WrappedLineFirstNonWhitespaceCharacter","WrappedLineColumnCenter","WrappedLineEnd","WrappedLineLastNonWhitespaceCharacter","ViewPortTop","ViewPortCenter","ViewPortBottom","ViewPortIfOutside","Character","HalfLine","CursorPosition","MoveOperations","leftPosition","leftPositionAtomicSoftTabs","rightPosition","rightPositionAtomicSoftTabs","allowMoveOnLastLine","wasOnLastPosition","down","allowMoveOnFirstLine","wasOnFirstPosition","up","_isBlankLine","lastColumn","SurroundSelectionCommand","charBeforeSelection","charAfterSelection","_charBeforeSelection","_charAfterSelection","firstOperationRange","secondOperationRange","TypeOperations","indentation","typeSelection","distributedPaste","_distributePasteToCursors","_distributedPaste","_simplePaste","expectedIndentAction","expectedEnterAction","Indent","normalizeIndentation","typeText","spacesCnt","goodIndent","_goodIndentForLine","possibleTypeText","_replaceJumpToNextIndent","lineMaxColumn","keepPosition","_typeCommand","indentAction","normalIndent","increasedIndent","actualIndentation","ir","oldEndViewColumn","oldEndColumn","newLineContent","firstNonWhitespace","setEndPosition","afterEnter","currentIndentation","chIsQuote","lineAfter","potentialStartingBraces","autoClosingPairsOpenByStart","potentialClosingBraces","autoClosingPairsCloseByStart","isBeforeStartingBrace","isBeforeClosingBrace","autoClosingPair","candidateIsMatch","lastChar","subPairCandidates","autoClosingPairsCloseByEnd","subPairMatch","insertOpenCharacter","_findAutoClosingPairOpen","subAutoClosingPairClose","_findSubAutoClosingPairClose","isSubAutoClosingPairPresent","characterAfter","_isBeforeClosingBrace","forceTokenization","shouldAutoClosePair","autoClosingPairClose","TypeWithAutoClosingCommand","_shouldSurroundChar","isTypingAQuoteCharacter","selectionContainsOnlyWhitespace","selectedText","selectionText","closeCharacter","electricAction","matchOpenBracket","findMatchingBracketUp","matchLine","matchLineIndentation","newIndentation","lineFirstNonBlankColumn","selectionsWhenCompositionStarted","currentChar","_isAutoClosingOvertype","_getAutoClosingPairClose","_runAutoClosingOpenCharType","_enter","_isAutoIndentType","autoIndentFails","_runAutoIndentType","_runAutoClosingOvertype","_isSurroundSelectionType","_runSurroundSelectionType","_isTypeInterceptorElectricChar","_typeInterceptorElectricChar","openCharacter","_openCharacter","_closeCharacter","WordOperations","wordType","nextCharClass","_doFindPreviousWordOnLine","chIndex","chClass","_createWord","_findEndOfWord","_doFindNextWordOnLine","_findStartOfWord","wordNavigationType","prevWordOnLine","_findPreviousWordOnLine","rightRight","movedDown","nextWordOnLine","_findNextWordOnLine","lastNonWhitespace","whitespaceHeuristics","_deleteWordLeftWhitespace","_deleteInsideWordWhitespace","_deleteInsideWordDetermineDeleteRange","leftIndex","_charAtIsWhitespace","rightIndex","touchesWord","createRangeWithPosition","deleteWordAndAdjacentWhitespace","expandedToTheRight","toPosition","_moveWordPartLeft","_findFirstNonWhitespaceChar","_deleteWordRightWhitespace","_moveWordPartRight","_wordSeparators","prevWord","_createWordAtPosition","possiblePosition","WordPartOperations","candidates","enforceDefined","deleteWordLeft","_deleteWordPartLeft","deleteWordRight","_deleteWordPartRight","moveWordLeft","moveWordRight","WordCharacterClassifier","getMapForWordSeparators","computeFn","CharacterClassifier","_createAsciiMap","asciiMap","CharacterSet","EditOperation","LineTokens","_tokensCount","slicedEquals","sliceFromTokenIndex","sliceTokenCount","findIndexInTokensArray","SlicedLineTokens","lineTextLength","lastTokenIndex","desiredIndex","_startOffset","_endOffset","_deltaOffset","_firstTokenIndex","getStartOffset","tokenEndOffset","getInlineStyle","Position","newLineNumber","newColumn","deltaColumn","aLineNumber","bLineNumber","containsRange","otherRange","resultStartLineNumber","resultStartColumn","resultEndLineNumber","resultEndColumn","otherStartLineNumber","otherStartColumn","otherEndLineNumber","otherEndColumn","collapseToStart","aStartLineNumber","bStartLineNumber","aStartColumn","bStartColumn","aEndLineNumber","bEndLineNumber","Selection","selectionsEqual","_utf16LE_TextDecoder","_utf16BE_TextDecoder","_platformTextDecoder","getUTF16LE_TextDecoder","getPlatformTextDecoder","createStringBuilder","decodeUTF16LE","compatDecodeUTF16LE","capacity","StringBuilder","CompatStringBuilder","_completedStrings","_bufferLength","_flushBuffer","_buildBuffer","bufferString","remainingSpace","_pieces","_piecesLen","Token","TokenizationResult","endState","TokenizationResult2","InternalEditorAction","_precondition","_run","isThemeColor","EditorType","ICodeEditor","IDiffEditor","EditorContextKeys","editorSimpleInput","editorTextFocus","textInputFocus","toNegated","hasNonEmptySelection","hasOnlyEmptySelection","hasSingleSelection","tabMovesFocus","tabDoesNotMoveFocus","isInWalkThroughSnippet","hoverVisible","inCompositeEditor","notInCompositeEditor","hasCompletionItemProvider","hasCodeActionsProvider","hasCodeLensProvider","hasDefinitionProvider","hasDeclarationProvider","hasImplementationProvider","hasTypeDefinitionProvider","hasHoverProvider","hasDocumentHighlightProvider","hasDocumentSymbolProvider","hasReferenceProvider","hasRenameProvider","hasSignatureHelpProvider","hasInlineHintsProvider","hasDocumentFormattingProvider","hasDocumentSelectionFormattingProvider","hasMultipleDocumentFormattingProvider","hasMultipleDocumentSelectionFormattingProvider","OverviewRulerLane","MinimapPosition","TextModelResolvedOptions","defaultEOL","FindMatch","ValidAnnotatedEditOperation","ApplyEditsResult","reverseEdits","trimAutoWhitespaceLineNumbers","uriGetComparisonKey","SingleModelEditStackData","beforeVersionId","afterVersionId","beforeEOL","afterEOL","beforeCursorState","afterCursorState","alternativeVersionId","getAlternativeVersionId","getModelEOL","textChanges","necessarySize","_writeSelectionsSize","writeSize","_writeSelections","_readSelections","changeCount","SingleModelEditStackElement","deserialize","_applyUndo","_applyRedo","isEditStackElement","editStackElements","_isOpen","_editStackElementsArr","_editStackElementsMap","editStackElement","prepareUndoRedo","canAppend","heapSize","EditStack","undoRedoService","_undoRedoService","lastElement","getLastElement","removeElements","newElement","pushElement","_getOrCreateEditStackElement","setEOL","editOperations","applyEdits","_computeCursorState","textChange","oldPosition","escapeNewLine","TextChange","oldText","newText","_writeStringSize","_writeString","_readString","compressConsecutiveTextChanges","prevEdits","currEdits","TextChangeCompressor","compress","_prevEdits","_currEdits","_resultLen","_prevLen","_prevDeltaOffset","_currLen","_currDeltaOffset","prevEdit","_getPrev","currEdit","_getCurr","_acceptCurr","_acceptPrev","oldEnd","newEnd","_splitCurr","_splitPrev","mergePrev","mergeCurr","newLength","merged","_merge","_removeNoOps","_rebaseCurr","_rebasePrev","prevDeltaOffset","currDeltaOffset","preText","postText","SpacesDiffResult","spacesDiff","looksLikeAlignment","aLength","bLength","aSpacesCnt","aTabsCount","bSpacesCnt","bTabsCount","tabsDiff","guessIndentation","defaultTabSize","defaultInsertSpaces","linesIndentedWithTabsCount","linesIndentedWithSpacesCount","previousLineText","previousLineIndentation","ALLOWED_TAB_SIZE_GUESSES","spacesDiffCount","currentLineLength","currentLineText","useCurrentLineText","currentLineHasContent","currentLineIndentation","currentLineSpacesCount","currentLineTabsCount","getLineCharCode","currentSpacesDiff","tabSizeScore","possibleTabSize","possibleTabSizeScore","getNodeColor","setNodeColor","getNodeIsVisited","setNodeIsVisited","getNodeIsForValidation","setNodeIsForValidation","getNodeIsInOverviewRuler","setNodeIsInOverviewRuler","_setNodeStickiness","setCollapseOnReplaceEdit","IntervalNode","maxEnd","cachedVersionId","cachedAbsoluteStart","cachedAbsoluteEnd","collapseOnReplaceEdit","absoluteStart","absoluteEnd","SENTINEL","IntervalTree","requestNormalizeDelta","filterOwnerId","T","intervalStart","intervalEnd","nodeMaxEnd","nodeStart","nodeEnd","setCachedOffsets","include","intervalSearch","collectNodesFromOwner","collectNodesPostOrder","rbTreeInsert","_normalizeDeltaIfNecessary","rbTreeDelete","initialNode","textLength","nodesOfInterest","searchForEditing","editDelta","recomputeMaxEnd","noOverlapReplace","nodeAcceptEdit","normalizeDelta","adjustMarkerBeforeColumn","markerOffset","markerStickToPreviousCharacter","checkOffset","moveSemantics","nodeStickiness","getNodeStickiness","startStickToPreviousCharacter","endStickToPreviousCharacter","deletingCnt","insertingCnt","commonLength","startDone","endDone","getCollapseOnReplaceEdit","zAbsoluteStart","zAbsoluteEnd","intervalCompare","treeInsert","recomputeMaxEndWalkToRoot","rightRotate","leftest","detach","resetSentinel","yWasRed","computeMaxEnd","leftMaxEnd","rightMaxEnd","TreeNode","piece","size_left","lf_left","righttest","calculateSize","calculateLF","tree","rbDelete","recomputeTreeMetadata","newSizeLeft","newLFLeft","lf_delta","updateTreeMetadata","fixInsert","lineFeedCntDelta","AverageBufferSize","createUintArray","LineStarts","lineStarts","cr","lf","crlf","createLineStartsFast","readonly","Piece","bufferIndex","StringBuffer","PieceTreeSnapshot","BOM","_tree","_BOM","iterate","getPieceContent","PieceTreeSearchCache","nodePos","nodeStartOffset","nodeStartLineNumber","nodePosition","hasInvalidVal","newArr","PieceTreeBase","chunks","eolNormalized","_lastChangeBufferPos","_lineCnt","_length","_EOL","_EOLLength","_EOLNormalized","lastNode","rbInsertRight","_searchCache","_lastVisitedLine","computeBufferMetadata","averageBufferSize","tempChunk","tempChunkLen","getNodeContent","newEOL","normalizeEOL","leftLen","lfCnt","originalOffset","nodeAt2","getValueInRange2","offsetInBuffer","currentLine","danglingCR","pieceLength","pieceStartLine","pieceEndLine","pieceStartOffset","getLineRawContent","matchingNode","targetOffset","_getCharCode","getLength","searcher","startCursor","endCursor","searchData","captureMatches","limitResultCount","searchText","startOffsetInBuffer","positionInBuffer","getLineFeedCnt","retStartColumn","retEndColumn","searchRange","findMatchesInNode","currentNode","lineBreakCnt","nextLineStartOffset","_findMatchesInLine","simpleSearch","searchStringLen","lastMatchIndex","nodeAt","insertPosInBuffer","appendToNode","insertContentToNodeLeft","nodesToDel","newRightPiece","shouldCheckCRLF","endWithCR","nodeCharCodeAt","newStart","startWithLF","previousPos","deleteNodeTail","newPieces","createNewPieces","tmpNode","deleteNodes","insertContentToNodeRight","pieces","rbInsertLeft","startNode","startSplitPosInBuffer","endSplitPosInBuffer","validateCRLFWithPrevNode","deleteNodeHead","validateCRLFWithNextNode","shrinkNode","nPiece","adjustCarriageReturnFromNext","midStop","previousCharOffset","nodes","splitText","endPos","newPiece","get2","prevAccumulatedValue","lineCnt","realLineCnt","expectedLineStartIndex","originalLFCnt","originalEndOffset","newEndOffset","newLineFeedCnt","size_delta","originalStartOffset","originalStartPos","originalEndPos","oldLFCnt","hitCRLF","prevStartOffset","oldLineFeedCnt","prevAccumualtedValue","offsetOfNode","newOffset","nextNode","fixCRLF","prevNewLength","prevNewLFCnt","leftRet","currentContent","prevNode","PieceTreeTextBuffer","_onDidChangeContent","_mightContainNonBasicASCII","_mightContainRTL","_mightContainUnusualLineTerminators","_pieceTree","createSnapshot","_getEndOfLine","fromOffset","toOffset","getValueLengthInRange","recordTrimAutoWhitespace","computeUndoEdits","mightContainUnusualLineTerminators","canReduceOperations","validatedRange","textMightContainNonBasicASCII","validText","eolCount","firstLineLength","lastLineLength","strEOL","bufferEOL","expectedStrEOL","sortIndex","rangeOffset","rangeLength","_sortOpsAscending","hasTouchingRanges","rangeEnd","nextRangeStart","_reduceOperations","reverseRanges","_getInverseEditRanges","newTrimAutoWhitespaceCandidates","reverseRange","currentLineContent","oldContent","reverseOperations","reverseRangeDeltaOffset","bufferText","reverseRangeOffset","contentChanges","_doApplyEdits","prevContent","_toSingleEditOperation","firstEditRange","lastEditRange","entireEditRange","lastEndLineNumber","lastEndColumn","operation","_sortOpsDescending","contentChangeRange","findMatchesLineByLine","prevOpEndLineNumber","prevOpEndColumn","prevOp","resultRange","PieceTreeTextBufferFactory","_chunks","_bom","_cr","_lf","_crlf","_containsRTL","_containsUnusualLineTerminators","_isBasicASCII","_normalizeEOL","totalEOLCount","totalCRCount","_getEOL","newLineStart","textBuffer","PieceTreeTextBufferBuilder","_hasPreviousChar","_previousChar","_tmpLineStarts","chunk","_acceptChunk1","allowEmptyStrings","_acceptChunk2","createLineStarts","_finish","lastChunk","newLineStarts","ModelRawFlush","ModelRawLineChanged","ModelRawLinesDeleted","ModelRawLinesInserted","ModelRawEOLChanged","ModelRawContentChangedEvent","InternalModelContentChangeEvent","rawContentChangedEvent","contentChangedEvent","_mergeChangeEvents","isFlush","TokenizationStateStore","_beginState","_valid","_invalidLineStartIndex","initialState","_setBeginState","_reset","beginState","valid","_ensureLine","_setValid","previousEndState","getBeginState","_invalidateLine","deletingLinesCnt","insertingLinesCnt","_acceptDeleteRange","_acceptInsertText","_deleteLines","_insertLines","TextModelTokenization","textModel","_textModel","_tokenizationStateStore","_tokenizationSupport","changedLanguages","_resetTokenizationState","clearTokens","onDidChangeContentFast","_beginBackgroundTokenization","onDidChangeAttached","tokenizationSupport","getInitialState","initializeTokenization","isAttachedToEditor","_hasLinesToTokenize","_revalidateTokensNow","sw","_tokenizeOneInvalidLine","setTokens","_tokenizeViewport","_updateTokensUntilLine","firstInvalidLineNumber","invalidLineStartIndex","lineStartState","safeTokenize","setEndState","nonWhitespaceColumn","fakeLines","newNonWhitespaceIndex","setFakeTokens","hasEOL","tokenize2","createTextBufferFactory","acceptChunk","finish","createTextBuffer","MODEL_ID","TextModelSnapshot","_eos","resultCnt","resultLength","BracketSearchCanceled","_searchCanceledBrand","stripBracketSearchCanceled","TextModel","creationOptions","associatedResource","_onWillDispose","_onDidChangeDecorations","DidChangeDecorationsEmitter","_onDidChangeLanguage","_onDidChangeLanguageConfiguration","_onDidChangeTokens","_onDidChangeOptions","_onDidChangeAttached","_eventEmitter","DidChangeContentEmitter","isForSimpleWidget","_associatedResource","_attachedEditorCount","_bufferDisposable","bufferLineCount","bufferTextLength","_isTooLargeForTokenization","LARGE_FILE_SIZE_THRESHOLD","LARGE_FILE_LINE_COUNT_THRESHOLD","_isTooLargeForSyncing","MODEL_SYNC_LIMIT","_alternativeVersionId","_initialUndoRedoSnapshot","_isDisposing","_languageRegistryListener","_lastDecorationId","_decorationsTree","DecorationsTrees","_commandManager","_isUndoing","_isRedoing","_trimAutoWhitespaceLines","_tokens2","_tokenization","guessedIndentation","fastEvent","slowEvent","emptyDisposedTextBuffer","rawChange","_assertNotDisposed","_setValueFromTextBuffer","textBufferDisposable","oldFullModelRange","getFullModelRange","oldModelValueLength","_increaseVersionId","_emitContentChangedEvent","_createContentChanged2","_onBeforeEOLChange","_onAfterEOLChange","allDecorations","_ensureNodesHaveRanges","smallLineCharCount","longLineCharCount","_newOpts","createChangeEvent","tabsCnt","_normalizeIndentationFromWhitespace","findMatches","resetMightContainUnusualLineTerminators","_validatePosition","rawOffset","newAlternativeVersionId","newInitialUndoRedoSnapshot","fullModelRange","fullModelValue","getBOM","rawRange","getCharacterCountInRange","initialStartLineNumber","initialEndLineNumber","initialEndColumn","validationType","charCodeBefore","_lineNumber","_column","_isValidPosition","charCodeBeforeStart","charCodeBeforeEnd","startInsideSurrogatePair","endInsideSurrogatePair","_isValidRange","rawSearchScope","searchRanges","searchScope","d1","d2","uniqueSearchRanges","matchMapper","parseSearchRequest","rawSearchStart","searchStart","beginDeferredEmit","pushEOL","endDeferredEmit","rawOperation","_validateEditOperation","_pushEditOperations","_validateEditOperations","incomingEdits","editsAreNearCursors","foundEditNearSel","selIsAbove","selIsBelow","trimLineNumber","allowTrimLine","editText","trimRange","pushEditOperation","resultingAlternativeVersionId","rangeStart","_applyUndoRedoEdits","_overwriteAlternativeVersionId","oldLineCount","newLineCount","rawContentChanges","acceptEdit","acceptReplace","editingLinesCnt","changeLineCountDelta","editLineNumber","currentEditLineNumber","spliceStartLineNumber","spliceLineNumber","_changeDecorations","addDecoration","_deltaDecorationsImpl","changeDecoration","_changeDecorationImpl","changeDecorationOptions","_changeDecorationOptionsImpl","_normalizeOptions","removeDecoration","newStickiness","TRACKED_RANGE_OPTIONS","_validateRangeRelaxedNoAllocations","decorationId","resolveNode","_getRangeAt","getLinesDecorations","_startLineNumber","_endLineNumber","_getDecorationsInRange","filterRange","getRangeAt","checkAffectedAndFire","nodeWasInOverviewRuler","nodeIsInOverviewRuler","oldDecorationsLen","oldDecorationIndex","newDecorationsLen","newDecorationIndex","internalDecorationId","newDecoration","minChangedLineNumber","maxChangedLineNumber","hasChange","_emitModelTokensChangedEvent","semanticTokensApplied","isComplete","hasCompleteSemanticTokens","changedRange","setPartial","_getLineTokens","syntacticTokens","getTokens","addSemanticTokens","oldLanguage","newLanguage","getLanguageId","rbStartOffset","rbEndOffset","_findLanguageBoundaries","rightBiasedWord","lbStartOffset","lbEndOffset","leftBiasedWord","tokenCount","getWordAtPosition","_bracket","bracketsSupport","textIsBracket","_findMatchingBracketUp","_matchBracket","modeBrackets","currentLanguageId","searchStartOffset","maxBracketLength","getStandardTokenType","searchEndOffset","tokenStartOffset","currentModeBrackets","_establishBracketSearchOffsets","bestResult","foundBracket","forwardRegex","foundBracketText","_matchFoundBracket","textIsOpenBracket","prevTokenIndex","prevModeBrackets","reversedRegex","isOpen","continueSearchPredicate","_findMatchingBracketDown","reversedBracketRegex","totalCallCount","searchPrevMatchingBracketInRange","hitText","isClose","prevSearchInToken","searchInToken","bracketRegex","searchNextMatchingBracketInRange","tokenLanguageId","_toFoundBracket","maxDuration","savedCounts","counts","resetCounts","brackets","searchInRange","computeIndentLevel","foldingRules","offSide","up_aboveContentLineIndex","up_aboveContentLineIndent","up_belowContentLineIndex","up_belowContentLineIndent","up_resolveIndents","_computeIndentLevel","down_aboveContentLineIndex","down_aboveContentLineIndent","down_belowContentLineIndex","down_belowContentLineIndent","down_resolveIndents","goUp","goDown","initialIndent","upLineNumber","downLineNumber","upLineIndentLevel","currentIndent","_getIndentLevelForWhitespaceLine","downLineIndentLevel","aboveContentLineIndex","aboveContentLineIndent","belowContentLineIndex","belowContentLineIndent","resultIndex","DEFAULT_CREATION_OPTIONS","_decorationsTree0","_decorationsTree1","r0","overviewRulerOnly","cleanClassName","DecorationOptions","darkColor","ModelDecorationOverviewRulerOptions","_resolvedColor","_resolveColor","ModelDecorationMinimapOptions","ModelDecorationOptions","hoverMessage","glyphMarginHoverMessage","createDynamic","_deferredCnt","_shouldFire","_affectsMinimap","_affectsOverviewRuler","_fastEmitter","_slowEmitter","_deferredEvent","SearchParams","nextChCode","isMultilineRegexSource","canUseSimpleSearch","SearchData","createFindMatch","rawMatches","LineFeedCounter","lineFeedsOffsets","lineFeedsOffsetsLen","textLen","_lineFeedsOffsets","TextModelSearch","searchParams","_doFindMatchesMultiline","Searcher","_doFindMatchesLineByLine","lfCounter","matchIndex","match0","lineFeedCountBeforeMatch","findLineFeedCountBeforeOffset","lineFeedCountInMatch","counter","_getMultilineMatchRange","isValidMatch","_doFindNextMatchMultiline","_doFindNextMatchLineByLine","searchTextStart","_findFirstMatchInLine","fromColumn","_doFindPreviousMatchMultiline","_doFindPreviousMatchLineByLine","_findLastMatchInLine","matchStartIndex","matchLength","firstCharInMatch","leftIsWordBounday","charAfter","lastCharInMatch","rightIsWordBounday","searchRegex","_searchRegex","_prevMatchStartIndex","_prevMatchLength","countEOL","lastLineStart","getDefaultMetadata","topLevelLanguageId","EMPTY_LINE_TOKENS","MultilineTokensBuilder","MultilineTokens","SparseEncodedTokens","_tokenCount","_getDeltaLine","_getStartCharacter","_getEndCharacter","_getTokenCount","startChar","maxDeltaLine","endChar","deltaLine","midDeltaLine","LineTokens2","startDeltaLine","endDeltaLine","newTokenCount","hasDeletedTokens","firstDeltaLine","srcOffset","tokenDeltaLine","tokenStartCharacter","tokenEndCharacter","tokenMetadata","aTokens","bTokens","destTokens","destFirstDeltaLine","horizontalShiftForFirstLineTokens","startCharacter","endCharacter","firstCharCode","isInsertingPreciselyOneWordCharacter","tokenLength","MultilineTokens2","getMaxDeltaLine","deltaRange","getRange","removeTokens","_updateEndLineNumber","bDeltaLine","firstLineIndex","deletedLinesCount","tokenMaxDeltaLine","deletedBefore","acceptDeleteRange","acceptInsertText","toUint32Array","TokensStore2","_isComplete","_firstRange","_lastRange","insertPosition","_findFirstPieceWithLine","aIndex","lastEndOffset","emitToken","bIndex","bStartCharacter","getStartCharacter","bEndCharacter","getEndCharacter","bMetadata","getMetadata","bMask","aMask","aMergeIndex","TokensStore","_lineTokens","rawLineTokens","hasDifferentLanguageId","checkEquality","_massageTokens","oldTokens","_deleteEnding","lastLineTokens","_deleteBeginning","_append","toChIndex","fromChIndex","tokensCount","fromTokenIndex","fromTokenStartOffset","lastEnd","_otherTokens","myTokens","otherTokens","otherTokensCount","USUAL_WORD_SEPARATORS","DEFAULT_WORD_REGEXP","allowInWords","createWordRegExp","ensureValidWordDefinition","wordDefinition","_defaultConfig","timeBudget","getWordAtText","textOffset","prevRegexIndex","regexIndex","thisMatch","_findRegexMatchEnclosingPosition","stopPos","LanguageIdentifier","TokenMetadata","getFontStyle","completionKindToCssClass","completionKindFromString","strict","SignatureHelpTriggerKind","DocumentHighlightKind","SymbolKinds","InlineHintKind","isLocationLink","originSelectionRange","targetSelectionRange","byName","byKind","toCssClassName","symbolName","FoldingRangeKind","Comment","Imports","Region","ReferenceProviderRegistry","RenameProviderRegistry","CompletionProviderRegistry","SignatureHelpProviderRegistry","HoverProviderRegistry","DocumentSymbolProviderRegistry","DocumentHighlightProviderRegistry","LinkedEditingRangeProviderRegistry","DefinitionProviderRegistry","DeclarationProviderRegistry","ImplementationProviderRegistry","TypeDefinitionProviderRegistry","CodeLensProviderRegistry","InlineHintsProviderRegistry","CodeActionProviderRegistry","DocumentFormattingEditProviderRegistry","DocumentRangeFormattingEditProviderRegistry","OnTypeFormattingEditProviderRegistry","LinkProviderRegistry","ColorProviderRegistry","SelectionRangeRegistry","FoldingRangeProviderRegistry","DocumentSemanticTokensProviderRegistry","DocumentRangeSemanticTokensProviderRegistry","TokenizationRegistry","_promises","_colorMap","languages","support","supportPromise","registration","isDisposed","IndentAction","StandardAutoClosingPairConditional","_standardTokenMask","notIn","standardToken","AutoClosingPairs","appendEntry","CharacterPairSupport","_autoClosingPairs","__electricCharacterSupport","docComment","_autoCloseBefore","autoCloseBefore","DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED","_surroundingPairs","getTokenCount","standardTokenType","isOK","BracketElectricCharacterSupport","richEditBrackets","_richEditBrackets","bracketText","textBeforeBracket","getActualLineContentBefore","resetGlobalRegex","reg","IndentRulesSupport","indentationRules","_indentationRules","increaseIndentPattern","decreaseIndentPattern","indentNextLinePattern","unIndentedLinePattern","shouldIncrease","shouldDecrease","shouldIndentNextLine","shouldIgnore","OnEnterSupport","_brackets","openRegExp","_createOpenBracketRegExp","closeRegExp","_createCloseBracketRegExp","_regExpRules","onEnterRules","beforeEnterText","afterEnterText","rule","beforeText","afterText","_safeRegExp","RichEditSupport","rawConf","_electricCharacter","_conf","_onEnterSupport","_handleComments","characterPair","wordPattern","indentRulesSupport","commentRule","lineComment","lineCommentToken","blockComment","blockStart","blockEnd","blockCommentStartToken","blockCommentEndToken","LanguageConfigurationChangeEvent","LanguageConfigurationEntry","LanguageConfigurationEntries","_resolved","_order","_resolve","LanguageConfigurationRegistry","_entries2","getRichEditSupport","_getRichEditSupport","electricCharacter","electricCharacterSupport","_getElectricCharacterSupport","getElectricCharacters","scopedLineTokens","onElectricCharacter","firstCharOffset","characterPairSupport","_getCharacterPairSupport","getAutoClosingPairs","getAutoCloseBeforeSet","getSurroundingPairs","languageID","getLanguageIdAtPosition","resultLineNumber","honorIntentialIndent","getIndentRulesSupport","precedingUnIgnoredLine","getPrecedingValidLine","precedingUnIgnoredLineContent","previousLine","previousLineIndentMetadata","getIndentMetadata","stopLine","virtualModel","indentConverter","richEditSupport","getInheritIndentForLine","inheritLine","enterResult","scopedLineText","embeddedLanguage","getScopedLineTokens","beforeEnterResult","beforeEnterIndent","currentLineIndent","afterEnterAction","beforeEnter","afterEnterIndent","beforeTypeText","afterTypeText","oneLineAboveScopedLineTokens","getIndentationAtPosition","columnNumber","candidateUri","candidateLanguage","candidateIsSynchronized","hasAccessToAllModels","normalizedPattern","isExclusive","exclusive","LanguageFeatureRegistry","_clock","provider","_score","_time","_lastCandidate","_updateScores","_orderedForEach","lastBucket","lastBucketScore","_compareByScoreAndTime","LanguageFeatureRequestDelays","avg","ModesRegistry","_onDidChangeLanguages","onDidChangeLanguages","_languages","_dynamicLanguages","PLAINTEXT_MODE_ID","PLAINTEXT_LANGUAGE_IDENTIFIER","registerLanguage","aliases","mimetypes","NULL_STATE","NULL_MODE_ID","NULL_LANGUAGE_IDENTIFIER","nullTokenize","modeId","nullTokenize2","createScopedLineTokens","desiredLanguageId","firstTokenIndex","ScopedLineTokens","lastCharOffset","_lastTokenIndex","_lastCharOffset","ignoreBracketsInToken","RichEditBracket","_openSet","_toSet","_closeSet","RichEditBrackets","N","areOverlapping","aOpen","aClose","bOpen","bClose","mergeGroups","g1","g2","newG","oldG","currentOpen","currentClose","groupFuzzyBrackets","collectSuperstrings","unique","lengthcmp","createBracketOrRegExp","getRegexForBracketPair","toReversedString","getReversedRegexForBracketPair","getRegexForBrackets","getReversedRegexForBrackets","prepareBracketForRegExp","insertWordBoundaries","regexStr","lastInput","lastOutput","BracketsUtils","reversedText","matchOffset","absoluteMatchOffset","reversedSubstr","_findPrevBracketInText","findNextBracketInText","fallback","tokenizeToString","tokenizationResult","_tokenizeToString","tokenizeLineToHTML","useNbsp","partContent","IEditorWorkerService","encodeSemanticTokensDto","semanticTokens","deltas","encodeSemanticTokensDtoSize","uint8Arr","b0","b1","b2","b3","reverseEndianness","toLittleEndianBuffer","isSemanticTokens","isSemanticTokensEdits","getDocumentSemanticTokens","lastResultId","_getDocumentSemanticTokensProvider","provideDocumentSemanticTokens","getDocumentRangeSemanticTokensProvider","getLegend","resultId","releaseDocumentSemanticTokens","provideDocumentRangeSemanticTokens","IMarkerDecorationsService","IModeService","IModelService","shouldSynchronizeModel","isTooLargeForSyncing","computeModelSha1","shaComputer","digest","_modelEventListeners","_languageSelection","_languageSelectionListener","_disposeLanguageSelection","languageSelection","setMode","DEFAULT_EOL","DisposedModelInfo","initialUndoRedoSnapshot","sharesUndoRedoStack","sha1","ModelServiceImpl","_configurationService","_resourcePropertiesService","_logService","_onModelAdded","onModelAdded","_onModelRemoved","onModelRemoved","_onModelModeChanged","onModelModeChanged","_modelCreationOptionsByLanguageAndResource","_models","_disposedModels","_disposedModelsHeapSize","_semanticStyling","SemanticStyling","_updateModelOptions","SemanticColoringFeature","parsedTabSize","parsedIndentSize","newDefaultEOL","overrideIdentifier","_readModelOptions","oldOptionsByLanguageAndResource","modelId","getCreationOptions","_setModelOptionsForModel","currentOptions","disposedModelData","maxModelsHeapSize","disposedModels","disposedModel","_removeDisposedModel","restoreSnapshot","sha1IsEqual","past","matchesResource","future","setElementsValidFlag","_overwriteVersionId","_overwriteInitialUndoRedoSnapshot","_createModelData","setLanguage","getUriComparisonKey","maintainUndoRedoStack","_shouldRestoreUndoStack","maxMemory","MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK","getInitialUndoRedoSnapshot","_ensureDisposedModelsHeapSize","_insertDisposedModel","oldModeId","newModeId","SEMANTIC_HIGHLIGHTING_SETTING_ID","isSemanticColoringEnabled","configurationService","setting","semanticHighlighting","modelService","semanticStyling","_watchers","ModelSemanticColoring","deregister","modelSemanticColoring","handleSettingOrThemeChange","getModels","affectsConfiguration","_caches","SemanticTokensResponse","_provider","stylingProvider","_fetchDocumentSemanticTokens","_fetchDocumentSemanticTokensNow","FETCH_DOCUMENT_SEMANTIC_TOKENS_DELAY","_currentDocumentResponse","_currentDocumentRequestCancellationTokenSource","_documentProvidersChangeListeners","_setDocumentSemanticTokens","bindDocumentChangeListeners","cancellationTokenSource","setSemanticTokens","pendingChanges","contentChangeListener","styling","currentResponse","rescheduleIfNeeded","deltaLength","srcData","destData","srcLastStart","destLastStart","copyCount","_copy","area","singleChange","applyEdit","ITextModelService","SemanticTokensProviderStyling","_legend","_hashTable","HashTable","_hasWarnedOverlappingTokens","tokenTypeIndex","tokenModifierSet","getLevel","tokenType","tokenTypes","tokenModifiers","modifierSet","modifierIndex","tokenStyle","getTokenStyleMetadata","underline","toMultilineTokens2","tokensPerArea","lastStartCharacter","tokenStartIndex","smallTokenEndIndex","bigTokenEndIndex","areaLine","prevLineNumber","prevStartCharacter","prevEndCharacter","deltaCharacter","warnOverlappingSemanticTokens","HashTableEntry","_elementsCount","_currentLengthIndex","_currentLength","_SIZES","_growCount","_nullOutEntries","n1","n2","_hash2","_hashFunc","oldElements","oldNext","_add","ITextResourceConfigurationService","ITextResourcePropertiesService","AccessibilityHelpNLS","InspectTokensNLS","GoToLineNLS","QuickHelpNLS","QuickCommandNLS","QuickOutlineNLS","StandaloneCodeEditorNLS","ToggleHighContrastNLS","SimpleServicesNLS","noSelection","singleSelectionRange","singleSelection","multiSelectionRange","multiSelection","emergencyConfOn","openingDocs","readonlyDiffEditor","editableDiffEditor","readonlyEditor","editableEditor","changeConfigToOnMac","changeConfigToOnWinLinux","auto_on","auto_off","tabFocusModeOnMsg","tabFocusModeOnMsgNoKb","tabFocusModeOffMsg","tabFocusModeOffMsgNoKb","openDocMac","openDocWinLinux","outroMsg","showAccessibilityHelpAction","inspectTokensAction","gotoLineActionLabel","helpQuickAccessActionLabel","quickCommandActionLabel","quickCommandHelp","quickOutlineActionLabel","quickOutlineByCategoryActionLabel","editorViewAccessibleLabel","accessibilityHelpMessage","toggleHighContrast","bulkEditServiceSummary","editorLineHighlight","dark","light","hc","editorLineHighlightBorder","editorRangeHighlight","editorRangeHighlightBorder","editorSymbolHighlight","editorSymbolHighlightBorder","editorCursorForeground","editorCursorBackground","editorWhitespaces","editorIndentGuides","editorActiveIndentGuides","editorLineNumbers","deprecatedEditorActiveLineNumber","editorActiveLineNumber","editorRuler","editorCodeLensForeground","editorBracketMatchBackground","editorBracketMatchBorder","editorOverviewRulerBorder","editorOverviewRulerBackground","editorGutter","editorUnnecessaryCodeBorder","editorUnnecessaryCodeOpacity","rulerRangeDefault","overviewRulerRangeHighlight","overviewRulerError","overviewRulerWarning","overviewRulerInfo","gutter","rangeHighlight","rangeHighlightBorder","symbolHighlight","symbolHighlightBorder","invisibles","ColorZone","OverviewRulerZone","_colorZone","colorZone","OverviewZoneManager","getVerticalOffsetForLine","_getVerticalOffsetForLine","_colorZonesInvalid","_domWidth","_domHeight","_outerHeight","_pixelRatio","_lastAssignedId","_color2Id","_id2Color","newZones","colorZonesInvalid","totalHeight","halfMinimumHeight","allColorZones","getColorZones","ycenter","halfHeight","setColorZone","LineDecoration","lineDecorations","minLineColumn","ORDER","typeCmp","_typeCompare","DecorationSegment","Stack","stopOffsets","maxStopOffset","nextStartOffset","_metadata","stopOffset","LineDecorationsNormalizer","currentStartOffset","currentEndOffset","consumeLowerThan","LinePart","LineRange","otherLineRange","RenderLineInput","fauxIndentLength","renderSpaceWidth","renderSpaceCharCode","otherSelections","sameSelection","CharacterMapping","partCount","_absoluteOffsets","partAbsoluteOffset","partLength","searchEntry","midEntry","minEntry","maxEntry","maxCharIndex","minPartIndex","getPartIndex","minCharIndex","RenderLineOutput","renderViewLine","beforeCount","afterCount","lineDecoration","setPartData","fontIsMonospace","isOverflowing","partDisplacement","prevPartContentCnt","partEndIndex","partType","partRendersWhitespace","partRendersWhitespaceWithWidth","partIsEmptyAndHasPseudoAfter","partContentCnt","_charIndex","_visibleColumn","transformAndRemoveOverflowing","onlyBoundary","onlyTrailing","generateLinePartForEachWhitespace","tokensLength","lineIsEmptyOrWhitespace","wasInWhitespace","currentSelectionIndex","tmpIndent","isInWhitespace","generateWhitespace","lastCharCode","_applyRenderWhitespace","_lineDecorations","lineDecorationsLen","lineDecorationIndex","lastResultEndIndex","lastTokenEndIndex","_applyInlineDecorations","onlyAtSpaces","lastSpaceOffset","currTokenStart","piecesCount","pieceEndIndex","splitLargeTokens","ResolvedRenderLineInput","resolveRenderLineInput","RenderLineOutput2","renderViewLine2","PrefixSumIndexOfResult","PrefixSumComputer","prefixSumValidIndex","oldValues","oldPrefixSum","insertValuesLen","maxCnt","_getAccumulatedValue","Viewport","OutputPosition","LineBreakData","inputOffset","MinimapLinesRenderingData","ViewLineData","ViewLineRenderingData","InlineDecoration","ViewModelDecoration","ExtensionIdentifier","_lower","alertFormattingEdits","getRealAndSyntheticDocumentFormattersOrdered","docFormatter","formatter","extensionId","rangeFormatter","displayName","provideDocumentFormattingEdits","provideDocumentRangeFormattingEdits","FormattingConflicts","_selectors","formatDocumentRangesWithSelectedProvider","editorOrModel","rangeOrRanges","progress","instaService","formatDocumentRangesWithProvider","workerService","allEdits","rawEdits","getFormattingOptions","minEdits","computeMoreMinimalEdits","formatDocumentWithSelectedProvider","formatDocumentWithProvider","getOnTypeFormattingEdits","providers","autoFormatTriggerCharacters","provideOnTypeFormattingEdits","catch","getDocumentRangeFormattingEditsUntilResult","getDocumentFormattingEditsUntilResult","FormattingEdit","newEol","singleEdits","_edits","addUndoStops","_handleEolEdits","_isFullModelReplaceEdit","AccessibilitySupport","CompletionItemInsertTextRule","CompletionItemKind","CompletionItemTag","CompletionTriggerKind","ContentWidgetPositionPreference","CursorChangeReason","DefaultEndOfLine","EditorAutoIndentStrategy","EditorOption","EndOfLinePreference","EndOfLineSequence","KeyCode","MarkerSeverity","MarkerTag","MouseTargetType","OverlayWidgetPositionPreference","RenderLineNumbersType","RenderMinimap","ScrollType","ScrollbarVisibility","SelectionDirection","SymbolKind","SymbolTag","TextEditorCursorBlinkingStyle","TrackedRangeStickiness","WrappingIndent","KeyMod","createMonacoBaseAPI","CtrlCmd","Shift","Alt","WinCtrl","EditorOpenContext","CommandOpener","allowCommands","EditorOpener","_editorService","openCodeEditor","fromUserGesture","USER","API","editorOptions","openToSide","OpenerService","editorService","_openers","_validators","_resolvers","_resolvedUriTargets","_externalOpeners","_defaultExternalOpener","openExternal","_doOpenExternal","opener","validator","resolver","externalOpener","targetURI","validationTarget","shouldOpen","resolveExternalUri","allowContributedOpeners","preferredOpenerId","sourceUri","INITIALIZE","webWorkerWarningLogged","logOnceWebWorkerWarning","SimpleWorkerProtocol","_workerId","_lastSentReq","_pendingReplies","workerId","req","_send","vsWorker","_handleMessage","seq","replyMessage","requestMessage","handleMessage","transfer","sendMessage","SimpleWorkerClient","workerFactory","moduleId","lazyProxyReject","_worker","_protocol","setWorkerId","loaderConfiguration","require","getConfig","requirejs","contexts","hostMethods","_onModuleLoaded","proxyMethodRequest","_request","_lazyProxy","availableMethods","_onError","createScriptURL","WebWorker","onMessageCallback","onErrorCallback","workerOrPromise","wokerUrl","Worker","getWorker","worker","onmessage","onmessageerror","terminate","DefaultWorkerFactory","_webWorkerFailedBeforeError","LAST_WORKER_ID","LineSequence","startColumns","endColumns","getFirstNonBlankColumn","getLastNonBlankColumn","_startColumns","_endColumns","shouldIgnoreTrimWhitespace","charCodes","columns","col","CharSequence","_charCodes","_lineNumbers","_columns","CharChange","diffChange","originalCharSequence","modifiedCharSequence","getStartColumn","getEndColumn","LineChange","originalLineSequence","modifiedLineSequence","continueCharDiff","shouldComputeCharChanges","shouldPostProcessCharChanges","createCharSequence","rawChanges","currChange","originalMatchingLength","modifiedMatchingLength","postProcessCharChanges","createFromDiffChange","DiffComputer","originalLines","modifiedLines","shouldMakePrettyDiff","continueLineDiff","createContinueProcessingPredicate","diffResult","createFromDiffResult","originalLineIndex","modifiedLineIndex","nextChange","_pushTrimWhitespaceCharChange","originalMaxColumn","modifiedMaxColumn","_mergeTrimWhitespaceCharChange","txt","maximumRuntime","Uint8Matrix","cols","StateMachine","edges","maxCharCode","maxState","_maxCharCode","_stateMachine","_classifier","LinkComputer","linkBeginIndex","linkEndIndex","lastIncludedCharIndex","charCodeBeforeLink","lastCharCodeInLink","stateMachine","getStateMachine","FORCE_TERMINATION_CHARACTERS","CANNOT_END_WITH_CHARACTERS","getClassifier","linkBeginChCode","hasOpenParens","hasOpenSquareBracket","inSquareBrackets","hasOpenCurlyBracket","resetStateMachine","_createLink","nextState","BasicInplaceReplace","_defaultValueSet","range1","text1","range2","text2","doNavigateValueSet","numberResult","numberReplace","textReplace","precision","valueSetsReplace","valueSets","valueSetReplace","valueSet","MirrorModel","_uri","_eol","_lineStarts","_cachedTextValue","eolLength","lineStartValues","_setLineText","insertText","newLengths","getText","wordAtText","wordenize","_wordenize","wordRangesIdx","wordRanges","words","_validateRange","resultLines","_ensureLineStarts","maxCharacter","EditorSimpleWorker","foreignModuleFactory","_foreignModuleFactory","_foreignModule","EOL","strURL","onEvents","originalUrl","modifiedUrl","_getModel","identical","_modelsAreIdentical","modelUrl","lastEol","_diffLimit","editOffset","offsetAt","newEdit","computeLinks","modelUrls","leadingWord","wordDef","wordDefFlags","wordDefRegExp","outer","_suggestionsLimit","getLineWords","wordRange","navigateValueSet","createData","foreignHostMethods","fhr","getMirrorModels","_getModels","STOP_WORKER_DELTA_TIME_MS","canSyncModel","EditorWorkerServiceImpl","_modelService","_workerManager","WorkerManager","provideLinks","withWorker","client","WordBasedCompletionItemProvider","computeWordRanges","workerManager","_debugDisplayName","wordBasedSuggestions","models","wordBasedSuggestionsMode","textualSuggest","_editorWorkerClient","_lastWorkerUsedTime","_checkStopIdleWorker","_checkStopEmptyWorker","EditorWorkerClient","EditorModelManager","proxy","keepIdleModels","_syncedModels","_syncedModelsLastUsedTime","_proxy","_checkStopModelSync","STOP_SYNC_MODEL_DELTA_TIME_MS","resources","resourceStr","_beginModelSync","_stopModelSync","acceptNewModel","toDispose","acceptModelChanged","acceptRemovedModel","SynchronousWorkerClient","_instance","_proxyObj","EditorWorkerHost","workerClient","_workerClient","_keepIdleModels","_workerFactory","_modelManager","_getOrCreateWorker","getProxyObject","_getProxy","_getOrCreateModelManager","ensureSyncedResources","_withSyncedResources","MonacoWebWorkerImpl","_foreignModuleId","_foreignModuleCreateData","_foreignModuleHost","_foreignProxy","loadForeignModule","foreignMethods","fmr","foreignProxy","foreignMethod","_getForeignProxy","getProxy","isFuzzyAction","what","isFuzzyActionArr","isIAction","fixCase","createError","substituteMatches","stateMatches","full","sub","dollar","ofs","findRules","inState","MonarchStackElementFactory","maxCacheDepth","_maxCacheDepth","MonarchStackElement","stackElementId","getStackElementId","EmbeddedModeData","MonarchLineStateFactory","embeddedModeData","MonarchLineState","MonarchClassicTokensCollector","_lastTokenType","_lastTokenLanguage","embeddedModeLine","offsetDelta","nestedModeId","embeddedModeState","nestedModeTokenizationSupport","enterMode","nestedResult","tokenize","MonarchModernTokensCollector","modeService","_modeService","_prependTokens","_currentLanguageId","_lastTokenMetadata","MonarchTokenizer","standaloneThemeService","_standaloneThemeService","_modeId","_lexer","_embeddedModes","embeddedLoaded","emitting","_tokenizationRegistryListener","isOneOfMyEmbeddedModes","nestedModeStatus","getLoadStatus","loaded","tokenizationSupportPromise","rootState","lineState","tokensCollector","endLineState","_tokenize","tokenTheme","_nestedTokenize","_myTokenize","popOffset","hasEmbeddedPopRule","nextEmbedded","regexSource","matchOnlyAtLineStart","_findLeavingNestedModeOffset","nestedEndState","nestedModeTokenize","nestedModeLine","restOfTheLine","lineWithoutLF","lineWithoutLFLength","includeLF","groupMatching","forceEvaluation","pos0","stackLen0","groupLen0","enteringEmbeddedMode","groupEntry","restOfLine","defaultToken","tokenSubst","goBack","switchTo","_safeRuleName","maxStack","popall","computeNewStateForEmbeddedMode","enteringEmbeddedModeId","getModeIdForLanguageName","_getNestedEmbeddedModeData","totalLen","rest","findBracket","tokenPostfix","mimetypeOrModeId","_locateMode","isRegisteredMode","getModeId","triggerMode","bracketType","Colorizer","mimeType","setTheme","nodeValue","colorize","_fakeColorize","_colorize","inflatedTokens","colorizeLine","tokenizeResult","renderResult","_actualColorize","ConfigurationModel","_contents","_overrides","checkAndFreeze","section","contents","overrideContents","getContentsForOverrideIdentifer","contentsForKey","overrideContentsForKey","objects","mergeContents","overrides","others","otherOverride","override","identifiers","addKey","removeKey","DefaultConfigurationModel","_defaultConfiguration","_localUserConfiguration","_remoteUserConfiguration","_workspaceConfiguration","_folderConfigurations","_memoryConfiguration","_memoryConfigurationByResource","_freeze","_workspaceConsolidatedConfiguration","_foldersConsolidatedConfigurations","_userConfiguration","workspace","getConsolidateConfigurationModel","memoryConfiguration","removeValue","configurationModel","getConsolidatedConfigurationModelForResource","consolidateConfiguration","getWorkspaceConsolidatedConfiguration","getFolder","getFolderConsolidatedConfiguration","memoryConfigurationForResource","userConfiguration","folderConsolidatedConfiguration","workspaceConsolidateConfiguration","folderConfiguration","folders","defaultConfiguration","parseConfigurationModel","workspaceConfiguration","ConfigurationChangeEvent","currentConfiguraiton","currentWorkspace","_previousConfiguration","keysSet","affectedKeys","affectedKeysTree","doesAffectedKeysTreeContains","value1","previousConfiguration","value2","requestedTree","AbstractKeybindingService","_telemetryService","_onDidUpdateKeybindings","_currentChord","_currentChordChecker","_currentChordStatusMessage","_currentSingleModifier","_currentSingleModifierClearTimeout","_logging","_getResolver","getKeybindings","lookupPrimaryKeybinding","resolvedKeybinding","_dispatch","resolveKeyboardEvent","isChord","getDispatchParts","contextValue","currentChord","keypress","keypressLabel","chordEnterTime","_documentHasFocus","_leaveChordMode","_doDispatch","singleModifier","getSingleModifierDispatchParts","_log","isSingleModiferChord","shouldPreventDefault","dispatchKeyname","getLabel","resolveResult","enterChord","_enterChordMode","hideAfter","bubble","commandArgs","KeybindingResolver","defaultKeybindings","_defaultKeybindings","_defaultBoundCommands","_lookupMap","_keybindings","keypressParts","_addKeyPress","defaultKb","keypressFirstPart","keypressChordPart","rawOverrides","_isTargetedForRemoval","conflicts","_addToLookupMap","conflict","conflictIsChord","itemIsChord","whenIsEntirelyIncluded","_removeFromLookupMap","_implies","terminals","negate","notA","lookupMap","_findCommand","printWhenExplanation","printSourceExplanation","leaveChord","kb","isBuiltinExtension","ResolvedKeybindingItem","removeElementsAfterNulls","BaseResolvedKeybinding","os","_os","_parts","_getLabel","_getPart","_getDispatchPart","_getSingleModifierDispatchPart","USLayoutResolvedKeybinding","isDuplicateModifierCase","_keyCodeToUILabel","getDispatchStr","SimpleModel","SimpleEditorModelResolverService","codeEditorCallback","diffEditorCallback","findModel","SimpleEditorProgressService","NULL_PROGRESS_RUNNER","worked","SimpleDialogService","confirmation","doConfirm","confirmed","checkboxChecked","messageText","confirm","choice","SimpleNotificationService","notify","notification","NO_OP","StandaloneCommandService","_onWillExecuteCommand","_onDidExecuteCommand","StandaloneKeybindingService","telemetryService","_cachedResolver","_dynamicKeybindings","keyEvent","_singleModifierDispatch","_keybinding","weight1","weight2","updateResolver","_toNormalizedKeybindingItems","resolvedKeybindings","resolveKeybinding","keyboardEvent","toChord","isConfigurationOverrides","SimpleConfigurationService","toData","changedKeys","updateValue","configurationChangeEvent","sourceConfig","SimpleResourceConfigurationService","arg3","SimpleResourcePropertiesService","StandaloneTelemetryService","publicLog","SimpleWorkspaceContextService","SCHEME","updateConfigurationService","toUpdate","updateValues","SimpleBulkEditService","textEdits","totalEdits","totalFiles","ariaSummary","SimpleUriLabelService","SimpleLayoutService","onDidLayout","_dimension","AbstractCodeEditorService","_onCodeEditorAdd","onCodeEditorAdd","_onCodeEditorRemove","onCodeEditorRemove","_onDiffEditorAdd","_onDiffEditorRemove","_onDecorationTypeRegistered","_modelProperties","_codeEditors","_diffEditors","editorWithWidgetFocus","editors","listCodeEditors","key1","RefCountedStyleSheet","styleSheet","_parent","_styleSheet","_refCount","_removeEditorStyleSheets","GlobalStyleSheet","CodeEditorServiceImpl","_decorationOptionProviders","_editorStyleSheets","_globalStyleSheet","_getOrCreateGlobalStyleSheet","refCountedStyleSheet","parentTypeKey","_getOrCreateStyleSheet","providerArgs","DecorationSubTypeOptionsProvider","DecorationTypeOptionsProvider","refCount","ed","removeDecorations","_parentTypeKey","_beforeContentRules","DecorationCSSRules","_afterContentRules","resolveDecorationOptions","unref","_disposables","createCSSRules","hasContent","inlineData","hasLetterSpacing","createInlineCSSRules","rangeBehavior","lightOverviewRulerColor","overviewRulerColor","darkOverviewRulerColor","overviewRulerLane","_CSS_MAP","opacity","outline","outlineColor","outlineStyle","outlineWidth","borderRadius","borderSpacing","textDecoration","gutterIconPath","gutterIconSize","contentText","contentIconPath","ruleType","_ruleType","_providerArgs","_usesThemeColors","_hasContent","_hasLetterSpacing","CSSNameHelper","_unThemedSelector","getSelector","_buildCSS","_themeListener","_removeCSS","unthemedCSS","lightCSS","darkCSS","getCSSTextForModelDecorationClassName","getCSSTextForModelDecorationInlineClassName","getCSSTextForModelDecorationGlyphMarginClassName","getCSSTextForModelDecorationContentClassName","removeRulesContainingSelector","cssTextArr","collectCSSText","collectBorderSettingsCSSText","lenBefore","resolveValue","parentKey","StandaloneCodeEditorServiceImpl","_checkContextKey","_editorIsOpen","_activeCodeEditor","hasCodeEditor","sideBySide","doOpenEditor","LAST_GENERATED_COMMAND_ID","ariaDomNodeCreated","StandaloneCodeEditor","keybindingService","_standaloneKeybindingService","whenExpression","addDynamicKeybinding","_descriptor","keybindings","keybindingsWhen","keybindingContext","contextMenuGroupId","contextMenuOrder","uniqueId","menuItem","setActiveCodeEditor","StandaloneEditor","contextViewService","themeDomRegistration","registerEditorContainer","autoDetectHighContrast","setAutoDetectHighContrast","_contextViewService","createTextModel","_ownsModel","setContainer","StandaloneDiffEditor","editorProgressService","addCommand","createContextKey","addAction","firstLF","doCreateModel","createByFilepathOrFirstLine","createModel","FrankensteinMode","MIME_TEXT","MIME_UNKNOWN","registeredAssociations","nonUserRegisteredAssociations","userRegisteredAssociations","registerTextMime","association","warnOnOverwrite","associationItem","filename","filepattern","firstline","userConfigured","filenameLowercase","extensionLowercase","filepatternLowercase","filepatternOnPath","toTextMimeAssociationItem","guessMimeTypes","configuredMime","guessMimeTypeByPath","registeredMime","firstlineMime","guessMimeTypeByFirstline","associations","filenameMatch","patternMatch","extensionMatch","LanguagesRegistry","useModesRegistry","_warnOnOverwrite","_nextLanguageId2","_languageIdToLanguage","_languageToLanguageId","_mimeTypesMap","_nameMap","_lowercaseNameMap","_initializeFromRegistry","_registerLanguages","_registerLanguage","langId","mimetype","registerOverrideIdentifiers","resolvedLanguage","_getLanguageId","filenames","configurationFiles","_mergeLanguage","primaryMime","filenamePatterns","filenamePattern","firstLineRegexStr","firstLineRegex","langAliases","langAlias","containsAliases","bestName","languageNameLower","commaSeparatedMimetypesOrCommaSeparatedIds","mimeTypeOrId","mimeTypes","extractModeIds","LanguageSelection","onLanguagesMaybeChanged","_selector","_evaluate","ModeServiceImpl","_onDidCreateMode","onDidCreateMode","_onLanguagesMaybeChanged","_instantiatedModes","getModeIdForLanguageNameLowercase","modeIds","getModeIdsFromFilepathOrFirstLine","_createModeAndGetLanguageIdentifier","getModeIdByFilepathOrFirstLine","_getOrCreateMode","ParsedTokenThemeRule","colorRegExp","ColorMap","_lastColorId","_id2color","_color2id","TokenTheme","customTokenColors","createFromParsedTokenTheme","parseTokenTheme","parsedThemeRules","strcmp","defaultFontStyle","defaultForeground","defaultBackground","incomingDefaults","foregroundColorId","backgroundColorId","ThemeTrieElementRule","ThemeTrieElement","resolveParsedTokenThemeRules","getColorMap","STANDARD_TOKEN_TYPE_REGEXP","toStandardTokenType","_fontStyle","_foreground","_background","mainRule","_mainRule","_children","dotIndex","acceptOverwrite","vs","inherit","vs_dark","hc_black","VS_THEME_NAME","VS_DARK_THEME_NAME","HC_BLACK_THEME_NAME","themingRegistry","StandaloneTheme","standaloneThemeData","themeData","isBuiltinTheme","themeName","defaultColors","_tokenTheme","baseData","getBuiltinRules","useDefault","getColors","getDefault","resolveDefaultColor","encodedTokensColors","createFromRawTokenTheme","modelLanguage","builtinTheme","newBuiltInTheme","StandaloneThemeServiceImpl","_onColorThemeChange","_environment","_autoDetectHighContrast","_knownThemes","iconsStyleSheet","onDidChangeEmmiter","usedFontIds","formatIconRule","getIcon","fontId","fontContribution","getIconFont","getIcons","getIconsStyleSheet","_codiconCSS","getCSS","_themeCSS","_allCSS","_globalStyleElement","_styleElements","_colorMapOverride","_updateCSS","_updateActualTheme","_registerShadowDomContainer","_registerRegularEditorContainer","notifyBaseUpdated","colorMapOverride","_updateThemeOrColorMap","_desiredTheme","hasRule","ruleCollector","getThemingParticipants","generateTokensCSSForColorMap","hasFileIcons","hasFolderIcons","hidesExplorerArrows","KEYBINDING_CONTEXT_ATTR","Context","NullContext","ConfigAwareContextValuesContainer","allKeys","ArrayContextKeyChangeEvent","configKey","contextKey","cachedItems","findSuperstr","deleteSuperstr","_keyPrefix","configValue","ContextKey","service","_service","setContext","removeContext","getContextKeyValue","SimpleContextKeyChangeEvent","CompositeContextKeyChangeEvent","affectsSome","AbstractContextKeyService","myContextId","_onDidChangeContext","onDidChangeContext","_myContextId","pause","resume","ScopedContextKeyService","getContextValuesContainer","myContext","NaN","findContextAttr","ContextKeyService","_contexts","_lastContextId","contextId","parentContextId","createChildContext","_parentChangeListener","_updateParentChangeListener","extraInfo","disposeContext","localeCompare","LayoutAnchorMode","layoutAfterAnchorBoundary","ALIGN","layoutBeforeAnchorBoundary","ContextView","domPosition","toDisposeOnClean","toDisposeOnSetContainer","shadowRootHostElement","useFixedPosition","attachShadow","SHADOW_ROOT_CSS","BUBBLE_UP_EVENTS","onDOMEvent","BUBBLE_DOWN_EVENTS","canRelayout","elementPosition","viewSizeWidth","viewSizeHeight","anchorPosition","anchorAxisAlignment","verticalAnchor","pageYOffset","horizontalAnchor","AVOID","containerPosition","onCapture","MENU_MNEMONIC_REGEX","MENU_ESCAPED_MNEMONIC_REGEX","menuSelectionIcon","menuSubmenuIcon","Direction","Menu","menuElement","doGetActionViewItem","parentData","menuDisposables","initializeStyleSheet","enableMnemonics","toLocaleLowerCase","mnemonics","SubmenuMenuActionViewItem","focusItemByElement","relatedTarget","lastFocusedItem","setFocusedItem","scrollElement","submenuIds","MenuSeparatorActionViewItem","updatePositionInSet","MENU_WIDGET_CSS","globalStyleSheet","fgColor","foregroundColor","bgColor","shadowColor","BaseMenuActionViewItem","menuActionViewItem","mnemonic","getMnemonic","actionViewItems","menuItemOptions","getKeyBinding","keybindingLabel","runOnceToEnableMouseUp","cssSelector","applyStyle","setSize","cleanLabel","mnemonicInText","cleanMnemonic","escMatch","replaceDoubleEscapes","menuStyle","isSelected","selectionForegroundColor","selectionBackgroundColor","selectionBorderColor","submenuActions","submenuOptions","mysubmenu","submenuDisposables","mouseOver","expandDirection","showScheduler","cleanupExistingSubmenu","createSubmenu","hideScheduler","submenu","updateAriaExpanded","submenuIndicator","submenuContainer","windowDimensions","selectFirstItem","computedStyles","entryBox","entryBoxUpdated","viewBox","calculateSubmenuMenuLayout","borderBottomColor","separatorColor","ContextMenuHandler","focusToReturn","blockMouse","shadowRootElement","domForShadowRoot","getMenuClassName","onActionRun","onDidActionRun","getActionViewItem","getActionsContext","lookupKeybinding","defaultPrevented","didCancel","ContextMenuService","contextMenuHandler","ILayoutService","ContextViewService","layoutService","currentViewDisposable","contextView","getViewElement","incoming","outgoing","Graph","_hashFn","_nodes","fromNode","lookupOrInsertNode","toNode","_findCycle","CyclicDependencyError","findCycleSlow","InstantiationService","services","_activeInstantiations","_services","_trace","Trace","traceInvocation","_done","isOptional","_getOrCreateServiceInstance","ctorOrDescriptor","traceCreation","_createInstance","staticArguments","serviceDependencies","serviceArgs","dependency","optional","firstServiceArgPos","_setServiceInstance","instanceOrDesc","_getServiceInstanceOrDescriptor","_safeCreateAndCacheServiceInstance","branch","_createAndCacheServiceInstance","cycleCount","insertEdge","roots","_createServiceInstanceWithOwner","supportsDelayedInstantiation","removeNode","_createServiceInstance","_supportsDelayedInstantiation","idle","Proxy","_target","_start","_dep","_None","dur","_totals","causedCreation","printChild","nested","DoubleResourceMap","_byResource","_byOwner","owner","ownerMap","resourceMap","removedA","removedB","MarkerStats","infos","warnings","unknowns","_subscription","onMarkerChanged","oldStats","_substract","newStats","_resourceStats","MarkerService","_onMarkerChanged","_debouncer","_stats","changeOne","markerData","markers","marker","_toMarker","relatedInformation","tags","severities","take","_accept","newLen","_dedupeMap","MenuService","emitEventsForSubmenuChanges","_fireEventsForSubmenuChanges","_menuService","_dispoables","_menuGroups","_contextKeys","_build","rebuildMenuSoon","fireChangeSoon","menuItems","_compareMenuItems","groupName","_collectContextKeys","_fillInKbExprKeys","toggled","toggledExpression","activeActions","exp","aGroup","bGroup","aPrio","bPrio","_compareTitles","aStr","bStr","MarkerDecorations","_markersData","oldIds","MarkerDecorationsService","_markerService","_onDidChangeMarker","_markerDecorations","_handleMarkerChange","markerDecorations","getMarker","changedResources","newModelDecorations","_createDecorationRange","_createDecorationOption","rawMarker","_hasMarkerTag","MAX_VALUE","AccessibilityService","_onDidChangeScreenReaderOptimized","_accessibilityModeEnabledContext","updateContextKey","BrowserClipboardService","mapTextToType","findText","DEBUG","getResourceLabel","stackElementCounter","ResourceStackElement","resourceLabel","strResource","groupId","groupOrder","sourceId","sourceOrder","confirmBeforeUndo","resourceLabels","strResources","ResourceReasonPair","RemovedResources","externalRemoval","noParallelUniverses","messages","WorkspaceStackElement","removedResources","invalidatedResources","ResourceEditStack","_past","_future","locked","removeResource","setValid","_setElementValidFlag","futureElement","snapshotLength","snapshotIndex","removePastAfter","removeFutureBefore","individualMap","EditStackSnapshot","editStacks","_versionIds","missingEditStack","UndoRedoService","_dialogService","_editStacks","_uriComparisonKeyComputers","uriComparisonKeyComputer","_pushElement","nextOrder","editStack","hasFutureElements","closestPastElement","getClosestPastElement","ignoreResources","individualArr","splitPastWorkspaceElement","splitFutureWorkspaceElement","hasPastElements","matchedElement","matchedStrResource","resourceOrSource","_findClosestUndoElementWithSource","editStackSnapshot","cleanup","continuation","releaseLocks","_acquireLocks","affectedEditStacks","canSplit","_splitPastWorkspaceElement","WorkspaceVerificationError","_undo","checkInvalidatedResources","_tryToSplitAndUndo","createMessage","cannotUndoDueToResources","cannotLockDueToResources","undoConfirmed","_getAffectedEditStacks","verificationError","_checkWorkspaceUndo","_confirmAndExecuteWorkspaceUndo","pastElement","secondPastElement","getSecondClosestPastElement","_isPartOfUndoGroup","cancelId","verificationError1","_invokeWorkspacePrepare","verificationError2","moveBackward","_safeInvokeWithLocks","_continueUndoInGroup","_invokeResourcePrepare","flushAllElements","_findClosestUndoElementInGroup","_confirmAndContinueUndo","_workspaceUndo","_resourceUndo","getClosestFutureElement","_findClosestRedoElementWithSource","_splitFutureWorkspaceElement","_redo","_tryToSplitAndRedo","cannotRedoDueToResources","_checkWorkspaceRedo","_executeWorkspaceRedo","moveForward","_continueRedoInGroup","_findClosestRedoElementInGroup","_workspaceRedo","_resourceRedo","intlFileNameCollatorBaseNumeric","collator","Intl","Collator","sensitivity","collatorIsNumeric","resolvedOptions","compareAnything","lookFor","elementAName","elementBName","prefixCompare","elementAPrefixMatch","elementBPrefixMatch","compareByPrefix","elementASuffixMatch","compareFileNames","iconPathToClass","iconClassGenerator","getIconClass","iconPath","iconClass","nextId","KeybindingLabel","keyElements","labelBackground","keybindingLabelBackground","labelForeground","keybindingLabelForeground","labelBorder","keybindingLabelBorder","labelBottomBorder","keybindingLabelBottomBorder","labelShadow","keybindingLabelShadow","areSame","getParts","renderPart","renderUnboundKeybindings","renderUnbound","renderKey","createKeyElement","extraClass","keyElement","ListElement","_onChecked","onChecked","ListElementRenderer","toDisposeElement","toDisposeTemplate","row1","row2","keybindingContainer","detailContainer","actionBar","labelHighlights","descriptionHighlights","detailHighlights","saneDescription","iconClasses","saneLabel","saneDetail","cssClasses","alwaysVisible","fireButtonTriggered","ListElementDelegate","QuickInputListFocus","QuickInputList","inputElements","elementsToIndexes","matchOnDescription","matchOnDetail","matchOnLabel","matchOnMeta","sortByLabel","_onChangedAllVisibleChecked","onChangedAllVisibleChecked","_onChangedCheckedCount","onChangedCheckedCount","_onChangedVisibleCount","onChangedVisibleCount","_onChangedCheckedElements","onChangedCheckedElements","_onButtonTriggered","onButtonTriggered","_onLeave","onLeave","_fireCheckedEvents","elementDisposables","QuickInputAccessibilityProvider","createList","toggleCheckbox","focus1","focus2","allVisibleChecked","whenNoneVisible","fireCheckedEvents","saneMeta","meta","saneAriaLabel","Next","First","Previous","Last","Second","NextPage","PreviousPage","currentSeparator","metaHighlights","alwaysShow","shownElements","normalizedSearchValue","elementA","elementB","labelHighlightsA","labelHighlightsB","compareEntries","getAllVisibleChecked","allChecked","getCheckedCount","getCheckedElements","QuickInputBox","inputBox","isSelectionAtEnd","setAriaLabel","password","CSS_DONE","CSS_ACTIVE","CSS_INFINITE","CSS_DISCRETE","progressBarBackground","ProgressBar","workedVal","showDelayedScheduler","bit","totalWork","doDone","delayed","off","buttonBackground","buttonHoverBackground","buttonForeground","Button","_onDidClick","buttonSecondaryForeground","buttonSecondaryBackground","buttonSecondaryHoverBackground","buttonBorder","eventType","setHoverBackground","hoverBackground","backButton","QuickInput","ui","_busy","_ignoreFocusOut","_buttons","noValidationMessage","noPromptMessage","_severity","buttonsUpdated","onDidTriggerButtonEmitter","onDidHideEmitter","onDisposeEmitter","visibleDisposables","onDidHide","_steps","_totalSteps","totalSteps","_contextKey","busy","ignoreFocusOut","_validationMessage","validationMessage","onDidTriggerButton","getTitle","getDescription","description1","description2","busyDelay","progressBar","infinite","leftActionBar","leftButtons","rightActionBar","rightButtons","setEnabled","setContextKey","_lastValidationMessage","_lastSeverity","showMessageDecoration","getSteps","showDecoration","QuickPick","onDidChangeValueEmitter","onDidAcceptEmitter","onDidCustomEmitter","_items","itemsUpdated","_canSelectMany","_canAcceptInBackground","_matchOnDescription","_matchOnDetail","_matchOnLabel","_sortByLabel","_autoFocusOnList","_itemActivation","_activeItems","activeItemsUpdated","activeItemsToConfirm","onDidChangeActiveEmitter","_selectedItems","selectedItemsUpdated","selectedItemsToConfirm","onDidChangeSelectionEmitter","onDidTriggerItemButtonEmitter","valueSelectionUpdated","_ok","_customButton","filterValue","onDidChangeValue","onDidAccept","onDidChangeActive","onDidTriggerItemButton","_quickNavigate","quickNavigate","_placeholder","canSelectMany","canAcceptInBackground","autoFocusOnList","itemActivation","activeItems","selectedItems","keyMods","valueSelection","_valueSelection","showCustomButton","_customButtonLabel","_customButtonHover","showOkButton","_hideInput","hideInput","trySelectFirst","clearFocus","inBackground","onDidCustom","focusedItems","setSelectedElements","checkedItems","registerQuickNavigation","visibilities","_hideCheckAll","checkBox","visibleCount","customButton","setVisibilities","DEFAULT_ARIA_LABEL","setElements","getVisibleCount","setFocusedElements","setCheckedElements","customLabel","customHover","setComboboxAccessibility","QuickInputController","comboboxAccessibility","onShowEmitter","onShow","onHideEmitter","idPrefix","registerKeyModsListeners","titleBar","headerContainer","setAllVisibleChecked","extraContainer","filterContainer","visibleCountContainer","countContainer","okContainer","onDidClick","customButtonContainer","getUI","getActiveDescendant","previousFocusElement","selectors","isDisplayed","stops","updateStyles","picks","onKeyMods","createQuickPick","activeItem","canPickMany","ignoreFocusLost","_activeItem","picked","oldController","didHide","backKeybindingLabel","updateLayout","focusChanged","returnFocus","titleBarOffset","MAX_WIDTH","quickInputTitleBackground","quickInputBackground","quickInputForeground","contrastBorder","widgetShadow","countBadge","pickerGroupBorder","pickerGroupForeground","newStyles","QuickAccessController","quickInputService","registry","mapProviderToDescriptor","lastAcceptedPickerValues","visibleQuickAccess","getOrInstantiateProvider","visibleDescriptor","preserveValue","picker","adjustValueSelection","newValueCandidateWithoutPrefix","defaultFilterValue","quickNavigateConfiguration","registerPickerListeners","provide","providerForValue","providerDescriptor","getQuickAccessProvider","QuickInputService","_controller","createController","_quickAccess","computeStyles","resetContextKeys","pick","EditorScopedQuickInputServiceImpl","QuickInputEditorContribution","_serviceBrand","StandaloneQuickInputServiceImpl","mapEditorToService","newQuickInputService","activeService","quickAccess","QuickInputEditorWidget","getContribution","codeEditor","StaticServices","_serviceCollection","LazyStaticService","serviceId","_serviceId","_factory","_all","configurationServiceImpl","resourceConfigurationService","resourcePropertiesService","contextService","labelService","dialogService","markerService","markerDecorationsService","storageService","DynamicStandaloneServices","ensure","withAllStandaloneServices","simpleEditorModelResolverService","setEditor","onDidCreateEditor","createDiffEditor","createDiffNavigator","setModelLanguage","setModelMarkers","getModelMarkers","onDidChangeMarkers","onDidCreateModel","onWillDisposeModel","colorizeElement","colorizeModelLine","defineTheme","remeasureFonts","bool","defValue","createKeywordMatcher","caseInsensitive","arrayToHash","compileRegExp","hadExpansion","createGuard","tkey","scrut","oppat","tester","pat","elemType","inWords","patx","patexp","scrutinee","num","selectScrutinee","compileAction","newAction","stateNames","usesEmbedded","cases","_case","Rule","sregex","act","getLanguages","getEncodedLanguageId","lid","onLanguage","setLanguageConfiguration","EncodedTokenizationSupport2Adapter","TokenizationSupport2Adapter","adaptTokenize","tokenizeEncoded","previousStartIndex","scopes","actualResult","_toClassicTokens","_toBinaryTokens","setColorMap","setColorMapOverride","setTokensProvider","isEncodedTokensProvider","setMonarchTokensProvider","languageDef","createTokenizationSupport","noThrow","lexerMin","addRules","newrules","newrule","setRegex","setAction","rule1","matchOnlyAtStart","compile","registerReferenceProvider","registerRenameProvider","registerSignatureHelpProvider","registerHoverProvider","provideHover","registerDocumentSymbolProvider","registerDocumentHighlightProvider","registerLinkedEditingRangeProvider","registerDefinitionProvider","registerImplementationProvider","registerTypeDefinitionProvider","registerCodeLensProvider","registerCodeActionProvider","provideCodeActions","only","registerDocumentFormattingEditProvider","registerDocumentRangeFormattingEditProvider","registerOnTypeFormattingEditProvider","registerLinkProvider","registerCompletionItemProvider","registerColorProvider","registerFoldingRangeProvider","registerDeclarationProvider","registerSelectionRangeProvider","registerDocumentSemanticTokensProvider","registerDocumentRangeSemanticTokensProvider","api","createWebWorker","globalAPI","monaco","ignoreDuplicateModules","IStandaloneThemeService","localize","IAccessibilityService","CONTEXT_ACCESSIBILITY_MODE_ENABLED","isIMenuItem","MenuId","debugName","_debugName","CommandPalette","EditorContext","EditorContextCopy","EditorContextPeek","MenubarEditMenu","MenubarCopy","MenubarGoMenu","MenubarSelectionMenu","IMenuService","MenuRegistry","_commands","_menuItems","_onDidChangeMenu","onDidChangeMenu","_commandPaletteChangeEvent","addCommands","appendMenuItems","changedIds","_appendImplicitItems","SubmenuItemAction","createMenu","MenuItemAction","runArgs","shouldForwardArgs","IClipboardService","ICommandService","CommandsRegistry","_onDidRegisterCommand","onDidRegisterCommand","idOrCommand","actualHandler","oldId","newId","getCommand","IConfigurationService","toValuesTree","conflictReporter","addToValueTree","settingsTreeRoot","removeFromValueTree","valueTree","doRemoveFromValueTree","getConfigurationValue","settingPath","component","accessSetting","getConfigurationKeys","getConfigurationProperties","getDefaultValues","valueTreeRoot","Extensions","allSettings","patternProperties","applicationSettings","machineSettings","machineOverridableSettings","windowSettings","resourceSettings","resourceLanguageSettingsSchemaId","contributionRegistry","OVERRIDE_PROPERTY_PATTERN","overrideIdentifierFromKey","overrideIdentifiers","_onDidSchemaChange","_onDidUpdateConfiguration","defaultValues","defaultLanguageConfigurationOverridesNode","configurationContributors","resourceLanguageSettingsSchema","additionalProperties","allowTrailingCommas","allowComments","configurationProperties","excludedConfigurationProperties","registerSchema","registerConfigurations","configurations","validateAndRegisterProperties","extensionInfo","registerJSONConfiguration","updateOverridePropertyPatternKey","propertyKeys","validateProperty","updatePropertyDefaultValue","restricted","restrictedConfigurations","subNodes","allOf","updateSchema","overrideIdentifierProperty","resourceLanguagePropertiesSchema","$ref","getDefaultValue","STATIC_VALUES","ContextKeyExpr","ContextKeyDefinedExpr","ContextKeyEqualsExpr","ContextKeyRegexExpr","ContextKeyNotExpr","ContextKeyAndExpr","ContextKeyOrExpr","serialized","_deserializeOrExpression","_deserializeAndExpression","_deserializeOne","serializedOne","ContextKeyNotEqualsExpr","_deserializeValue","_deserializeRegexValue","ContextKeyInExpr","ContextKeyGreaterEqualsExpr","ContextKeyGreaterExpr","ContextKeySmallerEqualsExpr","ContextKeySmallerExpr","serializedValue","caseIgnoreFlag","ContextKeyFalseExpr","ContextKeyTrueExpr","staticValue","cmp1","cmp2","valueKey","ContextKeyNotInExpr","thisSource","otherSource","ContextKeyNotRegexExpr","_expr","_normalizeArr","hasTrue","secondToLastElement","resultElement","hasFalse","LEFT","RIGHT","and","RawContextKey","metaOrHide","not","IContextKeyService","SET_CONTEXT_COMMAND_ID","key2","IsWindowsContext","InputFocusedContextKey","IContextViewService","IContextMenuService","IDialogService","SyncDescriptor","registerSingleton","getSingletonServiceDescriptors","_util","serviceIds","DI_TARGET","DI_DEPENDENCIES","getServiceDependencies","IInstantiationService","createDecorator","storeServiceDependency","serviceIdentifier","ServiceCollection","instanceOrDescriptor","JSONContribution","jsonContributionRegistry","_onDidChangeSchema","schemasById","unresolvedSchemaContent","IKeybindingService","KeybindingsRegistryImpl","_coreKeybindings","_extensionKeybindings","_cachedMergedKeybindings","actualKb","bindToCurrentPlatform","kk","_registerDefaultKeybinding","registerKeybindingRule","_mightProduceChar","_assertNoCtrlAlt","sorter","KeybindingsRegistry","ILabelService","PagedRenderer","modelProvider","isResolved","renderPlaceholder","PagedAccessibilityProvider","TreeMouseEventTarget","TreeError","WeakMapper","isFilterResult","getVisibleState","isCollapsibleStateUpdate","collapsible","IndexTreeModel","rootElement","rootRef","_onDidChangeCollapseState","onDidChangeCollapseState","_onDidChangeRenderNodeCount","onDidChangeRenderNodeCount","_onDidSplice","onDidSplice","collapseByDefault","autoExpandSingleChildren","visibleChildrenCount","visibleChildIndex","collapsed","renderNodeCount","filterData","toInsert","diffIdentityProvider","spliceSmart","spliceSimple","identity","toInsertIterable","recurseLevels","diffDepth","getParentNodeWithListIndex","locationPrefix","recurseSplice","lastStartO","lastStartM","onDidCreateNode","onDidDeleteNode","listIndex","revealed","treeListElementsToInsert","nodesToInsertIterator","createTreeNode","lastHadChildren","visibleChildStartIndex","nodesToInsert","insertedVisibleChildrenCount","deletedNodes","deletedVisibleChildrenCount","visibleDeleteCount","_updateAncestorsRenderNodeCount","visit","currentlyHasChildren","setCollapsible","insertedNodes","refilter","getTreeNodeWithListIndex","hasTreeNode","getTreeNode","_setCollapseState","recursive","_setListNodeCollapseState","onlyVisibleChildIndex","_setNodeCollapseState","previousRenderNodeCount","updateNodeAfterCollapseChange","deep","updateNodeAfterFilterChange","treeElement","parentVisibility","treeListElements","_filterNode","childElements","childRevealed","_updateNodeAfterCollapseChange","_updateNodeAfterFilterChange","resultStartLength","hasVisibleDescendants","indexTreeNode","treeItemExpandedIcon","treeFilterOnTypeOnIcon","treeFilterOnTypeOffIcon","treeFilterClearIcon","treeItemLoadingIcon","TreeElementsDragAndDropData","asTreeDragAndDropData","TreeNodeListDragAndDrop","autoExpandDisposable","didChangeAutoExpandNode","autoExpandNode","autoExpand","getNodeLocation","isCollapsed","setCollapsed","parentRef","getParentNodeLocation","getNode","parentIndex","getListIndex","getListRenderCount","ComposedTreeDelegate","RenderIndentGuides","EventCollection","TreeRenderer","activeNodes","renderedNodes","DefaultIndent","hideTwistiesOfChildlessElements","shouldRenderIndentGuides","renderedIndentGuides","activeIndentNodes","indentGuidesDisposable","onDidChangeNodeTwistieState","onDidChangeTwistieState","_onDidChangeActiveNodes","twistie","renderTwistie","twistieRendered","disposableStore","guide","childElementCount","firstElementChild","TypeFilter","_filter","_totalCount","_matchCount","_pattern","_lowercasePattern","onWillRefilter","simpleKeyboardNavigation","filterOnType","TypeFilterController","_onDidChangeEmptyState","positionClassName","_onDidChangePattern","messageDomNode","labelDomNode","controls","_filterOnType","filterOnTypeDomNode","updateFilterOnTypeTitleAndIcon","onDidChangeFilterOnType","clearDomNode","keyboardNavigationEventFilter","onDidSpliceModel","onEventOrInput","getRelativeTop","containerWidth","midContainerWidth","updatePosition","noMatches","totalCount","matchCount","asTreeMouseEvent","Unknown","Twistie","Element","dfs","_nodeSet","createNodeSet","__forceEvent","nodeSet","deletedNodesIdSet","deletedNodesVisitor","insertedNodesMap","insertedNodesVisitor","insertedNode","TreeNodeListMouseController","onTwistie","expandOnlyOnTwistieClick","expandOnDoubleClick","TreeNodeList","focusTrait","selectionTrait","anchorTrait","additionalFocus","additionalSelection","fromAPI","AbstractTree","_onWillRefilter","_onDidUpdateOptions","treeDelegate","onDidChangeCollapseStateRelay","onDidChangeActiveNodes","onDidModelSplice","getNodes","onLeftArrow","onRightArrow","onSpace","typeFilterController","focusNavigationFilter","shouldAllowFocus","Always","isCollapsible","expandTo","parentListIndex","focusedIndex","firstChildIndex","ObjectTreeModel","nodesByIdentity","getElementLocation","_setChildren","preserveCollapseState","insertedElements","insertedElementIds","tnode","noCompress","incompressible","childrenIterator","_decompress","decompress","CompressedObjectTreeModel","compressionEnabled","compressedChildren","Infinity","compressedNode","compressedParentNode","splicedElement","recompressedElement","parentChildren","rootChildren","decompressedRootChildren","recompressedRootChildren","setChildren","getCompressedNode","DefaultElementMapper","CompressedTreeNodeWrapper","unwrapper","CompressibleObjectTreeModel","elementMapper","compressedNodeUnwrapper","nodeMapper","updateElementHeight","mapList","otherNode","mapOptions","setCompressionEnabled","ObjectTree","CompressibleRenderer","_compressedTreeNodeProvider","compressedTreeNode","compressedTreeNodeProvider","getCompressedTreeNode","renderCompressedElements","disposeCompressedElements","twistieElement","CompressibleObjectTree","getCompressedNodeKeyboardNavigationLabel","asObjectTreeOptions","createAsyncDataTreeNode","refreshPromise","stale","slow","collapsedByDefault","ancestor","descendant","AsyncDataTreeNodeWrapper","AsyncDataTreeRenderer","asTreeEvent","AsyncDataTreeElementsDragAndDropData","asAsyncDataTreeDragAndDropData","AsyncDataTreeNodeListDragAndDrop","AsyncDataTree","subTreeRefreshPromises","refreshPromises","_onDidRender","_onDidChangeNodeSlowState","createTree","hasChildren","objectTreeDelegate","objectTreeRenderers","objectTreeOptions","viewStateContext","_updateChildren","getDataNode","refreshAndRenderNode","collapse","hasElement","expand","refreshNode","doRefreshSubTree","childrenToRefresh","doRefreshNode","childrenPromise","slowTimeout","doGetChildren","getChildren","processChildren","childrenElementsIterable","childrenElements","nodesToForget","childrenTreeNodesById","asyncDataTreeNode","childAsyncDataTreeNode","expanded","asTreeElement","CompressibleAsyncDataTreeNodeWrapper","CompressibleAsyncDataTreeRenderer","compressibleNodeMapperProvider","CompressibleAsyncDataTree","compressionDelegate","compressibleNodeMapper","els","asCompressibleObjectTreeOptions","isIncompressible","getUncompressedIds","oldSelection","oldFocus","didChangeSelection","didChangeFocus","filterResult","DataTree","TableListRenderer","getColumnSize","TemplateId","renderedTemplates","rendererMap","rowContainer","cellContainers","cellTemplateData","cellContainer","ColumnHeader","_onDidLayout","minimumWidth","maximumWidth","onDidChangeWidthConstraints","Table","headers","splitview","headerRowHeight","columnLayoutDisposable","layoutColumn","IListService","ListService","lists","_lastFocusedWidget","_hasCreatedStyleController","extraContextKeys","registeredList","RawWorkbenchListFocusContextKey","WorkbenchListSupportsMultiSelectContextKey","WorkbenchListFocusContextKey","WorkbenchListHasSelectionOrFocus","WorkbenchListDoubleSelection","WorkbenchListMultiSelection","WorkbenchListSelectionNavigation","WorkbenchListSupportsKeyboardNavigation","WorkbenchListAutomaticKeyboardNavigationKey","WorkbenchListAutomaticKeyboardNavigation","didBindWorkbenchListAutomaticKeyboardNavigation","createScopedContextKeyService","multiSelectModifierSettingKey","openModeSettingKey","horizontalScrollingKey","keyboardNavigationSettingKey","automaticKeyboardNavigationSettingKey","treeIndentKey","treeRenderIndentGuidesKey","listSmoothScrolling","treeExpandMode","useAltAsMultipleSelectionModifier","MultipleSelectionController","registerListeners","toWorkbenchListOptions","WorkbenchList","listService","workbenchListOptions","workbenchListOptionsDisposable","selectionNavigation","listHasSelectionOrFocus","listDoubleSelection","listMultiSelection","_useAltAsMultipleSelectionModifier","overrideStyles","ListResourceNavigator","_styler","WorkbenchPagedList","pagedRenderers","fromPagedListOptions","WorkbenchTable","TableResourceNavigator","ResourceNavigator","_onDidOpen","onDidOpen","onSelectionFromKeyboard","openOnSingleClick","selectionKeyboardEvent","preserveFocus","_open","getSelectedElement","revealIfVisible","TreeResourceNavigator","createKeyboardNavigationEventFilter","inChord","softDispatch","WorkbenchObjectTree","treeOptions","getAutomaticKeyboardNavigation","workbenchTreeDataPreamble","internals","WorkbenchTreeInternals","WorkbenchCompressibleObjectTree","updateStyleOverrides","WorkbenchDataTree","WorkbenchAsyncDataTree","WorkbenchCompressibleAsyncDataTree","accessibilityOn","keyboardNavigation","hasSelectionOrFocus","hasDoubleSelection","hasMultiSelection","interestingContextKeys","updateKeyboardNavigation","styler","ILogService","LogLevel","DEFAULT_LOG_LEVEL","AbstractLogger","_onDidChangeLogLevel","ConsoleLogger","logLevel","setLevel","LogService","logger","IMarkerData","_displayStrings","fromSeverity","Hint","toSeverity","emptyString","makeKeyOptionalMessage","useMessage","makeKey","IMarkerService","INotificationService","NoOpNotification","IOpenerService","NullOpenerService","registerOpener","registerValidator","registerExternalUriResolver","registerExternalOpener","matchesScheme","Progress","IEditorProgressService","DefaultQuickAccessFilterValue","Quickaccess","defaultProvider","providerA","providerB","IQuickInputService","Registry","StorageState","Storage","_onDidChangeStorage","onDidChangeStorage","flushDelayer","DEFAULT_FLUSH_DELAY","pendingDeletes","pendingInserts","whenFlushedCallbacks","onDidChangeItemsExternal","Closed","fallbackValue","valueStr","flushPending","hasPending","updateRequest","updateItems","InMemoryStorageDatabase","TARGET_KEY","IStorageService","WillSaveStateReason","AbstractStorageService","flushInterval","DEFAULT_FLUSH_INTERVAL","_onDidChangeValue","_onDidChangeTarget","_onWillSaveState","onWillSaveState","_workspaceKeyTargets","_globalKeyTargets","getKeyTargets","getStorage","getBoolean","getNumber","withPausedEmitters","updateKeyTarget","keyTargets","loadKeyTargets","globalKeyTargets","workspaceKeyTargets","keysRaw","InMemoryStorageService","globalStorage","workspaceStorage","emitDidChangeValue","ITelemetryService","ColorContribution","colorRegistry","onDidChangeSchema","colorSchema","colorReferenceSchema","colorsById","needsTransparency","colorContribution","propertySchema","defaultSnippets","colorDesc","resolveColorValue","cat1","cat2","registerColor","iconForeground","focusBorder","activeContrastBorder","textLinkForeground","textCodeBlockBackground","inputActiveOptionBorder","inputActiveOptionBackground","inputActiveOptionForeground","selectBackground","selectForeground","scrollbarShadow","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","editorErrorBackground","editorErrorForeground","editorErrorBorder","editorWarningBackground","editorWarningForeground","editorWarningBorder","editorInfoBackground","editorInfoForeground","editorInfoBorder","editorHintForeground","editorHintBorder","editorBackground","editorForeground","editorWidgetBackground","editorWidgetForeground","editorWidgetBorder","editorWidgetResizeBorder","editorSelectionBackground","editorSelectionForeground","editorInactiveSelection","editorSelectionHighlight","lessProminent","editorSelectionHighlightBorder","editorFindMatch","editorFindMatchHighlight","editorFindRangeHighlight","editorFindMatchBorder","editorFindMatchHighlightBorder","editorFindRangeHighlightBorder","editorHoverHighlight","editorHoverBackground","editorHoverForeground","editorHoverBorder","editorHoverStatusBarBackground","editorActiveLinkForeground","editorInlineHintForeground","editorInlineHintBackground","editorLightBulbForeground","editorLightBulbAutoFixForeground","defaultInsertColor","defaultRemoveColor","diffInserted","diffInsertedOutline","diffRemovedOutline","diffBorder","diffDiagonalFill","listHighlightForeground","_deprecatedQuickInputListFocusBackground","quickInputListFocusBackground","oneOf","menuBorder","menuForeground","menuBackground","menuSelectionForeground","menuSelectionBackground","menuSelectionBorder","menuSeparatorBackground","snippetTabstopHighlightBackground","snippetTabstopHighlightBorder","snippetFinalTabstopHighlightBackground","snippetFinalTabstopHighlightBorder","overviewRulerFindMatchForeground","overviewRulerSelectionHighlightForeground","minimapFindMatch","minimapSelection","minimapError","minimapWarning","minimapBackground","minimapSliderBackground","minimapSliderHoverBackground","minimapSliderActiveBackground","problemsErrorIconForeground","problemsWarningIconForeground","problemsInfoIconForeground","colorValue","colorValues","backgroundColorValue","transparency","workbenchColorsSchemaId","schemaRegistry","getColorSchema","notifySchemaChanged","iconSchema","definitions","icons","iconReferenceSchema","iconsById","iconFontsById","enumIndex","iconContribution","i1","registerIcon","getIconRegistry","initialize","iconsSchemaId","getIconSchema","widgetClose","styleMap","attachStyler","widgetOrCallback","attachBadgeStyler","attachListStyler","defaultListStyles","defaultMenuStyles","attachMenuStyler","ColorScheme","IThemeService","ThemeColor","ThemeIcon","themeColorFromId","getThemeTypeSelector","isThemeIcon","_regexFromString","modify","tildeIndex","ti1","ti2","ThemingContribution","themingParticipants","onThemingParticipantAddedEmitter","participant","registerThemingParticipant","onColorThemeChange","Themable","onThemeChange","IUndoRedoService","ResourceEditStackSnapshot","UndoRedoGroup","_ID","UndoRedoSource","IWorkspaceContextService","WorkspaceFolder","MarkdownString","isTrustedOrOptions","supportThemeIcons","newlineStyle","isEmptyMarkdownString","oneOrMany","isMarkdownString","markdownStringEqual","removeMarkdownEscapes","SelectionAnchorSet","SelectionAnchorController","selectionAnchorSetContextKey","modelChangeListener","previousDecorations","newDecorationId","cancelSelectionAnchor","SetSelectionAnchor","_accessor","setSelectionAnchor","GoToSelectionAnchor","goToSelectionAnchor","SelectFromAnchorToCursor","selectFromAnchorToCursor","CancelSelectionAnchor","overviewRulerBracketMatchForeground","JumpToBracketAction","BracketMatchingController","jumpToBracket","SelectToBracketAction","selectBrackets","selectToBracket","BracketsData","_lastBracketsData","_lastVersionId","_updateBracketsSoon","_updateBrackets","_matchBrackets","matchBracket","newCursorPosition","enclosingBrackets","findEnclosingBrackets","nextBracket","findNextBracket","selectFrom","selectTo","_recomputeBrackets","bracketData","previousData","positionsLen","newData","newDataLen","previousIndex","previousLen","_DECORATION_OPTIONS_WITH_OVERVIEW_RULER","_DECORATION_OPTIONS_WITHOUT_OVERVIEW_RULER","bracketMatchBackground","bracketMatchBorder","MoveCaretCommand","isMovingLeft","_isMovingLeft","rangeBefore","rangeAfter","MoveCaretAction","TransposeLettersAction","middlePosition","beginPosition","leftChar","rightChar","replaceRange","CLIPBOARD_CONTEXT_MENU_GROUP","supportsCut","supportsCopy","supportsPaste","CutAction","CopyAction","PasteAction","ExecCommandCopyWithSyntaxHighlightingAction","registerExecCommandImpl","browserCommand","clipboardText","Lazy","CodeActionKind","excludesAction","providedKind","QuickFix","Refactor","Source","SourceOrganizeImports","SourceFixAll","CodeActionCommandArgs","preferred","getKindFromUser","getApplyFromUser","getPreferredUser","defaultAutoApply","defaultKind","codeActionCommandId","refactorCommandId","sourceActionCommandId","organizeImportsCommandId","fixAllCommandId","CodeActionItem","resolveCodeAction","ManagedCodeActionSet","documentation","allActions","codeActionsComparator","validActions","isPreferred","diagnostics","fix","emptyCodeActionsResponse","getCodeActions","rangeOrSelection","codeActionContext","providedCodeActionKinds","excludes","includeSourceActions","mayIncludeActionsOfKind","getCodeActionProviders","providedCodeActions","filteredActions","actionKind","onlyIncludePreferredActions","filtersAction","currentBest","getDocumentation","newProviders","allDocumentation","itemResolveCount","validatedRangeOrSelection","codeActionSet","resolving","resolveCount","MessageController","_messageWidget","_messageListeners","_visible","MESSAGE_VISIBLE","_editorListener","bounds","MessageWidget","closeMessage","fadeOut","MessageCommand","anchorTop","anchorBottom","messageWidget","CodeActionAction","CodeActionMenu","_showingActions","_keybindingResolver","CodeActionKeybindingResolver","codeActions","actionsToShow","includeDisabledActions","menuActions","getMenuActions","_toCoords","getResolver","toCodeActionAction","onSelectCodeAction","_getAdditionalMenuItems","cursorCoords","getScrolledVisiblePosition","editorCoords","_keybindingProvider","allCodeActionBindings","codeActionCommands","fromUser","binding","bestKeybindingForCodeAction","reduceRight","LightBulbState","Hidden","Showing","widgetPosition","LightBulbWidget","_quickFixActionId","_preferredFixActionId","_keybindingService","_onClick","editorModel","monitor","_updateLightBulbTitleAndIcon","onDidUpdateKeybindings","atPosition","isFolded","effectiveLineNumber","_posPref","hasAutoFix","preferredKb","editorBackgroundColor","editorLightBulbForegroundColor","editorLightBulbAutoFixForegroundColor","_CodeActionUi_disposed","__classPrivateFieldSet","receiver","__classPrivateFieldGet","CodeActionUi","quickFixActionId","preferredFixActionId","_activeCodeActions","_codeActionWidget","applyCodeAction","_lightBulbWidget","showCodeActionList","rawValue","validActionToApply","tryGetValidActionToApply","invalidAction","getInvalidActionThatWouldHaveBeenApplied","notAvailableMessage","autoApply","_CodeActionModel_isDisposed","SUPPORTED_CODE_ACTIONS","CodeActionOracle","_signalChange","_delay","_autoTriggerTimer","_onMarkerChanges","_onCursorChange","_getRangeOfSelectionUnlessWhitespaceEnclosed","_createEventAndSignalChange","markerRange","_getRangeOfMarker","CodeActionsState","Triggered","_cancellablePromise","emptyCodeActionSet","CodeActionModel","_progressService","_codeActionOracle","_onDidChangeState","onDidChangeState","_supportedCodeActions","supportedActions","showWhile","skipNotify","contextKeyForSupportedActions","argsSchema","QuickFixController","progressService","_ui","QuickFixAction","Id","AutoFixAction","retrigger","_applyCodeAction","_trigger","triggerPosition","bulkEditService","codeActionTitle","codeActionKind","codeActionIsPreferred","asMessage","triggerCodeActionsForEditorSelection","manualTriggerAtCurrentPosition","CodeActionCommand","userArgs","RefactorAction","SourceAction","OrganizeImportsAction","FixAllAction","CodeLensModel","lenses","symbol","getCodeLensModel","providerRanks","provideCodeLenses","resolveCodeLens","CodeLensViewZone","onHeight","_onHeight","_lastHeight","CodeLensContentWidget","_isEmpty","hasSymbol","lens","_widgetPosition","CodeLensHelper","_removeDecorations","_addDecorations","_addDecorationsCallbacks","resultingDecorations","CodeLensWidget","viewZoneChangeAccessor","updateCallback","_decorationIds","codeLensData","_viewZone","_createContentWidgetIfNecessary","_contentWidget","withCommands","codeLensForeground","activeLinkForeground","ICodeLensCache","CacheItem","CodeLensCache","_fakeProvider","_deserialize","_serialize","copyItems","copyModel","CodeLensContribution","_codeLensCache","_localToDispose","_lenses","_getCodeLensModelDelays","_oldCodeLensModels","_resolveCodeLensesDelays","_resolveCodeLensesScheduler","_resolveCodeLensesInViewport","_onModelChange","_updateLensStyle","_styleClassName","_styleElement","_localDispose","_currentCodeLensModel","codeLensHeight","_getLayoutInfo","editorFontInfo","fontFamilyVar","fontFeaturesVar","newStyle","updateHeight","_getCodeLensModelPromise","_resolveCodeLensesPromise","cachedLenses","_renderCodeLensSymbols","cachedLensesNow","scheduler","newDelay","decorationsAccessor","viewZonesAccessor","lastLensLineNumber","getLineNumber","_resolveCodeLensesInViewportSoon","_disposeAllLenses","decChangeAccessor","lastGroup","viewZoneAccessor","codeLensIndex","groupsIndex","symbolsLineNumber","codeLensLineNumber","updateCodeLensSymbols","toResolve","computeIfNecessary","resolvePromise","resolvedSymbols","updateCommands","codelensController","getLenses","getItems","getColorPresentations","colorInfo","provideColorPresentations","rawCIs","provideDocumentColors","ci","green","presentations","ColorDetector","_decorationsIds","_colorDatas","_colorDecoratorIds","_decorationsTypes","_isEnabled","onModelChanged","prevIsEnabled","removeAllDecorations","_timeoutTimer","_computePromise","deprecatedConfig","beginCompute","RECOMPUTE_TIME","colorInfos","updateDecorations","updateColorDecorators","colorDatas","colorData","newDecorationsTypes","subKey","registerDecorationType","ColorPickerModel","availableColorPresentations","presentationIndex","_onColorFlushed","onColorFlushed","_onDidChangeColor","onDidChangeColor","_onDidChangePresentation","onDidChangePresentation","originalColor","_color","_colorPresentations","colorPresentations","presentation","flushColor","originalText","ColorPickerHeader","pickedColorNode","colorBox","selectNextColorPresentation","isLighter","ColorPickerBody","saturationBox","SaturationBox","onDidSaturationValueChange","opacityStrip","OpacityStrip","onDidOpacityChange","hueStrip","HueStrip","onDidHueChange","onDidChangePosition","mouseUpListener","paintSelection","paint","saturatedColor","whiteGradient","createLinearGradient","addColorStop","blackGradient","Strip","updateSliderPosition","onDidChangeTop","opaque","ColorPickerWidget","HoverOperation","computer","success","hoverTime","_computer","_hoverTime","_firstWaitScheduler","_triggerAsyncComputation","_secondWaitScheduler","_triggerSyncComputation","_loadingMessageScheduler","_showLoadingMessage","_asyncComputationPromise","_asyncComputationPromiseDone","_completeCallback","_errorCallback","_progressCallback","_secondWaitTime","computeAsync","asyncResult","_withAsyncResult","computeSync","onResult","_onComplete","getResult","_onProgress","getResultWithLoadingMessage","_firstWaitTime","_loadingMessageTime","HoverWidget","contentsDomNode","getBaseLabel","normalizeDriveLetter","EmbeddedCodeEditorWidget","parentEditor","getOverflowWidgetsDomNode","_parentEditor","_overwriteOptions","_onParentConfigurationChanged","defaultColor","showArrow","showFrame","frameColor","arrowColor","keepEditorSelection","ViewZoneDelegate","_onDomNodeTop","_onComputedHeight","OverlayWidgetDelegate","Arrow","_ruleName","_IdGenerator","_updateStyle","where","BaseDropdown","_onDidChangeVisibility","onDidChangeVisibility","labelRenderer","cleanupFn","boxContainer","DropdownMenu","_contextMenuProvider","contextMenuProvider","actionProvider","menuClassName","menuAsChild","_menuOptions","menuOptions","DropdownMenuActionViewItem","menuActionsOrProvider","actionItem","isActionsArray","dropdownMenu","keybindingProvider","anchorAlignmentProvider","createAndFillInActionBarActions","primaryGroup","primaryMaxCount","shouldInlineSubmenu","useAlternativeActions","primaryBucket","secondaryBucket","submenuInfo","fillInActions","asDisposable","MenuEntryActionViewItem","_wantsAltCommand","_itemClassDispose","_menuItemAction","_commandAction","_updateItemClass","alternativeKeyDown","keyStatus","updateAltState","wantsAltCommand","altTooltip","altKeybinding","altKeybindingLabel","altTitleSection","SubmenuEntryActionViewItem","createActionViewItem","IPeekViewService","PeekContext","onDidClose","inPeekEditor","notInPeekEditor","PeekContextController","headerBackgroundColor","primaryHeadingColor","secondaryHeadingColor","PeekViewWidget","_arrow","_overlayWidget","_resizeSash","_positionMarkerId","_isShowing","isAccessible","_getWidth","_getLeft","_onWidth","_fillContainer","_initSash","_applyStyles","borderTopColor","containerHeight","_decoratingElementsHeight","rangeOrPos","_showImpl","viewZoneDomNode","maxHeightInLines","arrowHeight","frameThickness","_onViewZoneTop","_onViewZoneHeight","frameWidth","borderTopWidth","borderBottomWidth","isLastLine","classToReplace","widthInPixel","heightInPixel","newHeightInLines","isResizeable","lineDelta","roundedLineDelta","_relayout","_onDidClose","_headElement","_primaryHeading","_secondaryHeading","_bodyElement","setCssClass","_fillHead","_fillBody","noCloseAction","titleElement","_onTitleClick","_fillTitleIcon","_metaHeading","actionsContainer","actionBarOptions","_getActionBarOptions","_actionbarWidget","primaryHeading","secondaryHeading","headHeight","bodyHeight","_doLayoutHead","_doLayoutBody","peekViewTitleBackground","peekViewTitleForeground","peekViewTitleInfoForeground","peekViewBorder","peekViewResultsBackground","peekViewResultsMatchForeground","peekViewResultsFileForeground","peekViewResultsSelectionBackground","peekViewResultsSelectionForeground","peekViewEditorBackground","peekViewEditorGutterBackground","peekViewResultsMatchHighlight","peekViewEditorMatchHighlight","peekViewEditorMatchHighlightBorder","SeverityIcon","errorIconForeground","errorCodiconSelector","warningIconForeground","warningCodiconSelector","infoIconForeground","infoCodiconSelector","onRelatedInformation","_openerService","_labelService","_longestLineLength","_relatedDiagnostics","_messageBlock","_relatedBlock","related","sourceAndCodeLength","applyFontInfo","lastLineElement","detailsElement","sourceElement","codeElement","_codeLink","relatedInformationNode","relatedResource","getUriLabel","relatedMessage","severityLabel","MarkerNavigationWidget","_callOnDispose","_onDidSelectRelatedInformation","onDidSelectRelatedInformation","_applyTheme","editorMarkerNavigationBackground","editorMarkerNavigationError","editorMarkerNavigationWarning","editorMarkerNavigationInfo","_parentContainer","TitleMenu","_icon","_message","markerIdx","markerCount","computeRequiredHeight","setTitle","_heightInPixel","getHeightInLines","errorDefault","warningDefault","infoDefault","linkFg","MarkerCoordinate","MarkerList","resourceFilter","_markers","_nextIdx","_resourceFilter","updateMarker","_compareMarker","uris","oldIdx","IMarkerNavigationService","MarkerNavigationService","getMarkerList","MarkerController","_markerNavigationService","_sessionDispoables","_widgetVisible","CONTEXT_MARKERS_NAVIGATION_VISIBLE","_cleanUp","reusePosition","resetIndex","showStale","revealIfOpened","focusEditor","_getOrCreateModel","showAtMarker","multiFile","otherEditor","selectionRevealType","nagivate","MarkerNavigationAction","_next","_multiFile","NextMarkerAction","LABEL","PrevMarkerAction","MarkerCommand","MarkerHover","markerCodeActionTrigger","MarkerHoverParticipant","_hover","recentMarkerCodeActionsInfo","hoverRange","hoverParts","renderMarkerHover","markerHoverForStatusbar","renderMarkerStatusbar","markerHover","hoverElement","markerElement","messageElement","sourceAndCodeElement","codeLink","relatedInfoContainer","marginTop","actionsElement","renderAction","quickfixPlaceholderElement","hasCodeActions","updatePlaceholderDisposable","codeActionsPromise","showing","showCodeActions","actionOptions","actionContainer","renderHoverAction","cancellationToken","__insane_func","u","toMap","allowedAttributes","img","allowedClasses","allowedSchemes","allowedTags","3","voids","4","insane","5","6","assignment","7","he","lowercase","rstart","rend","rattrs","rtag","rtagend","createStack","parsePart","parseEdge","parseEndTag","parseStartTag","parseTagDecode","parseTag","same","unary","doubleQuotedValue","singleQuotedValue","unquotedValue","8","attributes","ignoring","ignore","classesOk","attrsOk","lkey","colon","questionmark","testUrl","unignore","transformText","9","escapes","unescapes","rescaped","runescaped","escapeHtmlChar","unescapeHtmlChar","escapeHtml","unescapeHtml","10","asKey","accumulator","_ttpInsane","renderMarkdown","markedOptions","_uriMassage","isDomUri","signalInnerHTML","withInnerHTML","splitted","parameters","heightFromParams","widthFromParams","widthIsFinite","isFinite","heightIsFinite","parseHrefAndDimensions","hrefAsUri","codeBlockRenderer","span","_err","asyncRenderCallback","mouseEvent","dataset","renderedMarkdown","insaneOptions","getInsaneOptions","sanitizeRenderedMarkdown","MarkdownRenderer","_onDidRenderAsync","onDidRenderAsync","_getRenderOptions","languageAlias","tokenization","_ttpTokenizer","codeBlockFontFamily","getHover","hasRange","hasHtmlContent","MarkdownHover","MarkdownHoverParticipant","hovers","hoverPart","markdownHoverElement","hoverContentsElement","onContentsChanged","renderedContents","ColorHover","HoverPartInfo","ModesContentComputer","_markerHoverParticipant","_markdownHoverParticipant","colorDetector","getColorData","markdownHovers","markerHovers","isFromSynchronousComputation","loadingMessage","createLoadingMessage","ModesContentHoverWidget","_hoverVisibleKey","_stoleFocus","_renderDisposable","onkeydown","_updateFont","_showAtPosition","_showAtRange","_messages","_highlightDecorations","_isChangingDecorations","_shouldFocus","_colorPicker","_hoverOperation","_withResult","setHoverTime","newColor","_renderMessages","getElementsByClassName","clearResult","filteredMessages","hoverContentsEquals","setRange","complete","renderColumn","highlightRange","createDocumentFragment","containColorPicker","markerMessages","markdownParts","_msg","guessColorPresentation","updateEditorModel","trackedRange","additionalTextEdits","updateColorPresentations","colorListener","colorChangeListener","showAt","_updateContents","renderHoverParts","hasChildNodes","_DECORATION_OPTIONS","GlyphHoverWidget","_showAtLineNumber","updateFont","topForLineNumber","editorScrollTop","MarginComputer","toHoverMessage","ModesGlyphHoverWidget","openerService","_renderDisposeables","_lastLineNumber","_markdownRenderer","setLineNumber","updateContents","OneReference","isProviderFirst","_rangeCallback","getPreview","FilePreview","_modelReference","getWordUntilPosition","beforeRange","afterRange","FileReferences","_previews","textModelResolverService","ReferencesModel","_onDidChangeReferenceRange","onDidChangeReferenceRange","_links","providersFirst","_compareReferences","oneRef","childCount","nearest","prefixLen","offsetDist","getLocationLinks","getDefinitionsAtPosition","provideDefinition","getDeclarationsAtPosition","provideDeclaration","getImplementationsAtPosition","provideImplementation","getTypeDefinitionsAtPosition","provideTypeDefinition","getReferencesAtPosition","provideReferences","includeDeclaration","resultWithoutDeclaration","_sortedAndDeduped","rawLinks","modelLinks","DataSource","_resolverService","Delegate","FileReferencesRenderer","OneReferenceRenderer","StringRepresentationProvider","IdentityProvider","FileReferencesTemplate","_uriLabel","badge","setTitleFormat","template","OneReferenceTemplate","AccessibilityProvider","ariaMessage","DecorationsManager","_decorationIgnoreSet","_callOnModelChange","_onModelChanged","_onDecorationChanged","newDecorationsActualIndex","oneReference","ReferencesTree","ReferenceWidget","_defaultTreeKeyboardSupport","layoutData","_textModelResolverService","_peekViewService","_disposeOnNewModel","_onDidSelectReference","onDidSelectReference","_dim","addExclusiveWidget","_preview","_previewNotAvailableMessage","_previewModelReference","_splitView","_getFocusedReference","containerElement","_messageContainer","_previewContainer","_treeContainer","addView","_revealReference","resizeView","newModel","_onNewModel","_decorationsManager","focusOnReferenceTree","setInput","revealParent","_revealedReference","getInput","findMatchHighlightColor","referenceHighlightColor","referenceHighlightBorder","hcOutline","resultsBackground","resultsMatchForeground","resultsFileForeground","resultsSelectedBackground","resultsSelectedForeground","editorGutterBackground","ctxReferenceSearchVisible","ReferencesController","_storageService","_requestIdPool","_ignoreModelChangeEvent","_referenceSearchVisible","modelPromise","peekMode","closeWidget","_peekMode","storageKey","fromJSON","openReference","_gotoReference","requestId","setMetaTitle","nearestReference","focusOnPreviewEditor","isPreviewEditorFocused","currentPosition","nextOrPreviousReference","editorFocus","previewEditorFocus","revealReference","openedEditor","toggleWidget","withController","outerEditor","getParentEditor","getOuterEditor","changeFocusBetweenPreviewAndReferences","goToNextOrPreviousReference","lastFocusedList","ctxHasSymbols","ISymbolNavigationService","SymbolNavigationService","_currentModel","_currentIdx","_ignoreEditorChange","_ctxHasSymbols","_currentState","_currentMessage","refModel","editorState","seenUri","seenPosition","revealNext","_onDidRemoveEditor","_onDidAddEditor","_g","_h","_goToActionIds","registerGoToAction","SymbolNavigationAction","symbolNavService","_getLocationModel","altAction","referenceAt","altActionId","_getAlternativeCommand","referenceCount","muteMessage","_getNoResultFoundMessage","_onResult","_getGoToPreference","openInPeek","firstReference","targetEditor","_openReference","_openInPeek","modelNow","DefinitionAction","goToDefinitionKb","GoToDefinitionAction","OpenDefinitionToSideAction","PeekDefinitionAction","DeclarationAction","GoToDeclarationAction","TypeDefinitionAction","GoToTypeDefinitionAction","PeekTypeDefinitionAction","ImplementationAction","GoToImplementationAction","PeekImplementationAction","ReferencesAction","GenericGoToLocationAction","_references","_gotoMultipleBehaviour","hasModifier","noResultsMessage","control","ClickLinkMouseEvent","hasTriggerModifier","triggerModifier","hasSideBySideModifier","triggerSideBySideModifier","isNoneOrSingleMouseDown","ClickLinkKeyboardEvent","keyCodeIsTriggerKey","triggerKey","keyCodeIsSideBySideKey","triggerSideBySideKey","ClickLinkOptions","createOptions","ClickLinkGesture","_onMouseMoveOrRelevantKeyDown","onMouseMoveOrRelevantKeyDown","_onExecute","onExecute","_onCancel","onCancel","_lastMouseMoveEvent","_hasTriggerKeyOnMouseDown","_lineNumberOnMouseDown","_onEditorMouseMove","_onEditorMouseDown","_onEditorMouseUp","_onEditorKeyDown","_onEditorKeyUp","_resetHandler","currentLineNumber","GotoDefinitionAtPositionEditorContribution","toUnhook","toUnhookForKeyboard","linkDecorations","currentWordAtPosition","previousPromise","linkGesture","startFindDefinitionFromMouse","gotoDefinition","removeLinkDecorations","startFindDefinition","withKey","findDefinition","previewValue","getPreviewValue","appendCodeblock","rangeToUse","getPreviewRangeBasedOnBrackets","MAX_SOURCE_PREVIEW_LINES","getPreviewRangeBasedOnIndentation","stripIndentationFromPreviewRange","previewRange","minIndent","endIndent","startIndent","ignoreFirstEmpty","currentBracket","lastBracket","nextLineNumber","nextColumn","canPeek","isInPeekEditor","ModesHoverController","_toUnhook","_isMouseDown","_hoverClicked","_glyphWidget","_hookEvents","_didChangeConfigurationHandler","_unhookEvents","hideWidgetsEventHandler","_hideWidgets","hoverOpts","_isHoverEnabled","_isHoverSticky","_onModelDecorationsChanged","_onEditorScrollChanged","isColorPickerVisible","showAtRange","startShowingAt","ShowHoverAction","showContentHover","ShowDefinitionPreviewHoverAction","startFindDefinitionFromCursor","editorHoverHighlightColor","hoverBorder","hoverForeground","actionsBackground","codeBackground","hoverController","BlockCommentCommand","_insertSpace","_usedEndToken","needleLength","startToken","endToken","startLineText","endLineText","ops","startTokenIndex","endTokenIndex","startLineAfterStartToken","endLineBeforeEndToken","_createRemoveBlockCommentOperations","_createAddBlockCommentOperations","tokenizeIfCheap","_createOperationsForBlockComment","startTokenEditOperation","endTokenEditOperation","LineCommentCommand","ignoreFirstLine","_tabSize","_deltaColumn","_moveEndPositionDown","_ignoreEmptyLines","_ignoreFirstLine","commentStr","commentStrOffset","commentStrLength","shouldRemoveComments","onlyWhitespaceLines","lineContentStartOffset","_haystackHasNeedleAtOffset","commentStrEndOffset","supported","_gatherPreflightCommentStrings","_analyzeLines","_createRemoveLineCommentsOperations","_normalizeInsertionPoint","_createAddLineCommentsOperations","cursorPosition","startTokenAllowedBeforeColumn","_attemptRemoveBlockComment","_gatherPreflightData","_executeLineComments","_executeBlockComment","afterCommentStr","isTab","columnSize","minVisibleColumn","nextVisibleColumn","CommentLineAction","commentsOptions","BlockCommentAction","ContextMenuController","_contextMenuIsBeingShownCount","getContextViewElement","hasSelectionAtPosition","_getMenuActions","_doShowContextMenu","addedItems","subActions","oldHoverSetting","_keybindingFor","customActionViewItem","wasCancelled","ShowContextMenu","thisLen","StackElement","CursorUndoRedoController","_isCursorUndoRedo","_undoStack","_redoStack","prevState","_applyState","stackElement","CursorUndo","cursorUndo","CursorRedo","cursorRedo","DragAndDropCommand","targetPosition","targetSelection","DragAndDropController","_onEditorMouseDrag","_onEditorMouseDrop","_onEditorMouseDropCanceled","onEditorKeyDown","onEditorKeyUp","onEditorBlur","_dndDecorationIds","_mouseDown","_modifierPressed","_dragSelection","_removeDecoration","TRIGGER_KEY_VALUE","possibleSelections","_hitContent","_hitMargin","primarySelection","TreeElement","candidateId","OutlineElement","OutlineGroup","OutlineModel","_groups","for","promiseCnt","_requestDurations","findId","provideDocumentSymbols","_makeOutlineElement","newProvider","_compact","childInfo","getTopLevelSymbols","bucket","_flattenDocumentSymbols","overrideContainerLabel","containerName","selectionRange","_counter","_hash","getDocumentSymbols","flat","asListOfDocumentSymbols","FindDecorations","_overviewRulerApproximateDecorations","_findScopeDecorationIds","_rangeHighlightDecorationId","_highlightedDecorationId","_startPosition","_allDecorations","findScopeDecorationId","newStartPosition","setCurrentFindMatch","desiredRange","candidateOpts","_FIND_MATCH_DECORATION","_CURRENT_FIND_MATCH_DECORATION","_getDecorationIndex","nextMatch","newCurrentDecorationId","matchPosition","lineBeforeEnd","lineBeforeEndMaxColumn","_RANGE_HIGHLIGHT_DECORATION","findScopes","findMatchesOptions","newOverviewRulerApproximateDecorations","_FIND_MATCH_NO_OVERVIEW_DECORATION","approxPixelsPerLine","mergeLinesDelta","prevStartLineNumber","_FIND_MATCH_ONLY_OVERVIEW_DECORATION","newFindMatchesDecorations","findScope","_FIND_SCOPE_DECORATION","ReplaceAllCommand","editorSelection","replaceStrings","_editorSelection","_replaceStrings","_trackedEditorSelectionId","o1","o2","resultOps","buildReplaceStringWithCasePreserved","containsHyphens","validateSpecificSpecialCharacter","containsUnderscores","buildReplaceStringForSpecificSpecialCharacter","specialCharacter","splitPatternAtSpecialCharacter","splitMatchAtSpecialCharacter","replaceString","splitValue","StaticValueReplacePattern","DynamicPiecesReplacePattern","ReplacePattern","ReplacePiece","_substitute","caseOps","lenOps","opIdx","ReplacePieceBuilder","_lastCharIndex","_currentStaticPiece","toCharIndex","_emitStatic","emitUnchanged","CONTEXT_FIND_WIDGET_VISIBLE","CONTEXT_FIND_INPUT_FOCUSED","CONTEXT_REPLACE_INPUT_FOCUSED","ToggleCaseSensitiveKeybinding","ToggleWholeWordKeybinding","ToggleRegexKeybinding","ToggleSearchScopeKeybinding","TogglePreserveCaseKeybinding","FIND_IDS","MATCHES_LIMIT","FindModelBoundToEditorModel","_startSearchingTimer","_updateDecorationsScheduler","research","setStartPosition","_ignoreModelContentChanged","onFindReplaceStateChange","_onStateChanged","isReplaceRevealed","moveCursor","newFindScope","getFindScopes","_findMatches","currentMatchesPosition","getCurrentMatchesPosition","matchAfterSelection","changeMatchInfo","_moveToNextMatch","matchesCount","_hasMatches","getFindScope","matchesPosition","isUsingLineStops","isRecursed","canNavigateBack","nextMatchRange","matchAfterPosition","_setCurrentFindMatch","prevMatchRange","matchBeforePosition","_prevSearchPosition","_cannotFind","_getSearchRange","prevMatch","findPreviousMatch","_moveToPrevMatch","canNavigateForward","_nextSearchPosition","_getNextMatch","forceMove","findNextMatch","emitStatic","emitMatchIndex","nextNextChCode","parseReplaceString","fromStaticValue","replacePattern","_getReplacePattern","buildReplaceString","_executeEditorCommand","_largeReplaceAll","_regularReplaceAll","mod","modelText","resultText","hasReplacementPatterns","Checkbox","actionClassName","notFocusable","newIsChecked","NLS_CASE_SENSITIVE_CHECKBOX_LABEL","NLS_WHOLE_WORD_CHECKBOX_LABEL","NLS_REGEX_CHECKBOX_LABEL","CaseSensitiveCheckbox","appendTitle","WholeWordsCheckbox","RegexCheckbox","FindOptionsWidget","_hideSoon","inputActiveOptionBorderColor","inputActiveOptionForegroundColor","inputActiveOptionBackgroundColor","_keybindingLabelFor","wholeWords","isRevealed","_revealTemporarily","actionId","inputStyles","effectiveOptionValue","widgetBackground","widgetForeground","widgetShadowColor","hcBorder","FindReplaceState","_onFindReplaceStateChange","_searchString","_replaceString","_isRevealed","_isReplaceRevealed","_isRegex","_isRegexOverride","_wholeWord","_wholeWordOverride","_matchCase","_matchCaseOverride","_preserveCase","_preserveCaseOverride","_searchScope","_matchesPosition","_matchesCount","_currentMatch","currentMatch","updateHistory","oldEffectiveIsRegex","oldEffectiveWholeWords","oldEffectiveMatchCase","oldEffectivePreserveCase","newSearchScope","existingSearchScope","isRegexOverride","wholeWordOverride","matchCaseOverride","preserveCaseOverride","canNavigateInLoop","NLS_DEFAULT_LABEL","FindInput","_showOptionButtons","fixFocusOnOptionClickEnabled","_onDidOptionChange","onDidOptionChange","_onInput","_onCaseSensitiveKeyDown","onCaseSensitiveKeyDown","_onRegexKeyDown","onRegexKeyDown","_lastHighlightFindOptions","appendCaseSensitiveLabel","appendWholeWordsLabel","appendRegexLabel","viaKeyboard","onkeyup","checkBoxStyles","inputBoxStyles","NLS_PRESERVE_CASE_LABEL","PreserveCaseCheckbox","ReplaceInput","cachedOptionsWidth","_onPreserveCaseKeyDown","onPreserveCaseKeyDown","appendPreserveCaseLabel","newWidth","HistoryNavigationWidgetContext","HistoryNavigationEnablementContext","getContextScopedWidget","createAndBindHistoryNavigationWidgetScopedContextKeyService","scopedContextKeyService","createWidgetScopedContextKeyService","bindContextScopedWidget","historyNavigationEnablement","ContextScopedFindInput","showFindOptions","historyNavigator","ContextScopedReplaceInput","showReplaceOptions","showPreviousValue","showNextValue","findSelectionIcon","findCollapsedIcon","findExpandedIcon","findReplaceIcon","findReplaceAllIcon","findPreviousMatchIcon","findNextMatchIcon","NLS_FIND_INPUT_LABEL","NLS_FIND_INPUT_PLACEHOLDER","NLS_PREVIOUS_MATCH_BTN_LABEL","NLS_NEXT_MATCH_BTN_LABEL","NLS_TOGGLE_SELECTION_FIND_TITLE","NLS_CLOSE_BTN_LABEL","NLS_REPLACE_INPUT_LABEL","NLS_REPLACE_INPUT_PLACEHOLDER","NLS_REPLACE_BTN_LABEL","NLS_REPLACE_ALL_BTN_LABEL","NLS_TOGGLE_REPLACE_MODE_BTN_LABEL","NLS_MATCHES_COUNT_LIMIT_TITLE","NLS_MATCHES_LOCATION","NLS_NO_RESULTS","FIND_WIDGET_INITIAL_WIDTH","MAX_MATCHES_COUNT_WIDTH","ctrlEnterReplaceAllWarningPromptedKey","FindWidgetViewZone","stopPropagationForMultiLineUpwards","textarea","isMultiline","stopPropagationForMultiLineDownwards","FindWidget","_cachedHeight","_revealTimeouts","_codeEditor","_contextViewProvider","_ctrlEnterReplaceAllWarningPrompted","_isReplaceVisible","_ignoreChangeEvent","_updateHistoryDelayer","_buildDomNode","_updateButtons","_tryUpdateWidgetWidth","_findInput","updateAccessibilitySupport","_showViewZone","_removeViewZone","_updateToggleSelectionFindButton","globalBufferTerm","getGlobalBufferTerm","_findInputFocused","_findFocusTracker","_updateSearchScope","_replaceInputFocused","_replaceFocusTracker","_replaceInput","_layoutViewZone","_tryUpdateHeight","setWholeWords","setCaseSensitive","setPreserveCase","_toggleSelectionFind","showRedOutline","_updateMatchesCount","_delayedUpdateHistory","_updateHistory","_closeBtn","findInputIsNonEmpty","_prevBtn","_nextBtn","_replaceBtn","_replaceAllBtn","_toggleReplaceBtn","setExpanded","canReplace","isSelectionMultipleLine","adjustEditorScrollTop","startCoords","startLeft","startTop","leftOfFindWidget","endCoords","focusTheEditor","clearMessage","targetScrollTop","_getHeight","adjustScroll","scrollAdjustment","editorWidth","collapsedFindWidget","reducedFindWidget","narrowFindWidget","_resized","findInputWidth","totalheight","highlightFindOptions","insertAtCursor","focusOnCaseSensitive","PART_WIDTH","_onFindInputKeyDown","getWholeWords","getCaseSensitive","focusOnPreserve","_onFindInputMouseDown","SimpleButton","onTrigger","findPart","_onReplaceInputKeyDown","getPreserveCase","replacePart","replaceActionsContainer","originalWidth","currentWidth","setFocusInputOnOptionClick","addBackgroundColorRule","findMatchHighlightBorder","findMatchBorder","findRangeHighlightBorder","resizeBorderBackground","focusOutline","getSelectionSearchString","getConfiguredWordAtPosition","CommonFindController","_findWidgetVisible","loadQueryState","shouldRestartFind","disposeModel","forceRevealReplace","seedSearchStringFromGlobalClipboard","shouldFocus","shouldAnimate","updateSearchScope","saveQueryState","setGlobalBufferTerm","actualIsRegex","actualWholeWord","actualMatchCase","actualPreserveCase","ignoreWhenVisible","stateChanges","selectionSearchString","currentSelections","moveToNextMatch","moveToPrevMatch","selectAllMatches","readFindText","writeFindText","FindController","_findOptionsWidget","_super","_createFindWidget","focusReplaceInput","focusFindInput","StartFindWithSelectionAction","getState","MatchFindAction","SelectionMatchFindAction","setSearchString","findInputFocused","isFindInputFocused","FindCommand","closeFindWidget","toggleCaseSensitive","toggleWholeWords","toggleRegex","toggleSearchScope","togglePreserveCase","MAX_LINE_NUMBER","MASK_INDENT","FoldingRegions","startIndexes","endIndexes","_startIndexes","_endIndexes","_collapseStates","_types","_parentsComputed","parentIndexes","isInsideLast","arrayIndex","FoldingRegion","ensureParentIndices","getParentIndex","FoldingModel","decorationProvider","_updateEventEmitter","_decorationProvider","_regions","_editorDecorationIds","_isInitialized","toggledRegions","regionIndex","processed","dirtyRegionEndLine","lastHiddenLine","updateDecorationsUntil","getDecorationOption","region","editorDecorationId","newCollapseState","collapseStateChanged","newRegions","blockedLineNumers","newEditorDecorations","initRange","blockedLineNumber","isBlocked","nextCollapsed","collapsedIndex","decRange","collapsedStartLineNumber","collapsedRanges","toToogle","getRegionAtLine","toggleCollapseState","findRange","toRegion","levelStack","containedBy","setCollapseStateLevelsDown","foldingModel","doCollapse","levels","toToggle","regionsInside","getRegionsInside","setCollapseStateLevelsUp","regions","getAllRegionsAtLine","setCollapseStateForRest","blockedLineNumbers","filteredRegions","filteredRegion","setCollapseStateForMatchingLines","setCollapseStateForType","foldingExpandedIcon","foldingCollapsedIcon","FoldingDecorationProvider","autoHideFoldingControls","showFoldingHighlights","HIDDEN_RANGE_DECORATION","COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION","COLLAPSED_VISUAL_DECORATION","EXPANDED_AUTO_HIDE_VISUAL_DECORATION","EXPANDED_VISUAL_DECORATION","HiddenRangeModel","_foldingModel","_foldingModelListener","updateHiddenRanges","_hiddenRanges","updateHiddenAreas","newHiddenAreas","lastCollapsedStart","lastCollapsedEnd","applyHiddenRanges","hiddenRanges","adjustLine","isInside","adjustedStartLine","adjustedEndLine","IndentRangeProvider","cancelationToken","foldingRangesLimit","RangesCollector","previousRegions","endAbove","insertFirst","toIndentRanges","computeRanges","_indentOccurrences","_foldingRangesLimit","maxIndent","foldingContext","ID_SYNTAX_PROVIDER","SyntaxRangeProvider","handleFoldingRangesChange","rangeData","provideFoldingRanges","nLines","rank","collectSyntaxRanges","sanitizeRanges","_nestingLevels","_nestingLevelCounts","nestingLevel","maxLevel","sorted","ID_INIT_PROVIDER","InitializingRangeProvider","initialRanges","timeoutTime","toDecorationRange","decorationIds","foldingRangeData","CONTEXT_FOLDING_ENABLED","FoldingController","localToDispose","_useFoldingProviders","_unfoldOnClickAfterEndOfLine","_restoringViewState","hiddenRangeModel","rangeProvider","foldingRegionPromise","foldingStateMemento","foldingModelPromise","updateScheduler","cursorChangedScheduler","mouseDownInfo","foldingDecorationProvider","foldingEnabled","onFoldingStrategyChanged","collapsedRegions","isInitialized","getMemento","applyMemento","getFoldingModel","onHiddenRangesChanges","onEditorMouseDown","onEditorMouseUp","foldingProviders","getRangeProvider","foldingRanges","selectionLineNumbers","adjustSelections","hasRanges","iconClicked","offsetLeftInGutter","otherRegion","toMaybeToggle","FoldingAction","foldingController","selectionLines","getSelectedLines","foldingArgumentsConstraint","foldingArgs","FoldLevelAction","ID_PREFIX","_foldingController","foldLevel","containsLine","setCollapseStateAtLevel","getFoldingLevel","getLineNumbers","_args","setCollapseStateUp","selectedLines","hasTypes","foldBackgroundBackground","editorFoldForeground","foldBackground","editorFoldColor","EditorFontZoomIn","EditorFontZoomOut","EditorFontZoomReset","FormatOnType","_workerService","_callOnModel","triggerChars","FormatOnPaste","FormatDocumentAction","FormatSelectionAction","InPlaceReplaceCommand","originalSelection","_editRange","_originalSelection","InPlaceReplaceController","currentRequest","modelURI","canNavigateValueSet","DECORATION","decorationRemover","InPlaceReplaceUp","InPlaceReplaceDown","getSpaceCnt","generateIndent","getReindentEditOperations","inheritedIndent","globalIndent","indentEdits","adjustedLineContent","oldIndentation","idealIndentForNextLine","IndentationToSpacesAction","modelOpts","IndentationToSpacesCommand","IndentationToTabsAction","IndentationToTabsCommand","ChangeIndentationSizeAction","creationOpts","autoFocusIndex","IndentUsingTabs","IndentUsingSpaces","DetectIndentation","ReindentLinesAction","ReindentSelectedLinesAction","AutoIndentOnPasteCommand","selectionIsSet","AutoIndentOnPaste","callOnDispose","callOnModel","shouldIgnoreLine","firstLineText","indentOfFirstLine","newSpaceCnt","newIndent","indentMetadata","indentOfSecondLine","newSpaceCntOfSecondLine","oldSpaceCntOfSecondLine","spaceCntOffset","originalIndent","cmd","firstNonWhitespaceTokenIndex","getIndentationEditOperations","tabsToSpaces","spacesRegExp","originalIndentationRange","originalIndentation","selectionId","getInlineHints","datas","provideInlineHints","InlineHintsController","_sessionDisposables","_getInlineHintsDelays","_decorationsTypeIds","_removeAllDecorations","_updateHintsDecorators","providerListener","onDidChangeInlineHints","hintsData","fontColor","newDecorationsTypeIds","newDecorationsData","hints","whitespaceBefore","whitespaceAfter","editorFontSize","TrimTrailingWhitespaceCommand","cursorIndex","cursorLen","minEditColumn","trimTrailingWhitespace","CopyLinesCommand","isCopyingDown","noop","_isCopyingDown","_selectionDirection","_startLineNumberDelta","_endLineNumberDelta","sourceLines","sourceText","MoveLinesCommand","isMovingDown","_isMovingDown","_autoIndent","_moveEndLineSelectionShrink","modelLineCount","buildIndentConverter","otherLineNumber","movingLineNumber","movingLineText","insertingText","shouldAutoIndent","movingLineMatchResult","matchEnterRule","trimLeft","indentOfMovingLine","matchEnterRuleMovingDown","getIndentEditsOfMovingBlock","newIndentatOfMovingBlock","oldSpaceCnt","oldIndent","enter","enterPrefix","indentMetadataOfMovelingLine","futureAboveLineNumber","futureAboveLineText","parseEnterResult","validPrecedingLine","oneLineAbove","languageAtSelectionStart","SortLinesCommand","descending","_COLLATOR","getSortData","sortLines","linesToSort","getCollator","AbstractCopyLinesAction","DuplicateSelectionAction","insertSelection","AbstractMoveLinesAction","AbstractSortLinesAction","canRun","TrimTrailingWhitespaceAction","DeleteLinesAction","_getLinesToRemove","linesDeleted","mergedOperations","previousOperation","IndentLinesAction","OutdentLinesAction","InsertLineBeforeAction","InsertLineAfterAction","AbstractDeleteAllToBoundaryAction","rangesToDelete","_getRangesToDelete","effectiveRanges","nextRange","_getEndCursorState","JoinLinesAction","reducedSelections","lastSelection","endPrimaryCursor","lineOffset","selectionEndPositionOffset","trimmedLinesContent","firstNonWhitespaceIdx","lineTextWithoutIndent","resultSelection","TransposeAction","AbstractCaseAction","_modifyText","BackwardsCompatibleRegExp","_flags","_evaluated","SnakeCaseAction","regExp1","regExp2","newStartLine","deleteFromLine","deleteFromColumn","toLocaleUpperCase","excludedChars","startUpperCase","CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE","DECORATION_CLASS_NAME","LinkedEditingContribution","_debounceDuration","_visibleContextKey","_currentDecorations","_languageWordPattern","_currentWordPattern","_rangeUpdateTriggerPromise","_rangeSyncTriggerPromise","_currentRequest","_currentRequestPosition","_currentRequestModelVersion","reinitialize","clearRanges","rangeUpdateScheduler","triggerRangeUpdate","updateRanges","rangeSyncScheduler","triggerRangeSync","_syncRanges","referenceRange","referenceValue","mirrorRange","oldValue","rangeStartColumn","rangeEndColumn","popUndoStop","response","getLinkedEditingRanges","foundReferenceRange","LinkedEditingAction","LinkedEditingCommand","orderedByScore","provideLinkedEditingRanges","editorLinkedEditingBackground","editorLinkedEditingBackgroundColor","Link","_link","resolveLink","LinksList","tuples","newLinks","_union","oldLinks","oldLen","oldLink","newLink","getLinks","general","active","LinkOccurrence","useMetaKey","_getOptions","executeCmd","nativeLabel","appendMarkdown","getHoverMessage","LinkDetector","clickLinkGesture","cleanUpActiveLinkDecoration","computePromise","activeLinksList","currentOccurrences","activeLinkDecorationId","occurance","occurrence","getLinkOccurrence","activate","deactivate","openLinkOccurrence","modelUri","parsedUri","relativePath","messageOrError","currentOccurrence","OpenLinkAction","linkDetector","announceCursorChange","previousCursorState","cursorDiff","cs","pcs","cursorPositions","InsertCursorAbove","logicalLine","InsertCursorBelow","InsertCursorAtEndOfEachLineSelected","currentLineMaxColumn","getCursorsForSelection","InsertCursorAtEndOfLineSelected","InsertCursorAtTopOfLineSelected","MultiCursorSessionResult","revealScrollType","MultiCursorSession","findController","isDisconnectedFromFindController","findState","allSelections","lastAddedSelection","previousMatch","_getPreviousMatch","MultiCursorSelectionController","_sessionDispose","_ignoreSelectionChange","_session","_endSession","session","_setSelections","modelRangesContainSameText","resultingSelections","_expandEmptyToWord","_beginSessionIfNeeded","_applySessionResult","addSelectionToNextFindMatch","addSelectionToPreviousFindMatch","moveSelectionToNextFindMatch","moveSelectionToPreviousFindMatch","selectAll","inSelection","MultiCursorSelectionControllerAction","multiCursorController","SelectionHighlighterState","SelectionHighlighter","updateSoon","_createState","getSession","findStateSearchString","mySearchString","softEquals","hasFindOccurrences","allMatches","_SELECTION_HIGHLIGHT","_SELECTION_HIGHLIGHT_OVERVIEW","Visible","MultipleSignatures","provideSignatureHelp","supports","triggerCharacter","triggerKind","isRetrigger","ParameterHintState","Pending","previouslyActiveHints","Active","ParameterHintsModel","DEFAULT_DELAY","_onChangedHints","onChangedHints","triggerOnType","_pendingTriggers","_lastSignatureHelpResult","retriggerChars","triggerId","throttledDelayer","onEditorConfigurationChange","onCursorChange","onModelContentChange","signatures","activeSignature","updateActiveSignature","activeSignatureHelp","getLastActiveHints","mergeTriggerContexts","triggerContext","isTriggered","signatureHelpTriggerCharacters","signatureHelpRetriggerCharacters","lastCharIndex","triggerCharCode","parameterHintsNextIcon","parameterHintsPreviousIcon","ParameterHintsWidget","renderDisposeables","announcedLabel","markdownRenderer","keyVisible","keyMultipleSignatures","newParameterHints","overloads","onPreviousClick","onNextClick","signature","docs","userSelect","domNodes","updateMaxHeight","createParamaterHintDOMNodes","hasParameters","activeParameterIndex","activeParameter","renderParameters","renderMarkdownDocs","hasDocs","labelToAnnounce","getParameterLabel","getParameterLabelOffsets","beforeSpan","paramSpan","afterSpan","paramIdx","param","ParameterHintsController","TriggerParameterHintsAction","ParameterHintsCommand","CONTEXT_RENAME_INPUT_VISIBLE","RenameInputField","_acceptKeybindings","_updateStyles","cancelInput","wantsPreview","_currentAcceptInput","_currentCancelInput","supportPreview","disposeOnDone","newName","RenameSkeleton","_providerRenameIdx","_providers","rejects","resolveRenameLocation","rejectReason","_provideRenameEdits","provideRenameEdits","RenameController","_instaService","_bulkEditService","_configService","_dispoableStore","_cts","_renameInputField","skeleton","hasProvider","loc","resolveLocationOperation","hasPreviewHandler","inputFieldResult","renameOperation","renameResult","showPreview","quotableLabel","acceptInput","RenameAction","RenameCommand","acceptRenameInput","cancelRenameInput","rename","BracketSelectionRangeProvider","_bracketsRightYield","_bracketsLeftYield","_maxRounds","_maxDuration","findPrevBracket","closing","innerBracket","outerBracket","_addBracketLeading","aboveLine","SelectionRanges","mov","SmartSelectController","_ignoreSelection","_selectionListener","forward","provideSelectionRanges","AbstractSmartSelect","_forward","work","allRawRanges","allProviderRanges","oneProviderRanges","oneRawRanges","oneRanges","oneRangesWithTrivia","rangeNoWhitespace","rangeFull","_addInWordRanges","_addWordRanges","_addWhitespaceLine","lastCh","Scanner","isDigitCharacter","isVariableCharacter","Marker","Text","newChildren","_fixParent","TextmateSnippet","TransformableMarker","Placeholder","isFinalTabstop","Choice","Transform","didMatch","_replace","FormatString","elseValue","shorthandName","ifValue","_toPascalCase","Variable","walk","visitor","_placeholders","placeholderInfo","SnippetParser","_scanner","insertFinalTabstop","enforceFinalTabstop","snippet","_parse","placeholderDefaultValues","incompletePlaceholders","placeholderCount","tokenText","nextToken","_parseEscaped","_parseTabstopOrVariableName","_parseComplexPlaceholder","_parseComplexVariable","_parseAnything","_backTo","_parseTransform","_parseChoiceElement","regexValue","regexOptions","_parseFormatString","complex","shorthand","_until","DetailsVisible","MultipleSuggestions","MakesTextEdit","AcceptSuggestionsOnEnter","HasInsertAndReplaceRange","InsertMode","CanResolve","suggestWidgetStatusbarMenu","CompletionItem","isInvalid","textLabel","labelLow","sortTextLow","sortText","filterTextLow","filterText","editStart","editInsertEnd","editReplaceEnd","resolveCompletionItem","_resolveCache","_isResolved","CompletionOptions","snippetSortOrder","kindFilter","providerFilter","_snippetSuggestSupport","CompletionItemModel","needsClipboard","durations","provideSuggestionItems","defaultReplaceRange","defaultRange","onCompletionList","insertTextRules","guessNeedsClipboard","providerName","elapsedProvider","elapsedOverall","snippetCompletions","providerGroup","provideCompletionItems","getSuggestionComparator","defaultComparator","_snippetComparators","snippetConfig","maxItemsToResolve","incomplete","completions","onlyOnceSuggestions","WORKSPACE_EXTENSION","isSingleFolderWorkspaceIdentifier","singleFolderIdentifier","_hex","_fillRandomValues","crypto","getRandomValues","CompositeSnippetVariableResolver","_delegates","SelectionBasedVariableResolver","_selectionIdx","_overtypingCapturer","getLastOvertypedInfo","lineLeadingWhitespace","varLeadingWhitespace","whitespaceCommonLength","ModelBasedVariableResolver","noPrefix","ClipboardBasedVariableResolver","_readClipboardText","_selectionCount","_spread","CommentBasedVariableResolver","TimeBasedVariableResolver","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","dayNames","getDay","dayNamesShort","monthNames","monthNamesShort","WorkspaceBasedVariableResolver","_workspaceService","workspaceIdentifier","configPath","toWorkspaceIdentifier","getWorkspace","_resolveWorkspaceName","_resoveWorkspacePath","folderpath","RandomBasedVariableResolver","generateUuid","getColorGraceful","OneSnippet","_snippet","_offset","_snippetLineLeadingWhitespace","_nestingLevel","_placeholderGroups","placeholders","compareByIndex","_placeholderGroupsIdx","_placeholderDecorations","placeholderOffset","placeholderLen","fullLen","_decor","inactiveFinal","inactive","_initDecorations","transformedValueLines","couldSkipThisPlaceholder","activePlaceholders","_hasPlaceholderBeenCollapsed","activeFinal","enclosingPlaceholder","enclosingPlaceholders","placeholdersWithEqualIndex","assert","indexLastPlaceholder","nestedPlaceholder","_defaultOptions","overwriteBefore","overwriteAfter","adjustWhitespace","overtypingCapturer","SnippetSession","_templateMerges","_snippets","_template","adjustIndentation","adjustNewlines","snippetTextString","positionColumnBefore","positionColumnAfter","snippets","workspaceService","modelBasedVariableResolver","readClipboardText","firstBeforeText","adjustSelection","firstAfterText","firstLineFirstNonWhitespace","indexedSelections","extensionBefore","extensionAfter","snippetSelection","snippetLineLeadingWhitespace","resolveVariables","createEditsAndSnippets","hasPlaceholder","oneSelection","isAtFirstPlaceholder","isAtLastPlaceholder","allPossibleSelections","computePossibleSelections","undoStopBefore","undoStopAfter","SnippetController2","_snippetListener","_modelVersionId","_inSnippet","InSnippetMode","_hasNextTabstop","HasNextTabstop","_hasPrevTabstop","HasPrevTabstop","_doInsert","_logInfo","_updateState","isSelectionWithinPlaceholders","_handleChoice","_currentChoice","triggerSuggest","resetSelection","CommandCtor","ctrl","Memory","topScore","preselect","NoMemory","SuggestMemoryService","_persistSoon","_saveState","_withStrategy","memorize","_strategyCtors","_storagePrefix","_trie","_seq","findSubstr","lineSuffix","indexPreselect","indexRecency","toJSON","ISuggestMemoryService","SuggestAlternatives","_ckOtherSuggestions","OtherSuggestions","_acceptNext","_ignore","acceptNext","_moveIndex","CompletionModel","lineContext","wordDistance","_snippetCompareFn","_compareCompletionItems","_wordDistance","_refilterKind","_lineContext","_compareCompletionItemsSnippetsUp","_compareCompletionItemsSnippetsDown","leadingLineContent","characterCountDelta","_filteredItems","_ensureCachedState","_providerInfo","except","_createCachedState","labelLengths","scoreFn","pLabelLen","WordDistance","canComputeWordRanges","wordUntilPos","wordLines","bestWordRange","blockDistance","auto","shy","SuggestModel","_quickSuggestDelay","_triggerCharacterListener","_triggerQuickSuggest","_completionDisposables","_onDidTrigger","_onDidSuggest","onDidTrigger","onDidSuggest","_telemetryGate","_updateTriggerCharacters","_updateQuickSuggest","_updateActiveSuggestSession","editorIsComposing","_refilterCompletionItems","supportsByTriggerCharacter","triggerCharacters","checkTriggerCharacter","_completionModel","adopt","_requestToken","prevSelection","isInSnippet","shouldAutoTrigger","_onNewContext","onlyFrom","suggestCtx","itemKindFilter","_createItemKindFilter","cmpFn","_reportDurationsTelemetry","suggestOptions","inactiveProvider","allProvider","oldLineContext","completionModel","SYMBOL_ICON_ARRAY_FOREGROUND","SYMBOL_ICON_BOOLEAN_FOREGROUND","SYMBOL_ICON_CLASS_FOREGROUND","SYMBOL_ICON_COLOR_FOREGROUND","SYMBOL_ICON_CONSTANT_FOREGROUND","SYMBOL_ICON_CONSTRUCTOR_FOREGROUND","SYMBOL_ICON_ENUMERATOR_FOREGROUND","SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND","SYMBOL_ICON_EVENT_FOREGROUND","SYMBOL_ICON_FIELD_FOREGROUND","SYMBOL_ICON_FILE_FOREGROUND","SYMBOL_ICON_FOLDER_FOREGROUND","SYMBOL_ICON_FUNCTION_FOREGROUND","SYMBOL_ICON_INTERFACE_FOREGROUND","SYMBOL_ICON_KEY_FOREGROUND","SYMBOL_ICON_KEYWORD_FOREGROUND","SYMBOL_ICON_METHOD_FOREGROUND","SYMBOL_ICON_MODULE_FOREGROUND","SYMBOL_ICON_NAMESPACE_FOREGROUND","SYMBOL_ICON_NULL_FOREGROUND","SYMBOL_ICON_NUMBER_FOREGROUND","SYMBOL_ICON_OBJECT_FOREGROUND","SYMBOL_ICON_OPERATOR_FOREGROUND","SYMBOL_ICON_PACKAGE_FOREGROUND","SYMBOL_ICON_PROPERTY_FOREGROUND","SYMBOL_ICON_REFERENCE_FOREGROUND","SYMBOL_ICON_SNIPPET_FOREGROUND","SYMBOL_ICON_STRING_FOREGROUND","SYMBOL_ICON_STRUCT_FOREGROUND","SYMBOL_ICON_TEXT_FOREGROUND","SYMBOL_ICON_TYPEPARAMETER_FOREGROUND","SYMBOL_ICON_UNIT_FOREGROUND","SYMBOL_ICON_VARIABLE_FOREGROUND","symbolIconArrayColor","symbolIconBooleanColor","symbolIconClassColor","symbolIconMethodColor","symbolIconColorColor","symbolIconConstantColor","symbolIconConstructorColor","symbolIconEnumeratorColor","symbolIconEnumeratorMemberColor","symbolIconEventColor","symbolIconFieldColor","symbolIconFileColor","symbolIconFolderColor","symbolIconFunctionColor","symbolIconInterfaceColor","symbolIconKeyColor","symbolIconKeywordColor","symbolIconModuleColor","outlineNamespaceColor","symbolIconNullColor","symbolIconNumberColor","symbolIconObjectColor","symbolIconOperatorColor","symbolIconPackageColor","symbolIconPropertyColor","symbolIconReferenceColor","symbolIconSnippetColor","symbolIconStringColor","symbolIconStructColor","symbolIconTextColor","symbolIconTypeParameterColor","symbolIconUnitColor","symbolIconVariableColor","ResizableHTMLElement","_onDidWillResize","onDidWillResize","_onDidResize","onDidResize","_sashListener","_minSize","_maxSize","_eastSash","_westSash","_northSash","_southSash","east","west","north","south","_preferredSize","minHeight","clearSashHoverState","canExpandCompletionItem","SuggestDetailsWidget","_onDidChangeContents","onDidChangeContents","_renderDisposeable","_borderWidth","_body","_header","_close","_docs","_configureFont","fontSizePx","lineHeightPx","borderHeight","verticalPadding","explainMode","md","commitCharacters","cappedDetail","clearContents","scrollDown","scrollUp","SuggestDetailsOverlay","topLeftNow","sizeNow","_added","_resizable","enableSashes","_topLeft","updateTopLeft","_applyTopLeft","_userSize","_anchorBox","_placeAtAnchor","sessionEnded","anchorBox","bodyBox","maxSizeTop","maxSizeBottom","alignAtTop","alignEast","minSize","maxSize","StatusBarViewItem","symbolPrintEnter","SuggestWidgetStatus","_menuDisposables","_leftActions","_rightActions","renderMenu","FileKind","getIconClasses","fileKind","ROOT_FOLDER","FOLDER","cssEscape","dotSegments","detectedModeId","detectModeId","getAriaId","suggestMoreInfoIcon","_completionItemColor","ColorExtractor","_regexStrict","_regexRelaxed","ItemRenderer","_onDidToggleDetails","onDidToggleDetails","colorspan","main","iconContainer","iconLabel","parametersLabel","qualifierLabel","detailsLabel","readMore","configureFont","labelOptions","extract","getFileIconTheme","labelClasses","FILE","detailClasses","qualifier","editorSuggestWidgetBackground","editorSuggestWidgetBorder","editorSuggestWidgetForeground","editorSuggestWidgetSelectedBackground","editorSuggestWidgetHighlightForeground","PersistedWidgetSize","SuggestWidget","_isAuto","_ignoreFocusEvents","_explainMode","_showTimeout","_onDidSelect","_onDidHide","_onDidShow","onDidSelect","onDidShow","_onDetailsKeydown","onDetailsKeyDown","SuggestContentWidget","_persistedSize","ResizeState","persistedSize","persistHeight","persistWidth","lockPreference","_resize","itemHeight","defaultSize","threshold","unlockPreference","_messageElement","_listElement","details","toggleDetails","_details","applyIconStyle","_isDetailsVisible","_status","applyStatusBarStyle","_onThemeChange","_onListMouseDownOrTap","_onListSelection","_onListFocus","_onCursorSelectionChanged","_ctxSuggestWidgetVisible","_ctxSuggestWidgetDetailsVisible","_ctxSuggestWidgetMultipleSuggestions","_loadingTimeout","_select","_detailsBorderColor","focusBorderColor","_detailsFocusBorderColor","_currentSuggestionDetails","_focusedItem","showDetails","_cappedHeight","LOADING_MESSAGE","NO_SUGGESTIONS_MESSAGE","_layout","selectionIndex","isAuto","pageDown","pageUp","_setDetailsVisible","renderLoading","renderItem","_positionDetails","dim","minPersistedHeight","setPreference","preferredWidth","stats","fullHeight","statusBarHeight","editorBox","cursorBox","cursorBottom","maxHeightBelow","maxHeightAbove","capped","wanted","preferredSize","placeAtAnchor","_preferenceLocked","_hidden","_afterRender","matchHighlight","WordContextKey","_ckAtEnd","AtEnd","_configListener","checkForWordEnd","CommitCharacterController","_onItem","getFocusedItem","_active","acceptCharacters","OvertypingCapturer","suggestModel","_lastOvertyped","selectionsLength","willOvertype","_maxSelectionLength","LineSuffix","_marker","SuggestController","_memoryService","_lineSuffix","ctxInsertMode","_insertSuggestion","commitCharacterController","ctxMakesTextEdit","ctxHasInsertAndReplace","ctxCanResolve","_alternatives","showTriggered","showSuggestions","hideWidget","acceptSuggestionsOnEnter","updateFromConfig","modelVersionNow","tasks","getOverwriteInfo","restoreRelativeVerticalPositionOfCursor","docListener","thisPosition","oldFlags","didType","typeListener","applied","TriggerSuggestAction","_alertCompletionItem","toggleMode","positionNow","makesTextEdit","keepAlternativeSuggestions","alternativeOverwriteConfig","selectNext","selectNextPage","selectLast","selectPrevious","selectPreviousPage","toggleExplainMode","toggleDetailsFocus","resetPersistedSize","SuggestCommand","acceptSelectedSuggestion","cancelSuggestWidget","selectNextSuggestion","selectNextPageSuggestion","selectLastSuggestion","selectPrevSuggestion","selectPrevPageSuggestion","selectFirstSuggestion","toggleSuggestionDetails","toggleSuggestionFocus","triggerSuggestAndAcceptBest","acceptNextSuggestion","acceptPrevSuggestion","resetWidgetSize","ToggleTabFocusModeAction","ignoreUnusualLineTerminators","UnusualLineTerminatorsDetector","_config","_checkForUnusualLineTerminators","getModelProperty","readIgnoreState","removeUnusualLineTerminators","primaryButton","secondaryButton","setModelProperty","writeIgnoreState","ViewportSemanticTokensContribution","_tokenizeViewportNow","_outstandingRequests","_cancelAll","hasSomeSemanticTokens","getSemanticTokensProviderStyling","_requestRange","requestVersionId","setPartialSemanticTokens","_removeOutstandingRequest","editorWordHighlight","editorWordHighlightStrong","editorWordHighlightBorder","editorWordHighlightStrongBorder","overviewRulerWordHighlightForeground","overviewRulerWordHighlightStrongForeground","ctxHasWordHighlights","getOccurrencesAtPosition","provideDocumentHighlights","OccurenceAtPositionRequest","_wordRange","_getCurrentWordRange","currentWordRange","requestIsValid","SemanticOccurenceAtPositionRequest","TextualOccurenceAtPositionRequest","currentSelectionIsEmpty","WordHighlighter","workerRequestTokenId","workerRequestCompleted","workerRequestValue","lastCursorPositionChangeTime","renderDecorationsTimer","_hasWordHighlights","_ignorePositionChangeEvent","_onPositionChanged","_stopAll","workerRequest","_getSortedHighlights","_getWord","workerRequestIsValid","_beginRenderDecorations","myRequestId","computeOccurencesAtPosition","minimumRenderTime","_getDecorationOptions","hasDecorations","_WRITE_OPTIONS","_TEXT_OPTIONS","_REGULAR_OPTIONS","WordHighlighterContribution","wordHighlighter","createWordHighlighterIfPossible","moveNext","moveBack","WordHighlightNavigationAction","_isNext","TriggerWordHighlightAction","wordHighlight","wordHighlightStrong","selectionHighlightBorder","wordHighlightBorder","wordHighlightStrongBorder","MoveWordCommand","_wordNavigationType","inPosition","outPosition","_moveTo","WordLeftCommand","WordRightCommand","DeleteWordCommand","_whitespaceHeuristics","DeleteWordLeftCommand","DeleteWordRightCommand","DeleteInsideWord","WordPartLeftCommand","WordPartRightCommand","CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE","AccessibilityHelpController","AccessibilityHelpWidget","_isVisibleKey","_contentDomNode","_buildContent","accessibilityHelpUrl","noKbMsg","charactersSelected","getSelectionLabel","turnOnMessage","_descriptionForCommand","ShowAccessibilityHelpAction","AccessibilityHelpCommand","IPadShowKeyboard","shouldHaveWidget","ShowKeyboardWidget","InspectTokensController","standaloneColorService","InspectTokensWidget","InspectTokens","launch","_getTokensAtLine","token1Index","tokens1","token2Index","tokens2","renderTokenText","_decodeMetadata","_tokenTypeToString","_fontStyleToString","stateBeforeLine","_getStateBeforeLine","tokenizationResult1","tokenizationResult2","startState","TriggerAction","isPicksWithActive","PickerQuickAccessProvider","picksCts","picksDisposable","updatePickerItems","picksDisposables","picksToken","picksFilter","providedPicks","getPicks","applyPicks","skipEmpty","noResultsPick","additionalPicks","isFastAndSlowPicks","fastPicksApplied","slowPicksApplied","FAST_PICKS_RACE_DELAY","awaitedAdditionalPicks","activePick","additionalActivePick","fallbackActivePick","fallbackActivePickCandidate","awaitedPicks","buttonIndex","NO_ACTION","CLOSE_PICKER","REFRESH_PICKER","REMOVE_ITEM","exceptionToErrorMessage","exception","verbose","detectSystemErrorMessage","stackToString","errno","syscall","toErrorMessage","AbstractCommandsQuickAccessProvider","PREFIX","commandsHistory","CommandsHistory","allCommandPicks","getCommandPicks","filteredCommandPicks","commandPick","WORD_FILTER","aliasHighlights","commandAlias","showAlias","mapLabelToCommand","existingCommandForLabel","commandPickA","commandPickB","commandACounter","commandBCounter","commandPicks","addSeparator","configuredCommandsHistoryLength","load","getConfiguredCommandHistoryLength","PREF_KEY_CACHE","serializedCache","usesLRU","PREF_KEY_COUNTER","configuredCommandHistoryLength","workbench","commandPalette","DEFAULT_COMMANDS_HISTORY_LENGTH","AbstractEditorCommandsQuickAccessProvider","activeTextEditorControl","editorCommandPicks","StandaloneCommandsQuickAccessProvider","getCodeEditorCommandPicks","registerQuickAccessProvider","helpEntries","needsEditor","GotoLineAction","AbstractEditorNavigationQuickAccessProvider","rangeHighlightDecorationId","pickerDisposable","doProvide","onDidActiveTextEditorControlChange","canProvideWithTextEditor","lastKnownEditorViewState","clearDecorations","provideWithTextEditor","provideWithoutTextEditor","deleteDecorations","overviewRulerDecorationId","rangeHighlightId","AbstractGotoLineQuickAccessProvider","isValidLineNumber","toRange","updatePickerAndEditor","parsePosition","getPickLabel","addDecorations","numbers","isValidColumn","positionCandidate","StandaloneGotoLineQuickAccessProvider","NO_SCORE2","scoreFuzzy2","preparedQuery","totalScore","totalMatches","queryPiece","doScoreFuzzy2Single","normalizeMatches","doScoreFuzzy2Multiple","originalLowercase","sortedMatches","matchA","matchB","normalizedMatches","matchOverlaps","prepareQuery","normalized","normalizedLowercase","normalizeQuery","containsPathSeparator","originalSplit","originalPiece","pathNormalizedPiece","normalizedPiece","normalizedLowercasePiece","pieceToQuery","AbstractGotoSymbolQuickAccessProvider","provideLabelPick","doProvideWithEditorSymbols","doProvideWithoutEditorSymbols","waitForLanguageSymbolRegistry","symbolProviderRegistryPromiseResolve","symbolProviderRegistryPromise","symbolProviderListener","forceSideBySide","symbolsPromise","doGetSymbolPicks","ignoreFirstActiveEvent","filterBySymbolKind","SCOPE_PREFIX","filterPos","symbolQuery","containerQuery","filteredSymbolPicks","symbolLabel","symbolLabelWithIcon","symbolLabelIconOffset","symbolScore","symbolMatches","containerScore","containerMatches","containerLabel","extraContainerLabel","skipContainerQuery","deprecated","openSideBySideDirection","sortedFilteredSymbolPicks","symbolA","symbolB","compareByKindAndScore","compareByScore","symbolPicks","lastSymbolKind","lastSeparator","lastSymbolKindCounter","updateLastSeparatorLabel","NLS_SYMBOL_KIND_CACHE","FALLBACK_NLS_SYMBOL_KIND","symbolPick","kindA","kindB","PREFIX_BY_CATEGORY","StandaloneGotoSymbolQuickAccessProvider","HelpQuickAccessProvider","editorProviders","globalProviders","getQuickAccessProviders","helpEntry","StandaloneReferencesController","ToggleHighContrast","_originalThemeName","DebugPlugin","draw","csv","to_csv","innerHtml","Worker_fn","wasm","heap","getObject","heap_next","takeObject","dropObject","addHeapObject","cachedTextDecoder","ignoreBOM","fatal","cachegetUint8Memory0","getUint8Memory0","getStringFromWasm0","ptr","WASM_VECTOR_LEN","cachedTextEncoder","TextEncoder","encodeString","encodeInto","buf","written","passStringToWasm0","malloc","realloc","mem","cachegetInt32Memory0","getInt32Memory0","isLikeNone","cachegetFloat64Memory0","debugString","builtInMatches","makeClosure","arg0","dtor","__wbindgen_export_2","__wbg_adapter_30","arg4","_dyn_core__ops__function__Fn__A_B_C___Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h5cbbf07d5b63bbad","makeMutClosure","__wbg_adapter_33","_dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h9bc6bd362dfecb24","__wbg_adapter_36","_dyn_core__ops__function__Fn__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h3ace638d9be6f1e7","__wbg_adapter_39","_dyn_core__ops__function__Fn__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd4f49224cffb1408","__wbg_adapter_42","_dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h7a28a94dfe31757e","__wbg_adapter_45","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h99145efd0215bac2","__wbg_adapter_48","_dyn_core__ops__function__Fn__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h35df3591e1b01f4b","stack_pointer","__wbg_adapter_51","_dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h347cb54122b292c3","addBorrowedObject","__wbg_adapter_54","_dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0394e2b66a5771fe","__wbg_adapter_57","_dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h540e3a8fcf4f1b89","handleError","__wbindgen_exn_store","register_plugin","ptr0","__wbindgen_malloc","__wbindgen_realloc","len0","set_panic_hook","PerspectiveColumnStyleElement","__wbg_perspectivecolumnstyleelement_free","js_config","js_def_config","perspectivecolumnstyleelement_new","__wrap","default_config","perspectivecolumnstyleelement_reset","perspectivecolumnstyleelement_open","perspectivecolumnstyleelement_close","perspectivecolumnstyleelement_connected_callback","PerspectiveExpressionEditorElement","__wbg_perspectiveexpressioneditorelement_free","PerspectiveVieuxElement","__wbg_perspectivevieuxelement_free","perspectivevieuxelement_new","perspectivevieuxelement_connected_callback","perspectivevieuxelement_js_load","perspectivevieuxelement_js_delete","perspectivevieuxelement_js_get_table","perspectivevieuxelement_js_restore","perspectivevieuxelement_js_download","perspectivevieuxelement_js_copy","perspectivevieuxelement_js_resize","perspectivevieuxelement_js_set_throttle","perspectivevieuxelement_js_toggle_config","perspectivevieuxelement_js_get_all_plugins","perspectivevieuxelement_js_get_plugin","perspectivevieuxelement_js_set_plugin","perspectivevieuxelement__js_open_expression_editor","async","imports","wbg","__wbindgen_object_drop_ref","__wbindgen_object_clone_ref","__wbindgen_string_new","__wbindgen_is_undefined","__wbg_onupdate_042cc48c4ebe172b","on_update","__wbg_removeupdate_7f5ee23cf4cbece4","remove_update","__wbg_errors_a44be7fab3490a0e","__wbg_delete_d6f20e1656bf4727","__wbg_setrenderwarning_ed2562f4267d31e0","render_warning","__wbg_delete_5dea69add4ef39f8","__wbg_validateexpressions_16f3760e79ca0ddb","validate_expressions","__wbg_columns_1f565bcf73ec31da","__wbg_monacomodule_8f6099ded15cc204","__wbg_numrows_06c4cefb4e96c254","num_rows","__wbg_update_be3e70d2d0e61961","arg5","arg6","__wbg_resize_f8f3032c7c9e4a45","__wbg_numcolumns_fd26f07b2b097960","num_columns","__wbg_tocsv_45aff6cd4513666d","__wbg_monacomodule_6c8356868a0f6ce3","monaco_module","__wbg_schema_4a228844610499fa","__wbg_draw_02af738a08938691","__wbg_view_f574aff16dc95e6a","__wbg_size_dd4146923a1354b2","__wbg_lineNumber_6c443045fe15cc90","__wbg_column_4a4c09ab427a8cad","__wbg_findTokenIndexAtOffset_b08bee9955b03203","__wbg_getClassName_81b41a96013249c5","__wbindgen_jsval_eq","__wbg_triggerKind_a10559b773e1fb11","__wbindgen_cb_drop","__wbg_registerdefaultpluginwebcomponent_0597df5eae9bf02f","__test_plugin__","customElements","__wbg_name_2b08aebb303ea148","__wbg_maxcolumns_200489ead164d51e","max_columns","__wbg_maxcells_5c417f5f5ea0261e","max_cells","__wbg_renderwarning_cab532b5eefe3c97","__wbg_new_e504cbc830c85429","__wbg_editor_79429b1a8b07c53a","__wbg_languages_9f62346f44bd3dc9","__wbg_create_11727e7ce22e698b","__wbg_defineTheme_59bfc4be8070ba35","__wbg_setModelMarkers_3ee94d143b5590fb","__wbg_register_690822a974223f0a","__wbg_setMonarchTokensProvider_0e800d969fdc6c3d","__wbg_setLanguageConfiguration_116bb22486bd5a54","__wbg_registerCompletionItemProvider_a64d716ad4cfe077","__wbg_getModel_5546acf334533913","__wbg_getValue_f69f08de41f77d75","__wbg_setValue_72c01a4b5c82dee6","__wbg_addCommand_2cb406c7407df33f","__wbg_focus_f340f3ae08442e5b","__wbg_onDidChangeContent_2a7e589d3846667a","__wbg_getLineTokens_9571b1df694e7b59","__wbindgen_json_parse","__wbindgen_json_serialize","__wbg_new_59cb74e423758ede","__wbg_stack_558ba5917b466edd","__wbg_error_4bb6c2a97407129a","__wbindgen_free","__wbg_instanceof_Window_fbe0320f34c4cd31","Window","__wbg_document_2b44f2a86e03665a","__wbg_navigator_74ca2cbc2348b985","__wbg_innerWidth_c4fa0fec0fd477b8","__wbg_innerHeight_6344b1c89c013158","__wbg_performance_eee010e5e49f08df","performance","__wbg_getComputedStyle_229a290295f66091","__wbg_requestAnimationFrame_65ebf8f2415064e2","__wbg_setTimeout_62ddbd1dbc58b759","__wbg_body_08ba7a3043ff8e77","__wbg_createElement_7cbe07ad3289abea","__wbg_createElementNS_ae76308e06470c87","__wbg_createTextNode_bbff6f9f6e6b38bf","__wbg_getPropertyValue_74b0b2fd345b03c9","__wbg_setProperty_e3d42ccff5ebac2f","__wbg_clientX_df24871aabb01061","__wbg_shiftKey_31c1bdd985f9be8e","__wbg_item_a479291920c028ec","__wbg_instanceof_HtmlSelectElement_9e453923d9cacda8","__wbg_value_b431982196f2362c","__wbg_instanceof_ShadowRoot_0f1ffdfecd50b13b","ShadowRoot","__wbg_host_176eeb3f3cb78943","__wbg_createObjectURL_e46eb3ca9fdf20c5","URL","createObjectURL","__wbg_instanceof_HtmlTextAreaElement_ceec64505a6bc087","HTMLTextAreaElement","__wbg_value_41a8d072fc94a8a4","__wbg_setvalue_e3b8a9c5a4ad0114","__wbg_new_9907abcf6ec2b9a0","CustomEvent","__wbg_newwitheventinitdict_db06a760c6f3e418","__wbg_instanceof_HtmlButtonElement_56d6508cc80478bf","HTMLButtonElement","__wbg_settype_ad8678a602cc664d","__wbg_namespaceURI_5ab9ad8edd6b745e","namespaceURI","__wbg_scrollTop_1524dbda93a052af","__wbg_scrollLeft_6c939d107e94c65e","__wbg_clientWidth_725008becfa6f008","__wbg_clientHeight_cd4d7e2d713d4b5f","__wbg_children_5570264a02a5348a","__wbg_attachShadow_121aeff0e52af368","__wbg_getAttribute_5d45357036c3ad3d","__wbg_getBoundingClientRect_813f74e2f4f344e2","__wbg_querySelector_f684a5b8a5f0e762","__wbg_removeAttribute_43b052e0560d223b","__wbg_setAttribute_b638fce95071fff6","__wbg_toggleAttribute_611dae8d928bf34f","toggleAttribute","__wbg_style_854f82bcc16efd28","__wbg_offsetParent_8de5608b9b91f0c9","__wbg_offsetTop_480db8118d615359","__wbg_offsetLeft_14d54d85e3caae6f","__wbg_offsetWidth_fcd49defe585c688","__wbg_offsetHeight_bb51b47c9f03728a","__wbg_blur_11fab903447f8be6","__wbg_click_5bcdaa3dfcd006fb","click","__wbg_focus_a3a607c2c1081818","__wbg_instanceof_HtmlInputElement_bd1ce15e756a8ae2","HTMLInputElement","__wbg_checked_3edadcb55226cc83","__wbg_setchecked_1fe693236b4c24f3","__wbg_files_942fbf6943996106","__wbg_settype_2628aa2562917c8e","__wbg_value_e27a74c3db49694f","__wbg_setvalue_4f1af4fbd0b9942b","__wbg_newwithu8arraysequence_717878549d30e47f","Blob","__wbg_writeText_cacf5a0e39e301cf","__wbg_now_5ae3d18d57dd226f","__wbg_top_759d072a3a15fd13","__wbg_left_515d30ed4e76f921","__wbg_target_62e7aaed452a6541","__wbg_preventDefault_4eb36ec8e5563ad6","__wbg_stopPropagation_a8397a950849e3f6","__wbg_clipboard_06b3f6375fedd3b7","__wbg_width_5c7aabd2a7489c51","__wbg_height_b3f5ccd4af20f47f","__wbg_addEventListener_63378230aa6735d7","__wbg_addEventListener_e8fdfac380f9ea25","__wbg_dispatchEvent_ff22c95b95c5d04d","__wbg_removeEventListener_19da1e4551104118","__wbg_removeEventListener_0007cd1449f82876","__wbg_nodeName_36e9b947eea43be6","__wbg_parentNode_be5a24e2fde5b638","__wbg_lastChild_5fc52139f307fbaa","__wbg_setnodeValue_7404ea475784eb1c","__wbg_textContent_8c1def1e3477ec2e","__wbg_appendChild_98dedaeac24501f2","__wbg_getRootNode_5bff1f99db838954","getRootNode","__wbg_insertBefore_5886cc01dc0233e3","__wbg_removeChild_51369e223cb8a779","__wbg_new_1abc33d4f9ba3e80","__wbg_get_a8b9619536c590d4","__wbg_length_4c7aec6f35774e3d","__wbg_push_44968dcdf4cfbb43","__wbg_instanceof_Error_ee0400be53261d48","__wbg_message_def3f4d0edb6218f","__wbg_newnoargs_ab5e899738c0eff4","__wbg_call_ab183a630df3a257","__wbg_call_7a2b5e98ac536644","__wbg_is_e8ad5aa6da4b8c83","__wbg_keys_127b01ec83516fee","__wbg_new_dc5b27cfd2149b8f","__wbg_new_bae826039151b559","state0","wasm_bindgen__convert__closures__invoke2_mut__h5daaaec26eb41140","__wbg_adapter_370","__wbg_resolve_9b0f9ddf5f89cb1e","__wbg_then_b4358f6ec1ee6657","__wbg_then_3d9a54b0affdf26d","__wbg_self_77eca7b42660e1bb","__wbg_window_51dac01569f1ba70","__wbg_globalThis_34bac2d08ebb9b58","__wbg_global_1c436164a66c9c22","__wbg_buffer_bc64154385c04ac4","__wbg_newwithbyteoffsetandlength_3c8748473807c7cf","__wbg_get_4bab9404e99a1f85","__wbg_has_09f0cde2d542e767","__wbg_set_3afd31f38e771338","__wbindgen_number_get","Float64Array","__wbindgen_string_get","__wbindgen_debug_string","__wbindgen_throw","__wbindgen_rethrow","__wbindgen_memory","__wbindgen_closure_wrapper2440","__wbindgen_closure_wrapper2442","__wbindgen_closure_wrapper2444","__wbindgen_closure_wrapper2446","__wbindgen_closure_wrapper2448","__wbindgen_closure_wrapper2450","__wbindgen_closure_wrapper3836","__wbindgen_closure_wrapper3838","__wbindgen_closure_wrapper3940","__wbindgen_closure_wrapper4015","Request","fetch","Response","WebAssembly","instantiateStreaming","bytes","arrayBuffer","instantiate","Instance","__wbindgen_wasm_module","DATA_TYPES","date","datetime","CONFIG_ALIASES","row_pivot","col_pivot","col_pivots","column_pivot","filters","sorts","CONFIG_VALID_KEYS","NUMBER_AGGREGATES","STRING_AGGREGATES","SORT_ORDERS","SORT_ORDER_IDS","TYPE_AGGREGATES","FILTER_OPERATORS","lessThan","greaterThan","lessThanOrEquals","greaterThanOrEquals","doesNotEqual","isNull","isNotNull","isIn","isNotIn","bitwiseAnd","bitwiseOr","beginsWith","BOOLEAN_FILTERS","NUMBER_FILTERS","STRING_FILTERS","DATETIME_FILTERS","COLUMN_SEPARATOR_STRING","TYPE_FILTERS","directives","isDirective","isCEPolyfill","polyfillWrapFlushCallback","removeNodes","noChange","nothing","nodeMarker","markerRegex","boundAttributeSuffix","Template","nodesToRemove","walker","createTreeWalker","lastPartIndex","hasAttributes","stringForPart","lastAttributeNameRegex","attributeLookupName","attributeValue","statics","createMarker","isTemplatePartActive","createComment","TemplateInstance","processor","__parts","cloneNode","importNode","handleTextExpression","insertAfterNode","handleAttributeExpressions","adoptNode","upgrade","policy","commentMarker","TemplateResult","isCommentBinding","commentOpen","attributeMatch","getHTML","isPrimitive","isIterable","AttributeCommitter","dirty","_createPart","AttributePart","_getValue","committer","directive","NodePart","__pendingValue","__insert","__commitText","__commitTemplateResult","__commitNode","__commitIterable","valueAsString","templateFactory","_clone","itemParts","itemPart","appendIntoPart","insertAfterPart","BooleanAttributePart","PropertyCommitter","PropertyPart","eventOptionsSupported","EventPart","eventContext","__boundHandleEvent","handleEvent","newListener","oldListener","shouldRemoveListener","shouldAddListener","__options","templateCache","templateCaches","stringsArray","keyString","getTemplateElement","appendInto","_await_index","registerPlugin","__perspective_plugins__","plugin","CLASS_PREFIX","ALLOWED_EFFECTS","DROP_EFFECTS","supportsPassive","supportsPassiveEventListeners","supportsPassiveEventListener","isDOMElement","addDocumentListener","removeDocumentListener","onEvt","prepareNodeCopyAsDragImage","srcNode","dstNode","csName","getPropertyPriority","canvasSrc","canvasDst","canvasSrcImgData","average","isTouchIdentifierContainedInTouchEvent","touchEvent","touchIdentifier","updateCentroidCoordinatesOfTouchesIn","coordinateProp","outPoint","pageXs","pageYs","touches","TRANSFORM_CSS_VENDOR_PREFIXES","translateElementToPoint","pnt","originalTransforms","centerOnCoordinates","translate","transformProp","DataTransfer","_dataStore","_setDragImageHandler","_dropEffect","clearData","determineDropEffect","sourceNode","dispatchDragEvent","dragEvent","dataStore","cancelable","leaveEvt","dndEvent","bubbles","screenX","screenY","targetRect","createDragEventFromTouch","cancelled","determineDragOperation","DragOperationController","_initialEvent","_sourceNode","_dragOperationEndedCb","_dragOperationState","_immediateUserSelection","_currentDropTarget","_lastTouchEvent","_initialTouch","_touchMoveHandler","_onTouchMove","_touchEndOrCancelHandler","_onTouchEndOrCancel","_setup","_currentDragOperation","_dragDataStore","_currentHotspotCoordinates","_dragImagePageCoordinates","dragImageSrc","_dataTransfer","_dragImageOffset","_cleanup","dragImageSetup","_dragImageTransforms","_dragImage","dragImageOffset","dragImageCenterOnTouch","_iterationIntervalId","_iterationLock","_dragAndDropProcessModelIteration","iterationInterval","startDrag","dragStartConditionOverride","dragImageTranslateOverride","handledDragImageTranslate_1","previousDragOperation","dragCancelled","_dragOperationEnded","sourceEl","dragImageTransforms","transitionEndCb","csDragImage","durationInS","transitionDuration","delayInS","transitionDelay","durationInMs","applyDragImageSnapback","_finishDragOperation","newUserSelection","previousTargetElement","currentDragOperationClass","dragFailed","tryFindDraggableTarget","activeDragOperation","onTouchstart","composePath","dragTarget","dragOperationEnded","onDelayTouchstart","composedPath","onReleasedItem","scroll","EVENT_PREFIX","holdToDrag","defaultActionOverride","registerElement","templateString","styleString","importTemplate","setTemplateContent","is_locked","old","_initializing","_initialized","attributeChangedCallback","_setAttributeSafe","connectedCallback","_vieux","bindTemplate","styleStrings","cls","_default","old_set","forceApply","detectedFeatures","features","dragEvents","userAgentSupportingNativeDnD","isBlinkEngine","chrome","detectFeatures","polyfill","cp","_path","invertPromise","throttlePromise","throttleOnce","gen","swap","elems","json_attribute","array_attribute","getExpressionAlias","findExpressionByAlias","expressions","SPAN","get_text_width","_option_template","agg","_select_template","category","perspective","weighted_options","_weights","has_weighted_mean","set_weights","xs","type_config","get_type_config","agg_dropdown","filter_dropdown","filter_operand","_update_filter","choices","filter_operator","_filter_operand","operator","filter_input","operand","_set_default_aggregate","def_aggregate","_blur_agg_dropdown","_set_data_transfer","_register_ids","_li","_row_close","_agg_dropdown","_sort_order","_filter_operator","_column_aggregate_category","_focus_agg_dropdown","_register_callbacks","debounced_filter","calc_index","_active_columns","is_last_null","cidx","last_index","dragend","attr_name","attr_value","currentTarget","DRAG_COUNT_MAP","_drop_target_hover","data_index","filtering","get_plugin","deselectMode","_get_visible_column_count","_update_column_view","_debounce_update","column_dragend","column_dragleave","_drop_target_null","_original_index","_unset_drop_target_null","column_swap","new_index","column_replace","column_dragover","current_index","over_elem","to_replace","is_diff","from_active","from_replace","from_append","from_required","to_null","column_drop","dragover","dragenterleave","dragHoverCount","dragenter","dragleave","StateElement","_get_view_dom_columns","_get_view_active_columns","_get_view_active_valid_columns","_get_view_inactive_columns","_get_view_all_column_names","_get_view_active_column_names","_get_view_all_valid_column_names","_get_view_active_valid_column_names","_get_view_active_valid_column_count","_get_view_columns","_get_view_aggregates","_get_view_row_pivots","_get_view_column_pivots","_get_view_filter_nodes","_get_view_filters","_get_view_sorts","_get_view_expressions","get_aggregate_attribute","aggs","new_aggs","_aggregate_defaults","TYPE_ORDER","PerspectiveElement","_initial_col_order","valid_expressions","expression_schema","valid_expression_alias","validate_results","s1","s2","column_sorter","aggregates","aggregate_attribute","get_aggregates_with_defaults","shown","get_aggregate_defaults","_clear_columns","_new_row","_inactive_columns","active_row","_columns_container","_show_column_container","_show_top_panel","_show_side_panel_actions","_edit_port","make_port","_edit_port_lock","force_update","operandNode","getElementById","exclamation","is_valid_filter","_check_responsive_layout","row_pivots","column_pivots","_validate_filters","view_aggregates","_view","_check_loaded_table","_table_resolver","_load_table","plugins","get_all_plugins","restyleElement","_set_updating","_updating_promise","_new_view","DomElement","set_aggregate_attribute","is_set","_get_type","_set_row_type","weights","_filter_view","nrows","to_json","_autocomplete_choices","_column_visibility_clicked","_column_aggregate_clicked","_column_filter_clicked","_sort_order_clicked","raw_expr","getRawExpression","_update_expressions_view","added_count","reset_columns_attr","_diff_expressions","old_expressions","new_expressions","to_remove","_reset_expressions_view","table_columns","inactive_expressions","pop_cols","_cached_plugin","_update_column_view_sync","json_cols","_update_column_list","active_columns","next_col","_set_row_styles","nidx","_remove_null_columns","since_index","_set_column_defaults","active_cols","valid_active_cols","_fill_numeric","selectMode","bypass","side_panel","_side_panel","app","_persisted_side_panel_width","panel","_pre_resize","_app","_aggregate_selector","_vis_selector","_filters","_row_pivots","_column_pivots","_datavis","_side_panel_actions","_add_expression_button","_top_panel","_sort","_transpose_button","row_path","__ROW_PATH__","toLocaleString","ActionElement","post","_open_expression_editor","stopImmediatePropagation","_close_expression_editor","_save_expression","is_duplicate","_expression_editor","type_check_expression","_ev","min_columns","new_aggregates","updated_agg","new_filters","_updating_filter","_increment_sort","column_sorting","abs_sorting","sort_orders","new_sort_order","_transpose","has_row","has_col","_vis_selector_changed","classname","PERSISTENT_ATTRIBUTES","_show_config","_show_warnings","_resize_handler","notifyResize","inner","validation_results","validated_expressions","clear_expressions","active_expressions","fterms","js_set_plugin","pivot","setThrottle","_table_resolve","_restyle_plugin","plugin_config","plugin_promise","update_promise","download","toggleConfig","DEFAULT_CONFIG","mergeDeep","get_types","get_config","__PERSPECTIVE_CONFIG__","override_config","__TEMPLATE_CONFIG__","minimumFractionDigits","maximumFractionDigits","week","year","month","day","hour","minute","null_value","workerConstructor","workerOptions","blob","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","webkitURL","objectURL","revokeObjectURL","__webpack_module_cache__","__webpack_require__","__webpack_modules__","amdO","getter","__esModule","scriptUrl","currentScript","scripts"],"mappings":"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","file":"perspective-viewer.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(self, function() {\nreturn ","/**\n * Simple, lightweight, usable local autocomplete library for modern browsers\n * Because there weren’t enough autocomplete scripts in the world? Because I’m completely insane and have NIH syndrome? Probably both. :P\n * @author Lea Verou http://leaverou.github.io/awesomplete\n * MIT license\n */\n\n(function () {\n\nvar _ = function (input, o) {\n\tvar me = this;\n\n // Keep track of number of instances for unique IDs\n _.count = (_.count || 0) + 1;\n this.count = _.count;\n\n\t// Setup\n\n\tthis.isOpened = false;\n\n\tthis.input = $(input);\n\tthis.input.setAttribute(\"autocomplete\", \"off\");\n\tthis.input.setAttribute(\"aria-expanded\", \"false\");\n\tthis.input.setAttribute(\"aria-owns\", \"awesomplete_list_\" + this.count);\n\tthis.input.setAttribute(\"role\", \"combobox\");\n\n\t// store constructor options in case we need to distinguish\n\t// between default and customized behavior later on\n\tthis.options = o = o || {};\n\n\tconfigure(this, {\n\t\tminChars: 2,\n\t\tmaxItems: 10,\n\t\tautoFirst: false,\n\t\tdata: _.DATA,\n\t\tfilter: _.FILTER_CONTAINS,\n\t\tsort: o.sort === false ? false : _.SORT_BYLENGTH,\n\t\tcontainer: _.CONTAINER,\n\t\titem: _.ITEM,\n\t\treplace: _.REPLACE,\n\t\ttabSelect: false\n\t}, o);\n\n\tthis.index = -1;\n\n\t// Create necessary elements\n\n\tthis.container = this.container(input);\n\n\tthis.ul = $.create(\"ul\", {\n\t\thidden: \"hidden\",\n role: \"listbox\",\n id: \"awesomplete_list_\" + this.count,\n\t\tinside: this.container\n\t});\n\n\tthis.status = $.create(\"span\", {\n\t\tclassName: \"visually-hidden\",\n\t\trole: \"status\",\n\t\t\"aria-live\": \"assertive\",\n \"aria-atomic\": true,\n inside: this.container,\n textContent: this.minChars != 0 ? (\"Type \" + this.minChars + \" or more characters for results.\") : \"Begin typing for results.\"\n\t});\n\n\t// Bind events\n\n\tthis._events = {\n\t\tinput: {\n\t\t\t\"input\": this.evaluate.bind(this),\n\t\t\t\"blur\": this.close.bind(this, { reason: \"blur\" }),\n\t\t\t\"keydown\": function(evt) {\n\t\t\t\tvar c = evt.keyCode;\n\n\t\t\t\t// If the dropdown `ul` is in view, then act on keydown for the following keys:\n\t\t\t\t// Enter / Esc / Up / Down\n\t\t\t\tif(me.opened) {\n\t\t\t\t\tif (c === 13 && me.selected) { // Enter\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tme.select(undefined, undefined, evt);\n\t\t\t\t\t}\n\t\t\t\t\telse if (c === 9 && me.selected && me.tabSelect) {\n\t\t\t\t\t\tme.select(undefined, undefined, evt);\n\t\t\t\t\t}\n\t\t\t\t\telse if (c === 27) { // Esc\n\t\t\t\t\t\tme.close({ reason: \"esc\" });\n\t\t\t\t\t}\n\t\t\t\t\telse if (c === 38 || c === 40) { // Down/Up arrow\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tme[c === 38? \"previous\" : \"next\"]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tform: {\n\t\t\t\"submit\": this.close.bind(this, { reason: \"submit\" })\n\t\t},\n\t\tul: {\n\t\t\t// Prevent the default mousedowm, which ensures the input is not blurred.\n\t\t\t// The actual selection will happen on click. This also ensures dragging the\n\t\t\t// cursor away from the list item will cancel the selection\n\t\t\t\"mousedown\": function(evt) {\n\t\t\t\tevt.preventDefault();\n\t\t\t},\n\t\t\t// The click event is fired even if the corresponding mousedown event has called preventDefault\n\t\t\t\"click\": function(evt) {\n\t\t\t\tvar li = evt.target;\n\n\t\t\t\tif (li !== this) {\n\n\t\t\t\t\twhile (li && !/li/i.test(li.nodeName)) {\n\t\t\t\t\t\tli = li.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (li && evt.button === 0) { // Only select on left click\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tme.select(li, evt.target, evt);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$.bind(this.input, this._events.input);\n\t$.bind(this.input.form, this._events.form);\n\t$.bind(this.ul, this._events.ul);\n\n\tif (this.input.hasAttribute(\"list\")) {\n\t\tthis.list = \"#\" + this.input.getAttribute(\"list\");\n\t\tthis.input.removeAttribute(\"list\");\n\t}\n\telse {\n\t\tthis.list = this.input.getAttribute(\"data-list\") || o.list || [];\n\t}\n\n\t_.all.push(this);\n};\n\n_.prototype = {\n\tset list(list) {\n\t\tif (Array.isArray(list)) {\n\t\t\tthis._list = list;\n\t\t}\n\t\telse if (typeof list === \"string\" && list.indexOf(\",\") > -1) {\n\t\t\t\tthis._list = list.split(/\\s*,\\s*/);\n\t\t}\n\t\telse { // Element or CSS selector\n\t\t\tlist = $(list);\n\n\t\t\tif (list && list.children) {\n\t\t\t\tvar items = [];\n\t\t\t\tslice.apply(list.children).forEach(function (el) {\n\t\t\t\t\tif (!el.disabled) {\n\t\t\t\t\t\tvar text = el.textContent.trim();\n\t\t\t\t\t\tvar value = el.value || text;\n\t\t\t\t\t\tvar label = el.label || text;\n\t\t\t\t\t\tif (value !== \"\") {\n\t\t\t\t\t\t\titems.push({ label: label, value: value });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis._list = items;\n\t\t\t}\n\t\t}\n\n\t\tif (document.activeElement === this.input) {\n\t\t\tthis.evaluate();\n\t\t}\n\t},\n\n\tget selected() {\n\t\treturn this.index > -1;\n\t},\n\n\tget opened() {\n\t\treturn this.isOpened;\n\t},\n\n\tclose: function (o) {\n\t\tif (!this.opened) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.input.setAttribute(\"aria-expanded\", \"false\");\n\t\tthis.ul.setAttribute(\"hidden\", \"\");\n\t\tthis.isOpened = false;\n\t\tthis.index = -1;\n\n\t\tthis.status.setAttribute(\"hidden\", \"\");\n\n\t\t$.fire(this.input, \"awesomplete-close\", o || {});\n\t},\n\n\topen: function () {\n\t\tthis.input.setAttribute(\"aria-expanded\", \"true\");\n\t\tthis.ul.removeAttribute(\"hidden\");\n\t\tthis.isOpened = true;\n\n\t\tthis.status.removeAttribute(\"hidden\");\n\n\t\tif (this.autoFirst && this.index === -1) {\n\t\t\tthis.goto(0);\n\t\t}\n\n\t\t$.fire(this.input, \"awesomplete-open\");\n\t},\n\n\tdestroy: function() {\n\t\t//remove events from the input and its form\n\t\t$.unbind(this.input, this._events.input);\n\t\t$.unbind(this.input.form, this._events.form);\n\n\t\t// cleanup container if it was created by Awesomplete but leave it alone otherwise\n\t\tif (!this.options.container) {\n\t\t\t//move the input out of the awesomplete container and remove the container and its children\n\t\t\tvar parentNode = this.container.parentNode;\n\n\t\t\tparentNode.insertBefore(this.input, this.container);\n\t\t\tparentNode.removeChild(this.container);\n\t\t}\n\n\t\t//remove autocomplete and aria-autocomplete attributes\n\t\tthis.input.removeAttribute(\"autocomplete\");\n\t\tthis.input.removeAttribute(\"aria-autocomplete\");\n\n\t\t//remove this awesomeplete instance from the global array of instances\n\t\tvar indexOfAwesomplete = _.all.indexOf(this);\n\n\t\tif (indexOfAwesomplete !== -1) {\n\t\t\t_.all.splice(indexOfAwesomplete, 1);\n\t\t}\n\t},\n\n\tnext: function () {\n\t\tvar count = this.ul.children.length;\n\t\tthis.goto(this.index < count - 1 ? this.index + 1 : (count ? 0 : -1) );\n\t},\n\n\tprevious: function () {\n\t\tvar count = this.ul.children.length;\n\t\tvar pos = this.index - 1;\n\n\t\tthis.goto(this.selected && pos !== -1 ? pos : count - 1);\n\t},\n\n\t// Should not be used, highlights specific item without any checks!\n\tgoto: function (i) {\n\t\tvar lis = this.ul.children;\n\n\t\tif (this.selected) {\n\t\t\tlis[this.index].setAttribute(\"aria-selected\", \"false\");\n\t\t}\n\n\t\tthis.index = i;\n\n\t\tif (i > -1 && lis.length > 0) {\n\t\t\tlis[i].setAttribute(\"aria-selected\", \"true\");\n\n\t\t\tthis.status.textContent = lis[i].textContent + \", list item \" + (i + 1) + \" of \" + lis.length;\n\n this.input.setAttribute(\"aria-activedescendant\", this.ul.id + \"_item_\" + this.index);\n\n\t\t\t// scroll to highlighted element in case parent's height is fixed\n\t\t\tthis.ul.scrollTop = lis[i].offsetTop - this.ul.clientHeight + lis[i].clientHeight;\n\n\t\t\t$.fire(this.input, \"awesomplete-highlight\", {\n\t\t\t\ttext: this.suggestions[this.index]\n\t\t\t});\n\t\t}\n\t},\n\n\tselect: function (selected, origin, originalEvent) {\n\t\tif (selected) {\n\t\t\tthis.index = $.siblingIndex(selected);\n\t\t} else {\n\t\t\tselected = this.ul.children[this.index];\n\t\t}\n\n\t\tif (selected) {\n\t\t\tvar suggestion = this.suggestions[this.index];\n\n\t\t\tvar allowed = $.fire(this.input, \"awesomplete-select\", {\n\t\t\t\ttext: suggestion,\n\t\t\t\torigin: origin || selected,\n\t\t\t\toriginalEvent: originalEvent\n\t\t\t});\n\n\t\t\tif (allowed) {\n\t\t\t\tthis.replace(suggestion);\n\t\t\t\tthis.close({ reason: \"select\" });\n\t\t\t\t$.fire(this.input, \"awesomplete-selectcomplete\", {\n\t\t\t\t\ttext: suggestion,\n\t\t\t\t\toriginalEvent: originalEvent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\n\tevaluate: function() {\n\t\tvar me = this;\n\t\tvar value = this.input.value;\n\n\t\tif (value.length >= this.minChars && this._list && this._list.length > 0) {\n\t\t\tthis.index = -1;\n\t\t\t// Populate list with options that match\n\t\t\tthis.ul.innerHTML = \"\";\n\n\t\t\tthis.suggestions = this._list\n\t\t\t\t.map(function(item) {\n\t\t\t\t\treturn new Suggestion(me.data(item, value));\n\t\t\t\t})\n\t\t\t\t.filter(function(item) {\n\t\t\t\t\treturn me.filter(item, value);\n\t\t\t\t});\n\n\t\t\tif (this.sort !== false) {\n\t\t\t\tthis.suggestions = this.suggestions.sort(this.sort);\n\t\t\t}\n\n\t\t\tthis.suggestions = this.suggestions.slice(0, this.maxItems);\n\n\t\t\tthis.suggestions.forEach(function(text, index) {\n\t\t\t\t\tme.ul.appendChild(me.item(text, value, index));\n\t\t\t\t});\n\n\t\t\tif (this.ul.children.length === 0) {\n\n this.status.textContent = \"No results found\";\n\n\t\t\t\tthis.close({ reason: \"nomatches\" });\n\n\t\t\t} else {\n\t\t\t\tthis.open();\n\n this.status.textContent = this.ul.children.length + \" results found\";\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.close({ reason: \"nomatches\" });\n\n this.status.textContent = \"No results found\";\n\t\t}\n\t}\n};\n\n// Static methods/properties\n\n_.all = [];\n\n_.FILTER_CONTAINS = function (text, input) {\n\treturn RegExp($.regExpEscape(input.trim()), \"i\").test(text);\n};\n\n_.FILTER_STARTSWITH = function (text, input) {\n\treturn RegExp(\"^\" + $.regExpEscape(input.trim()), \"i\").test(text);\n};\n\n_.SORT_BYLENGTH = function (a, b) {\n\tif (a.length !== b.length) {\n\t\treturn a.length - b.length;\n\t}\n\n\treturn a < b? -1 : 1;\n};\n\n_.CONTAINER = function (input) {\n\treturn $.create(\"div\", {\n\t\tclassName: \"awesomplete\",\n\t\taround: input\n\t});\n}\n\n_.ITEM = function (text, input, item_id) {\n\tvar html = input.trim() === \"\" ? text : text.replace(RegExp($.regExpEscape(input.trim()), \"gi\"), \"<mark>$&</mark>\");\n\treturn $.create(\"li\", {\n\t\tinnerHTML: html,\n\t\t\"role\": \"option\",\n\t\t\"aria-selected\": \"false\",\n\t\t\"id\": \"awesomplete_list_\" + this.count + \"_item_\" + item_id\n\t});\n};\n\n_.REPLACE = function (text) {\n\tthis.input.value = text.value;\n};\n\n_.DATA = function (item/*, input*/) { return item; };\n\n// Private functions\n\nfunction Suggestion(data) {\n\tvar o = Array.isArray(data)\n\t ? { label: data[0], value: data[1] }\n\t : typeof data === \"object\" && \"label\" in data && \"value\" in data ? data : { label: data, value: data };\n\n\tthis.label = o.label || o.value;\n\tthis.value = o.value;\n}\nObject.defineProperty(Suggestion.prototype = Object.create(String.prototype), \"length\", {\n\tget: function() { return this.label.length; }\n});\nSuggestion.prototype.toString = Suggestion.prototype.valueOf = function () {\n\treturn \"\" + this.label;\n};\n\nfunction configure(instance, properties, o) {\n\tfor (var i in properties) {\n\t\tvar initial = properties[i],\n\t\t attrValue = instance.input.getAttribute(\"data-\" + i.toLowerCase());\n\n\t\tif (typeof initial === \"number\") {\n\t\t\tinstance[i] = parseInt(attrValue);\n\t\t}\n\t\telse if (initial === false) { // Boolean options must be false by default anyway\n\t\t\tinstance[i] = attrValue !== null;\n\t\t}\n\t\telse if (initial instanceof Function) {\n\t\t\tinstance[i] = null;\n\t\t}\n\t\telse {\n\t\t\tinstance[i] = attrValue;\n\t\t}\n\n\t\tif (!instance[i] && instance[i] !== 0) {\n\t\t\tinstance[i] = (i in o)? o[i] : initial;\n\t\t}\n\t}\n}\n\n// Helpers\n\nvar slice = Array.prototype.slice;\n\nfunction $(expr, con) {\n\treturn typeof expr === \"string\"? (con || document).querySelector(expr) : expr || null;\n}\n\nfunction $$(expr, con) {\n\treturn slice.call((con || document).querySelectorAll(expr));\n}\n\n$.create = function(tag, o) {\n\tvar element = document.createElement(tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t\tif (ref.getAttribute(\"autofocus\") != null) {\n\t\t\t\tref.focus();\n\t\t\t}\n\t\t}\n\t\telse if (i in element) {\n\t\t\telement[i] = val;\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(i, val);\n\t\t}\n\t}\n\n\treturn element;\n};\n\n$.bind = function(element, o) {\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function (event) {\n\t\t\t\telement.addEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n};\n\n$.unbind = function(element, o) {\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function(event) {\n\t\t\t\telement.removeEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n};\n\n$.fire = function(target, type, properties) {\n\tvar evt = document.createEvent(\"HTMLEvents\");\n\n\tevt.initEvent(type, true, true );\n\n\tfor (var j in properties) {\n\t\tevt[j] = properties[j];\n\t}\n\n\treturn target.dispatchEvent(evt);\n};\n\n$.regExpEscape = function (s) {\n\treturn s.replace(/[-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n};\n\n$.siblingIndex = function (el) {\n\t/* eslint-disable no-cond-assign */\n\tfor (var i = 0; el = el.previousElementSibling; i++);\n\treturn i;\n};\n\n// Initialization\n\nfunction init() {\n\t$$(\"input.awesomplete\").forEach(function (input) {\n\t\tnew _(input);\n\t});\n}\n\n// Make sure to export Awesomplete on self when in a browser\nif (typeof self !== \"undefined\") {\n\tself.Awesomplete = _;\n}\n\n// Are we in a browser? Check for Document constructor\nif (typeof Document !== \"undefined\") {\n\t// DOM already loaded?\n\tif (document.readyState !== \"loading\") {\n\t\tinit();\n\t}\n\telse {\n\t\t// Wait for it\n\t\tdocument.addEventListener(\"DOMContentLoaded\", init);\n\t}\n}\n\n_.$ = $;\n_.$$ = $$;\n\n// Expose Awesomplete as a CJS module\nif (typeof module === \"object\" && module.exports) {\n\tmodule.exports = _;\n}\n\nreturn _;\n\n}());\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar has = require('../internals/has');\n\nvar defineProperty = Object.defineProperty;\nvar cache = {};\n\nvar thrower = function (it) { throw it; };\n\nmodule.exports = function (METHOD_NAME, options) {\n if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];\n if (!options) options = {};\n var method = [][METHOD_NAME];\n var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;\n var argument0 = has(options, 0) ? options[0] : thrower;\n var argument1 = has(options, 1) ? options[1] : undefined;\n\n return cache[METHOD_NAME] = !!method && !fails(function () {\n if (ACCESSORS && !DESCRIPTORS) return true;\n var O = { length: -1 };\n\n if (ACCESSORS) defineProperty(O, 1, { enumerable: true, get: thrower });\n else O[1] = 1;\n\n method.call(O, argument0, argument1);\n });\n};\n","var aFunction = require('../internals/a-function');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = toLength(O.length);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n version = match[0] + match[1];\n} else if (userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = match[1];\n }\n}\n\nmodule.exports = version && +version;\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar regexpExec = require('../internals/regexp-exec');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nmodule.exports = function (KEY, length, exec, sham) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !(\n REPLACE_SUPPORTS_NAMED_GROUPS &&\n REPLACE_KEEPS_$0 &&\n !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n )) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }, {\n REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n });\n var stringMethod = methods[0];\n var regexMethod = methods[1];\n\n redefine(String.prototype, KEY, stringMethod);\n redefine(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return regexMethod.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return regexMethod.call(string, this); }\n );\n }\n\n if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar replace = ''.replace;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line no-undef\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func\n (function () { return this; })() || Function('return this')();\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = {};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n metadata.facade = it;\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","module.exports = false;\n","'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n // eslint-disable-next-line no-undef\n return !String(Symbol());\n});\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar aFunction = require('../internals/a-function');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n};\n\n// 25.4.1.5 NewPromiseCapability(C)\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","exports.f = Object.getOwnPropertySymbols;\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","var anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var state;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) {\n createNonEnumerableProperty(value, 'name', key);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","'use strict';\nvar regexpFlags = require('./regexp-flags');\nvar stickyHelpers = require('./regexp-sticky-helpers');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = String(str).slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar fails = require('./fails');\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n var re = RE('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = RE('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.8.2',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var anObject = require('../internals/an-object');\nvar aFunction = require('../internals/a-function');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aFunction(S);\n};\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.es/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n // eslint-disable-next-line no-undef\n && !Symbol.sham\n // eslint-disable-next-line no-undef\n && typeof Symbol.iterator == 'symbol';\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name)) {\n if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar $ = require('../internals/export');\nvar $reduce = require('../internals/array-reduce').left;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar arrayMethodUsesToLength = require('../internals/array-method-uses-to-length');\nvar CHROME_VERSION = require('../internals/engine-v8-version');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar STRICT_METHOD = arrayMethodIsStrict('reduce');\nvar USES_TO_LENGTH = arrayMethodUsesToLength('reduce', { 1: 0 });\n// Chrome 80-82 has a critical bug\n// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982\nvar CHROME_BUG = !IS_NODE && CHROME_VERSION > 79 && CHROME_VERSION < 83;\n\n// `Array.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-array.prototype.reduce\n$({ target: 'Array', proto: true, forced: !STRICT_METHOD || !USES_TO_LENGTH || CHROME_BUG }, {\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// patch native Promise.prototype for native async functions\nif (!IS_PURE && typeof NativePromise == 'function' && !NativePromise.prototype['finally']) {\n redefine(NativePromise.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar max = Math.max;\nvar min = Math.min;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n});\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-action-bar{white-space:nowrap;height:100%}.monaco-action-bar .actions-container{display:flex;margin:0 auto;padding:0;height:100%;width:100%;align-items:center}.monaco-action-bar.vertical .actions-container{display:inline-block}.monaco-action-bar .action-item{display:block;align-items:center;justify-content:center;cursor:pointer;position:relative}.monaco-action-bar .action-item.disabled{cursor:default}.monaco-action-bar .action-item .icon,\\n.monaco-action-bar .action-item .codicon{display:block}.monaco-action-bar .action-item .codicon{display:flex;align-items:center;width:16px;height:16px}.monaco-action-bar .action-label{font-size:11px;padding:3px;border-radius:5px}.monaco-action-bar .action-item.disabled .action-label,\\n.monaco-action-bar .action-item.disabled .action-label::before,\\n.monaco-action-bar .action-item.disabled .action-label:hover{opacity:0.4}.monaco-action-bar.vertical{text-align:left}.monaco-action-bar.vertical .action-item{display:block}.monaco-action-bar.vertical .action-label.separator{display:block;border-bottom:1px solid #bbb;padding-top:1px;margin-left:.8em;margin-right:.8em}.secondary-actions .monaco-action-bar .action-label{margin-left:6px}.monaco-action-bar .action-item.select-container{overflow:hidden;flex:1;max-width:170px;min-width:60px;display:flex;align-items:center;justify-content:center;margin-right:10px}.monaco-action-bar .action-item.action-dropdown-item{display:flex}.monaco-action-bar .action-item.action-dropdown-item > .action-label{margin-right:1px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-aria-container{position:absolute;left:-999em}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-text-button{box-sizing:border-box;display:flex;width:100%;padding:4px;text-align:center;cursor:pointer;justify-content:center;align-items:center}.monaco-text-button:focus{outline-offset:2px!important}.monaco-text-button:hover{text-decoration:none!important}.monaco-button.disabled:focus,\\n.monaco-button.disabled{opacity:0.4!important;cursor:default}.monaco-text-button > .codicon{margin:0 0.2em;color:inherit!important}.monaco-button-dropdown{display:flex}.monaco-button-dropdown > .monaco-dropdown-button{margin-left:1px}.monaco-description-button{flex-direction:column}.monaco-description-button .monaco-button-label{font-weight:500}.monaco-description-button .monaco-button-description{font-style:italic}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-custom-checkbox{margin-left:2px;float:left;cursor:pointer;overflow:hidden;opacity:0.7;width:20px;height:20px;border:1px solid transparent;padding:1px;box-sizing:border-box;user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-custom-checkbox:hover,\\n.monaco-custom-checkbox.checked{opacity:1}.hc-black .monaco-custom-checkbox{background:none}.hc-black .monaco-custom-checkbox:hover{background:none}.monaco-custom-checkbox.monaco-simple-checkbox{height:18px;width:18px;border:1px solid transparent;border-radius:3px;margin-right:9px;margin-left:0px;padding:0px;opacity:1;background-size:16px!important}.monaco-custom-checkbox.monaco-simple-checkbox:not(.checked)::before{visibility:hidden}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".codicon-wrench-subaction{opacity:0.5}@keyframes codicon-spin{100%{transform:rotate(360deg)}}.codicon-sync.codicon-modifier-spin,\\n.codicon-loading.codicon-modifier-spin,\\n.codicon-gear.codicon-modifier-spin,\\n.codicon-notebook-state-executing.codicon-modifier-spin{animation:codicon-spin 1.5s steps(30) infinite}.codicon-modifier-disabled{opacity:0.4}.codicon-loading,\\n.codicon-tree-item-loading::before{animation-duration:1s!important;animation-timing-function:cubic-bezier(0.53,0.21,0.29,0.67)!important}\", \"\"]);\n\n// exports\n","var escape = require(\"../../../../../../../../css-loader/lib/url/escape.js\");\nexports = module.exports = require(\"../../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"@font-face{font-family:\\\"codicon\\\";src:url(\" + escape(require(\"./codicon.ttf\")) + \") format(\\\"truetype\\\")}.codicon[class*='codicon-']{font:normal normal normal 16px/1 codicon;display:inline-block;text-decoration:none;text-rendering:auto;text-align:center;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;user-select:none;-webkit-user-select:none;-ms-user-select:none}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".context-view{position:absolute;z-index:2500}.context-view.fixed{all:initial;font-family:inherit;font-size:13px;position:fixed;z-index:2500;color:inherit}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-count-badge{padding:3px 6px;border-radius:11px;font-size:11px;min-width:18px;min-height:18px;line-height:11px;font-weight:normal;text-align:center;display:inline-block;box-sizing:border-box}.monaco-count-badge.long{padding:2px 3px;border-radius:2px;min-height:auto;line-height:normal}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-dropdown{height:100%;padding:0}.monaco-dropdown > .dropdown-label{cursor:pointer;height:100%;display:flex;align-items:center;justify-content:center}.monaco-dropdown > .dropdown-label > .action-label.disabled{cursor:default}.monaco-dropdown-with-primary{display:flex!important;flex-direction:row;border-radius:5px}.monaco-dropdown-with-primary > .action-container > .action-label{margin-right:0}.monaco-dropdown-with-primary > .dropdown-action-container > .monaco-dropdown > .dropdown-label .codicon[class*='codicon-']{font-size:12px;padding-left:0px;padding-right:0px;line-height:16px;margin-left:-4px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-findInput{position:relative}.monaco-findInput .monaco-inputbox{font-size:13px;width:100%}.monaco-findInput > .controls{position:absolute;top:3px;right:2px}.vs .monaco-findInput.disabled{background-color:#E1E1E1}.vs-dark .monaco-findInput.disabled{background-color:#333}.monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-0 100ms linear 0s}.monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-1 100ms linear 0s}.hc-black .monaco-findInput.highlight-0 .controls,\\n.vs-dark .monaco-findInput.highlight-0 .controls{animation:monaco-findInput-highlight-dark-0 100ms linear 0s}.hc-black .monaco-findInput.highlight-1 .controls,\\n.vs-dark .monaco-findInput.highlight-1 .controls{animation:monaco-findInput-highlight-dark-1 100ms linear 0s}@keyframes monaco-findInput-highlight-0{0%{background:rgba(253,255,0,0.8)}100%{background:transparent}}@keyframes monaco-findInput-highlight-1{0%{background:rgba(253,255,0,0.8)}99%{background:transparent}}@keyframes monaco-findInput-highlight-dark-0{0%{background:rgba(255,255,255,0.44)}100%{background:transparent}}@keyframes monaco-findInput-highlight-dark-1{0%{background:rgba(255,255,255,0.44)}99%{background:transparent}}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-hover{cursor:default;position:absolute;overflow:hidden;z-index:50;user-select:text;-webkit-user-select:text;-ms-user-select:text;box-sizing:initial;animation:fadein 100ms linear;line-height:1.5em}.monaco-hover.hidden{display:none}.monaco-hover .hover-contents{padding:4px 8px}.monaco-hover .markdown-hover > .hover-contents:not(.code-hover-contents){max-width:500px;word-wrap:break-word}.monaco-hover .markdown-hover > .hover-contents:not(.code-hover-contents) hr{min-width:100%}.monaco-hover p,\\n.monaco-hover .code,\\n.monaco-hover ul{margin:8px 0}.monaco-hover code{font-family:var(--monaco-monospace-font)}.monaco-hover hr{box-sizing:border-box;border-left:0px;border-right:0px;margin-top:4px;margin-bottom:-4px;margin-left:-8px;margin-right:-8px;height:1px}.monaco-hover p:first-child,\\n.monaco-hover .code:first-child,\\n.monaco-hover ul:first-child{margin-top:0}.monaco-hover p:last-child,\\n.monaco-hover .code:last-child,\\n.monaco-hover ul:last-child{margin-bottom:0}.monaco-hover ul{padding-left:20px}.monaco-hover ol{padding-left:20px}.monaco-hover li > p{margin-bottom:0}.monaco-hover li > ul{margin-top:0}.monaco-hover code{border-radius:3px;padding:0 0.4em}.monaco-hover .monaco-tokenized-source{white-space:pre-wrap}.monaco-hover .hover-row.status-bar{font-size:12px;line-height:22px}.monaco-hover .hover-row.status-bar .actions{display:flex;padding:0px 8px}.monaco-hover .hover-row.status-bar .actions .action-container{margin-right:16px;cursor:pointer}.monaco-hover .hover-row.status-bar .actions .action-container .action .icon{padding-right:4px}.monaco-hover .markdown-hover .hover-contents .codicon{color:inherit;font-size:inherit;vertical-align:middle}.monaco-hover .hover-contents a.code-link:before{content:'('}.monaco-hover .hover-contents a.code-link:after{content:')'}.monaco-hover .hover-contents a.code-link{color:inherit}.monaco-hover .hover-contents a.code-link > span{text-decoration:underline;border-bottom:1px solid transparent;text-underline-position:under}.monaco-hover .markdown-hover .hover-contents:not(.code-hover-contents) span{margin-bottom:4px;display:inline-block}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-icon-label{display:flex;overflow:hidden;text-overflow:ellipsis}.monaco-icon-label::before{background-size:16px;background-position:left center;background-repeat:no-repeat;padding-right:6px;width:16px;height:22px;line-height:inherit!important;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;vertical-align:top;flex-shrink:0}.monaco-icon-label > .monaco-icon-label-container{min-width:0;overflow:hidden;text-overflow:ellipsis;flex:1}.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-name-container > .label-name{color:inherit;white-space:pre}.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-name-container > .label-name > .label-separator{margin:0 2px;opacity:0.5}.monaco-icon-label > .monaco-icon-label-container > .monaco-icon-description-container > .label-description{opacity:.7;margin-left:0.5em;font-size:0.9em;white-space:pre}.monaco-icon-label.nowrap > .monaco-icon-label-container > .monaco-icon-description-container > .label-description{white-space:nowrap}.vs .monaco-icon-label > .monaco-icon-label-container > .monaco-icon-description-container > .label-description{opacity:.95}.monaco-icon-label.italic > .monaco-icon-label-container > .monaco-icon-name-container > .label-name,\\n.monaco-icon-label.italic > .monaco-icon-label-container > .monaco-icon-description-container > .label-description{font-style:italic}.monaco-icon-label.deprecated{text-decoration:line-through;opacity:0.66}.monaco-icon-label.italic::after{font-style:italic}.monaco-icon-label.strikethrough > .monaco-icon-label-container > .monaco-icon-name-container > .label-name,\\n.monaco-icon-label.strikethrough > .monaco-icon-label-container > .monaco-icon-description-container > .label-description{text-decoration:line-through}.monaco-icon-label::after{opacity:0.75;font-size:90%;font-weight:600;padding:0 16px 0 5px;text-align:center}.monaco-list:focus .selected .monaco-icon-label, .monaco-list:focus .selected .monaco-icon-label::after{color:inherit!important}.monaco-list-row.focused.selected .label-description,\\n.monaco-list-row.selected .label-description{opacity:.8}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-inputbox{position:relative;display:block;padding:0;box-sizing:border-box;font-size:inherit}.monaco-inputbox.idle{border:1px solid transparent}.monaco-inputbox > .ibwrapper > .input,\\n.monaco-inputbox > .ibwrapper > .mirror{padding:4px}.monaco-inputbox > .ibwrapper{position:relative;width:100%;height:100%}.monaco-inputbox > .ibwrapper > .input{display:inline-block;box-sizing:border-box;width:100%;height:100%;line-height:inherit;border:none;font-family:inherit;font-size:inherit;resize:none;color:inherit}.monaco-inputbox > .ibwrapper > input{text-overflow:ellipsis}.monaco-inputbox > .ibwrapper > textarea.input{display:block;-ms-overflow-style:none;scrollbar-width:none;outline:none}.monaco-inputbox > .ibwrapper > textarea.input::-webkit-scrollbar{display:none}.monaco-inputbox > .ibwrapper > textarea.input.empty{white-space:nowrap}.monaco-inputbox > .ibwrapper > .mirror{position:absolute;display:inline-block;width:100%;top:0;left:0;box-sizing:border-box;white-space:pre-wrap;visibility:hidden;word-wrap:break-word}.monaco-inputbox-container{text-align:right}.monaco-inputbox-container .monaco-inputbox-message{display:inline-block;overflow:hidden;text-align:left;width:100%;box-sizing:border-box;padding:0.4em;font-size:12px;line-height:17px;margin-top:-1px;word-wrap:break-word}.monaco-inputbox .monaco-action-bar{position:absolute;right:2px;top:4px}.monaco-inputbox .monaco-action-bar .action-item{margin-left:2px}.monaco-inputbox .monaco-action-bar .action-item .codicon{background-repeat:no-repeat;width:16px;height:16px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-keybinding{display:flex;align-items:center;line-height:10px}.monaco-keybinding > .monaco-keybinding-key{display:inline-block;border-style:solid;border-width:1px;border-radius:3px;vertical-align:middle;font-size:11px;padding:3px 5px;margin:0 2px}.monaco-keybinding > .monaco-keybinding-key:first-child{margin-left:0}.monaco-keybinding > .monaco-keybinding-key:last-child{margin-right:0}.monaco-keybinding > .monaco-keybinding-key-separator{display:inline-block}.monaco-keybinding > .monaco-keybinding-key-chord-separator{width:6px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-list{position:relative;height:100%;width:100%;white-space:nowrap}.monaco-list.mouse-support{user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-list > .monaco-scrollable-element{height:100%}.monaco-list-rows{position:relative;width:100%;height:100%}.monaco-list.horizontal-scrolling .monaco-list-rows{width:auto;min-width:100%}.monaco-list-row{position:absolute;box-sizing:border-box;overflow:hidden;width:100%}.monaco-list.mouse-support .monaco-list-row{cursor:pointer;touch-action:none}.monaco-list-row.scrolling{display:none!important}.monaco-list.element-focused,\\n.monaco-list.selection-single,\\n.monaco-list.selection-multiple{outline:0!important}.monaco-list:focus .monaco-list-row.selected .codicon{color:inherit}.monaco-drag-image{display:inline-block;padding:1px 7px;border-radius:10px;font-size:12px;position:absolute;z-index:1000}.monaco-list-type-filter{display:flex;align-items:center;position:absolute;border-radius:2px;padding:0px 3px;max-width:calc(100% - 10px);text-overflow:ellipsis;overflow:hidden;text-align:right;box-sizing:border-box;cursor:all-scroll;font-size:13px;line-height:18px;height:20px;z-index:1;top:4px}.monaco-list-type-filter.dragging{transition:top 0.2s,left 0.2s}.monaco-list-type-filter.ne{right:4px}.monaco-list-type-filter.nw{left:4px}.monaco-list-type-filter > .controls{display:flex;align-items:center;box-sizing:border-box;transition:width 0.2s;width:0}.monaco-list-type-filter.dragging > .controls,\\n.monaco-list-type-filter:hover > .controls{width:36px}.monaco-list-type-filter > .controls > *{border:none;box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;background:none;width:16px;height:16px;flex-shrink:0;margin:0;padding:0;display:flex;align-items:center;justify-content:center;cursor:pointer}.monaco-list-type-filter > .controls > .filter{margin-left:4px}.monaco-list-type-filter-message{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;padding:40px 1em 1em 1em;text-align:center;white-space:normal;opacity:0.7;pointer-events:none}.monaco-list-type-filter-message:empty{display:none}.monaco-list-type-filter{cursor:grab}.monaco-list-type-filter.dragging{cursor:grabbing}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-mouse-cursor-text{cursor:text}.vs-dark .mac .monaco-mouse-cursor-text, .hc-black .mac .monaco-mouse-cursor-text,\\n.vs-dark.mac .monaco-mouse-cursor-text, .hc-black.mac .monaco-mouse-cursor-text{cursor:-webkit-image-set(url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAAL0lEQVQoz2NgCD3x//9/BhBYBWdhgFVAiVW4JBFKGIa4AqD0//9D3pt4I4tAdAMAHTQ/j5Zom30AAAAASUVORK5CYII=) 1x,url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAQAAADZc7J/AAAAz0lEQVRIx2NgYGBY/R8I/vx5eelX3n82IJ9FxGf6tksvf/8FiTMQAcAGQMDvSwu09abffY8QYSAScNk45G198eX//yev73/4///701eh//kZSARckrNBRvz//+8+6ZohwCzjGNjdgQxkAg7B9WADeBjIBqtJCbhRA0YNoIkBSNmaPEMoNmA0FkYNoFKhapJ6FGyAH3nauaSmPfwI0v/3OukVi0CIZ+F25KrtYcx/CTIy0e+rC7R1Z4KMICVTQQ14feVXIbR695u14+Ir4gwAAD49E54wc1kWAAAAAElFTkSuQmCC) 2x) 5 8,text}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-progress-container{width:100%;height:5px;overflow:hidden}.monaco-progress-container .progress-bit{width:2%;height:5px;position:absolute;left:0;display:none}.monaco-progress-container.active .progress-bit{display:inherit}.monaco-progress-container.discrete .progress-bit{left:0;transition:width 100ms linear}.monaco-progress-container.discrete.done .progress-bit{width:100%}.monaco-progress-container.infinite .progress-bit{animation-name:progress;animation-duration:4s;animation-iteration-count:infinite;animation-timing-function:linear;transform:translate3d(0px,0px,0px)}@keyframes progress{from{transform:translateX(0%) scaleX(1)}50%{transform:translateX(2500%) scaleX(3)}to{transform:translateX(4900%) scaleX(1)}}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \":root{--sash-size:4px}.monaco-sash{position:absolute;z-index:35;touch-action:none}.monaco-sash.disabled{pointer-events:none}.monaco-sash.mac.vertical{cursor:col-resize}.monaco-sash.vertical.minimum{cursor:e-resize}.monaco-sash.vertical.maximum{cursor:w-resize}.monaco-sash.mac.horizontal{cursor:row-resize}.monaco-sash.horizontal.minimum{cursor:s-resize}.monaco-sash.horizontal.maximum{cursor:n-resize}.monaco-sash.disabled{cursor:default!important;pointer-events:none!important}.monaco-sash.vertical{cursor:ew-resize;top:0;width:var(--sash-size);height:100%}.monaco-sash.horizontal{cursor:ns-resize;left:0;width:100%;height:var(--sash-size)}.monaco-sash:not(.disabled) > .orthogonal-drag-handle{content:\\\" \\\";height:calc(var(--sash-size) * 2);width:calc(var(--sash-size) * 2);z-index:100;display:block;cursor:all-scroll;position:absolute}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)\\n\\t> .orthogonal-drag-handle.start,\\n.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)\\n\\t> .orthogonal-drag-handle.end{cursor:nwse-resize}.monaco-sash.horizontal.orthogonal-edge-north:not(.disabled)\\n\\t> .orthogonal-drag-handle.end,\\n.monaco-sash.horizontal.orthogonal-edge-south:not(.disabled)\\n\\t> .orthogonal-drag-handle.start{cursor:nesw-resize}.monaco-sash.vertical > .orthogonal-drag-handle.start{left:calc(var(--sash-size) * -0.5);top:calc(var(--sash-size) * -1)}.monaco-sash.vertical > .orthogonal-drag-handle.end{left:calc(var(--sash-size) * -0.5);bottom:calc(var(--sash-size) * -1)}.monaco-sash.horizontal > .orthogonal-drag-handle.start{top:calc(var(--sash-size) * -0.5);left:calc(var(--sash-size) * -1)}.monaco-sash.horizontal > .orthogonal-drag-handle.end{top:calc(var(--sash-size) * -0.5);right:calc(var(--sash-size) * -1)}.monaco-sash:before{content:'';pointer-events:none;position:absolute;width:100%;height:100%;transition:background-color 0.1s ease-out;background:transparent}.monaco-sash.vertical:before{width:var(--sash-hover-size);left:calc(50% - (var(--sash-hover-size) / 2))}.monaco-sash.horizontal:before{height:var(--sash-hover-size);top:calc(50% - (var(--sash-hover-size) / 2))}.monaco-sash.debug{background:cyan}.monaco-sash.debug.disabled{background:rgba(0,255,255,0.2)}.monaco-sash.debug:not(.disabled) > .orthogonal-drag-handle{background:red}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-scrollable-element > .scrollbar > .scra{cursor:pointer;font-size:11px!important}.monaco-scrollable-element > .visible{opacity:1;background:rgba(0,0,0,0);transition:opacity 100ms linear}.monaco-scrollable-element > .invisible{opacity:0;pointer-events:none}.monaco-scrollable-element > .invisible.fade{transition:opacity 800ms linear}.monaco-scrollable-element > .shadow{position:absolute;display:none}.monaco-scrollable-element > .shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:#DDD 0 6px 6px -6px inset}.monaco-scrollable-element > .shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:#DDD 6px 0 6px -6px inset}.monaco-scrollable-element > .shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.monaco-scrollable-element > .shadow.top.left{box-shadow:#DDD 6px 6px 6px -6px inset}.vs .monaco-scrollable-element > .scrollbar > .slider{background:rgba(100,100,100,.4)}.vs-dark .monaco-scrollable-element > .scrollbar > .slider{background:rgba(121,121,121,.4)}.hc-black .monaco-scrollable-element > .scrollbar > .slider{background:rgba(111,195,223,.6)}.monaco-scrollable-element > .scrollbar > .slider:hover{background:rgba(100,100,100,.7)}.hc-black .monaco-scrollable-element > .scrollbar > .slider:hover{background:rgba(111,195,223,.8)}.monaco-scrollable-element > .scrollbar > .slider.active{background:rgba(0,0,0,.6)}.vs-dark .monaco-scrollable-element > .scrollbar > .slider.active{background:rgba(191,191,191,.4)}.hc-black .monaco-scrollable-element > .scrollbar > .slider.active{background:rgba(111,195,223,1)}.vs-dark .monaco-scrollable-element .shadow.top{box-shadow:none}.vs-dark .monaco-scrollable-element .shadow.left{box-shadow:#000 6px 0 6px -6px inset}.vs-dark .monaco-scrollable-element .shadow.top.left{box-shadow:#000 6px 6px 6px -6px inset}.hc-black .monaco-scrollable-element .shadow.top{box-shadow:none}.hc-black .monaco-scrollable-element .shadow.left{box-shadow:none}.hc-black .monaco-scrollable-element .shadow.top.left{box-shadow:none}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-split-view2{position:relative;width:100%;height:100%}.monaco-split-view2 > .sash-container{position:absolute;width:100%;height:100%;pointer-events:none}.monaco-split-view2 > .sash-container > .monaco-sash{pointer-events:initial}.monaco-split-view2 > .monaco-scrollable-element{width:100%;height:100%}.monaco-split-view2 > .monaco-scrollable-element > .split-view-container{width:100%;height:100%;white-space:nowrap;position:relative}.monaco-split-view2 > .monaco-scrollable-element > .split-view-container > .split-view-view{white-space:initial;position:absolute}.monaco-split-view2 > .monaco-scrollable-element > .split-view-container > .split-view-view:not(.visible){display:none}.monaco-split-view2.vertical > .monaco-scrollable-element > .split-view-container > .split-view-view{width:100%}.monaco-split-view2.horizontal > .monaco-scrollable-element > .split-view-container > .split-view-view{height:100%}.monaco-split-view2.separator-border > .monaco-scrollable-element > .split-view-container > .split-view-view:not(:first-child)::before{content:' ';position:absolute;top:0;left:0;z-index:5;pointer-events:none;background-color:var(--separator-border)}.monaco-split-view2.separator-border.horizontal > .monaco-scrollable-element > .split-view-container > .split-view-view:not(:first-child)::before{height:100%;width:1px}.monaco-split-view2.separator-border.vertical > .monaco-scrollable-element > .split-view-container > .split-view-view:not(:first-child)::before{height:1px;width:100%}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-table{display:flex;flex-direction:column;position:relative;height:100%;width:100%;white-space:nowrap}.monaco-table > .monaco-split-view2{border-bottom:1px solid transparent}.monaco-table > .monaco-list{flex:1}.monaco-table-tr{display:flex;height:100%}.monaco-table-th{width:100%;height:100%;font-weight:bold;overflow:hidden;text-overflow:ellipsis}.monaco-table-th,\\n.monaco-table-td{box-sizing:border-box;flex-shrink:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.monaco-table > .monaco-split-view2 .monaco-sash.vertical::before{content:\\\"\\\";position:absolute;left:calc(var(--sash-size) / 2);width:0;border-left:1px solid transparent}.monaco-table > .monaco-split-view2,\\n.monaco-table > .monaco-split-view2 .monaco-sash.vertical::before{transition:border-color 0.2s ease-out}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-tl-row{display:flex;height:100%;align-items:center;position:relative}.monaco-tl-indent{height:100%;position:absolute;top:0;left:16px;pointer-events:none}.hide-arrows .monaco-tl-indent{left:12px}.monaco-tl-indent > .indent-guide{display:inline-block;box-sizing:border-box;height:100%;border-left:1px solid transparent}.monaco-tl-indent > .indent-guide{transition:border-color 0.1s linear}.monaco-tl-twistie,\\n.monaco-tl-contents{height:100%}.monaco-tl-twistie{font-size:10px;text-align:right;padding-right:6px;flex-shrink:0;width:16px;display:flex!important;align-items:center;justify-content:center;color:inherit!important;transform:translateX(3px)}.monaco-tl-contents{flex:1;overflow:hidden}.monaco-tl-twistie::before{border-radius:20px}.monaco-tl-twistie.collapsed::before{transform:rotate(-90deg)}.monaco-tl-twistie.codicon-tree-item-loading::before{animation:codicon-spin 1.25s steps(30) infinite}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".quick-input-widget{position:absolute;width:600px;z-index:2000;padding:0 1px 6px 1px;left:50%;margin-left:-300px}.quick-input-titlebar{display:flex;align-items:center}.quick-input-left-action-bar{display:flex;margin-left:4px;flex:1}.quick-input-title{padding:3px 0px;text-align:center}.quick-input-right-action-bar{display:flex;margin-right:4px;flex:1}.quick-input-right-action-bar > .actions-container{justify-content:flex-end}.quick-input-titlebar .monaco-action-bar .action-label.codicon{background-position:center;background-repeat:no-repeat;padding:2px}.quick-input-description{margin:6px}.quick-input-header .quick-input-description{margin:4px 2px}.quick-input-header{display:flex;padding:6px 6px 0px 6px;margin-bottom:-2px}.quick-input-widget.hidden-input .quick-input-header{padding:0;margin-bottom:0}.quick-input-and-message{display:flex;flex-direction:column;flex-grow:1;position:relative}.quick-input-check-all{align-self:center;margin:0}.quick-input-filter{flex-grow:1;display:flex;position:relative}.quick-input-box{flex-grow:1}.quick-input-widget.show-checkboxes .quick-input-box,\\n.quick-input-widget.show-checkboxes .quick-input-message{margin-left:5px}.quick-input-visible-count{position:absolute;left:-10000px}.quick-input-count{align-self:center;position:absolute;right:4px;display:flex;align-items:center}.quick-input-count .monaco-count-badge{vertical-align:middle;padding:2px 4px;border-radius:2px;min-height:auto;line-height:normal}.quick-input-action{margin-left:6px}.quick-input-action .monaco-text-button{font-size:11px;padding:0 6px;display:flex;height:27.5px;align-items:center}.quick-input-message{margin-top:-1px;padding:5px 5px 2px 5px}.quick-input-message > .codicon{margin:0 0.2em;vertical-align:text-bottom}.quick-input-progress.monaco-progress-container{position:relative}.quick-input-progress.monaco-progress-container,\\n.quick-input-progress.monaco-progress-container .progress-bit{height:2px}.quick-input-list{line-height:22px;margin-top:6px}.quick-input-widget.hidden-input .quick-input-list{margin-top:0}.quick-input-list .monaco-list{overflow:hidden;max-height:calc(20 * 22px)}.quick-input-list .quick-input-list-entry{box-sizing:border-box;overflow:hidden;display:flex;height:100%;padding:0 6px}.quick-input-list .quick-input-list-entry.quick-input-list-separator-border{border-top-width:1px;border-top-style:solid}.quick-input-list .monaco-list-row:first-child .quick-input-list-entry.quick-input-list-separator-border{border-top-style:none}.quick-input-list .quick-input-list-label{overflow:hidden;display:flex;height:100%;flex:1}.quick-input-list .quick-input-list-checkbox{align-self:center;margin:0}.quick-input-list .quick-input-list-rows{overflow:hidden;text-overflow:ellipsis;display:flex;flex-direction:column;height:100%;flex:1;margin-left:5px}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-rows{margin-left:10px}.quick-input-widget .quick-input-list .quick-input-list-checkbox{display:none}.quick-input-widget.show-checkboxes .quick-input-list .quick-input-list-checkbox{display:inline}.quick-input-list .quick-input-list-rows > .quick-input-list-row{display:flex;align-items:center}.quick-input-list .quick-input-list-rows > .quick-input-list-row .monaco-icon-label,\\n.quick-input-list .quick-input-list-rows > .quick-input-list-row .monaco-icon-label .monaco-icon-label-container > .monaco-icon-name-container{flex:1}.quick-input-list .quick-input-list-rows > .quick-input-list-row .codicon[class*='codicon-']{vertical-align:sub}.quick-input-list .quick-input-list-rows .monaco-highlighted-label span{opacity:1}.quick-input-list .quick-input-list-entry .quick-input-list-entry-keybinding{margin-right:8px}.quick-input-list .quick-input-list-label-meta{opacity:0.7;line-height:normal;text-overflow:ellipsis;overflow:hidden}.quick-input-list .monaco-highlighted-label .highlight{font-weight:bold}.quick-input-list .quick-input-list-entry .quick-input-list-separator{margin-right:8px}.quick-input-list .quick-input-list-entry-action-bar{display:flex;flex:0;overflow:visible}.quick-input-list .quick-input-list-entry-action-bar .action-label{display:none}.quick-input-list .quick-input-list-entry-action-bar .action-label.codicon{margin-right:4px;padding:2px}.quick-input-list .quick-input-list-entry-action-bar{margin-top:1px}.quick-input-list .quick-input-list-entry-action-bar{margin-right:4px}.quick-input-list .quick-input-list-entry .quick-input-list-entry-action-bar .action-label.always-visible,\\n.quick-input-list .quick-input-list-entry:hover .quick-input-list-entry-action-bar .action-label,\\n.quick-input-list .monaco-list-row.focused .quick-input-list-entry-action-bar .action-label{display:flex}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .inputarea{min-width:0;min-height:0;margin:0;padding:0;position:absolute;outline:none!important;resize:none;border:none;overflow:hidden;color:transparent;background-color:transparent}.monaco-editor .inputarea.ime-input{z-index:10}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .view-overlays .current-line{display:block;position:absolute;left:0;top:0;box-sizing:border-box}.monaco-editor .margin-view-overlays .current-line{display:block;position:absolute;left:0;top:0;box-sizing:border-box}.monaco-editor .margin-view-overlays .current-line.current-line-margin.current-line-margin-both{border-right:0}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .lines-content .cdr{position:absolute}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .glyph-margin{position:absolute;top:0}.monaco-editor .margin-view-overlays .cgmr{position:absolute;display:flex;align-items:center;justify-content:center}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .lines-content .cigr{position:absolute}.monaco-editor .lines-content .cigra{position:absolute}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .margin-view-overlays .line-numbers{font-variant-numeric:tabular-nums;position:absolute;text-align:right;display:inline-block;vertical-align:middle;box-sizing:border-box;cursor:default;height:100%}.monaco-editor .relative-current-line-number{text-align:left;display:inline-block;width:100%}.monaco-editor .margin-view-overlays .line-numbers.lh-odd{margin-top:1px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor.no-user-select .lines-content,\\n.monaco-editor.no-user-select .view-line,\\n.monaco-editor.no-user-select .view-lines{user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-editor .view-lines{white-space:nowrap}.monaco-editor .view-line{position:absolute;width:100%}.monaco-editor .mtkz{display:inline-block}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .lines-decorations{position:absolute;top:0;background:white}.monaco-editor .margin-view-overlays .cldr{position:absolute;height:100%}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .margin-view-overlays .cmdr{position:absolute;left:0;width:100%;height:100%}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .minimap.slider-mouseover .minimap-slider{opacity:0;transition:opacity 100ms linear}.monaco-editor .minimap.slider-mouseover:hover .minimap-slider{opacity:1}.monaco-editor .minimap.slider-mouseover .minimap-slider.active{opacity:1}.monaco-editor .minimap-shadow-hidden{position:absolute;width:0}.monaco-editor .minimap-shadow-visible{position:absolute;left:-6px;width:6px}.monaco-editor.no-minimap-shadow .minimap-shadow-visible{position:absolute;left:-1px;width:1px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .overlayWidgets{position:absolute;top:0;left:0}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .view-ruler{position:absolute;top:0}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .scroll-decoration{position:absolute;top:0;left:0;height:6px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .lines-content .cslr{position:absolute}.monaco-editor\\t\\t\\t.top-left-radius{border-top-left-radius:3px}.monaco-editor\\t\\t\\t.bottom-left-radius{border-bottom-left-radius:3px}.monaco-editor\\t\\t\\t.top-right-radius{border-top-right-radius:3px}.monaco-editor\\t\\t\\t.bottom-right-radius{border-bottom-right-radius:3px}.monaco-editor.hc-black .top-left-radius{border-top-left-radius:0}.monaco-editor.hc-black .bottom-left-radius{border-bottom-left-radius:0}.monaco-editor.hc-black .top-right-radius{border-top-right-radius:0}.monaco-editor.hc-black .bottom-right-radius{border-bottom-right-radius:0}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .cursors-layer{position:absolute;top:0}.monaco-editor .cursors-layer > .cursor{position:absolute;overflow:hidden}.monaco-editor .cursors-layer.cursor-smooth-caret-animation > .cursor{transition:all 80ms}.monaco-editor .cursors-layer.cursor-block-outline-style > .cursor{box-sizing:border-box;background:transparent!important;border-style:solid;border-width:1px}.monaco-editor .cursors-layer.cursor-underline-style > .cursor{border-bottom-width:2px;border-bottom-style:solid;background:transparent!important;box-sizing:border-box}.monaco-editor .cursors-layer.cursor-underline-thin-style > .cursor{border-bottom-width:1px;border-bottom-style:solid;background:transparent!important;box-sizing:border-box}@keyframes monaco-cursor-smooth{0%,\\n\\t20%{opacity:1}60%,\\n\\t100%{opacity:0}}@keyframes monaco-cursor-phase{0%,\\n\\t20%{opacity:1}90%,\\n\\t100%{opacity:0}}@keyframes monaco-cursor-expand{0%,\\n\\t20%{transform:scaleY(1)}80%,\\n\\t100%{transform:scaleY(0)}}.cursor-smooth{animation:monaco-cursor-smooth 0.5s ease-in-out 0s 20 alternate}.cursor-phase{animation:monaco-cursor-phase 0.5s ease-in-out 0s 20 alternate}.cursor-expand > .cursor{animation:monaco-cursor-expand 0.5s ease-in-out 0s 20 alternate}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-diff-editor .diffOverview{z-index:9}.monaco-diff-editor .diffOverview .diffViewport{z-index:10}.monaco-diff-editor.vs\\t\\t\\t.diffOverview{background:rgba(0,0,0,0.03)}.monaco-diff-editor.vs-dark\\t\\t.diffOverview{background:rgba(255,255,255,0.01)}.monaco-scrollable-element.modified-in-monaco-diff-editor.vs\\t\\t.scrollbar{background:rgba(0,0,0,0)}.monaco-scrollable-element.modified-in-monaco-diff-editor.vs-dark\\t.scrollbar{background:rgba(0,0,0,0)}.monaco-scrollable-element.modified-in-monaco-diff-editor.hc-black\\t.scrollbar{background:none}.monaco-scrollable-element.modified-in-monaco-diff-editor .slider{z-index:10}.modified-in-monaco-diff-editor\\t\\t\\t\\t.slider.active{background:rgba(171,171,171,.4)}.modified-in-monaco-diff-editor.hc-black\\t.slider.active{background:none}.monaco-editor .insert-sign,\\n.monaco-diff-editor .insert-sign,\\n.monaco-editor .delete-sign,\\n.monaco-diff-editor .delete-sign{font-size:11px!important;opacity:0.7!important;display:flex!important;align-items:center}.monaco-editor.hc-black .insert-sign,\\n.monaco-diff-editor.hc-black .insert-sign,\\n.monaco-editor.hc-black .delete-sign,\\n.monaco-diff-editor.hc-black .delete-sign{opacity:1}.monaco-editor .inline-deleted-margin-view-zone{text-align:right}.monaco-editor .inline-added-margin-view-zone{text-align:right}.monaco-editor .view-zones .view-lines .view-line span{display:inline-block}.monaco-editor .margin-view-zones .lightbulb-glyph:hover{cursor:pointer}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-diff-editor .diff-review-line-number{text-align:right;display:inline-block}.monaco-diff-editor .diff-review{position:absolute;user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-diff-editor .diff-review-summary{padding-left:10px}.monaco-diff-editor .diff-review-shadow{position:absolute}.monaco-diff-editor .diff-review-row{white-space:pre}.monaco-diff-editor .diff-review-table{display:table;min-width:100%}.monaco-diff-editor .diff-review-row{display:table-row;width:100%}.monaco-diff-editor .diff-review-spacer{display:inline-block;width:10px;vertical-align:middle}.monaco-diff-editor .diff-review-spacer > .codicon{font-size:9px!important}.monaco-diff-editor .diff-review-actions{display:inline-block;position:absolute;right:10px;top:2px}.monaco-diff-editor .diff-review-actions .action-label{width:16px;height:16px;margin:2px 0}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \"::-ms-clear{display:none}.monaco-editor .editor-widget input{color:inherit}.monaco-editor{position:relative;overflow:visible;-webkit-text-size-adjust:100%}.monaco-editor .overflow-guard{position:relative;overflow:hidden}.monaco-editor .view-overlays{position:absolute;top:0}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .selection-anchor{background-color:#007ACC;width:2px!important}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .bracket-match{box-sizing:border-box}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .contentWidgets .codicon-light-bulb,\\n.monaco-editor .contentWidgets .codicon-lightbulb-autofix{display:flex;align-items:center;justify-content:center}.monaco-editor .contentWidgets .codicon-light-bulb:hover,\\n.monaco-editor .contentWidgets .codicon-lightbulb-autofix:hover{cursor:pointer}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .codelens-decoration{overflow:hidden;display:inline-block;text-overflow:ellipsis;white-space:nowrap}.monaco-editor .codelens-decoration > span,\\n.monaco-editor .codelens-decoration > a{user-select:none;-webkit-user-select:none;-ms-user-select:none;white-space:nowrap;vertical-align:sub}.monaco-editor .codelens-decoration > a{text-decoration:none}.monaco-editor .codelens-decoration > a:hover{cursor:pointer}.monaco-editor .codelens-decoration .codicon{vertical-align:middle;color:currentColor!important}.monaco-editor .codelens-decoration > a:hover .codicon::before{cursor:pointer}@keyframes fadein{0%{opacity:0;visibility:visible}100%{opacity:1}}.monaco-editor .codelens-decoration.fadein{animation:fadein 0.1s linear}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".colorpicker-widget{height:190px;user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-editor .colorpicker-hover:focus{outline:none}.colorpicker-header{display:flex;height:24px;position:relative;background:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=\\\");background-size:9px 9px;image-rendering:pixelated}.colorpicker-header .picked-color{width:216px;text-align:center;line-height:24px;cursor:pointer;color:white;flex:1;text-align:center}.colorpicker-header .picked-color.light{color:black}.colorpicker-header .original-color{width:74px;z-index:inherit;cursor:pointer}.colorpicker-body{display:flex;padding:8px;position:relative}.colorpicker-body .saturation-wrap{overflow:hidden;height:150px;position:relative;min-width:220px;flex:1}.colorpicker-body .saturation-box{height:150px;position:absolute}.colorpicker-body .saturation-selection{width:9px;height:9px;margin:-5px 0 0 -5px;border:1px solid rgb(255,255,255);border-radius:100%;box-shadow:0px 0px 2px rgba(0,0,0,0.8);position:absolute}.colorpicker-body .strip{width:25px;height:150px}.colorpicker-body .hue-strip{position:relative;margin-left:8px;cursor:grab;background:linear-gradient(to bottom,#ff0000 0%,#ffff00 17%,#00ff00 33%,#00ffff 50%,#0000ff 67%,#ff00ff 83%,#ff0000 100%)}.colorpicker-body .opacity-strip{position:relative;margin-left:8px;cursor:grab;background:url(\\\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMTZEaa/1AAAAHUlEQVQYV2PYvXu3JAi7uLiAMaYAjAGTQBPYLQkAa/0Zef3qRswAAAAASUVORK5CYII=\\\");background-size:9px 9px;image-rendering:pixelated}.colorpicker-body .strip.grabbing{cursor:grabbing}.colorpicker-body .slider{position:absolute;top:0;left:-2px;width:calc(100% + 4px);height:4px;box-sizing:border-box;border:1px solid rgba(255,255,255,0.71);box-shadow:0px 0px 1px rgba(0,0,0,0.85)}.colorpicker-body .strip .overlay{height:150px;pointer-events:none}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor.vs .dnd-target{border-right:2px dotted black;color:white}.monaco-editor.vs-dark .dnd-target{border-right:2px dotted #AEAFAD;color:#51504f}.monaco-editor.hc-black .dnd-target{border-right:2px dotted #fff;color:#000}.monaco-editor.mouse-default .view-lines,\\n.monaco-editor.vs-dark.mac.mouse-default .view-lines,\\n.monaco-editor.hc-black.mac.mouse-default .view-lines{cursor:default}.monaco-editor.mouse-copy .view-lines,\\n.monaco-editor.vs-dark.mac.mouse-copy .view-lines,\\n.monaco-editor.hc-black.mac.mouse-copy .view-lines{cursor:copy}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .find-widget{position:absolute;z-index:35;height:33px;overflow:hidden;line-height:19px;transition:transform 200ms linear;padding:0 4px;box-sizing:border-box;transform:translateY(calc(-100% - 10px))}.monaco-editor .find-widget textarea{margin:0px}.monaco-editor .find-widget.hiddenEditor{display:none}.monaco-editor .find-widget.replaceToggled > .replace-part{display:flex}.monaco-editor .find-widget.visible{transform:translateY(0)}.monaco-editor .find-widget .monaco-inputbox.synthetic-focus{outline:1px solid -webkit-focus-ring-color;outline-offset:-1px}.monaco-editor .find-widget .monaco-inputbox .input{background-color:transparent;min-height:0}.monaco-editor .find-widget .monaco-findInput .input{font-size:13px}.monaco-editor .find-widget > .find-part,\\n.monaco-editor .find-widget > .replace-part{margin:4px 0 0 17px;font-size:12px;display:flex}.monaco-editor .find-widget > .find-part .monaco-inputbox,\\n.monaco-editor .find-widget > .replace-part .monaco-inputbox{min-height:25px}.monaco-editor .find-widget > .replace-part .monaco-inputbox > .ibwrapper > .mirror{padding-right:22px}.monaco-editor .find-widget > .find-part .monaco-inputbox > .ibwrapper > .input,\\n.monaco-editor .find-widget > .find-part .monaco-inputbox > .ibwrapper > .mirror,\\n.monaco-editor .find-widget > .replace-part .monaco-inputbox > .ibwrapper > .input,\\n.monaco-editor .find-widget > .replace-part .monaco-inputbox > .ibwrapper > .mirror{padding-top:2px;padding-bottom:2px}.monaco-editor .find-widget > .find-part .find-actions{height:25px;display:flex;align-items:center}.monaco-editor .find-widget > .replace-part .replace-actions{height:25px;display:flex;align-items:center}.monaco-editor .find-widget .monaco-findInput{vertical-align:middle;display:flex;flex:1}.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element{width:100%}.monaco-editor .find-widget .monaco-findInput .monaco-scrollable-element .scrollbar.vertical{opacity:0}.monaco-editor .find-widget .matchesCount{display:flex;flex:initial;margin:0 0 0 3px;padding:2px 0 0 2px;height:25px;vertical-align:middle;box-sizing:border-box;text-align:center;line-height:23px}.monaco-editor .find-widget .button{width:20px;height:20px;display:flex;flex:initial;margin-left:3px;background-position:center center;background-repeat:no-repeat;cursor:pointer;display:flex;align-items:center;justify-content:center}.monaco-editor .find-widget .button.left{margin-left:0;margin-right:3px}.monaco-editor .find-widget .button.wide{width:auto;padding:1px 6px;top:-1px}.monaco-editor .find-widget .button.toggle{position:absolute;top:0;left:3px;width:18px;height:100%;box-sizing:border-box}.monaco-editor .find-widget .button.toggle.disabled{display:none}.monaco-editor .find-widget .disabled{opacity:0.3;cursor:default}.monaco-editor .find-widget > .replace-part{display:none}.monaco-editor .find-widget > .replace-part > .monaco-findInput{position:relative;display:flex;vertical-align:middle;flex:auto;flex-grow:0;flex-shrink:0}.monaco-editor .find-widget > .replace-part > .monaco-findInput > .controls{position:absolute;top:3px;right:2px}.monaco-editor .find-widget.reduced-find-widget .matchesCount{display:none}.monaco-editor .find-widget.narrow-find-widget{max-width:257px!important}.monaco-editor .find-widget.collapsed-find-widget{max-width:170px!important}.monaco-editor .find-widget.collapsed-find-widget .button.previous,\\n.monaco-editor .find-widget.collapsed-find-widget .button.next,\\n.monaco-editor .find-widget.collapsed-find-widget .button.replace,\\n.monaco-editor .find-widget.collapsed-find-widget .button.replace-all,\\n.monaco-editor .find-widget.collapsed-find-widget > .find-part .monaco-findInput .controls{display:none}.monaco-editor .findMatch{animation-duration:0;animation-name:inherit!important}.monaco-editor .find-widget .monaco-sash{left:0!important}.monaco-editor.hc-black .find-widget .button:before{position:relative;top:1px;left:2px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .margin-view-overlays .codicon-folding-expanded,\\n.monaco-editor .margin-view-overlays .codicon-folding-collapsed{cursor:pointer;opacity:0;transition:opacity 0.5s;display:flex;align-items:center;justify-content:center;font-size:140%;margin-left:2px}.monaco-editor .margin-view-overlays:hover .codicon,\\n.monaco-editor .margin-view-overlays .codicon.codicon-folding-collapsed,\\n.monaco-editor .margin-view-overlays .codicon.alwaysShowFoldIcons{opacity:1}.monaco-editor .inline-folded:after{color:grey;margin:0.1em 0.2em 0 0.2em;content:\\\"\\\\22EF\\\";display:inline;line-height:1em;cursor:pointer}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .peekview-widget .head .peekview-title .severity-icon{display:inline-block;vertical-align:text-top;margin-right:4px}.monaco-editor .marker-widget{text-overflow:ellipsis;white-space:nowrap}.monaco-editor .marker-widget > .stale{opacity:0.6;font-style:italic}.monaco-editor .marker-widget .title{display:inline-block;padding-right:5px}.monaco-editor .marker-widget .descriptioncontainer{position:absolute;white-space:pre;user-select:text;-webkit-user-select:text;-ms-user-select:text;padding:8px 12px 0 20px}.monaco-editor .marker-widget .descriptioncontainer .message{display:flex;flex-direction:column}.monaco-editor .marker-widget .descriptioncontainer .message .details{padding-left:6px}.monaco-editor .marker-widget .descriptioncontainer .message .source,\\n.monaco-editor .marker-widget .descriptioncontainer .message span.code{opacity:0.6}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link{opacity:0.6;color:inherit}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:before{content:'('}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link:after{content:')'}.monaco-editor .marker-widget .descriptioncontainer .message a.code-link > span{text-decoration:underline;border-bottom:1px solid transparent;text-underline-position:under}.monaco-editor .marker-widget .descriptioncontainer .filename{cursor:pointer}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .goto-definition-link{text-decoration:underline;cursor:pointer}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .zone-widget .zone-widget-container.reference-zone-widget{border-top-width:1px;border-bottom-width:1px}.monaco-editor .reference-zone-widget .inline{display:inline-block;vertical-align:top}.monaco-editor .reference-zone-widget .messages{height:100%;width:100%;text-align:center;padding:3em 0}.monaco-editor .reference-zone-widget .ref-tree{line-height:23px}.monaco-editor .reference-zone-widget .ref-tree .reference{text-overflow:ellipsis;overflow:hidden}.monaco-editor .reference-zone-widget .ref-tree .reference-file{display:inline-flex;width:100%;height:100%}.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .selected .reference-file{color:inherit!important}.monaco-editor .reference-zone-widget .ref-tree .reference-file .count{margin-right:12px;margin-left:auto}.monaco-editor.hc-black .reference-zone-widget .ref-tree .reference-file{font-weight:bold}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .detected-link,\\n.monaco-editor .detected-link-active{text-decoration:underline;text-underline-position:under}.monaco-editor .detected-link-active{cursor:pointer}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .monaco-editor-overlaymessage{padding-bottom:8px;z-index:10000}.monaco-editor .monaco-editor-overlaymessage.below{padding-bottom:0;padding-top:8px;z-index:10000}@keyframes fadeIn{from{opacity:0}to{opacity:1}}.monaco-editor .monaco-editor-overlaymessage.fadeIn{animation:fadeIn 150ms ease-out}@keyframes fadeOut{from{opacity:1}to{opacity:0}}.monaco-editor .monaco-editor-overlaymessage.fadeOut{animation:fadeOut 100ms ease-out}.monaco-editor .monaco-editor-overlaymessage .message{padding:1px 4px}.monaco-editor .monaco-editor-overlaymessage .anchor{width:0!important;height:0!important;border-color:transparent;border-style:solid;z-index:1000;border-width:8px;position:absolute}.monaco-editor .monaco-editor-overlaymessage:not(.below) .anchor.top,\\n.monaco-editor .monaco-editor-overlaymessage.below .anchor.below{display:none}.monaco-editor .monaco-editor-overlaymessage.below .anchor.top{display:inherit;top:-8px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .parameter-hints-widget{z-index:10;display:flex;flex-direction:column;line-height:1.5em}.monaco-editor .parameter-hints-widget > .phwrapper{max-width:440px;display:flex;flex-direction:row}.monaco-editor .parameter-hints-widget.multiple{min-height:3.3em;padding:0}.monaco-editor .parameter-hints-widget.visible{transition:left .05s ease-in-out}.monaco-editor .parameter-hints-widget p,\\n.monaco-editor .parameter-hints-widget ul{margin:8px 0}.monaco-editor .parameter-hints-widget .monaco-scrollable-element,\\n.monaco-editor .parameter-hints-widget .body{display:flex;flex:1;flex-direction:column;min-height:100%}.monaco-editor .parameter-hints-widget .signature{padding:4px 5px}.monaco-editor .parameter-hints-widget .docs{padding:0 10px 0 5px;white-space:pre-wrap}.monaco-editor .parameter-hints-widget .docs.empty{display:none}.monaco-editor .parameter-hints-widget .docs .markdown-docs{white-space:initial}.monaco-editor .parameter-hints-widget .docs .markdown-docs code{font-family:var(--monaco-monospace-font)}.monaco-editor .parameter-hints-widget .docs .code{white-space:pre-wrap}.monaco-editor .parameter-hints-widget .docs code{border-radius:3px;padding:0 0.4em}.monaco-editor .parameter-hints-widget .controls{display:none;flex-direction:column;align-items:center;min-width:22px;justify-content:flex-end}.monaco-editor .parameter-hints-widget.multiple .controls{display:flex;padding:0 2px}.monaco-editor .parameter-hints-widget.multiple .button{width:16px;height:16px;background-repeat:no-repeat;cursor:pointer}.monaco-editor .parameter-hints-widget .button.previous{bottom:24px}.monaco-editor .parameter-hints-widget .overloads{text-align:center;height:12px;line-height:12px;opacity:0.5;font-family:var(--monaco-monospace-font)}.monaco-editor .parameter-hints-widget .signature .parameter.active{font-weight:bold;text-decoration:underline}.monaco-editor .parameter-hints-widget .documentation-parameter > .parameter{font-weight:bold;margin-right:0.5em}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .peekview-widget .head{box-sizing:border-box;display:flex}.monaco-editor .peekview-widget .head .peekview-title{display:flex;align-items:center;font-size:13px;margin-left:20px;cursor:pointer;min-width:0}.monaco-editor .peekview-widget .head .peekview-title .dirname:not(:empty){font-size:0.9em;margin-left:0.5em}.monaco-editor .peekview-widget .head .peekview-title .meta{white-space:nowrap}.monaco-editor .peekview-widget .head .peekview-title .dirname{white-space:nowrap}.monaco-editor .peekview-widget .head .peekview-title .filename{overflow:hidden;text-overflow:ellipsis}.monaco-editor .peekview-widget .head .peekview-title .meta:not(:empty)::before{content:'-';padding:0 0.3em}.monaco-editor .peekview-widget .head .peekview-actions{flex:1;text-align:right;padding-right:2px}.monaco-editor .peekview-widget .head .peekview-actions > .monaco-action-bar{display:inline-block}.monaco-editor .peekview-widget .head .peekview-actions > .monaco-action-bar,\\n.monaco-editor .peekview-widget .head .peekview-actions > .monaco-action-bar > .actions-container{height:100%}.monaco-editor .peekview-widget > .body{border-top:1px solid;position:relative}.monaco-editor .peekview-widget .head .peekview-title .codicon{margin-right:4px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .rename-box{z-index:100;color:inherit}.monaco-editor .rename-box.preview{padding:3px 3px 0 3px}.monaco-editor .rename-box .rename-input{padding:3px;width:calc(100% - 6px)}.monaco-editor .rename-box .rename-label{display:none;opacity:.8}.monaco-editor .rename-box.preview .rename-label{display:inherit}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .snippet-placeholder{min-width:2px;outline-style:solid;outline-width:1px}.monaco-editor .finish-snippet-placeholder{outline-style:solid;outline-width:1px}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .suggest-widget{width:430px;z-index:40;display:flex;flex-direction:column}.monaco-editor .suggest-widget.message{flex-direction:row;align-items:center}.monaco-editor .suggest-widget,\\n.monaco-editor .suggest-details{flex:0 1 auto;width:100%;border-style:solid;border-width:1px}.monaco-editor.hc-black .suggest-widget,\\n.monaco-editor.hc-black .suggest-details{border-width:2px}.monaco-editor .suggest-widget .suggest-status-bar{box-sizing:border-box;display:none;flex-flow:row nowrap;justify-content:space-between;width:100%;font-size:80%;padding:0 4px 0 4px;border-top:1px solid transparent;overflow:hidden}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar{display:flex}.monaco-editor .suggest-widget .suggest-status-bar .left{padding-right:8px}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-label{opacity:0.5;color:inherit}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label{margin-right:0}.monaco-editor .suggest-widget.with-status-bar .suggest-status-bar .action-item:not(:last-of-type) .action-label::after{content:', ';margin-right:0.3em}.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row>.contents>.main>.right>.readMore,\\n.monaco-editor .suggest-widget.with-status-bar .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget.with-status-bar:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label{width:100%}.monaco-editor .suggest-widget>.message{padding-left:22px}.monaco-editor .suggest-widget>.tree{height:100%;width:100%}.monaco-editor .suggest-widget .monaco-list{user-select:none;-webkit-user-select:none;-ms-user-select:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row{display:flex;-mox-box-sizing:border-box;box-sizing:border-box;padding-right:10px;background-repeat:no-repeat;background-position:2px 2px;white-space:nowrap;cursor:pointer;touch-action:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents{flex:1;height:100%;overflow:hidden;padding-left:2px}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main{display:flex;overflow:hidden;text-overflow:ellipsis;white-space:pre;justify-content:space-between}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left, .monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{display:flex}.monaco-editor .suggest-widget:not(.frozen) .monaco-highlighted-label .highlight{font-weight:bold}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close,\\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore::before{color:inherit;opacity:1;font-size:14px;cursor:pointer}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close{position:absolute;top:6px;right:2px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.codicon-close:hover,\\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore:hover{opacity:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label,\\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label,\\n.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{opacity:0.7}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.signature-label{overflow:hidden;text-overflow:ellipsis}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.qualifier-label{margin-left:4px;opacity:0.4;font-size:90%;text-overflow:ellipsis;overflow:hidden;align-self:center}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{margin-left:1.1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label>.monaco-tokenized-source{display:inline}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.details-label{display:none}.monaco-editor .suggest-widget:not(.shows-details) .monaco-list .monaco-list-row.focused>.contents>.main>.right>.details-label{display:inline}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.right>.details-label,\\n.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row.focused:not(.string-label)>.contents>.main>.right>.details-label{display:inline}.monaco-editor .suggest-widget:not(.docs-side) .monaco-list .monaco-list-row:hover>.contents>.main>.right.can-expand-details>.details-label{width:calc(100% - 26px)}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left{flex-shrink:1;flex-grow:1;overflow:hidden}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.left>.monaco-icon-label{flex-shrink:0}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:not(.string-label)>.contents>.main>.left>.monaco-icon-label{max-width:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.left>.monaco-icon-label{flex-shrink:1}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right{overflow:hidden;flex-shrink:4;max-width:70%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:inline-block;position:absolute;right:10px;width:18px;height:18px;visibility:hidden}.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore, .monaco-editor .suggest-widget.docs-below .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none!important}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.string-label>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row.focused.string-label>.contents>.main>.right>.readMore{display:inline-block}.monaco-editor .suggest-widget.docs-side .monaco-list .monaco-list-row>.contents>.main>.right>.readMore,\\n.monaco-editor .suggest-widget.docs-below .monaco-list .monaco-list-row>.contents>.main>.right>.readMore{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row:hover>.contents>.main>.right>.readMore{visibility:visible}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated{opacity:0.66;text-decoration:unset}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label.deprecated>.monaco-icon-label-container>.monaco-icon-name-container{text-decoration:line-through}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-icon-label::before{height:100%}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon{display:block;height:16px;width:16px;margin-left:2px;background-repeat:no-repeat;background-size:80%;background-position:center}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.hide{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .suggest-icon{display:flex;align-items:center;margin-right:4px}.monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .icon, .monaco-editor .suggest-widget.no-icons .monaco-list .monaco-list-row .suggest-icon::before{display:none}.monaco-editor .suggest-widget .monaco-list .monaco-list-row .icon.customcolor .colorspan{margin:0 0 0 0.3em;border:0.1em solid #000;width:0.7em;height:0.7em;display:inline-block}.monaco-editor .suggest-details-container{z-index:41}.monaco-editor .suggest-details{display:flex;flex-direction:column;cursor:default}.monaco-editor .suggest-details.no-docs{display:none}.monaco-editor .suggest-details>.monaco-scrollable-element{flex:1}.monaco-editor .suggest-details>.monaco-scrollable-element>.body{box-sizing:border-box;height:100%;width:100%}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type{flex:2;overflow:hidden;text-overflow:ellipsis;opacity:0.7;white-space:pre;margin:0 24px 0 0;padding:4px 0 12px 5px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.header>.type.auto-wrap{white-space:normal;word-break:break-all}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs{margin:0;padding:4px 5px;white-space:pre-wrap}.monaco-editor .suggest-details.no-type>.monaco-scrollable-element>.body>.docs{margin-right:24px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs{padding:0;white-space:initial;min-height:calc(1rem + 8px)}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div,\\n.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>span:not(:empty){padding:4px 5px}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:first-child{margin-top:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs>div>p:last-child{margin-bottom:0}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs .code{white-space:pre-wrap;word-wrap:break-word}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>.docs.markdown-docs .codicon{vertical-align:sub}.monaco-editor .suggest-details>.monaco-scrollable-element>.body>p:empty{display:none}.monaco-editor .suggest-details code{border-radius:3px;padding:0 0.4em}.monaco-editor .suggest-details ul{padding-left:20px}.monaco-editor .suggest-details ol{padding-left:20px}.monaco-editor .suggest-details p code{font-family:var(--monaco-monospace-font)}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .zone-widget{position:absolute;z-index:10}.monaco-editor .zone-widget .zone-widget-container{border-top-style:solid;border-bottom-style:solid;border-top-width:0;border-bottom-width:0;position:relative}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .accessibilityHelpWidget{padding:10px;vertical-align:middle;overflow:scroll}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .iPadShowKeyboard{width:58px;min-width:0;height:36px;min-height:0;margin:0;padding:0;position:absolute;resize:none;overflow:hidden;background:url(\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCA1MyAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDguMDM2NCA0LjAxMDQySDQuMDA3NzlMNC4wMDc3OSAzMi4wMjg2SDQ4LjAzNjRWNC4wMTA0MlpNNC4wMDc3OSAwLjAwNzgxMjVDMS43OTcyMSAwLjAwNzgxMjUgMC4wMDUxODc5OSAxLjc5OTg0IDAuMDA1MTg3OTkgNC4wMTA0MlYzMi4wMjg2QzAuMDA1MTg3OTkgMzQuMjM5MiAxLjc5NzIxIDM2LjAzMTIgNC4wMDc3OSAzNi4wMzEySDQ4LjAzNjRDNTAuMjQ3IDM2LjAzMTIgNTIuMDM5IDM0LjIzOTIgNTIuMDM5IDMyLjAyODZWNC4wMTA0MkM1Mi4wMzkgMS43OTk4NCA1MC4yNDcgMC4wMDc4MTI1IDQ4LjAzNjQgMC4wMDc4MTI1SDQuMDA3NzlaTTguMDEwNDIgOC4wMTMwMkgxMi4wMTNWMTIuMDE1Nkg4LjAxMDQyVjguMDEzMDJaTTIwLjAxODIgOC4wMTMwMkgxNi4wMTU2VjEyLjAxNTZIMjAuMDE4MlY4LjAxMzAyWk0yNC4wMjA4IDguMDEzMDJIMjguMDIzNFYxMi4wMTU2SDI0LjAyMDhWOC4wMTMwMlpNMzYuMDI4NiA4LjAxMzAySDMyLjAyNlYxMi4wMTU2SDM2LjAyODZWOC4wMTMwMlpNNDAuMDMxMiA4LjAxMzAySDQ0LjAzMzlWMTIuMDE1Nkg0MC4wMzEyVjguMDEzMDJaTTE2LjAxNTYgMTYuMDE4Mkg4LjAxMDQyVjIwLjAyMDhIMTYuMDE1NlYxNi4wMTgyWk0yMC4wMTgyIDE2LjAxODJIMjQuMDIwOFYyMC4wMjA4SDIwLjAxODJWMTYuMDE4MlpNMzIuMDI2IDE2LjAxODJIMjguMDIzNFYyMC4wMjA4SDMyLjAyNlYxNi4wMTgyWk00NC4wMzM5IDE2LjAxODJWMjAuMDIwOEgzNi4wMjg2VjE2LjAxODJINDQuMDMzOVpNMTIuMDEzIDI0LjAyMzRIOC4wMTA0MlYyOC4wMjZIMTIuMDEzVjI0LjAyMzRaTTE2LjAxNTYgMjQuMDIzNEgzNi4wMjg2VjI4LjAyNkgxNi4wMTU2VjI0LjAyMzRaTTQ0LjAzMzkgMjQuMDIzNEg0MC4wMzEyVjI4LjAyNkg0NC4wMzM5VjI0LjAyMzRaIiBmaWxsPSIjNDI0MjQyIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==\\\") center center no-repeat;border:4px solid #F6F6F6;border-radius:4px}.monaco-editor.vs-dark .iPadShowKeyboard{background:url(\\\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCA1MyAzNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwKSI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDguMDM2NCA0LjAxMDQySDQuMDA3NzlMNC4wMDc3OSAzMi4wMjg2SDQ4LjAzNjRWNC4wMTA0MlpNNC4wMDc3OSAwLjAwNzgxMjVDMS43OTcyMSAwLjAwNzgxMjUgMC4wMDUxODc5OSAxLjc5OTg0IDAuMDA1MTg3OTkgNC4wMTA0MlYzMi4wMjg2QzAuMDA1MTg3OTkgMzQuMjM5MiAxLjc5NzIxIDM2LjAzMTIgNC4wMDc3OSAzNi4wMzEySDQ4LjAzNjRDNTAuMjQ3IDM2LjAzMTIgNTIuMDM5IDM0LjIzOTIgNTIuMDM5IDMyLjAyODZWNC4wMTA0MkM1Mi4wMzkgMS43OTk4NCA1MC4yNDcgMC4wMDc4MTI1IDQ4LjAzNjQgMC4wMDc4MTI1SDQuMDA3NzlaTTguMDEwNDIgOC4wMTMwMkgxMi4wMTNWMTIuMDE1Nkg4LjAxMDQyVjguMDEzMDJaTTIwLjAxODIgOC4wMTMwMkgxNi4wMTU2VjEyLjAxNTZIMjAuMDE4MlY4LjAxMzAyWk0yNC4wMjA4IDguMDEzMDJIMjguMDIzNFYxMi4wMTU2SDI0LjAyMDhWOC4wMTMwMlpNMzYuMDI4NiA4LjAxMzAySDMyLjAyNlYxMi4wMTU2SDM2LjAyODZWOC4wMTMwMlpNNDAuMDMxMiA4LjAxMzAySDQ0LjAzMzlWMTIuMDE1Nkg0MC4wMzEyVjguMDEzMDJaTTE2LjAxNTYgMTYuMDE4Mkg4LjAxMDQyVjIwLjAyMDhIMTYuMDE1NlYxNi4wMTgyWk0yMC4wMTgyIDE2LjAxODJIMjQuMDIwOFYyMC4wMjA4SDIwLjAxODJWMTYuMDE4MlpNMzIuMDI2IDE2LjAxODJIMjguMDIzNFYyMC4wMjA4SDMyLjAyNlYxNi4wMTgyWk00NC4wMzM5IDE2LjAxODJWMjAuMDIwOEgzNi4wMjg2VjE2LjAxODJINDQuMDMzOVpNMTIuMDEzIDI0LjAyMzRIOC4wMTA0MlYyOC4wMjZIMTIuMDEzVjI0LjAyMzRaTTE2LjAxNTYgMjQuMDIzNEgzNi4wMjg2VjI4LjAyNkgxNi4wMTU2VjI0LjAyMzRaTTQ0LjAzMzkgMjQuMDIzNEg0MC4wMzEyVjI4LjAyNkg0NC4wMzM5VjI0LjAyMzRaIiBmaWxsPSIjQzVDNUM1Ii8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDAiPgo8cmVjdCB3aWR0aD0iNTMiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==\\\") center center no-repeat;border:4px solid #252526}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor .tokens-inspect-widget{z-index:50;user-select:text;-webkit-user-select:text;-ms-user-select:text;padding:10px}.tokens-inspect-separator{height:1px;border:0}.monaco-editor .tokens-inspect-widget .tm-token{font-family:var(--monaco-monospace-font)}.monaco-editor .tokens-inspect-widget .tm-token-length{font-weight:normal;font-size:60%;float:right}.monaco-editor .tokens-inspect-widget .tm-metadata-table{width:100%}.monaco-editor .tokens-inspect-widget .tm-metadata-value{font-family:var(--monaco-monospace-font);text-align:right}.monaco-editor .tokens-inspect-widget .tm-token-type{font-family:var(--monaco-monospace-font)}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".quick-input-widget{font-size:13px}.quick-input-widget .monaco-highlighted-label .highlight,\\n.quick-input-widget .monaco-highlighted-label .highlight{color:#0066BF}.vs-dark .quick-input-widget .monaco-highlighted-label .highlight,\\n.vs-dark .quick-input-widget .monaco-highlighted-label .highlight{color:#0097fb}.hc-black .quick-input-widget .monaco-highlighted-label .highlight,\\n.hc-black .quick-input-widget .monaco-highlighted-label .highlight{color:#F38518}.monaco-keybinding > .monaco-keybinding-key{background-color:rgba(221,221,221,0.4);border:solid 1px rgba(204,204,204,0.4);border-bottom-color:rgba(187,187,187,0.4);box-shadow:inset 0 -1px 0 rgba(187,187,187,0.4);color:#555}.hc-black .monaco-keybinding > .monaco-keybinding-key{background-color:transparent;border:solid 1px rgb(111,195,223);box-shadow:none;color:#fff}.vs-dark .monaco-keybinding > .monaco-keybinding-key{background-color:rgba(128,128,128,0.17);border:solid 1px rgba(51,51,51,0.6);border-bottom-color:rgba(68,68,68,0.6);box-shadow:inset 0 -1px 0 rgba(68,68,68,0.6);color:#ccc}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-editor{font-family:-apple-system,BlinkMacSystemFont,\\\"Segoe WPC\\\",\\\"Segoe UI\\\",\\\"HelveticaNeue-Light\\\",system-ui,\\\"Ubuntu\\\",\\\"Droid Sans\\\",sans-serif;--monaco-monospace-font:\\\"SF Mono\\\",Monaco,Menlo,Consolas,\\\"Ubuntu Mono\\\",\\\"Liberation Mono\\\",\\\"DejaVu Sans Mono\\\",\\\"Courier New\\\",monospace}.monaco-menu .monaco-action-bar.vertical .action-item .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,\\n.monaco-editor.hc-black .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label{stroke-width:1.2px}.monaco-hover p{margin:0}.monaco-aria-container{position:absolute!important;height:1px;width:1px;margin:-1px;overflow:hidden;padding:0;clip:rect(1px,1px,1px,1px);clip-path:inset(50%)}.monaco-editor.hc-black{-ms-high-contrast-adjust:none}@media screen and (-ms-high-contrast:active){.monaco-editor.vs .view-overlays .current-line,\\n\\t.monaco-editor.vs-dark .view-overlays .current-line{border-color:windowtext!important;border-left:0;border-right:0}.monaco-editor.vs .cursor,\\n\\t.monaco-editor.vs-dark .cursor{background-color:windowtext!important}.monaco-editor.vs .dnd-target,\\n\\t.monaco-editor.vs-dark .dnd-target{border-color:windowtext!important}.monaco-editor.vs .selected-text,\\n\\t.monaco-editor.vs-dark .selected-text{background-color:highlight!important}.monaco-editor.vs .view-line,\\n\\t.monaco-editor.vs-dark .view-line{-ms-high-contrast-adjust:none}.monaco-editor.vs .view-line span,\\n\\t.monaco-editor.vs-dark .view-line span{color:windowtext!important}.monaco-editor.vs .view-line span.inline-selected-text,\\n\\t.monaco-editor.vs-dark .view-line span.inline-selected-text{color:highlighttext!important}.monaco-editor.vs .view-overlays,\\n\\t.monaco-editor.vs-dark .view-overlays{-ms-high-contrast-adjust:none}.monaco-editor.vs .selectionHighlight,\\n\\t.monaco-editor.vs-dark .selectionHighlight,\\n\\t.monaco-editor.vs .wordHighlight,\\n\\t.monaco-editor.vs-dark .wordHighlight,\\n\\t.monaco-editor.vs .wordHighlightStrong,\\n\\t.monaco-editor.vs-dark .wordHighlightStrong,\\n\\t.monaco-editor.vs .reference-decoration,\\n\\t.monaco-editor.vs-dark .reference-decoration{border:2px dotted highlight!important;background:transparent!important;box-sizing:border-box}.monaco-editor.vs .rangeHighlight,\\n\\t.monaco-editor.vs-dark .rangeHighlight{background:transparent!important;border:1px dotted activeborder!important;box-sizing:border-box}.monaco-editor.vs .bracket-match,\\n\\t.monaco-editor.vs-dark .bracket-match{border-color:windowtext!important;background:transparent!important}.monaco-editor.vs .findMatch,\\n\\t.monaco-editor.vs-dark .findMatch,\\n\\t.monaco-editor.vs .currentFindMatch,\\n\\t.monaco-editor.vs-dark .currentFindMatch{border:2px dotted activeborder!important;background:transparent!important;box-sizing:border-box}.monaco-editor.vs .find-widget,\\n\\t.monaco-editor.vs-dark .find-widget{border:1px solid windowtext}.monaco-editor.vs .monaco-list .monaco-list-row,\\n\\t.monaco-editor.vs-dark .monaco-list .monaco-list-row{-ms-high-contrast-adjust:none;color:windowtext!important}.monaco-editor.vs .monaco-list .monaco-list-row.focused,\\n\\t.monaco-editor.vs-dark .monaco-list .monaco-list-row.focused{color:highlighttext!important;background-color:highlight!important}.monaco-editor.vs .monaco-list .monaco-list-row:hover,\\n\\t.monaco-editor.vs-dark .monaco-list .monaco-list-row:hover{background:transparent!important;border:1px solid highlight;box-sizing:border-box}.monaco-editor.vs .monaco-scrollable-element > .scrollbar,\\n\\t.monaco-editor.vs-dark .monaco-scrollable-element > .scrollbar{-ms-high-contrast-adjust:none;background:background!important;border:1px solid windowtext;box-sizing:border-box}.monaco-editor.vs .monaco-scrollable-element > .scrollbar > .slider,\\n\\t.monaco-editor.vs-dark .monaco-scrollable-element > .scrollbar > .slider{background:windowtext!important}.monaco-editor.vs .monaco-scrollable-element > .scrollbar > .slider:hover,\\n\\t.monaco-editor.vs-dark .monaco-scrollable-element > .scrollbar > .slider:hover{background:highlight!important}.monaco-editor.vs .monaco-scrollable-element > .scrollbar > .slider.active,\\n\\t.monaco-editor.vs-dark .monaco-scrollable-element > .scrollbar > .slider.active{background:highlight!important}.monaco-editor.vs .decorationsOverviewRuler,\\n\\t.monaco-editor.vs-dark .decorationsOverviewRuler{opacity:0}.monaco-editor.vs .minimap,\\n\\t.monaco-editor.vs-dark .minimap{display:none}.monaco-editor.vs .squiggly-d-error,\\n\\t.monaco-editor.vs-dark .squiggly-d-error{background:transparent!important;border-bottom:4px double #E47777}.monaco-editor.vs .squiggly-c-warning,\\n\\t.monaco-editor.vs-dark .squiggly-c-warning{border-bottom:4px double #71B771}.monaco-editor.vs .squiggly-b-info,\\n\\t.monaco-editor.vs-dark .squiggly-b-info{border-bottom:4px double #71B771}.monaco-editor.vs .squiggly-a-hint,\\n\\t.monaco-editor.vs-dark .squiggly-a-hint{border-bottom:4px double #6c6c6c}.monaco-editor.vs .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label,\\n\\t.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .action-label{-ms-high-contrast-adjust:none;color:highlighttext!important;background-color:highlight!important}.monaco-editor.vs .monaco-menu .monaco-action-bar.vertical .action-menu-item:hover .action-label,\\n\\t.monaco-editor.vs-dark .monaco-menu .monaco-action-bar.vertical .action-menu-item:hover .action-label{-ms-high-contrast-adjust:none;background:transparent!important;border:1px solid highlight;box-sizing:border-box}.monaco-diff-editor.vs .diffOverviewRuler,\\n\\t.monaco-diff-editor.vs-dark .diffOverviewRuler{display:none}.monaco-editor.vs .line-insert,\\n\\t.monaco-editor.vs-dark .line-insert,\\n\\t.monaco-editor.vs .line-delete,\\n\\t.monaco-editor.vs-dark .line-delete{background:transparent!important;border:1px solid highlight!important;box-sizing:border-box}.monaco-editor.vs .char-insert,\\n\\t.monaco-editor.vs-dark .char-insert,\\n\\t.monaco-editor.vs .char-delete,\\n\\t.monaco-editor.vs-dark .char-delete{background:transparent!important}}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".monaco-action-bar .action-item.menu-entry .action-label.icon{width:16px;height:16px;background-repeat:no-repeat;background-position:50%;background-size:16px}.monaco-action-bar .action-item.menu-entry .action-label{background-image:var(--menu-entry-icon-light)}.vs-dark .monaco-action-bar .action-item.menu-entry .action-label,\\n.hc-black .monaco-action-bar .action-item.menu-entry .action-label{background-image:var(--menu-entry-icon-dark)}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../../../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".context-view .monaco-menu{min-width:130px}\", \"\"]);\n\n// exports\n","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","module.exports = function escape(url) {\n if (typeof url !== 'string') {\n return url\n }\n // If url is already wrapped in quotes, remove them\n if (/^['\"].*['\"]$/.test(url)) {\n url = url.slice(1, -1);\n }\n // Should url be wrapped?\n // See https://drafts.csswg.org/css-values-3/#urls\n if (/[\"'() \\t\\n]/.test(url)) {\n return '\"' + url.replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n') + '\"'\n }\n\n return url\n}\n","export default __webpack_public_path__ + \"80a4c25b73c1f97077ed2ea63fb85cae.ttf\";","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../common/event.js';\nclass WindowManager {\n constructor() {\n // --- Zoom Level\n this._zoomLevel = 0;\n this._lastZoomLevelChangeTime = 0;\n this._onDidChangeZoomLevel = new Emitter();\n this.onDidChangeZoomLevel = this._onDidChangeZoomLevel.event;\n // --- Zoom Factor\n this._zoomFactor = 1;\n }\n getZoomLevel() {\n return this._zoomLevel;\n }\n getTimeSinceLastZoomLevelChanged() {\n return Date.now() - this._lastZoomLevelChangeTime;\n }\n getZoomFactor() {\n return this._zoomFactor;\n }\n // --- Pixel Ratio\n getPixelRatio() {\n let ctx = document.createElement('canvas').getContext('2d');\n let dpr = window.devicePixelRatio || 1;\n let bsr = ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio || 1;\n return dpr / bsr;\n }\n}\nWindowManager.INSTANCE = new WindowManager();\nexport function getZoomLevel() {\n return WindowManager.INSTANCE.getZoomLevel();\n}\n/** Returns the time (in ms) since the zoom level was changed */\nexport function getTimeSinceLastZoomLevelChanged() {\n return WindowManager.INSTANCE.getTimeSinceLastZoomLevelChanged();\n}\nexport function onDidChangeZoomLevel(callback) {\n return WindowManager.INSTANCE.onDidChangeZoomLevel(callback);\n}\n/** The zoom scale for an index, e.g. 1, 1.2, 1.4 */\nexport function getZoomFactor() {\n return WindowManager.INSTANCE.getZoomFactor();\n}\nexport function getPixelRatio() {\n return WindowManager.INSTANCE.getPixelRatio();\n}\nconst userAgent = navigator.userAgent;\nexport const isFirefox = (userAgent.indexOf('Firefox') >= 0);\nexport const isWebKit = (userAgent.indexOf('AppleWebKit') >= 0);\nexport const isChrome = (userAgent.indexOf('Chrome') >= 0);\nexport const isSafari = (!isChrome && (userAgent.indexOf('Safari') >= 0));\nexport const isWebkitWebView = (!isChrome && !isSafari && isWebKit);\nexport const isIPad = (userAgent.indexOf('iPad') >= 0 || (isSafari && navigator.maxTouchPoints > 0));\nexport const isAndroid = (userAgent.indexOf('Android') >= 0);\nexport const isStandalone = (window.matchMedia && window.matchMedia('(display-mode: standalone)').matches);\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 *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport * as platform from '../common/platform.js';\n/**\n * Browser feature we can support in current platform, browser and environment.\n */\nexport const BrowserFeatures = {\n clipboard: {\n writeText: (platform.isNative\n || (document.queryCommandSupported && document.queryCommandSupported('copy'))\n || !!(navigator && navigator.clipboard && navigator.clipboard.writeText)),\n readText: (platform.isNative\n || !!(navigator && navigator.clipboard && navigator.clipboard.readText))\n },\n keyboard: (() => {\n if (platform.isNative || browser.isStandalone) {\n return 0 /* Always */;\n }\n if (navigator.keyboard || browser.isSafari) {\n return 1 /* FullScreen */;\n }\n return 2 /* None */;\n })(),\n // 'ontouchstart' in window always evaluates to true with typescript's modern typings. This causes `window` to be\n // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast\n touch: 'ontouchstart' in window || navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0,\n pointerEvents: window.PointerEvent && ('ontouchstart' in window || window.navigator.maxTouchPoints > 0 || navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0)\n};\n","// Common data transfers\nexport const DataTransfers = {\n /**\n * Application specific resource transfer type\n */\n RESOURCES: 'ResourceURLs',\n /**\n * Browser specific transfer type to download\n */\n DOWNLOAD_URL: 'DownloadURL',\n /**\n * Browser specific transfer type for files\n */\n FILES: 'Files',\n /**\n * Typically transfer type for copy/paste transfers.\n */\n TEXT: 'text/plain'\n};\nexport class DragAndDropData {\n constructor(data) {\n this.data = data;\n }\n update() {\n // noop\n }\n getData() {\n return this.data;\n }\n}\nexport const StaticDND = {\n CurrentDragAndDropData: undefined\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 *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport { domEvent } from './event.js';\nimport { StandardKeyboardEvent } from './keyboardEvent.js';\nimport { StandardMouseEvent } from './mouseEvent.js';\nimport { TimeoutTimer } from '../common/async.js';\nimport { onUnexpectedError } from '../common/errors.js';\nimport { Emitter } from '../common/event.js';\nimport { Disposable, DisposableStore, toDisposable } from '../common/lifecycle.js';\nimport * as platform from '../common/platform.js';\nimport { FileAccess, RemoteAuthorities } from '../common/network.js';\nimport { BrowserFeatures } from './canIUse.js';\nexport function clearNode(node) {\n while (node.firstChild) {\n node.firstChild.remove();\n }\n}\n/**\n * @deprecated Use node.isConnected directly\n */\nexport function isInDOM(node) {\n var _a;\n return (_a = node === null || node === void 0 ? void 0 : node.isConnected) !== null && _a !== void 0 ? _a : false;\n}\nclass DomListener {\n constructor(node, type, handler, options) {\n this._node = node;\n this._type = type;\n this._handler = handler;\n this._options = (options || false);\n this._node.addEventListener(this._type, this._handler, this._options);\n }\n dispose() {\n if (!this._handler) {\n // Already disposed\n return;\n }\n this._node.removeEventListener(this._type, this._handler, this._options);\n // Prevent leakers from holding on to the dom or handler func\n this._node = null;\n this._handler = null;\n }\n}\nexport function addDisposableListener(node, type, handler, useCaptureOrOptions) {\n return new DomListener(node, type, handler, useCaptureOrOptions);\n}\nfunction _wrapAsStandardMouseEvent(handler) {\n return function (e) {\n return handler(new StandardMouseEvent(e));\n };\n}\nfunction _wrapAsStandardKeyboardEvent(handler) {\n return function (e) {\n return handler(new StandardKeyboardEvent(e));\n };\n}\nexport let addStandardDisposableListener = function addStandardDisposableListener(node, type, handler, useCapture) {\n let wrapHandler = handler;\n if (type === 'click' || type === 'mousedown') {\n wrapHandler = _wrapAsStandardMouseEvent(handler);\n }\n else if (type === 'keydown' || type === 'keypress' || type === 'keyup') {\n wrapHandler = _wrapAsStandardKeyboardEvent(handler);\n }\n return addDisposableListener(node, type, wrapHandler, useCapture);\n};\nexport let addStandardDisposableGenericMouseDownListner = function addStandardDisposableListener(node, handler, useCapture) {\n let wrapHandler = _wrapAsStandardMouseEvent(handler);\n return addDisposableGenericMouseDownListner(node, wrapHandler, useCapture);\n};\nexport function addDisposableGenericMouseDownListner(node, handler, useCapture) {\n return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_DOWN : EventType.MOUSE_DOWN, handler, useCapture);\n}\nexport function addDisposableGenericMouseUpListner(node, handler, useCapture) {\n return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_UP : EventType.MOUSE_UP, handler, useCapture);\n}\nexport function addDisposableNonBubblingMouseOutListener(node, handler) {\n return addDisposableListener(node, 'mouseout', (e) => {\n // Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements\n let toElement = (e.relatedTarget);\n while (toElement && toElement !== node) {\n toElement = toElement.parentNode;\n }\n if (toElement === node) {\n return;\n }\n handler(e);\n });\n}\nexport function addDisposableNonBubblingPointerOutListener(node, handler) {\n return addDisposableListener(node, 'pointerout', (e) => {\n // Mouse out bubbles, so this is an attempt to ignore faux mouse outs coming from children elements\n let toElement = (e.relatedTarget);\n while (toElement && toElement !== node) {\n toElement = toElement.parentNode;\n }\n if (toElement === node) {\n return;\n }\n handler(e);\n });\n}\nlet _animationFrame = null;\nfunction doRequestAnimationFrame(callback) {\n if (!_animationFrame) {\n const emulatedRequestAnimationFrame = (callback) => {\n return setTimeout(() => callback(new Date().getTime()), 0);\n };\n _animationFrame = (self.requestAnimationFrame\n || self.msRequestAnimationFrame\n || self.webkitRequestAnimationFrame\n || self.mozRequestAnimationFrame\n || self.oRequestAnimationFrame\n || emulatedRequestAnimationFrame);\n }\n return _animationFrame.call(self, callback);\n}\n/**\n * Schedule a callback to be run at the next animation frame.\n * This allows multiple parties to register callbacks that should run at the next animation frame.\n * If currently in an animation frame, `runner` will be executed immediately.\n * @return token that can be used to cancel the scheduled runner (only if `runner` was not executed immediately).\n */\nexport let runAtThisOrScheduleAtNextAnimationFrame;\n/**\n * Schedule a callback to be run at the next animation frame.\n * This allows multiple parties to register callbacks that should run at the next animation frame.\n * If currently in an animation frame, `runner` will be executed at the next animation frame.\n * @return token that can be used to cancel the scheduled runner.\n */\nexport let scheduleAtNextAnimationFrame;\nclass AnimationFrameQueueItem {\n constructor(runner, priority = 0) {\n this._runner = runner;\n this.priority = priority;\n this._canceled = false;\n }\n dispose() {\n this._canceled = true;\n }\n execute() {\n if (this._canceled) {\n return;\n }\n try {\n this._runner();\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n // Sort by priority (largest to lowest)\n static sort(a, b) {\n return b.priority - a.priority;\n }\n}\n(function () {\n /**\n * The runners scheduled at the next animation frame\n */\n let NEXT_QUEUE = [];\n /**\n * The runners scheduled at the current animation frame\n */\n let CURRENT_QUEUE = null;\n /**\n * A flag to keep track if the native requestAnimationFrame was already called\n */\n let animFrameRequested = false;\n /**\n * A flag to indicate if currently handling a native requestAnimationFrame callback\n */\n let inAnimationFrameRunner = false;\n let animationFrameRunner = () => {\n animFrameRequested = false;\n CURRENT_QUEUE = NEXT_QUEUE;\n NEXT_QUEUE = [];\n inAnimationFrameRunner = true;\n while (CURRENT_QUEUE.length > 0) {\n CURRENT_QUEUE.sort(AnimationFrameQueueItem.sort);\n let top = CURRENT_QUEUE.shift();\n top.execute();\n }\n inAnimationFrameRunner = false;\n };\n scheduleAtNextAnimationFrame = (runner, priority = 0) => {\n let item = new AnimationFrameQueueItem(runner, priority);\n NEXT_QUEUE.push(item);\n if (!animFrameRequested) {\n animFrameRequested = true;\n doRequestAnimationFrame(animationFrameRunner);\n }\n return item;\n };\n runAtThisOrScheduleAtNextAnimationFrame = (runner, priority) => {\n if (inAnimationFrameRunner) {\n let item = new AnimationFrameQueueItem(runner, priority);\n CURRENT_QUEUE.push(item);\n return item;\n }\n else {\n return scheduleAtNextAnimationFrame(runner, priority);\n }\n };\n})();\nconst MINIMUM_TIME_MS = 8;\nconst DEFAULT_EVENT_MERGER = function (lastEvent, currentEvent) {\n return currentEvent;\n};\nclass TimeoutThrottledDomListener extends Disposable {\n constructor(node, type, handler, eventMerger = DEFAULT_EVENT_MERGER, minimumTimeMs = MINIMUM_TIME_MS) {\n super();\n let lastEvent = null;\n let lastHandlerTime = 0;\n let timeout = this._register(new TimeoutTimer());\n let invokeHandler = () => {\n lastHandlerTime = (new Date()).getTime();\n handler(lastEvent);\n lastEvent = null;\n };\n this._register(addDisposableListener(node, type, (e) => {\n lastEvent = eventMerger(lastEvent, e);\n let elapsedTime = (new Date()).getTime() - lastHandlerTime;\n if (elapsedTime >= minimumTimeMs) {\n timeout.cancel();\n invokeHandler();\n }\n else {\n timeout.setIfNotSet(invokeHandler, minimumTimeMs - elapsedTime);\n }\n }));\n }\n}\nexport function addDisposableThrottledListener(node, type, handler, eventMerger, minimumTimeMs) {\n return new TimeoutThrottledDomListener(node, type, handler, eventMerger, minimumTimeMs);\n}\nexport function getComputedStyle(el) {\n return document.defaultView.getComputedStyle(el, null);\n}\nexport function getClientArea(element) {\n // Try with DOM clientWidth / clientHeight\n if (element !== document.body) {\n return new Dimension(element.clientWidth, element.clientHeight);\n }\n // If visual view port exits and it's on mobile, it should be used instead of window innerWidth / innerHeight, or document.body.clientWidth / document.body.clientHeight\n if (platform.isIOS && window.visualViewport) {\n const width = window.visualViewport.width;\n const height = window.visualViewport.height - (browser.isStandalone\n // in PWA mode, the visual viewport always includes the safe-area-inset-bottom (which is for the home indicator)\n // even when you are using the onscreen monitor, the visual viewport will include the area between system statusbar and the onscreen keyboard\n // plus the area between onscreen keyboard and the bottom bezel, which is 20px on iOS.\n ? (20 + 4) // + 4px for body margin\n : 0);\n return new Dimension(width, height);\n }\n // Try innerWidth / innerHeight\n if (window.innerWidth && window.innerHeight) {\n return new Dimension(window.innerWidth, window.innerHeight);\n }\n // Try with document.body.clientWidth / document.body.clientHeight\n if (document.body && document.body.clientWidth && document.body.clientHeight) {\n return new Dimension(document.body.clientWidth, document.body.clientHeight);\n }\n // Try with document.documentElement.clientWidth / document.documentElement.clientHeight\n if (document.documentElement && document.documentElement.clientWidth && document.documentElement.clientHeight) {\n return new Dimension(document.documentElement.clientWidth, document.documentElement.clientHeight);\n }\n throw new Error('Unable to figure out browser width and height');\n}\nclass SizeUtils {\n // Adapted from WinJS\n // Converts a CSS positioning string for the specified element to pixels.\n static convertToPixels(element, value) {\n return parseFloat(value) || 0;\n }\n static getDimension(element, cssPropertyName, jsPropertyName) {\n let computedStyle = getComputedStyle(element);\n let value = '0';\n if (computedStyle) {\n if (computedStyle.getPropertyValue) {\n value = computedStyle.getPropertyValue(cssPropertyName);\n }\n else {\n // IE8\n value = computedStyle.getAttribute(jsPropertyName);\n }\n }\n return SizeUtils.convertToPixels(element, value);\n }\n static getBorderLeftWidth(element) {\n return SizeUtils.getDimension(element, 'border-left-width', 'borderLeftWidth');\n }\n static getBorderRightWidth(element) {\n return SizeUtils.getDimension(element, 'border-right-width', 'borderRightWidth');\n }\n static getBorderTopWidth(element) {\n return SizeUtils.getDimension(element, 'border-top-width', 'borderTopWidth');\n }\n static getBorderBottomWidth(element) {\n return SizeUtils.getDimension(element, 'border-bottom-width', 'borderBottomWidth');\n }\n static getPaddingLeft(element) {\n return SizeUtils.getDimension(element, 'padding-left', 'paddingLeft');\n }\n static getPaddingRight(element) {\n return SizeUtils.getDimension(element, 'padding-right', 'paddingRight');\n }\n static getPaddingTop(element) {\n return SizeUtils.getDimension(element, 'padding-top', 'paddingTop');\n }\n static getPaddingBottom(element) {\n return SizeUtils.getDimension(element, 'padding-bottom', 'paddingBottom');\n }\n static getMarginLeft(element) {\n return SizeUtils.getDimension(element, 'margin-left', 'marginLeft');\n }\n static getMarginTop(element) {\n return SizeUtils.getDimension(element, 'margin-top', 'marginTop');\n }\n static getMarginRight(element) {\n return SizeUtils.getDimension(element, 'margin-right', 'marginRight');\n }\n static getMarginBottom(element) {\n return SizeUtils.getDimension(element, 'margin-bottom', 'marginBottom');\n }\n}\nexport class Dimension {\n constructor(width, height) {\n this.width = width;\n this.height = height;\n }\n with(width = this.width, height = this.height) {\n if (width !== this.width || height !== this.height) {\n return new Dimension(width, height);\n }\n else {\n return this;\n }\n }\n static is(obj) {\n return typeof obj === 'object' && typeof obj.height === 'number' && typeof obj.width === 'number';\n }\n static lift(obj) {\n if (obj instanceof Dimension) {\n return obj;\n }\n else {\n return new Dimension(obj.width, obj.height);\n }\n }\n static equals(a, b) {\n if (a === b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n return a.width === b.width && a.height === b.height;\n }\n}\nexport function getTopLeftOffset(element) {\n // Adapted from WinJS.Utilities.getPosition\n // and added borders to the mix\n let offsetParent = element.offsetParent;\n let top = element.offsetTop;\n let left = element.offsetLeft;\n while ((element = element.parentNode) !== null\n && element !== document.body\n && element !== document.documentElement) {\n top -= element.scrollTop;\n const c = isShadowRoot(element) ? null : getComputedStyle(element);\n if (c) {\n left -= c.direction !== 'rtl' ? element.scrollLeft : -element.scrollLeft;\n }\n if (element === offsetParent) {\n left += SizeUtils.getBorderLeftWidth(element);\n top += SizeUtils.getBorderTopWidth(element);\n top += element.offsetTop;\n left += element.offsetLeft;\n offsetParent = element.offsetParent;\n }\n }\n return {\n left: left,\n top: top\n };\n}\nexport function size(element, width, height) {\n if (typeof width === 'number') {\n element.style.width = `${width}px`;\n }\n if (typeof height === 'number') {\n element.style.height = `${height}px`;\n }\n}\n/**\n * Returns the position of a dom node relative to the entire page.\n */\nexport function getDomNodePagePosition(domNode) {\n let bb = domNode.getBoundingClientRect();\n return {\n left: bb.left + StandardWindow.scrollX,\n top: bb.top + StandardWindow.scrollY,\n width: bb.width,\n height: bb.height\n };\n}\nexport const StandardWindow = new class {\n get scrollX() {\n if (typeof window.scrollX === 'number') {\n // modern browsers\n return window.scrollX;\n }\n else {\n return document.body.scrollLeft + document.documentElement.scrollLeft;\n }\n }\n get scrollY() {\n if (typeof window.scrollY === 'number') {\n // modern browsers\n return window.scrollY;\n }\n else {\n return document.body.scrollTop + document.documentElement.scrollTop;\n }\n }\n};\n// Adapted from WinJS\n// Gets the width of the element, including margins.\nexport function getTotalWidth(element) {\n let margin = SizeUtils.getMarginLeft(element) + SizeUtils.getMarginRight(element);\n return element.offsetWidth + margin;\n}\nexport function getContentWidth(element) {\n let border = SizeUtils.getBorderLeftWidth(element) + SizeUtils.getBorderRightWidth(element);\n let padding = SizeUtils.getPaddingLeft(element) + SizeUtils.getPaddingRight(element);\n return element.offsetWidth - border - padding;\n}\n// Adapted from WinJS\n// Gets the height of the content of the specified element. The content height does not include borders or padding.\nexport function getContentHeight(element) {\n let border = SizeUtils.getBorderTopWidth(element) + SizeUtils.getBorderBottomWidth(element);\n let padding = SizeUtils.getPaddingTop(element) + SizeUtils.getPaddingBottom(element);\n return element.offsetHeight - border - padding;\n}\n// Adapted from WinJS\n// Gets the height of the element, including its margins.\nexport function getTotalHeight(element) {\n let margin = SizeUtils.getMarginTop(element) + SizeUtils.getMarginBottom(element);\n return element.offsetHeight + margin;\n}\n// ----------------------------------------------------------------------------------------\nexport function isAncestor(testChild, testAncestor) {\n while (testChild) {\n if (testChild === testAncestor) {\n return true;\n }\n testChild = testChild.parentNode;\n }\n return false;\n}\nexport function findParentWithClass(node, clazz, stopAtClazzOrNode) {\n while (node && node.nodeType === node.ELEMENT_NODE) {\n if (node.classList.contains(clazz)) {\n return node;\n }\n if (stopAtClazzOrNode) {\n if (typeof stopAtClazzOrNode === 'string') {\n if (node.classList.contains(stopAtClazzOrNode)) {\n return null;\n }\n }\n else {\n if (node === stopAtClazzOrNode) {\n return null;\n }\n }\n }\n node = node.parentNode;\n }\n return null;\n}\nexport function hasParentWithClass(node, clazz, stopAtClazzOrNode) {\n return !!findParentWithClass(node, clazz, stopAtClazzOrNode);\n}\nexport function isShadowRoot(node) {\n return (node && !!node.host && !!node.mode);\n}\nexport function isInShadowDOM(domNode) {\n return !!getShadowRoot(domNode);\n}\nexport function getShadowRoot(domNode) {\n while (domNode.parentNode) {\n if (domNode === document.body) {\n // reached the body\n return null;\n }\n domNode = domNode.parentNode;\n }\n return isShadowRoot(domNode) ? domNode : null;\n}\nexport function getActiveElement() {\n let result = document.activeElement;\n while (result === null || result === void 0 ? void 0 : result.shadowRoot) {\n result = result.shadowRoot.activeElement;\n }\n return result;\n}\nexport function createStyleSheet(container = document.getElementsByTagName('head')[0]) {\n let style = document.createElement('style');\n style.type = 'text/css';\n style.media = 'screen';\n container.appendChild(style);\n return style;\n}\nlet _sharedStyleSheet = null;\nfunction getSharedStyleSheet() {\n if (!_sharedStyleSheet) {\n _sharedStyleSheet = createStyleSheet();\n }\n return _sharedStyleSheet;\n}\nfunction getDynamicStyleSheetRules(style) {\n var _a, _b;\n if ((_a = style === null || style === void 0 ? void 0 : style.sheet) === null || _a === void 0 ? void 0 : _a.rules) {\n // Chrome, IE\n return style.sheet.rules;\n }\n if ((_b = style === null || style === void 0 ? void 0 : style.sheet) === null || _b === void 0 ? void 0 : _b.cssRules) {\n // FF\n return style.sheet.cssRules;\n }\n return [];\n}\nexport function createCSSRule(selector, cssText, style = getSharedStyleSheet()) {\n if (!style || !cssText) {\n return;\n }\n style.sheet.insertRule(selector + '{' + cssText + '}', 0);\n}\nexport function removeCSSRulesContainingSelector(ruleName, style = getSharedStyleSheet()) {\n if (!style) {\n return;\n }\n let rules = getDynamicStyleSheetRules(style);\n let toDelete = [];\n for (let i = 0; i < rules.length; i++) {\n let rule = rules[i];\n if (rule.selectorText.indexOf(ruleName) !== -1) {\n toDelete.push(i);\n }\n }\n for (let i = toDelete.length - 1; i >= 0; i--) {\n style.sheet.deleteRule(toDelete[i]);\n }\n}\nexport function isHTMLElement(o) {\n if (typeof HTMLElement === 'object') {\n return o instanceof HTMLElement;\n }\n return o && typeof o === 'object' && o.nodeType === 1 && typeof o.nodeName === 'string';\n}\nexport const EventType = {\n // Mouse\n CLICK: 'click',\n AUXCLICK: 'auxclick',\n DBLCLICK: 'dblclick',\n MOUSE_UP: 'mouseup',\n MOUSE_DOWN: 'mousedown',\n MOUSE_OVER: 'mouseover',\n MOUSE_MOVE: 'mousemove',\n MOUSE_OUT: 'mouseout',\n MOUSE_ENTER: 'mouseenter',\n MOUSE_LEAVE: 'mouseleave',\n MOUSE_WHEEL: 'wheel',\n POINTER_UP: 'pointerup',\n POINTER_DOWN: 'pointerdown',\n POINTER_MOVE: 'pointermove',\n CONTEXT_MENU: 'contextmenu',\n WHEEL: 'wheel',\n // Keyboard\n KEY_DOWN: 'keydown',\n KEY_PRESS: 'keypress',\n KEY_UP: 'keyup',\n // HTML Document\n LOAD: 'load',\n BEFORE_UNLOAD: 'beforeunload',\n UNLOAD: 'unload',\n ABORT: 'abort',\n ERROR: 'error',\n RESIZE: 'resize',\n SCROLL: 'scroll',\n FULLSCREEN_CHANGE: 'fullscreenchange',\n WK_FULLSCREEN_CHANGE: 'webkitfullscreenchange',\n // Form\n SELECT: 'select',\n CHANGE: 'change',\n SUBMIT: 'submit',\n RESET: 'reset',\n FOCUS: 'focus',\n FOCUS_IN: 'focusin',\n FOCUS_OUT: 'focusout',\n BLUR: 'blur',\n INPUT: 'input',\n // Local Storage\n STORAGE: 'storage',\n // Drag\n DRAG_START: 'dragstart',\n DRAG: 'drag',\n DRAG_ENTER: 'dragenter',\n DRAG_LEAVE: 'dragleave',\n DRAG_OVER: 'dragover',\n DROP: 'drop',\n DRAG_END: 'dragend',\n // Animation\n ANIMATION_START: browser.isWebKit ? 'webkitAnimationStart' : 'animationstart',\n ANIMATION_END: browser.isWebKit ? 'webkitAnimationEnd' : 'animationend',\n ANIMATION_ITERATION: browser.isWebKit ? 'webkitAnimationIteration' : 'animationiteration'\n};\nexport const EventHelper = {\n stop: function (e, cancelBubble) {\n if (e.preventDefault) {\n e.preventDefault();\n }\n else {\n // IE8\n e.returnValue = false;\n }\n if (cancelBubble) {\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n else {\n // IE8\n e.cancelBubble = true;\n }\n }\n }\n};\nexport function saveParentsScrollTop(node) {\n let r = [];\n for (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\n r[i] = node.scrollTop;\n node = node.parentNode;\n }\n return r;\n}\nexport function restoreParentsScrollTop(node, state) {\n for (let i = 0; node && node.nodeType === node.ELEMENT_NODE; i++) {\n if (node.scrollTop !== state[i]) {\n node.scrollTop = state[i];\n }\n node = node.parentNode;\n }\n}\nclass FocusTracker extends Disposable {\n constructor(element) {\n super();\n this._onDidFocus = this._register(new Emitter());\n this.onDidFocus = this._onDidFocus.event;\n this._onDidBlur = this._register(new Emitter());\n this.onDidBlur = this._onDidBlur.event;\n let hasFocus = isAncestor(document.activeElement, element);\n let loosingFocus = false;\n const onFocus = () => {\n loosingFocus = false;\n if (!hasFocus) {\n hasFocus = true;\n this._onDidFocus.fire();\n }\n };\n const onBlur = () => {\n if (hasFocus) {\n loosingFocus = true;\n window.setTimeout(() => {\n if (loosingFocus) {\n loosingFocus = false;\n hasFocus = false;\n this._onDidBlur.fire();\n }\n }, 0);\n }\n };\n this._refreshStateHandler = () => {\n let currentNodeHasFocus = isAncestor(document.activeElement, element);\n if (currentNodeHasFocus !== hasFocus) {\n if (hasFocus) {\n onBlur();\n }\n else {\n onFocus();\n }\n }\n };\n this._register(domEvent(element, EventType.FOCUS, true)(onFocus));\n this._register(domEvent(element, EventType.BLUR, true)(onBlur));\n }\n}\nexport function trackFocus(element) {\n return new FocusTracker(element);\n}\nexport function append(parent, ...children) {\n parent.append(...children);\n if (children.length === 1 && typeof children[0] !== 'string') {\n return children[0];\n }\n}\n/**\n * Removes all children from `parent` and appends `children`\n */\nexport function reset(parent, ...children) {\n parent.innerText = '';\n append(parent, ...children);\n}\nconst SELECTOR_REGEX = /([\\w\\-]+)?(#([\\w\\-]+))?((\\.([\\w\\-]+))*)/;\nexport var Namespace;\n(function (Namespace) {\n Namespace[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n Namespace[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n})(Namespace || (Namespace = {}));\nfunction _$(namespace, description, attrs, ...children) {\n let match = SELECTOR_REGEX.exec(description);\n if (!match) {\n throw new Error('Bad use of emmet');\n }\n attrs = Object.assign({}, (attrs || {}));\n let tagName = match[1] || 'div';\n let result;\n if (namespace !== Namespace.HTML) {\n result = document.createElementNS(namespace, tagName);\n }\n else {\n result = document.createElement(tagName);\n }\n if (match[3]) {\n result.id = match[3];\n }\n if (match[4]) {\n result.className = match[4].replace(/\\./g, ' ').trim();\n }\n Object.keys(attrs).forEach(name => {\n const value = attrs[name];\n if (typeof value === 'undefined') {\n return;\n }\n if (/^on\\w+$/.test(name)) {\n result[name] = value;\n }\n else if (name === 'selected') {\n if (value) {\n result.setAttribute(name, 'true');\n }\n }\n else {\n result.setAttribute(name, value);\n }\n });\n result.append(...children);\n return result;\n}\nexport function $(description, attrs, ...children) {\n return _$(Namespace.HTML, description, attrs, ...children);\n}\n$.SVG = function (description, attrs, ...children) {\n return _$(Namespace.SVG, description, attrs, ...children);\n};\nexport function show(...elements) {\n for (let element of elements) {\n element.style.display = '';\n element.removeAttribute('aria-hidden');\n }\n}\nexport function hide(...elements) {\n for (let element of elements) {\n element.style.display = 'none';\n element.setAttribute('aria-hidden', 'true');\n }\n}\nexport function getElementsByTagName(tag) {\n return Array.prototype.slice.call(document.getElementsByTagName(tag), 0);\n}\n/**\n * Find a value usable for a dom node size such that the likelihood that it would be\n * displayed with constant screen pixels size is as high as possible.\n *\n * e.g. We would desire for the cursors to be 2px (CSS px) wide. Under a devicePixelRatio\n * of 1.25, the cursor will be 2.5 screen pixels wide. Depending on how the dom node aligns/\"snaps\"\n * with the screen pixels, it will sometimes be rendered with 2 screen pixels, and sometimes with 3 screen pixels.\n */\nexport function computeScreenAwareSize(cssPx) {\n const screenPx = window.devicePixelRatio * cssPx;\n return Math.max(1, Math.floor(screenPx)) / window.devicePixelRatio;\n}\n/**\n * Open safely a new window. This is the best way to do so, but you cannot tell\n * if the window was opened or if it was blocked by the brower's popup blocker.\n * If you want to tell if the browser blocked the new window, use `windowOpenNoOpenerWithSuccess`.\n *\n * See https://github.com/microsoft/monaco-editor/issues/601\n * To protect against malicious code in the linked site, particularly phishing attempts,\n * the window.opener should be set to null to prevent the linked site from having access\n * to change the location of the current page.\n * See https://mathiasbynens.github.io/rel-noopener/\n */\nexport function windowOpenNoOpener(url) {\n // By using 'noopener' in the `windowFeatures` argument, the newly created window will\n // not be able to use `window.opener` to reach back to the current page.\n // See https://stackoverflow.com/a/46958731\n // See https://developer.mozilla.org/en-US/docs/Web/API/Window/open#noopener\n // However, this also doesn't allow us to realize if the browser blocked\n // the creation of the window.\n window.open(url, '_blank', 'noopener');\n}\nexport function animate(fn) {\n const step = () => {\n fn();\n stepDisposable = scheduleAtNextAnimationFrame(step);\n };\n let stepDisposable = scheduleAtNextAnimationFrame(step);\n return toDisposable(() => stepDisposable.dispose());\n}\nRemoteAuthorities.setPreferredWebSchema(/^https:/.test(window.location.href) ? 'https' : 'http');\n/**\n * returns url('...')\n */\nexport function asCSSUrl(uri) {\n if (!uri) {\n return `url('')`;\n }\n return `url('${FileAccess.asBrowserUri(uri).toString(true).replace(/'/g, '%27')}')`;\n}\nexport function asCSSPropertyValue(value) {\n return `'${value.replace(/'/g, '%27')}'`;\n}\nexport class ModifierKeyEmitter extends Emitter {\n constructor() {\n super();\n this._subscriptions = new DisposableStore();\n this._keyStatus = {\n altKey: false,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false\n };\n this._subscriptions.add(domEvent(window, 'keydown', true)(e => {\n const event = new StandardKeyboardEvent(e);\n // If Alt-key keydown event is repeated, ignore it #112347\n // Only known to be necessary for Alt-Key at the moment #115810\n if (event.keyCode === 6 /* Alt */ && e.repeat) {\n return;\n }\n if (e.altKey && !this._keyStatus.altKey) {\n this._keyStatus.lastKeyPressed = 'alt';\n }\n else if (e.ctrlKey && !this._keyStatus.ctrlKey) {\n this._keyStatus.lastKeyPressed = 'ctrl';\n }\n else if (e.metaKey && !this._keyStatus.metaKey) {\n this._keyStatus.lastKeyPressed = 'meta';\n }\n else if (e.shiftKey && !this._keyStatus.shiftKey) {\n this._keyStatus.lastKeyPressed = 'shift';\n }\n else if (event.keyCode !== 6 /* Alt */) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n else {\n return;\n }\n this._keyStatus.altKey = e.altKey;\n this._keyStatus.ctrlKey = e.ctrlKey;\n this._keyStatus.metaKey = e.metaKey;\n this._keyStatus.shiftKey = e.shiftKey;\n if (this._keyStatus.lastKeyPressed) {\n this._keyStatus.event = e;\n this.fire(this._keyStatus);\n }\n }));\n this._subscriptions.add(domEvent(window, 'keyup', true)(e => {\n if (!e.altKey && this._keyStatus.altKey) {\n this._keyStatus.lastKeyReleased = 'alt';\n }\n else if (!e.ctrlKey && this._keyStatus.ctrlKey) {\n this._keyStatus.lastKeyReleased = 'ctrl';\n }\n else if (!e.metaKey && this._keyStatus.metaKey) {\n this._keyStatus.lastKeyReleased = 'meta';\n }\n else if (!e.shiftKey && this._keyStatus.shiftKey) {\n this._keyStatus.lastKeyReleased = 'shift';\n }\n else {\n this._keyStatus.lastKeyReleased = undefined;\n }\n if (this._keyStatus.lastKeyPressed !== this._keyStatus.lastKeyReleased) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n this._keyStatus.altKey = e.altKey;\n this._keyStatus.ctrlKey = e.ctrlKey;\n this._keyStatus.metaKey = e.metaKey;\n this._keyStatus.shiftKey = e.shiftKey;\n if (this._keyStatus.lastKeyReleased) {\n this._keyStatus.event = e;\n this.fire(this._keyStatus);\n }\n }));\n this._subscriptions.add(domEvent(document.body, 'mousedown', true)(e => {\n this._keyStatus.lastKeyPressed = undefined;\n }));\n this._subscriptions.add(domEvent(document.body, 'mouseup', true)(e => {\n this._keyStatus.lastKeyPressed = undefined;\n }));\n this._subscriptions.add(domEvent(document.body, 'mousemove', true)(e => {\n if (e.buttons) {\n this._keyStatus.lastKeyPressed = undefined;\n }\n }));\n this._subscriptions.add(domEvent(window, 'blur')(e => {\n this.resetKeyStatus();\n }));\n }\n get keyStatus() {\n return this._keyStatus;\n }\n /**\n * Allows to explicitly reset the key status based on more knowledge (#109062)\n */\n resetKeyStatus() {\n this.doResetKeyStatus();\n this.fire(this._keyStatus);\n }\n doResetKeyStatus() {\n this._keyStatus = {\n altKey: false,\n shiftKey: false,\n ctrlKey: false,\n metaKey: false\n };\n }\n static getInstance() {\n if (!ModifierKeyEmitter.instance) {\n ModifierKeyEmitter.instance = new ModifierKeyEmitter();\n }\n return ModifierKeyEmitter.instance;\n }\n dispose() {\n super.dispose();\n this._subscriptions.dispose();\n }\n}\nexport function addMatchMediaChangeListener(query, callback) {\n const mediaQueryList = window.matchMedia(query);\n if (typeof mediaQueryList.addEventListener === 'function') {\n mediaQueryList.addEventListener('change', callback);\n }\n else {\n // Safari 13.x\n mediaQueryList.addListener(callback);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Event as BaseEvent, Emitter } from '../common/event.js';\nexport const domEvent = (element, type, useCapture) => {\n const fn = (e) => emitter.fire(e);\n const emitter = new Emitter({\n onFirstListenerAdd: () => {\n element.addEventListener(type, fn, useCapture);\n },\n onLastListenerRemove: () => {\n element.removeEventListener(type, fn, useCapture);\n }\n });\n return emitter.event;\n};\nexport function stopEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n return event;\n}\nexport function stop(event) {\n return BaseEvent.map(event, stopEvent);\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 *--------------------------------------------------------------------------------------------*/\nexport class FastDomNode {\n constructor(domNode) {\n this.domNode = domNode;\n this._maxWidth = -1;\n this._width = -1;\n this._height = -1;\n this._top = -1;\n this._left = -1;\n this._bottom = -1;\n this._right = -1;\n this._fontFamily = '';\n this._fontWeight = '';\n this._fontSize = -1;\n this._fontFeatureSettings = '';\n this._lineHeight = -1;\n this._letterSpacing = -100;\n this._className = '';\n this._display = '';\n this._position = '';\n this._visibility = '';\n this._backgroundColor = '';\n this._layerHint = false;\n this._contain = 'none';\n this._boxShadow = '';\n }\n setMaxWidth(maxWidth) {\n if (this._maxWidth === maxWidth) {\n return;\n }\n this._maxWidth = maxWidth;\n this.domNode.style.maxWidth = this._maxWidth + 'px';\n }\n setWidth(width) {\n if (this._width === width) {\n return;\n }\n this._width = width;\n this.domNode.style.width = this._width + 'px';\n }\n setHeight(height) {\n if (this._height === height) {\n return;\n }\n this._height = height;\n this.domNode.style.height = this._height + 'px';\n }\n setTop(top) {\n if (this._top === top) {\n return;\n }\n this._top = top;\n this.domNode.style.top = this._top + 'px';\n }\n unsetTop() {\n if (this._top === -1) {\n return;\n }\n this._top = -1;\n this.domNode.style.top = '';\n }\n setLeft(left) {\n if (this._left === left) {\n return;\n }\n this._left = left;\n this.domNode.style.left = this._left + 'px';\n }\n setBottom(bottom) {\n if (this._bottom === bottom) {\n return;\n }\n this._bottom = bottom;\n this.domNode.style.bottom = this._bottom + 'px';\n }\n setRight(right) {\n if (this._right === right) {\n return;\n }\n this._right = right;\n this.domNode.style.right = this._right + 'px';\n }\n setFontFamily(fontFamily) {\n if (this._fontFamily === fontFamily) {\n return;\n }\n this._fontFamily = fontFamily;\n this.domNode.style.fontFamily = this._fontFamily;\n }\n setFontWeight(fontWeight) {\n if (this._fontWeight === fontWeight) {\n return;\n }\n this._fontWeight = fontWeight;\n this.domNode.style.fontWeight = this._fontWeight;\n }\n setFontSize(fontSize) {\n if (this._fontSize === fontSize) {\n return;\n }\n this._fontSize = fontSize;\n this.domNode.style.fontSize = this._fontSize + 'px';\n }\n setFontFeatureSettings(fontFeatureSettings) {\n if (this._fontFeatureSettings === fontFeatureSettings) {\n return;\n }\n this._fontFeatureSettings = fontFeatureSettings;\n this.domNode.style.fontFeatureSettings = this._fontFeatureSettings;\n }\n setLineHeight(lineHeight) {\n if (this._lineHeight === lineHeight) {\n return;\n }\n this._lineHeight = lineHeight;\n this.domNode.style.lineHeight = this._lineHeight + 'px';\n }\n setLetterSpacing(letterSpacing) {\n if (this._letterSpacing === letterSpacing) {\n return;\n }\n this._letterSpacing = letterSpacing;\n this.domNode.style.letterSpacing = this._letterSpacing + 'px';\n }\n setClassName(className) {\n if (this._className === className) {\n return;\n }\n this._className = className;\n this.domNode.className = this._className;\n }\n toggleClassName(className, shouldHaveIt) {\n this.domNode.classList.toggle(className, shouldHaveIt);\n this._className = this.domNode.className;\n }\n setDisplay(display) {\n if (this._display === display) {\n return;\n }\n this._display = display;\n this.domNode.style.display = this._display;\n }\n setPosition(position) {\n if (this._position === position) {\n return;\n }\n this._position = position;\n this.domNode.style.position = this._position;\n }\n setVisibility(visibility) {\n if (this._visibility === visibility) {\n return;\n }\n this._visibility = visibility;\n this.domNode.style.visibility = this._visibility;\n }\n setBackgroundColor(backgroundColor) {\n if (this._backgroundColor === backgroundColor) {\n return;\n }\n this._backgroundColor = backgroundColor;\n this.domNode.style.backgroundColor = this._backgroundColor;\n }\n setLayerHinting(layerHint) {\n if (this._layerHint === layerHint) {\n return;\n }\n this._layerHint = layerHint;\n this.domNode.style.transform = this._layerHint ? 'translate3d(0px, 0px, 0px)' : '';\n }\n setBoxShadow(boxShadow) {\n if (this._boxShadow === boxShadow) {\n return;\n }\n this._boxShadow = boxShadow;\n this.domNode.style.boxShadow = boxShadow;\n }\n setContain(contain) {\n if (this._contain === contain) {\n return;\n }\n this._contain = contain;\n this.domNode.style.contain = this._contain;\n }\n setAttribute(name, value) {\n this.domNode.setAttribute(name, value);\n }\n removeAttribute(name) {\n this.domNode.removeAttribute(name);\n }\n appendChild(child) {\n this.domNode.appendChild(child.domNode);\n }\n removeChild(child) {\n this.domNode.removeChild(child.domNode);\n }\n}\nexport function createFastDomNode(domNode) {\n return new FastDomNode(domNode);\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 *--------------------------------------------------------------------------------------------*/\nimport * as DOM from './dom.js';\nexport function renderText(text, options = {}) {\n const element = createElement(options);\n element.textContent = text;\n return element;\n}\nexport function renderFormattedText(formattedText, options = {}) {\n const element = createElement(options);\n _renderFormattedText(element, parseFormattedText(formattedText, !!options.renderCodeSegements), options.actionHandler, options.renderCodeSegements);\n return element;\n}\nexport function createElement(options) {\n const tagName = options.inline ? 'span' : 'div';\n const element = document.createElement(tagName);\n if (options.className) {\n element.className = options.className;\n }\n return element;\n}\nclass StringStream {\n constructor(source) {\n this.source = source;\n this.index = 0;\n }\n eos() {\n return this.index >= this.source.length;\n }\n next() {\n const next = this.peek();\n this.advance();\n return next;\n }\n peek() {\n return this.source[this.index];\n }\n advance() {\n this.index++;\n }\n}\nfunction _renderFormattedText(element, treeNode, actionHandler, renderCodeSegements) {\n let child;\n if (treeNode.type === 2 /* Text */) {\n child = document.createTextNode(treeNode.content || '');\n }\n else if (treeNode.type === 3 /* Bold */) {\n child = document.createElement('b');\n }\n else if (treeNode.type === 4 /* Italics */) {\n child = document.createElement('i');\n }\n else if (treeNode.type === 7 /* Code */ && renderCodeSegements) {\n child = document.createElement('code');\n }\n else if (treeNode.type === 5 /* Action */ && actionHandler) {\n const a = document.createElement('a');\n a.href = '#';\n actionHandler.disposeables.add(DOM.addStandardDisposableListener(a, 'click', (event) => {\n actionHandler.callback(String(treeNode.index), event);\n }));\n child = a;\n }\n else if (treeNode.type === 8 /* NewLine */) {\n child = document.createElement('br');\n }\n else if (treeNode.type === 1 /* Root */) {\n child = element;\n }\n if (child && element !== child) {\n element.appendChild(child);\n }\n if (child && Array.isArray(treeNode.children)) {\n treeNode.children.forEach((nodeChild) => {\n _renderFormattedText(child, nodeChild, actionHandler, renderCodeSegements);\n });\n }\n}\nfunction parseFormattedText(content, parseCodeSegments) {\n const root = {\n type: 1 /* Root */,\n children: []\n };\n let actionViewItemIndex = 0;\n let current = root;\n const stack = [];\n const stream = new StringStream(content);\n while (!stream.eos()) {\n let next = stream.next();\n const isEscapedFormatType = (next === '\\\\' && formatTagType(stream.peek(), parseCodeSegments) !== 0 /* Invalid */);\n if (isEscapedFormatType) {\n next = stream.next(); // unread the backslash if it escapes a format tag type\n }\n if (!isEscapedFormatType && isFormatTag(next, parseCodeSegments) && next === stream.peek()) {\n stream.advance();\n if (current.type === 2 /* Text */) {\n current = stack.pop();\n }\n const type = formatTagType(next, parseCodeSegments);\n if (current.type === type || (current.type === 5 /* Action */ && type === 6 /* ActionClose */)) {\n current = stack.pop();\n }\n else {\n const newCurrent = {\n type: type,\n children: []\n };\n if (type === 5 /* Action */) {\n newCurrent.index = actionViewItemIndex;\n actionViewItemIndex++;\n }\n current.children.push(newCurrent);\n stack.push(current);\n current = newCurrent;\n }\n }\n else if (next === '\\n') {\n if (current.type === 2 /* Text */) {\n current = stack.pop();\n }\n current.children.push({\n type: 8 /* NewLine */\n });\n }\n else {\n if (current.type !== 2 /* Text */) {\n const textCurrent = {\n type: 2 /* Text */,\n content: next\n };\n current.children.push(textCurrent);\n stack.push(current);\n current = textCurrent;\n }\n else {\n current.content += next;\n }\n }\n }\n if (current.type === 2 /* Text */) {\n current = stack.pop();\n }\n if (stack.length) {\n // incorrectly formatted string literal\n }\n return root;\n}\nfunction isFormatTag(char, supportCodeSegments) {\n return formatTagType(char, supportCodeSegments) !== 0 /* Invalid */;\n}\nfunction formatTagType(char, supportCodeSegments) {\n switch (char) {\n case '*':\n return 3 /* Bold */;\n case '_':\n return 4 /* Italics */;\n case '[':\n return 5 /* Action */;\n case ']':\n return 6 /* ActionClose */;\n case '`':\n return supportCodeSegments ? 7 /* Code */ : 0 /* Invalid */;\n default:\n return 0 /* Invalid */;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from './dom.js';\nimport { IframeUtils } from './iframe.js';\nimport { StandardMouseEvent } from './mouseEvent.js';\nimport { DisposableStore } from '../common/lifecycle.js';\nexport function standardMouseMoveMerger(lastEvent, currentEvent) {\n let ev = new StandardMouseEvent(currentEvent);\n ev.preventDefault();\n return {\n leftButton: ev.leftButton,\n buttons: ev.buttons,\n posx: ev.posx,\n posy: ev.posy\n };\n}\nexport class GlobalMouseMoveMonitor {\n constructor() {\n this._hooks = new DisposableStore();\n this._mouseMoveEventMerger = null;\n this._mouseMoveCallback = null;\n this._onStopCallback = null;\n }\n dispose() {\n this.stopMonitoring(false);\n this._hooks.dispose();\n }\n stopMonitoring(invokeStopCallback, browserEvent) {\n if (!this.isMonitoring()) {\n // Not monitoring\n return;\n }\n // Unhook\n this._hooks.clear();\n this._mouseMoveEventMerger = null;\n this._mouseMoveCallback = null;\n const onStopCallback = this._onStopCallback;\n this._onStopCallback = null;\n if (invokeStopCallback && onStopCallback) {\n onStopCallback(browserEvent);\n }\n }\n isMonitoring() {\n return !!this._mouseMoveEventMerger;\n }\n startMonitoring(initialElement, initialButtons, mouseMoveEventMerger, mouseMoveCallback, onStopCallback) {\n if (this.isMonitoring()) {\n // I am already hooked\n return;\n }\n this._mouseMoveEventMerger = mouseMoveEventMerger;\n this._mouseMoveCallback = mouseMoveCallback;\n this._onStopCallback = onStopCallback;\n const windowChain = IframeUtils.getSameOriginWindowChain();\n const mouseMove = 'mousemove';\n const mouseUp = 'mouseup';\n const listenTo = windowChain.map(element => element.window.document);\n const shadowRoot = dom.getShadowRoot(initialElement);\n if (shadowRoot) {\n listenTo.unshift(shadowRoot);\n }\n for (const element of listenTo) {\n this._hooks.add(dom.addDisposableThrottledListener(element, mouseMove, (data) => {\n if (data.buttons !== initialButtons) {\n // Buttons state has changed in the meantime\n this.stopMonitoring(true);\n return;\n }\n this._mouseMoveCallback(data);\n }, (lastEvent, currentEvent) => this._mouseMoveEventMerger(lastEvent, currentEvent)));\n this._hooks.add(dom.addDisposableListener(element, mouseUp, (e) => this.stopMonitoring(true)));\n }\n if (IframeUtils.hasDifferentOriginAncestor()) {\n let lastSameOriginAncestor = windowChain[windowChain.length - 1];\n // We might miss a mouse up if it happens outside the iframe\n // This one is for Chrome\n this._hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseout', (browserEvent) => {\n let e = new StandardMouseEvent(browserEvent);\n if (e.target.tagName.toLowerCase() === 'html') {\n this.stopMonitoring(true);\n }\n }));\n // This one is for FF\n this._hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document, 'mouseover', (browserEvent) => {\n let e = new StandardMouseEvent(browserEvent);\n if (e.target.tagName.toLowerCase() === 'html') {\n this.stopMonitoring(true);\n }\n }));\n // This one is for IE\n this._hooks.add(dom.addDisposableListener(lastSameOriginAncestor.window.document.body, 'mouseleave', (browserEvent) => {\n this.stopMonitoring(true);\n }));\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nlet hasDifferentOriginAncestorFlag = false;\nlet sameOriginWindowChainCache = null;\nfunction getParentWindowIfSameOrigin(w) {\n if (!w.parent || w.parent === w) {\n return null;\n }\n // Cannot really tell if we have access to the parent window unless we try to access something in it\n try {\n let location = w.location;\n let parentLocation = w.parent.location;\n if (location.origin !== 'null' && parentLocation.origin !== 'null') {\n if (location.protocol !== parentLocation.protocol || location.hostname !== parentLocation.hostname || location.port !== parentLocation.port) {\n hasDifferentOriginAncestorFlag = true;\n return null;\n }\n }\n }\n catch (e) {\n hasDifferentOriginAncestorFlag = true;\n return null;\n }\n return w.parent;\n}\nexport class IframeUtils {\n /**\n * Returns a chain of embedded windows with the same origin (which can be accessed programmatically).\n * Having a chain of length 1 might mean that the current execution environment is running outside of an iframe or inside an iframe embedded in a window with a different origin.\n * To distinguish if at one point the current execution environment is running inside a window with a different origin, see hasDifferentOriginAncestor()\n */\n static getSameOriginWindowChain() {\n if (!sameOriginWindowChainCache) {\n sameOriginWindowChainCache = [];\n let w = window;\n let parent;\n do {\n parent = getParentWindowIfSameOrigin(w);\n if (parent) {\n sameOriginWindowChainCache.push({\n window: w,\n iframeElement: w.frameElement || null\n });\n }\n else {\n sameOriginWindowChainCache.push({\n window: w,\n iframeElement: null\n });\n }\n w = parent;\n } while (w);\n }\n return sameOriginWindowChainCache.slice(0);\n }\n /**\n * Returns true if the current execution environment is chained in a list of iframes which at one point ends in a window with a different origin.\n * Returns false if the current execution environment is not running inside an iframe or if the entire chain of iframes have the same origin.\n */\n static hasDifferentOriginAncestor() {\n if (!sameOriginWindowChainCache) {\n this.getSameOriginWindowChain();\n }\n return hasDifferentOriginAncestorFlag;\n }\n /**\n * Returns the position of `childWindow` relative to `ancestorWindow`\n */\n static getPositionOfChildWindowRelativeToAncestorWindow(childWindow, ancestorWindow) {\n if (!ancestorWindow || childWindow === ancestorWindow) {\n return {\n top: 0,\n left: 0\n };\n }\n let top = 0, left = 0;\n let windowChain = this.getSameOriginWindowChain();\n for (const windowChainEl of windowChain) {\n top += windowChainEl.window.scrollY;\n left += windowChainEl.window.scrollX;\n if (windowChainEl.window === ancestorWindow) {\n break;\n }\n if (!windowChainEl.iframeElement) {\n break;\n }\n let boundingRect = windowChainEl.iframeElement.getBoundingClientRect();\n top += boundingRect.top;\n left += boundingRect.left;\n }\n return {\n top: top,\n left: left\n };\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport { KeyCodeUtils, SimpleKeybinding } from '../common/keyCodes.js';\nimport * as platform from '../common/platform.js';\nlet KEY_CODE_MAP = new Array(230);\nlet INVERSE_KEY_CODE_MAP = new Array(112 /* MAX_VALUE */);\n(function () {\n for (let i = 0; i < INVERSE_KEY_CODE_MAP.length; i++) {\n INVERSE_KEY_CODE_MAP[i] = -1;\n }\n function define(code, keyCode) {\n KEY_CODE_MAP[code] = keyCode;\n INVERSE_KEY_CODE_MAP[keyCode] = code;\n }\n define(3, 7 /* PauseBreak */); // VK_CANCEL 0x03 Control-break processing\n define(8, 1 /* Backspace */);\n define(9, 2 /* Tab */);\n define(13, 3 /* Enter */);\n define(16, 4 /* Shift */);\n define(17, 5 /* Ctrl */);\n define(18, 6 /* Alt */);\n define(19, 7 /* PauseBreak */);\n define(20, 8 /* CapsLock */);\n define(27, 9 /* Escape */);\n define(32, 10 /* Space */);\n define(33, 11 /* PageUp */);\n define(34, 12 /* PageDown */);\n define(35, 13 /* End */);\n define(36, 14 /* Home */);\n define(37, 15 /* LeftArrow */);\n define(38, 16 /* UpArrow */);\n define(39, 17 /* RightArrow */);\n define(40, 18 /* DownArrow */);\n define(45, 19 /* Insert */);\n define(46, 20 /* Delete */);\n define(48, 21 /* KEY_0 */);\n define(49, 22 /* KEY_1 */);\n define(50, 23 /* KEY_2 */);\n define(51, 24 /* KEY_3 */);\n define(52, 25 /* KEY_4 */);\n define(53, 26 /* KEY_5 */);\n define(54, 27 /* KEY_6 */);\n define(55, 28 /* KEY_7 */);\n define(56, 29 /* KEY_8 */);\n define(57, 30 /* KEY_9 */);\n define(65, 31 /* KEY_A */);\n define(66, 32 /* KEY_B */);\n define(67, 33 /* KEY_C */);\n define(68, 34 /* KEY_D */);\n define(69, 35 /* KEY_E */);\n define(70, 36 /* KEY_F */);\n define(71, 37 /* KEY_G */);\n define(72, 38 /* KEY_H */);\n define(73, 39 /* KEY_I */);\n define(74, 40 /* KEY_J */);\n define(75, 41 /* KEY_K */);\n define(76, 42 /* KEY_L */);\n define(77, 43 /* KEY_M */);\n define(78, 44 /* KEY_N */);\n define(79, 45 /* KEY_O */);\n define(80, 46 /* KEY_P */);\n define(81, 47 /* KEY_Q */);\n define(82, 48 /* KEY_R */);\n define(83, 49 /* KEY_S */);\n define(84, 50 /* KEY_T */);\n define(85, 51 /* KEY_U */);\n define(86, 52 /* KEY_V */);\n define(87, 53 /* KEY_W */);\n define(88, 54 /* KEY_X */);\n define(89, 55 /* KEY_Y */);\n define(90, 56 /* KEY_Z */);\n define(93, 58 /* ContextMenu */);\n define(96, 93 /* NUMPAD_0 */);\n define(97, 94 /* NUMPAD_1 */);\n define(98, 95 /* NUMPAD_2 */);\n define(99, 96 /* NUMPAD_3 */);\n define(100, 97 /* NUMPAD_4 */);\n define(101, 98 /* NUMPAD_5 */);\n define(102, 99 /* NUMPAD_6 */);\n define(103, 100 /* NUMPAD_7 */);\n define(104, 101 /* NUMPAD_8 */);\n define(105, 102 /* NUMPAD_9 */);\n define(106, 103 /* NUMPAD_MULTIPLY */);\n define(107, 104 /* NUMPAD_ADD */);\n define(108, 105 /* NUMPAD_SEPARATOR */);\n define(109, 106 /* NUMPAD_SUBTRACT */);\n define(110, 107 /* NUMPAD_DECIMAL */);\n define(111, 108 /* NUMPAD_DIVIDE */);\n define(112, 59 /* F1 */);\n define(113, 60 /* F2 */);\n define(114, 61 /* F3 */);\n define(115, 62 /* F4 */);\n define(116, 63 /* F5 */);\n define(117, 64 /* F6 */);\n define(118, 65 /* F7 */);\n define(119, 66 /* F8 */);\n define(120, 67 /* F9 */);\n define(121, 68 /* F10 */);\n define(122, 69 /* F11 */);\n define(123, 70 /* F12 */);\n define(124, 71 /* F13 */);\n define(125, 72 /* F14 */);\n define(126, 73 /* F15 */);\n define(127, 74 /* F16 */);\n define(128, 75 /* F17 */);\n define(129, 76 /* F18 */);\n define(130, 77 /* F19 */);\n define(144, 78 /* NumLock */);\n define(145, 79 /* ScrollLock */);\n define(186, 80 /* US_SEMICOLON */);\n define(187, 81 /* US_EQUAL */);\n define(188, 82 /* US_COMMA */);\n define(189, 83 /* US_MINUS */);\n define(190, 84 /* US_DOT */);\n define(191, 85 /* US_SLASH */);\n define(192, 86 /* US_BACKTICK */);\n define(193, 110 /* ABNT_C1 */);\n define(194, 111 /* ABNT_C2 */);\n define(219, 87 /* US_OPEN_SQUARE_BRACKET */);\n define(220, 88 /* US_BACKSLASH */);\n define(221, 89 /* US_CLOSE_SQUARE_BRACKET */);\n define(222, 90 /* US_QUOTE */);\n define(223, 91 /* OEM_8 */);\n define(226, 92 /* OEM_102 */);\n /**\n * https://lists.w3.org/Archives/Public/www-dom/2010JulSep/att-0182/keyCode-spec.html\n * If an Input Method Editor is processing key input and the event is keydown, return 229.\n */\n define(229, 109 /* KEY_IN_COMPOSITION */);\n if (browser.isFirefox) {\n define(59, 80 /* US_SEMICOLON */);\n define(107, 81 /* US_EQUAL */);\n define(109, 83 /* US_MINUS */);\n if (platform.isMacintosh) {\n define(224, 57 /* Meta */);\n }\n }\n else if (browser.isWebKit) {\n define(91, 57 /* Meta */);\n if (platform.isMacintosh) {\n // the two meta keys in the Mac have different key codes (91 and 93)\n define(93, 57 /* Meta */);\n }\n else {\n define(92, 57 /* Meta */);\n }\n }\n})();\nfunction extractKeyCode(e) {\n if (e.charCode) {\n // \"keypress\" events mostly\n let char = String.fromCharCode(e.charCode).toUpperCase();\n return KeyCodeUtils.fromString(char);\n }\n return KEY_CODE_MAP[e.keyCode] || 0 /* Unknown */;\n}\nconst ctrlKeyMod = (platform.isMacintosh ? 256 /* WinCtrl */ : 2048 /* CtrlCmd */);\nconst altKeyMod = 512 /* Alt */;\nconst shiftKeyMod = 1024 /* Shift */;\nconst metaKeyMod = (platform.isMacintosh ? 2048 /* CtrlCmd */ : 256 /* WinCtrl */);\nexport class StandardKeyboardEvent {\n constructor(source) {\n this._standardKeyboardEventBrand = true;\n let e = source;\n this.browserEvent = e;\n this.target = e.target;\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n this.keyCode = extractKeyCode(e);\n this.code = e.code;\n // console.info(e.type + \": keyCode: \" + e.keyCode + \", which: \" + e.which + \", charCode: \" + e.charCode + \", detail: \" + e.detail + \" ====> \" + this.keyCode + ' -- ' + KeyCode[this.keyCode]);\n this.ctrlKey = this.ctrlKey || this.keyCode === 5 /* Ctrl */;\n this.altKey = this.altKey || this.keyCode === 6 /* Alt */;\n this.shiftKey = this.shiftKey || this.keyCode === 4 /* Shift */;\n this.metaKey = this.metaKey || this.keyCode === 57 /* Meta */;\n this._asKeybinding = this._computeKeybinding();\n this._asRuntimeKeybinding = this._computeRuntimeKeybinding();\n // console.log(`code: ${e.code}, keyCode: ${e.keyCode}, key: ${e.key}`);\n }\n preventDefault() {\n if (this.browserEvent && this.browserEvent.preventDefault) {\n this.browserEvent.preventDefault();\n }\n }\n stopPropagation() {\n if (this.browserEvent && this.browserEvent.stopPropagation) {\n this.browserEvent.stopPropagation();\n }\n }\n toKeybinding() {\n return this._asRuntimeKeybinding;\n }\n equals(other) {\n return this._asKeybinding === other;\n }\n _computeKeybinding() {\n let key = 0 /* Unknown */;\n if (this.keyCode !== 5 /* Ctrl */ && this.keyCode !== 4 /* Shift */ && this.keyCode !== 6 /* Alt */ && this.keyCode !== 57 /* Meta */) {\n key = this.keyCode;\n }\n let result = 0;\n if (this.ctrlKey) {\n result |= ctrlKeyMod;\n }\n if (this.altKey) {\n result |= altKeyMod;\n }\n if (this.shiftKey) {\n result |= shiftKeyMod;\n }\n if (this.metaKey) {\n result |= metaKeyMod;\n }\n result |= key;\n return result;\n }\n _computeRuntimeKeybinding() {\n let key = 0 /* Unknown */;\n if (this.keyCode !== 5 /* Ctrl */ && this.keyCode !== 4 /* Shift */ && this.keyCode !== 6 /* Alt */ && this.keyCode !== 57 /* Meta */) {\n key = this.keyCode;\n }\n return new SimpleKeybinding(this.ctrlKey, this.shiftKey, this.altKey, this.metaKey, key);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as browser from './browser.js';\nimport { IframeUtils } from './iframe.js';\nimport * as platform from '../common/platform.js';\nexport class StandardMouseEvent {\n constructor(e) {\n this.timestamp = Date.now();\n this.browserEvent = e;\n this.leftButton = e.button === 0;\n this.middleButton = e.button === 1;\n this.rightButton = e.button === 2;\n this.buttons = e.buttons;\n this.target = e.target;\n this.detail = e.detail || 1;\n if (e.type === 'dblclick') {\n this.detail = 2;\n }\n this.ctrlKey = e.ctrlKey;\n this.shiftKey = e.shiftKey;\n this.altKey = e.altKey;\n this.metaKey = e.metaKey;\n if (typeof e.pageX === 'number') {\n this.posx = e.pageX;\n this.posy = e.pageY;\n }\n else {\n // Probably hit by MSGestureEvent\n this.posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;\n this.posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;\n }\n // Find the position of the iframe this code is executing in relative to the iframe where the event was captured.\n let iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(self, e.view);\n this.posx -= iframeOffsets.left;\n this.posy -= iframeOffsets.top;\n }\n preventDefault() {\n this.browserEvent.preventDefault();\n }\n stopPropagation() {\n this.browserEvent.stopPropagation();\n }\n}\nexport class StandardWheelEvent {\n constructor(e, deltaX = 0, deltaY = 0) {\n this.browserEvent = e || null;\n this.target = e ? (e.target || e.targetNode || e.srcElement) : null;\n this.deltaY = deltaY;\n this.deltaX = deltaX;\n if (e) {\n // Old (deprecated) wheel events\n let e1 = e;\n let e2 = e;\n // vertical delta scroll\n if (typeof e1.wheelDeltaY !== 'undefined') {\n this.deltaY = e1.wheelDeltaY / 120;\n }\n else if (typeof e2.VERTICAL_AXIS !== 'undefined' && e2.axis === e2.VERTICAL_AXIS) {\n this.deltaY = -e2.detail / 3;\n }\n else if (e.type === 'wheel') {\n // Modern wheel event\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\n const ev = e;\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n // the deltas are expressed in lines\n if (browser.isFirefox && !platform.isMacintosh) {\n this.deltaY = -e.deltaY / 3;\n }\n else {\n this.deltaY = -e.deltaY;\n }\n }\n else {\n this.deltaY = -e.deltaY / 40;\n }\n }\n // horizontal delta scroll\n if (typeof e1.wheelDeltaX !== 'undefined') {\n if (browser.isSafari && platform.isWindows) {\n this.deltaX = -(e1.wheelDeltaX / 120);\n }\n else {\n this.deltaX = e1.wheelDeltaX / 120;\n }\n }\n else if (typeof e2.HORIZONTAL_AXIS !== 'undefined' && e2.axis === e2.HORIZONTAL_AXIS) {\n this.deltaX = -e.detail / 3;\n }\n else if (e.type === 'wheel') {\n // Modern wheel event\n // https://developer.mozilla.org/en-US/docs/Web/API/WheelEvent\n const ev = e;\n if (ev.deltaMode === ev.DOM_DELTA_LINE) {\n // the deltas are expressed in lines\n if (browser.isFirefox && !platform.isMacintosh) {\n this.deltaX = -e.deltaX / 3;\n }\n else {\n this.deltaX = -e.deltaX;\n }\n }\n else {\n this.deltaX = -e.deltaX / 40;\n }\n }\n // Assume a vertical scroll if nothing else worked\n if (this.deltaY === 0 && this.deltaX === 0 && e.wheelDelta) {\n this.deltaY = e.wheelDelta / 120;\n }\n }\n }\n preventDefault() {\n if (this.browserEvent) {\n this.browserEvent.preventDefault();\n }\n }\n stopPropagation() {\n if (this.browserEvent) {\n this.browserEvent.stopPropagation();\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport * as arrays from '../common/arrays.js';\nimport { Disposable } from '../common/lifecycle.js';\nimport * as DomUtils from './dom.js';\nimport { memoize } from '../common/decorators.js';\nexport var EventType;\n(function (EventType) {\n EventType.Tap = '-monaco-gesturetap';\n EventType.Change = '-monaco-gesturechange';\n EventType.Start = '-monaco-gesturestart';\n EventType.End = '-monaco-gesturesend';\n EventType.Contextmenu = '-monaco-gesturecontextmenu';\n})(EventType || (EventType = {}));\nexport class Gesture extends Disposable {\n constructor() {\n super();\n this.dispatched = false;\n this.activeTouches = {};\n this.handle = null;\n this.targets = [];\n this.ignoreTargets = [];\n this._lastSetTapCountTime = 0;\n this._register(DomUtils.addDisposableListener(document, 'touchstart', (e) => this.onTouchStart(e), { passive: false }));\n this._register(DomUtils.addDisposableListener(document, 'touchend', (e) => this.onTouchEnd(e)));\n this._register(DomUtils.addDisposableListener(document, 'touchmove', (e) => this.onTouchMove(e), { passive: false }));\n }\n static addTarget(element) {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture.INSTANCE) {\n Gesture.INSTANCE = new Gesture();\n }\n Gesture.INSTANCE.targets.push(element);\n return {\n dispose: () => {\n Gesture.INSTANCE.targets = Gesture.INSTANCE.targets.filter(t => t !== element);\n }\n };\n }\n static ignoreTarget(element) {\n if (!Gesture.isTouchDevice()) {\n return Disposable.None;\n }\n if (!Gesture.INSTANCE) {\n Gesture.INSTANCE = new Gesture();\n }\n Gesture.INSTANCE.ignoreTargets.push(element);\n return {\n dispose: () => {\n Gesture.INSTANCE.ignoreTargets = Gesture.INSTANCE.ignoreTargets.filter(t => t !== element);\n }\n };\n }\n static isTouchDevice() {\n // `'ontouchstart' in window` always evaluates to true with typescript's modern typings. This causes `window` to be\n // `never` later in `window.navigator`. That's why we need the explicit `window as Window` cast\n return 'ontouchstart' in window || navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0;\n }\n dispose() {\n if (this.handle) {\n this.handle.dispose();\n this.handle = null;\n }\n super.dispose();\n }\n onTouchStart(e) {\n let timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n if (this.handle) {\n this.handle.dispose();\n this.handle = null;\n }\n for (let i = 0, len = e.targetTouches.length; i < len; i++) {\n let touch = e.targetTouches.item(i);\n this.activeTouches[touch.identifier] = {\n id: touch.identifier,\n initialTarget: touch.target,\n initialTimeStamp: timestamp,\n initialPageX: touch.pageX,\n initialPageY: touch.pageY,\n rollingTimestamps: [timestamp],\n rollingPageX: [touch.pageX],\n rollingPageY: [touch.pageY]\n };\n let evt = this.newGestureEvent(EventType.Start, touch.target);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this.dispatchEvent(evt);\n }\n if (this.dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this.dispatched = false;\n }\n }\n onTouchEnd(e) {\n let timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n let activeTouchCount = Object.keys(this.activeTouches).length;\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n let touch = e.changedTouches.item(i);\n if (!this.activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('move of an UNKNOWN touch', touch);\n continue;\n }\n let data = this.activeTouches[touch.identifier], holdTime = Date.now() - data.initialTimeStamp;\n if (holdTime < Gesture.HOLD_DELAY\n && Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30\n && Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) {\n let evt = this.newGestureEvent(EventType.Tap, data.initialTarget);\n evt.pageX = arrays.tail(data.rollingPageX);\n evt.pageY = arrays.tail(data.rollingPageY);\n this.dispatchEvent(evt);\n }\n else if (holdTime >= Gesture.HOLD_DELAY\n && Math.abs(data.initialPageX - arrays.tail(data.rollingPageX)) < 30\n && Math.abs(data.initialPageY - arrays.tail(data.rollingPageY)) < 30) {\n let evt = this.newGestureEvent(EventType.Contextmenu, data.initialTarget);\n evt.pageX = arrays.tail(data.rollingPageX);\n evt.pageY = arrays.tail(data.rollingPageY);\n this.dispatchEvent(evt);\n }\n else if (activeTouchCount === 1) {\n let finalX = arrays.tail(data.rollingPageX);\n let finalY = arrays.tail(data.rollingPageY);\n let deltaT = arrays.tail(data.rollingTimestamps) - data.rollingTimestamps[0];\n let deltaX = finalX - data.rollingPageX[0];\n let deltaY = finalY - data.rollingPageY[0];\n // We need to get all the dispatch targets on the start of the inertia event\n const dispatchTo = this.targets.filter(t => data.initialTarget instanceof Node && t.contains(data.initialTarget));\n this.inertia(dispatchTo, timestamp, // time now\n Math.abs(deltaX) / deltaT, // speed\n deltaX > 0 ? 1 : -1, // x direction\n finalX, // x now\n Math.abs(deltaY) / deltaT, // y speed\n deltaY > 0 ? 1 : -1, // y direction\n finalY // y now\n );\n }\n this.dispatchEvent(this.newGestureEvent(EventType.End, data.initialTarget));\n // forget about this touch\n delete this.activeTouches[touch.identifier];\n }\n if (this.dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this.dispatched = false;\n }\n }\n newGestureEvent(type, initialTarget) {\n let event = document.createEvent('CustomEvent');\n event.initEvent(type, false, true);\n event.initialTarget = initialTarget;\n event.tapCount = 0;\n return event;\n }\n dispatchEvent(event) {\n if (event.type === EventType.Tap) {\n const currentTime = (new Date()).getTime();\n let setTapCount = 0;\n if (currentTime - this._lastSetTapCountTime > Gesture.CLEAR_TAP_COUNT_TIME) {\n setTapCount = 1;\n }\n else {\n setTapCount = 2;\n }\n this._lastSetTapCountTime = currentTime;\n event.tapCount = setTapCount;\n }\n else if (event.type === EventType.Change || event.type === EventType.Contextmenu) {\n // tap is canceled by scrolling or context menu\n this._lastSetTapCountTime = 0;\n }\n for (let i = 0; i < this.ignoreTargets.length; i++) {\n if (event.initialTarget instanceof Node && this.ignoreTargets[i].contains(event.initialTarget)) {\n return;\n }\n }\n this.targets.forEach(target => {\n if (event.initialTarget instanceof Node && target.contains(event.initialTarget)) {\n target.dispatchEvent(event);\n this.dispatched = true;\n }\n });\n }\n inertia(dispatchTo, t1, vX, dirX, x, vY, dirY, y) {\n this.handle = DomUtils.scheduleAtNextAnimationFrame(() => {\n let now = Date.now();\n // velocity: old speed + accel_over_time\n let deltaT = now - t1, delta_pos_x = 0, delta_pos_y = 0, stopped = true;\n vX += Gesture.SCROLL_FRICTION * deltaT;\n vY += Gesture.SCROLL_FRICTION * deltaT;\n if (vX > 0) {\n stopped = false;\n delta_pos_x = dirX * vX * deltaT;\n }\n if (vY > 0) {\n stopped = false;\n delta_pos_y = dirY * vY * deltaT;\n }\n // dispatch translation event\n let evt = this.newGestureEvent(EventType.Change);\n evt.translationX = delta_pos_x;\n evt.translationY = delta_pos_y;\n dispatchTo.forEach(d => d.dispatchEvent(evt));\n if (!stopped) {\n this.inertia(dispatchTo, now, vX, dirX, x + delta_pos_x, vY, dirY, y + delta_pos_y);\n }\n });\n }\n onTouchMove(e) {\n let timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n let touch = e.changedTouches.item(i);\n if (!this.activeTouches.hasOwnProperty(String(touch.identifier))) {\n console.warn('end of an UNKNOWN touch', touch);\n continue;\n }\n let data = this.activeTouches[touch.identifier];\n let evt = this.newGestureEvent(EventType.Change, data.initialTarget);\n evt.translationX = touch.pageX - arrays.tail(data.rollingPageX);\n evt.translationY = touch.pageY - arrays.tail(data.rollingPageY);\n evt.pageX = touch.pageX;\n evt.pageY = touch.pageY;\n this.dispatchEvent(evt);\n // only keep a few data points, to average the final speed\n if (data.rollingPageX.length > 3) {\n data.rollingPageX.shift();\n data.rollingPageY.shift();\n data.rollingTimestamps.shift();\n }\n data.rollingPageX.push(touch.pageX);\n data.rollingPageY.push(touch.pageY);\n data.rollingTimestamps.push(timestamp);\n }\n if (this.dispatched) {\n e.preventDefault();\n e.stopPropagation();\n this.dispatched = false;\n }\n }\n}\nGesture.SCROLL_FRICTION = -0.005;\nGesture.HOLD_DELAY = 700;\nGesture.CLEAR_TAP_COUNT_TIME = 400; // ms\n__decorate([\n memoize\n], Gesture, \"isTouchDevice\", null);\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 *--------------------------------------------------------------------------------------------*/\nimport './actionbar.css';\nimport * as platform from '../../../common/platform.js';\nimport * as nls from '../../../../nls.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { Action, ActionRunner, Separator } from '../../../common/actions.js';\nimport * as types from '../../../common/types.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { DataTransfers } from '../../dnd.js';\nimport { isFirefox } from '../../browser.js';\nimport { $, addDisposableListener, append, EventHelper, EventType } from '../../dom.js';\nexport class BaseActionViewItem extends Disposable {\n constructor(context, action, options = {}) {\n super();\n this.options = options;\n this._context = context || this;\n this._action = action;\n if (action instanceof Action) {\n this._register(action.onDidChange(event => {\n if (!this.element) {\n // we have not been rendered yet, so there\n // is no point in updating the UI\n return;\n }\n this.handleActionChangeEvent(event);\n }));\n }\n }\n handleActionChangeEvent(event) {\n if (event.enabled !== undefined) {\n this.updateEnabled();\n }\n if (event.checked !== undefined) {\n this.updateChecked();\n }\n if (event.class !== undefined) {\n this.updateClass();\n }\n if (event.label !== undefined) {\n this.updateLabel();\n this.updateTooltip();\n }\n if (event.tooltip !== undefined) {\n this.updateTooltip();\n }\n }\n get actionRunner() {\n if (!this._actionRunner) {\n this._actionRunner = this._register(new ActionRunner());\n }\n return this._actionRunner;\n }\n set actionRunner(actionRunner) {\n this._actionRunner = actionRunner;\n }\n getAction() {\n return this._action;\n }\n isEnabled() {\n return this._action.enabled;\n }\n setActionContext(newContext) {\n this._context = newContext;\n }\n render(container) {\n const element = this.element = container;\n this._register(Gesture.addTarget(container));\n const enableDragging = this.options && this.options.draggable;\n if (enableDragging) {\n container.draggable = true;\n if (isFirefox) {\n // Firefox: requires to set a text data transfer to get going\n this._register(addDisposableListener(container, EventType.DRAG_START, e => { var _a; return (_a = e.dataTransfer) === null || _a === void 0 ? void 0 : _a.setData(DataTransfers.TEXT, this._action.label); }));\n }\n }\n this._register(addDisposableListener(element, TouchEventType.Tap, e => this.onClick(e)));\n this._register(addDisposableListener(element, EventType.MOUSE_DOWN, e => {\n if (!enableDragging) {\n EventHelper.stop(e, true); // do not run when dragging is on because that would disable it\n }\n if (this._action.enabled && e.button === 0) {\n element.classList.add('active');\n }\n }));\n if (platform.isMacintosh) {\n // macOS: allow to trigger the button when holding Ctrl+key and pressing the\n // main mouse button. This is for scenarios where e.g. some interaction forces\n // the Ctrl+key to be pressed and hold but the user still wants to interact\n // with the actions (for example quick access in quick navigation mode).\n this._register(addDisposableListener(element, EventType.CONTEXT_MENU, e => {\n if (e.button === 0 && e.ctrlKey === true) {\n this.onClick(e);\n }\n }));\n }\n this._register(addDisposableListener(element, EventType.CLICK, e => {\n EventHelper.stop(e, true);\n // menus do not use the click event\n if (!(this.options && this.options.isMenu)) {\n platform.setImmediate(() => this.onClick(e));\n }\n }));\n this._register(addDisposableListener(element, EventType.DBLCLICK, e => {\n EventHelper.stop(e, true);\n }));\n [EventType.MOUSE_UP, EventType.MOUSE_OUT].forEach(event => {\n this._register(addDisposableListener(element, event, e => {\n EventHelper.stop(e);\n element.classList.remove('active');\n }));\n });\n }\n onClick(event) {\n var _a;\n EventHelper.stop(event, true);\n const context = types.isUndefinedOrNull(this._context) ? ((_a = this.options) === null || _a === void 0 ? void 0 : _a.useEventAsContext) ? event : undefined : this._context;\n this.actionRunner.run(this._action, context);\n }\n // Only set the tabIndex on the element once it is about to get focused\n // That way this element wont be a tab stop when it is not needed #106441\n focus() {\n if (this.element) {\n this.element.tabIndex = 0;\n this.element.focus();\n this.element.classList.add('focused');\n }\n }\n blur() {\n if (this.element) {\n this.element.blur();\n this.element.tabIndex = -1;\n this.element.classList.remove('focused');\n }\n }\n setFocusable(focusable) {\n if (this.element) {\n this.element.tabIndex = focusable ? 0 : -1;\n }\n }\n get trapsArrowNavigation() {\n return false;\n }\n updateEnabled() {\n // implement in subclass\n }\n updateLabel() {\n // implement in subclass\n }\n updateTooltip() {\n // implement in subclass\n }\n updateClass() {\n // implement in subclass\n }\n updateChecked() {\n // implement in subclass\n }\n dispose() {\n if (this.element) {\n this.element.remove();\n this.element = undefined;\n }\n super.dispose();\n }\n}\nexport class ActionViewItem extends BaseActionViewItem {\n constructor(context, action, options = {}) {\n super(context, action, options);\n this.options = options;\n this.options.icon = options.icon !== undefined ? options.icon : false;\n this.options.label = options.label !== undefined ? options.label : true;\n this.cssClass = '';\n }\n render(container) {\n super.render(container);\n if (this.element) {\n this.label = append(this.element, $('a.action-label'));\n }\n if (this.label) {\n if (this._action.id === Separator.ID) {\n this.label.setAttribute('role', 'presentation'); // A separator is a presentation item\n }\n else {\n if (this.options.isMenu) {\n this.label.setAttribute('role', 'menuitem');\n }\n else {\n this.label.setAttribute('role', 'button');\n }\n }\n }\n if (this.options.label && this.options.keybinding && this.element) {\n append(this.element, $('span.keybinding')).textContent = this.options.keybinding;\n }\n this.updateClass();\n this.updateLabel();\n this.updateTooltip();\n this.updateEnabled();\n this.updateChecked();\n }\n // Only set the tabIndex on the element once it is about to get focused\n // That way this element wont be a tab stop when it is not needed #106441\n focus() {\n if (this.label) {\n this.label.tabIndex = 0;\n this.label.focus();\n }\n }\n blur() {\n if (this.label) {\n this.label.tabIndex = -1;\n }\n }\n setFocusable(focusable) {\n if (this.label) {\n this.label.tabIndex = focusable ? 0 : -1;\n }\n }\n updateLabel() {\n if (this.options.label && this.label) {\n this.label.textContent = this.getAction().label;\n }\n }\n updateTooltip() {\n let title = null;\n if (this.getAction().tooltip) {\n title = this.getAction().tooltip;\n }\n else if (!this.options.label && this.getAction().label && this.options.icon) {\n title = this.getAction().label;\n if (this.options.keybinding) {\n title = nls.localize({ key: 'titleLabel', comment: ['action title', 'action keybinding'] }, \"{0} ({1})\", title, this.options.keybinding);\n }\n }\n if (title && this.label) {\n this.label.title = title;\n }\n }\n updateClass() {\n if (this.cssClass && this.label) {\n this.label.classList.remove(...this.cssClass.split(' '));\n }\n if (this.options.icon) {\n this.cssClass = this.getAction().class;\n if (this.label) {\n this.label.classList.add('codicon');\n if (this.cssClass) {\n this.label.classList.add(...this.cssClass.split(' '));\n }\n }\n this.updateEnabled();\n }\n else {\n if (this.label) {\n this.label.classList.remove('codicon');\n }\n }\n }\n updateEnabled() {\n if (this.getAction().enabled) {\n if (this.label) {\n this.label.removeAttribute('aria-disabled');\n this.label.classList.remove('disabled');\n }\n if (this.element) {\n this.element.classList.remove('disabled');\n }\n }\n else {\n if (this.label) {\n this.label.setAttribute('aria-disabled', 'true');\n this.label.classList.add('disabled');\n }\n if (this.element) {\n this.element.classList.add('disabled');\n }\n }\n }\n updateChecked() {\n if (this.label) {\n if (this.getAction().checked) {\n this.label.classList.add('checked');\n }\n else {\n this.label.classList.remove('checked');\n }\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport './actionbar.css';\nimport { Disposable, dispose } from '../../../common/lifecycle.js';\nimport { ActionRunner } from '../../../common/actions.js';\nimport * as DOM from '../../dom.js';\nimport * as types from '../../../common/types.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { Emitter } from '../../../common/event.js';\nimport { ActionViewItem, BaseActionViewItem } from './actionViewItems.js';\nexport class ActionBar extends Disposable {\n constructor(container, options = {}) {\n var _a, _b, _c, _d, _e, _f;\n super();\n // Trigger Key Tracking\n this.triggerKeyDown = false;\n this.focusable = true;\n this._onDidBlur = this._register(new Emitter());\n this.onDidBlur = this._onDidBlur.event;\n this._onDidCancel = this._register(new Emitter({ onFirstListenerAdd: () => this.cancelHasListener = true }));\n this.onDidCancel = this._onDidCancel.event;\n this.cancelHasListener = false;\n this._onDidRun = this._register(new Emitter());\n this.onDidRun = this._onDidRun.event;\n this._onBeforeRun = this._register(new Emitter());\n this.onBeforeRun = this._onBeforeRun.event;\n this.options = options;\n this._context = (_a = options.context) !== null && _a !== void 0 ? _a : null;\n this._orientation = (_b = this.options.orientation) !== null && _b !== void 0 ? _b : 0 /* HORIZONTAL */;\n this._triggerKeys = {\n keyDown: (_d = (_c = this.options.triggerKeys) === null || _c === void 0 ? void 0 : _c.keyDown) !== null && _d !== void 0 ? _d : false,\n keys: (_f = (_e = this.options.triggerKeys) === null || _e === void 0 ? void 0 : _e.keys) !== null && _f !== void 0 ? _f : [3 /* Enter */, 10 /* Space */]\n };\n if (this.options.actionRunner) {\n this._actionRunner = this.options.actionRunner;\n }\n else {\n this._actionRunner = new ActionRunner();\n this._register(this._actionRunner);\n }\n this._register(this._actionRunner.onDidRun(e => this._onDidRun.fire(e)));\n this._register(this._actionRunner.onBeforeRun(e => this._onBeforeRun.fire(e)));\n this._actionIds = [];\n this.viewItems = [];\n this.focusedItem = undefined;\n this.domNode = document.createElement('div');\n this.domNode.className = 'monaco-action-bar';\n if (options.animated !== false) {\n this.domNode.classList.add('animated');\n }\n let previousKeys;\n let nextKeys;\n switch (this._orientation) {\n case 0 /* HORIZONTAL */:\n previousKeys = [15 /* LeftArrow */];\n nextKeys = [17 /* RightArrow */];\n break;\n case 1 /* VERTICAL */:\n previousKeys = [16 /* UpArrow */];\n nextKeys = [18 /* DownArrow */];\n this.domNode.className += ' vertical';\n break;\n }\n this._register(DOM.addDisposableListener(this.domNode, DOM.EventType.KEY_DOWN, e => {\n const event = new StandardKeyboardEvent(e);\n let eventHandled = true;\n const focusedItem = typeof this.focusedItem === 'number' ? this.viewItems[this.focusedItem] : undefined;\n if (previousKeys && (event.equals(previousKeys[0]) || event.equals(previousKeys[1]))) {\n eventHandled = this.focusPrevious();\n }\n else if (nextKeys && (event.equals(nextKeys[0]) || event.equals(nextKeys[1]))) {\n eventHandled = this.focusNext();\n }\n else if (event.equals(9 /* Escape */) && this.cancelHasListener) {\n this._onDidCancel.fire();\n }\n else if (event.equals(14 /* Home */)) {\n eventHandled = this.focusFirst();\n }\n else if (event.equals(13 /* End */)) {\n eventHandled = this.focusLast();\n }\n else if (event.equals(2 /* Tab */) && focusedItem instanceof BaseActionViewItem && focusedItem.trapsArrowNavigation) {\n eventHandled = this.focusNext();\n }\n else if (this.isTriggerKeyEvent(event)) {\n // Staying out of the else branch even if not triggered\n if (this._triggerKeys.keyDown) {\n this.doTrigger(event);\n }\n else {\n this.triggerKeyDown = true;\n }\n }\n else {\n eventHandled = false;\n }\n if (eventHandled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }));\n this._register(DOM.addDisposableListener(this.domNode, DOM.EventType.KEY_UP, e => {\n const event = new StandardKeyboardEvent(e);\n // Run action on Enter/Space\n if (this.isTriggerKeyEvent(event)) {\n if (!this._triggerKeys.keyDown && this.triggerKeyDown) {\n this.triggerKeyDown = false;\n this.doTrigger(event);\n }\n event.preventDefault();\n event.stopPropagation();\n }\n // Recompute focused item\n else if (event.equals(2 /* Tab */) || event.equals(1024 /* Shift */ | 2 /* Tab */)) {\n this.updateFocusedItem();\n }\n }));\n this.focusTracker = this._register(DOM.trackFocus(this.domNode));\n this._register(this.focusTracker.onDidBlur(() => {\n if (DOM.getActiveElement() === this.domNode || !DOM.isAncestor(DOM.getActiveElement(), this.domNode)) {\n this._onDidBlur.fire();\n this.focusedItem = undefined;\n this.triggerKeyDown = false;\n }\n }));\n this._register(this.focusTracker.onDidFocus(() => this.updateFocusedItem()));\n this.actionsList = document.createElement('ul');\n this.actionsList.className = 'actions-container';\n this.actionsList.setAttribute('role', 'toolbar');\n if (this.options.ariaLabel) {\n this.actionsList.setAttribute('aria-label', this.options.ariaLabel);\n }\n this.domNode.appendChild(this.actionsList);\n container.appendChild(this.domNode);\n }\n isTriggerKeyEvent(event) {\n let ret = false;\n this._triggerKeys.keys.forEach(keyCode => {\n ret = ret || event.equals(keyCode);\n });\n return ret;\n }\n updateFocusedItem() {\n for (let i = 0; i < this.actionsList.children.length; i++) {\n const elem = this.actionsList.children[i];\n if (DOM.isAncestor(DOM.getActiveElement(), elem)) {\n this.focusedItem = i;\n break;\n }\n }\n }\n get context() {\n return this._context;\n }\n set context(context) {\n this._context = context;\n this.viewItems.forEach(i => i.setActionContext(context));\n }\n get actionRunner() {\n return this._actionRunner;\n }\n set actionRunner(actionRunner) {\n if (actionRunner) {\n this._actionRunner = actionRunner;\n this.viewItems.forEach(item => item.actionRunner = actionRunner);\n }\n }\n getContainer() {\n return this.domNode;\n }\n push(arg, options = {}) {\n const actions = Array.isArray(arg) ? arg : [arg];\n let index = types.isNumber(options.index) ? options.index : null;\n actions.forEach((action) => {\n const actionViewItemElement = document.createElement('li');\n actionViewItemElement.className = 'action-item';\n actionViewItemElement.setAttribute('role', 'presentation');\n // Prevent native context menu on actions\n if (!this.options.allowContextMenu) {\n this._register(DOM.addDisposableListener(actionViewItemElement, DOM.EventType.CONTEXT_MENU, (e) => {\n DOM.EventHelper.stop(e, true);\n }));\n }\n let item;\n if (this.options.actionViewItemProvider) {\n item = this.options.actionViewItemProvider(action);\n }\n if (!item) {\n item = new ActionViewItem(this.context, action, options);\n }\n item.actionRunner = this._actionRunner;\n item.setActionContext(this.context);\n item.render(actionViewItemElement);\n if (this.focusable && item instanceof BaseActionViewItem && this.viewItems.length === 0) {\n // We need to allow for the first enabled item to be focused on using tab navigation #106441\n item.setFocusable(true);\n }\n if (index === null || index < 0 || index >= this.actionsList.children.length) {\n this.actionsList.appendChild(actionViewItemElement);\n this.viewItems.push(item);\n this._actionIds.push(action.id);\n }\n else {\n this.actionsList.insertBefore(actionViewItemElement, this.actionsList.children[index]);\n this.viewItems.splice(index, 0, item);\n this._actionIds.splice(index, 0, action.id);\n index++;\n }\n });\n if (typeof this.focusedItem === 'number') {\n // After a clear actions might be re-added to simply toggle some actions. We should preserve focus #97128\n this.focus(this.focusedItem);\n }\n }\n clear() {\n dispose(this.viewItems);\n this.viewItems = [];\n this._actionIds = [];\n DOM.clearNode(this.actionsList);\n }\n length() {\n return this.viewItems.length;\n }\n focus(arg) {\n let selectFirst = false;\n let index = undefined;\n if (arg === undefined) {\n selectFirst = true;\n }\n else if (typeof arg === 'number') {\n index = arg;\n }\n else if (typeof arg === 'boolean') {\n selectFirst = arg;\n }\n if (selectFirst && typeof this.focusedItem === 'undefined') {\n const firstEnabled = this.viewItems.findIndex(item => item.isEnabled());\n // Focus the first enabled item\n this.focusedItem = firstEnabled === -1 ? undefined : firstEnabled;\n this.updateFocus();\n }\n else {\n if (index !== undefined) {\n this.focusedItem = index;\n }\n this.updateFocus();\n }\n }\n focusFirst() {\n this.focusedItem = this.length() > 1 ? 1 : 0;\n return this.focusPrevious();\n }\n focusLast() {\n this.focusedItem = this.length() < 2 ? 0 : this.length() - 2;\n return this.focusNext();\n }\n focusNext() {\n if (typeof this.focusedItem === 'undefined') {\n this.focusedItem = this.viewItems.length - 1;\n }\n else if (this.viewItems.length <= 1) {\n return false;\n }\n const startIndex = this.focusedItem;\n let item;\n do {\n if (this.options.preventLoopNavigation && this.focusedItem + 1 >= this.viewItems.length) {\n this.focusedItem = startIndex;\n return false;\n }\n this.focusedItem = (this.focusedItem + 1) % this.viewItems.length;\n item = this.viewItems[this.focusedItem];\n } while (this.focusedItem !== startIndex && this.options.focusOnlyEnabledItems && !item.isEnabled());\n this.updateFocus();\n return true;\n }\n focusPrevious() {\n if (typeof this.focusedItem === 'undefined') {\n this.focusedItem = 0;\n }\n else if (this.viewItems.length <= 1) {\n return false;\n }\n const startIndex = this.focusedItem;\n let item;\n do {\n this.focusedItem = this.focusedItem - 1;\n if (this.focusedItem < 0) {\n if (this.options.preventLoopNavigation) {\n this.focusedItem = startIndex;\n return false;\n }\n this.focusedItem = this.viewItems.length - 1;\n }\n item = this.viewItems[this.focusedItem];\n } while (this.focusedItem !== startIndex && this.options.focusOnlyEnabledItems && !item.isEnabled());\n this.updateFocus(true);\n return true;\n }\n updateFocus(fromRight, preventScroll) {\n if (typeof this.focusedItem === 'undefined') {\n this.actionsList.focus({ preventScroll });\n }\n for (let i = 0; i < this.viewItems.length; i++) {\n const item = this.viewItems[i];\n const actionViewItem = item;\n if (i === this.focusedItem) {\n let focusItem = true;\n if (!types.isFunction(actionViewItem.focus)) {\n focusItem = false;\n }\n if (this.options.focusOnlyEnabledItems && types.isFunction(item.isEnabled) && !item.isEnabled()) {\n focusItem = false;\n }\n if (focusItem) {\n actionViewItem.focus(fromRight);\n }\n else {\n this.actionsList.focus({ preventScroll });\n }\n }\n else {\n if (types.isFunction(actionViewItem.blur)) {\n actionViewItem.blur();\n }\n }\n }\n }\n doTrigger(event) {\n if (typeof this.focusedItem === 'undefined') {\n return; //nothing to focus\n }\n // trigger action\n const actionViewItem = this.viewItems[this.focusedItem];\n if (actionViewItem instanceof BaseActionViewItem) {\n const context = (actionViewItem._context === null || actionViewItem._context === undefined) ? event : actionViewItem._context;\n this.run(actionViewItem._action, context);\n }\n }\n run(action, context) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._actionRunner.run(action, context);\n });\n }\n dispose() {\n dispose(this.viewItems);\n this.viewItems = [];\n this._actionIds = [];\n this.getContainer().remove();\n super.dispose();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './aria.css';\nimport { isMacintosh } from '../../../common/platform.js';\nimport * as dom from '../../dom.js';\n// Use a max length since we are inserting the whole msg in the DOM and that can cause browsers to freeze for long messages #94233\nconst MAX_MESSAGE_LENGTH = 20000;\nlet ariaContainer;\nlet alertContainer;\nlet alertContainer2;\nlet statusContainer;\nlet statusContainer2;\nexport function setARIAContainer(parent) {\n ariaContainer = document.createElement('div');\n ariaContainer.className = 'monaco-aria-container';\n const createAlertContainer = () => {\n const element = document.createElement('div');\n element.className = 'monaco-alert';\n element.setAttribute('role', 'alert');\n element.setAttribute('aria-atomic', 'true');\n ariaContainer.appendChild(element);\n return element;\n };\n alertContainer = createAlertContainer();\n alertContainer2 = createAlertContainer();\n const createStatusContainer = () => {\n const element = document.createElement('div');\n element.className = 'monaco-status';\n element.setAttribute('role', 'complementary');\n element.setAttribute('aria-live', 'polite');\n element.setAttribute('aria-atomic', 'true');\n ariaContainer.appendChild(element);\n return element;\n };\n statusContainer = createStatusContainer();\n statusContainer2 = createStatusContainer();\n parent.appendChild(ariaContainer);\n}\n/**\n * Given the provided message, will make sure that it is read as alert to screen readers.\n */\nexport function alert(msg) {\n if (!ariaContainer) {\n return;\n }\n // Use alternate containers such that duplicated messages get read out by screen readers #99466\n if (alertContainer.textContent !== msg) {\n dom.clearNode(alertContainer2);\n insertMessage(alertContainer, msg);\n }\n else {\n dom.clearNode(alertContainer);\n insertMessage(alertContainer2, msg);\n }\n}\n/**\n * Given the provided message, will make sure that it is read as status to screen readers.\n */\nexport function status(msg) {\n if (!ariaContainer) {\n return;\n }\n if (isMacintosh) {\n alert(msg); // VoiceOver does not seem to support status role\n }\n else {\n if (statusContainer.textContent !== msg) {\n dom.clearNode(statusContainer2);\n insertMessage(statusContainer, msg);\n }\n else {\n dom.clearNode(statusContainer);\n insertMessage(statusContainer2, msg);\n }\n }\n}\nfunction insertMessage(target, msg) {\n dom.clearNode(target);\n if (msg.length > MAX_MESSAGE_LENGTH) {\n msg = msg.substr(0, MAX_MESSAGE_LENGTH);\n }\n target.textContent = msg;\n // See https://www.paciellogroup.com/blog/2012/06/html5-accessibility-chops-aria-rolealert-browser-support/\n target.style.visibility = 'hidden';\n target.style.visibility = 'visible';\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 *--------------------------------------------------------------------------------------------*/\nimport './codicon/codicon.css';\nimport './codicon/codicon-modifiers.css';\nimport { Codicon } from '../../../common/codicons.js';\nexport function formatRule(c) {\n let def = c.definition;\n while (def instanceof Codicon) {\n def = def.definition;\n }\n return `.codicon-${c.id}:before { content: '${def.fontCharacter}'; }`;\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 *--------------------------------------------------------------------------------------------*/\nimport './countBadge.css';\nimport { $, append } from '../../dom.js';\nimport { format } from '../../../common/strings.js';\nimport { Color } from '../../../common/color.js';\nimport { mixin } from '../../../common/objects.js';\nconst defaultOpts = {\n badgeBackground: Color.fromHex('#4D4D4D'),\n badgeForeground: Color.fromHex('#FFFFFF')\n};\nexport class CountBadge {\n constructor(container, options) {\n this.count = 0;\n this.options = options || Object.create(null);\n mixin(this.options, defaultOpts, false);\n this.badgeBackground = this.options.badgeBackground;\n this.badgeForeground = this.options.badgeForeground;\n this.badgeBorder = this.options.badgeBorder;\n this.element = append(container, $('.monaco-count-badge'));\n this.countFormat = this.options.countFormat || '{0}';\n this.titleFormat = this.options.titleFormat || '';\n this.setCount(this.options.count || 0);\n }\n setCount(count) {\n this.count = count;\n this.render();\n }\n setTitleFormat(titleFormat) {\n this.titleFormat = titleFormat;\n this.render();\n }\n render() {\n this.element.textContent = format(this.countFormat, this.count);\n this.element.title = format(this.titleFormat, this.count);\n this.applyStyles();\n }\n style(styles) {\n this.badgeBackground = styles.badgeBackground;\n this.badgeForeground = styles.badgeForeground;\n this.badgeBorder = styles.badgeBorder;\n this.applyStyles();\n }\n applyStyles() {\n if (this.element) {\n const background = this.badgeBackground ? this.badgeBackground.toString() : '';\n const foreground = this.badgeForeground ? this.badgeForeground.toString() : '';\n const border = this.badgeBorder ? this.badgeBorder.toString() : '';\n this.element.style.backgroundColor = background;\n this.element.style.color = foreground;\n this.element.style.borderWidth = border ? '1px' : '';\n this.element.style.borderStyle = border ? 'solid' : '';\n this.element.style.borderColor = border;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as objects from '../../../common/objects.js';\nimport * as dom from '../../dom.js';\nimport { renderLabelWithIcons } from '../iconLabel/iconLabels.js';\nexport class HighlightedLabel {\n constructor(container, supportIcons) {\n this.supportIcons = supportIcons;\n this.text = '';\n this.title = '';\n this.highlights = [];\n this.didEverRender = false;\n this.domNode = document.createElement('span');\n this.domNode.className = 'monaco-highlighted-label';\n container.appendChild(this.domNode);\n }\n get element() {\n return this.domNode;\n }\n set(text, highlights = [], title = '', escapeNewLines) {\n if (!text) {\n text = '';\n }\n if (escapeNewLines) {\n // adjusts highlights inplace\n text = HighlightedLabel.escapeNewLines(text, highlights);\n }\n if (this.didEverRender && this.text === text && this.title === title && objects.equals(this.highlights, highlights)) {\n return;\n }\n this.text = text;\n this.title = title;\n this.highlights = highlights;\n this.render();\n }\n render() {\n const children = [];\n let pos = 0;\n for (const highlight of this.highlights) {\n if (highlight.end === highlight.start) {\n continue;\n }\n if (pos < highlight.start) {\n const substring = this.text.substring(pos, highlight.start);\n children.push(dom.$('span', undefined, ...this.supportIcons ? renderLabelWithIcons(substring) : [substring]));\n pos = highlight.end;\n }\n const substring = this.text.substring(highlight.start, highlight.end);\n const element = dom.$('span.highlight', undefined, ...this.supportIcons ? renderLabelWithIcons(substring) : [substring]);\n if (highlight.extraClasses) {\n element.classList.add(highlight.extraClasses);\n }\n children.push(element);\n pos = highlight.end;\n }\n if (pos < this.text.length) {\n const substring = this.text.substring(pos);\n children.push(dom.$('span', undefined, ...this.supportIcons ? renderLabelWithIcons(substring) : [substring]));\n }\n dom.reset(this.domNode, ...children);\n if (this.title) {\n this.domNode.title = this.title;\n }\n else {\n this.domNode.removeAttribute('title');\n }\n this.didEverRender = true;\n }\n static escapeNewLines(text, highlights) {\n let total = 0;\n let extra = 0;\n return text.replace(/\\r\\n|\\r|\\n/g, (match, offset) => {\n extra = match === '\\r\\n' ? -1 : 0;\n offset += total;\n for (const highlight of highlights) {\n if (highlight.end <= offset) {\n continue;\n }\n if (highlight.start >= offset) {\n highlight.start += extra;\n }\n if (highlight.end >= offset) {\n highlight.end += extra;\n }\n }\n total += extra;\n return '\\u23CE';\n });\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport './iconlabel.css';\nimport * as dom from '../../dom.js';\nimport { HighlightedLabel } from '../highlightedlabel/highlightedLabel.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { Range } from '../../../common/range.js';\nimport { equals } from '../../../common/objects.js';\nimport { isFunction, isString } from '../../../common/types.js';\nimport { domEvent } from '../../event.js';\nimport { localize } from '../../../../nls.js';\nimport { CancellationTokenSource } from '../../../common/cancellation.js';\nclass FastLabelNode {\n constructor(_element) {\n this._element = _element;\n }\n get element() {\n return this._element;\n }\n set textContent(content) {\n if (this.disposed || content === this._textContent) {\n return;\n }\n this._textContent = content;\n this._element.textContent = content;\n }\n set className(className) {\n if (this.disposed || className === this._className) {\n return;\n }\n this._className = className;\n this._element.className = className;\n }\n set empty(empty) {\n if (this.disposed || empty === this._empty) {\n return;\n }\n this._empty = empty;\n this._element.style.marginLeft = empty ? '0' : '';\n }\n dispose() {\n this.disposed = true;\n }\n}\nexport class IconLabel extends Disposable {\n constructor(container, options) {\n super();\n this.hoverDelegate = undefined;\n this.customHovers = new Map();\n this.domNode = this._register(new FastLabelNode(dom.append(container, dom.$('.monaco-icon-label'))));\n this.labelContainer = dom.append(this.domNode.element, dom.$('.monaco-icon-label-container'));\n const nameContainer = dom.append(this.labelContainer, dom.$('span.monaco-icon-name-container'));\n this.descriptionContainer = this._register(new FastLabelNode(dom.append(this.labelContainer, dom.$('span.monaco-icon-description-container'))));\n if (options === null || options === void 0 ? void 0 : options.supportHighlights) {\n this.nameNode = new LabelWithHighlights(nameContainer, !!options.supportIcons);\n }\n else {\n this.nameNode = new Label(nameContainer);\n }\n if (options === null || options === void 0 ? void 0 : options.supportDescriptionHighlights) {\n this.descriptionNodeFactory = () => new HighlightedLabel(dom.append(this.descriptionContainer.element, dom.$('span.label-description')), !!options.supportIcons);\n }\n else {\n this.descriptionNodeFactory = () => this._register(new FastLabelNode(dom.append(this.descriptionContainer.element, dom.$('span.label-description'))));\n }\n if (options === null || options === void 0 ? void 0 : options.hoverDelegate) {\n this.hoverDelegate = options.hoverDelegate;\n }\n }\n setLabel(label, description, options) {\n const classes = ['monaco-icon-label'];\n if (options) {\n if (options.extraClasses) {\n classes.push(...options.extraClasses);\n }\n if (options.italic) {\n classes.push('italic');\n }\n if (options.strikethrough) {\n classes.push('strikethrough');\n }\n }\n this.domNode.className = classes.join(' ');\n this.setupHover(this.labelContainer, options === null || options === void 0 ? void 0 : options.title);\n this.nameNode.setLabel(label, options);\n if (description || this.descriptionNode) {\n if (!this.descriptionNode) {\n this.descriptionNode = this.descriptionNodeFactory(); // description node is created lazily on demand\n }\n if (this.descriptionNode instanceof HighlightedLabel) {\n this.descriptionNode.set(description || '', options ? options.descriptionMatches : undefined);\n this.setupHover(this.descriptionNode.element, options === null || options === void 0 ? void 0 : options.descriptionTitle);\n }\n else {\n this.descriptionNode.textContent = description || '';\n this.setupHover(this.descriptionNode.element, (options === null || options === void 0 ? void 0 : options.descriptionTitle) || '');\n this.descriptionNode.empty = !description;\n }\n }\n }\n setupHover(htmlElement, tooltip) {\n const previousCustomHover = this.customHovers.get(htmlElement);\n if (previousCustomHover) {\n previousCustomHover.dispose();\n this.customHovers.delete(htmlElement);\n }\n if (!tooltip) {\n htmlElement.removeAttribute('title');\n return;\n }\n if (!this.hoverDelegate) {\n return this.setupNativeHover(htmlElement, tooltip);\n }\n else {\n return this.setupCustomHover(this.hoverDelegate, htmlElement, tooltip);\n }\n }\n static adjustXAndShowCustomHover(hoverOptions, mouseX, hoverDelegate, isHovering) {\n if (hoverOptions && isHovering) {\n if (mouseX !== undefined) {\n hoverOptions.target.x = mouseX + 10;\n }\n return hoverDelegate.showHover(hoverOptions);\n }\n return undefined;\n }\n getTooltipForCustom(markdownTooltip) {\n if (isString(markdownTooltip)) {\n return () => __awaiter(this, void 0, void 0, function* () { return markdownTooltip; });\n }\n else if (isFunction(markdownTooltip.markdown)) {\n return markdownTooltip.markdown;\n }\n else {\n const markdown = markdownTooltip.markdown;\n return () => __awaiter(this, void 0, void 0, function* () { return markdown; });\n }\n }\n setupCustomHover(hoverDelegate, htmlElement, markdownTooltip) {\n htmlElement.setAttribute('title', '');\n htmlElement.removeAttribute('title');\n let tooltip = this.getTooltipForCustom(markdownTooltip);\n let hoverOptions;\n let mouseX;\n let isHovering = false;\n let tokenSource;\n let hoverDisposable;\n function mouseOver(e) {\n if (isHovering) {\n return;\n }\n tokenSource = new CancellationTokenSource();\n function mouseLeaveOrDown(e) {\n const isMouseDown = e.type === dom.EventType.MOUSE_DOWN;\n if (isMouseDown) {\n hoverDisposable === null || hoverDisposable === void 0 ? void 0 : hoverDisposable.dispose();\n hoverDisposable = undefined;\n }\n if (isMouseDown || e.fromElement === htmlElement) {\n isHovering = false;\n hoverOptions = undefined;\n tokenSource.dispose(true);\n mouseLeaveDisposable.dispose();\n mouseDownDisposable.dispose();\n }\n }\n const mouseLeaveDisposable = domEvent(htmlElement, dom.EventType.MOUSE_LEAVE, true)(mouseLeaveOrDown.bind(htmlElement));\n const mouseDownDisposable = domEvent(htmlElement, dom.EventType.MOUSE_DOWN, true)(mouseLeaveOrDown.bind(htmlElement));\n isHovering = true;\n function mouseMove(e) {\n mouseX = e.x;\n }\n const mouseMoveDisposable = domEvent(htmlElement, dom.EventType.MOUSE_MOVE, true)(mouseMove.bind(htmlElement));\n setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (isHovering && tooltip) {\n // Re-use the already computed hover options if they exist.\n if (!hoverOptions) {\n const target = {\n targetElements: [this],\n dispose: () => { }\n };\n hoverOptions = {\n text: localize('iconLabel.loading', \"Loading...\"),\n target,\n hoverPosition: 2 /* BELOW */\n };\n hoverDisposable = IconLabel.adjustXAndShowCustomHover(hoverOptions, mouseX, hoverDelegate, isHovering);\n const resolvedTooltip = (_a = (yield tooltip(tokenSource.token))) !== null && _a !== void 0 ? _a : (!isString(markdownTooltip) ? markdownTooltip.markdownNotSupportedFallback : undefined);\n if (resolvedTooltip) {\n hoverOptions = {\n text: resolvedTooltip,\n target,\n hoverPosition: 2 /* BELOW */\n };\n // awaiting the tooltip could take a while. Make sure we're still hovering.\n hoverDisposable = IconLabel.adjustXAndShowCustomHover(hoverOptions, mouseX, hoverDelegate, isHovering);\n }\n else if (hoverDisposable) {\n hoverDisposable.dispose();\n hoverDisposable = undefined;\n }\n }\n }\n mouseMoveDisposable.dispose();\n }), hoverDelegate.delay);\n }\n const mouseOverDisposable = this._register(domEvent(htmlElement, dom.EventType.MOUSE_OVER, true)(mouseOver.bind(htmlElement)));\n this.customHovers.set(htmlElement, mouseOverDisposable);\n }\n setupNativeHover(htmlElement, tooltip) {\n let stringTooltip = '';\n if (isString(tooltip)) {\n stringTooltip = tooltip;\n }\n else if (tooltip === null || tooltip === void 0 ? void 0 : tooltip.markdownNotSupportedFallback) {\n stringTooltip = tooltip.markdownNotSupportedFallback;\n }\n htmlElement.title = stringTooltip;\n }\n}\nclass Label {\n constructor(container) {\n this.container = container;\n this.label = undefined;\n this.singleLabel = undefined;\n }\n setLabel(label, options) {\n if (this.label === label && equals(this.options, options)) {\n return;\n }\n this.label = label;\n this.options = options;\n if (typeof label === 'string') {\n if (!this.singleLabel) {\n this.container.innerText = '';\n this.container.classList.remove('multiple');\n this.singleLabel = dom.append(this.container, dom.$('a.label-name', { id: options === null || options === void 0 ? void 0 : options.domId }));\n }\n this.singleLabel.textContent = label;\n }\n else {\n this.container.innerText = '';\n this.container.classList.add('multiple');\n this.singleLabel = undefined;\n for (let i = 0; i < label.length; i++) {\n const l = label[i];\n const id = (options === null || options === void 0 ? void 0 : options.domId) && `${options === null || options === void 0 ? void 0 : options.domId}_${i}`;\n dom.append(this.container, dom.$('a.label-name', { id, 'data-icon-label-count': label.length, 'data-icon-label-index': i, 'role': 'treeitem' }, l));\n if (i < label.length - 1) {\n dom.append(this.container, dom.$('span.label-separator', undefined, (options === null || options === void 0 ? void 0 : options.separator) || '/'));\n }\n }\n }\n }\n}\nfunction splitMatches(labels, separator, matches) {\n if (!matches) {\n return undefined;\n }\n let labelStart = 0;\n return labels.map(label => {\n const labelRange = { start: labelStart, end: labelStart + label.length };\n const result = matches\n .map(match => Range.intersect(labelRange, match))\n .filter(range => !Range.isEmpty(range))\n .map(({ start, end }) => ({ start: start - labelStart, end: end - labelStart }));\n labelStart = labelRange.end + separator.length;\n return result;\n });\n}\nclass LabelWithHighlights {\n constructor(container, supportIcons) {\n this.container = container;\n this.supportIcons = supportIcons;\n this.label = undefined;\n this.singleLabel = undefined;\n }\n setLabel(label, options) {\n if (this.label === label && equals(this.options, options)) {\n return;\n }\n this.label = label;\n this.options = options;\n if (typeof label === 'string') {\n if (!this.singleLabel) {\n this.container.innerText = '';\n this.container.classList.remove('multiple');\n this.singleLabel = new HighlightedLabel(dom.append(this.container, dom.$('a.label-name', { id: options === null || options === void 0 ? void 0 : options.domId })), this.supportIcons);\n }\n this.singleLabel.set(label, options === null || options === void 0 ? void 0 : options.matches, undefined, options === null || options === void 0 ? void 0 : options.labelEscapeNewLines);\n }\n else {\n this.container.innerText = '';\n this.container.classList.add('multiple');\n this.singleLabel = undefined;\n const separator = (options === null || options === void 0 ? void 0 : options.separator) || '/';\n const matches = splitMatches(label, separator, options === null || options === void 0 ? void 0 : options.matches);\n for (let i = 0; i < label.length; i++) {\n const l = label[i];\n const m = matches ? matches[i] : undefined;\n const id = (options === null || options === void 0 ? void 0 : options.domId) && `${options === null || options === void 0 ? void 0 : options.domId}_${i}`;\n const name = dom.$('a.label-name', { id, 'data-icon-label-count': label.length, 'data-icon-label-index': i, 'role': 'treeitem' });\n const highlightedLabel = new HighlightedLabel(dom.append(this.container, name), this.supportIcons);\n highlightedLabel.set(l, m, undefined, options === null || options === void 0 ? void 0 : options.labelEscapeNewLines);\n if (i < label.length - 1) {\n dom.append(name, dom.$('span.label-separator', undefined, separator));\n }\n }\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../dom.js';\nimport { CSSIcon } from '../../../common/codicons.js';\nconst labelWithIconsRegex = new RegExp(`(\\\\\\\\)?\\\\$\\\\((${CSSIcon.iconNameExpression}(?:${CSSIcon.iconModifierExpression})?)\\\\)`, 'g');\nexport function renderLabelWithIcons(text) {\n const elements = new Array();\n let match;\n let textStart = 0, textStop = 0;\n while ((match = labelWithIconsRegex.exec(text)) !== null) {\n textStop = match.index || 0;\n elements.push(text.substring(textStart, textStop));\n textStart = (match.index || 0) + match[0].length;\n const [, escaped, codicon] = match;\n elements.push(escaped ? `$(${codicon})` : renderIcon({ id: codicon }));\n }\n if (textStart < text.length) {\n elements.push(text.substring(textStart));\n }\n return elements;\n}\nexport function renderIcon(icon) {\n const node = dom.$(`span`);\n node.classList.add(...CSSIcon.asClassNameArray(icon));\n return node;\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 *--------------------------------------------------------------------------------------------*/\nexport class ArrayNavigator {\n constructor(items, start = 0, end = items.length, index = start - 1) {\n this.items = items;\n this.start = start;\n this.end = end;\n this.index = index;\n }\n current() {\n if (this.index === this.start - 1 || this.index === this.end) {\n return null;\n }\n return this.items[this.index];\n }\n next() {\n this.index = Math.min(this.index + 1, this.end);\n return this.current();\n }\n previous() {\n this.index = Math.max(this.index - 1, this.start - 1);\n return this.current();\n }\n first() {\n this.index = this.start;\n return this.current();\n }\n last() {\n this.index = this.end - 1;\n return this.current();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { ArrayNavigator } from './navigator.js';\nexport class HistoryNavigator {\n constructor(history = [], limit = 10) {\n this._initialize(history);\n this._limit = limit;\n this._onChange();\n }\n add(t) {\n this._history.delete(t);\n this._history.add(t);\n this._onChange();\n }\n next() {\n if (this._currentPosition() !== this._elements.length - 1) {\n return this._navigator.next();\n }\n return null;\n }\n previous() {\n if (this._currentPosition() !== 0) {\n return this._navigator.previous();\n }\n return null;\n }\n current() {\n return this._navigator.current();\n }\n first() {\n return this._navigator.first();\n }\n last() {\n return this._navigator.last();\n }\n has(t) {\n return this._history.has(t);\n }\n _onChange() {\n this._reduceToLimit();\n const elements = this._elements;\n this._navigator = new ArrayNavigator(elements, 0, elements.length, elements.length);\n }\n _reduceToLimit() {\n const data = this._elements;\n if (data.length > this._limit) {\n this._initialize(data.slice(data.length - this._limit));\n }\n }\n _currentPosition() {\n const currentElement = this._navigator.current();\n if (!currentElement) {\n return -1;\n }\n return this._elements.indexOf(currentElement);\n }\n _initialize(history) {\n this._history = new Set();\n for (const entry of history) {\n this._history.add(entry);\n }\n }\n get _elements() {\n const elements = [];\n this._history.forEach(e => elements.push(e));\n return elements;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './inputBox.css';\nimport * as nls from '../../../../nls.js';\nimport * as dom from '../../dom.js';\nimport { renderFormattedText, renderText } from '../../formattedTextRenderer.js';\nimport * as aria from '../aria/aria.js';\nimport { ActionBar } from '../actionbar/actionbar.js';\nimport { Event, Emitter } from '../../../common/event.js';\nimport { Widget } from '../widget.js';\nimport { Color } from '../../../common/color.js';\nimport { mixin } from '../../../common/objects.js';\nimport { HistoryNavigator } from '../../../common/history.js';\nimport { ScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { domEvent } from '../../event.js';\nconst $ = dom.$;\nconst defaultOpts = {\n inputBackground: Color.fromHex('#3C3C3C'),\n inputForeground: Color.fromHex('#CCCCCC'),\n inputValidationInfoBorder: Color.fromHex('#55AAFF'),\n inputValidationInfoBackground: Color.fromHex('#063B49'),\n inputValidationWarningBorder: Color.fromHex('#B89500'),\n inputValidationWarningBackground: Color.fromHex('#352A05'),\n inputValidationErrorBorder: Color.fromHex('#BE1100'),\n inputValidationErrorBackground: Color.fromHex('#5A1D1D')\n};\nexport class InputBox extends Widget {\n constructor(container, contextViewProvider, options) {\n var _a;\n super();\n this.state = 'idle';\n this.maxHeight = Number.POSITIVE_INFINITY;\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._onDidHeightChange = this._register(new Emitter());\n this.onDidHeightChange = this._onDidHeightChange.event;\n this.contextViewProvider = contextViewProvider;\n this.options = options || Object.create(null);\n mixin(this.options, defaultOpts, false);\n this.message = null;\n this.placeholder = this.options.placeholder || '';\n this.tooltip = (_a = this.options.tooltip) !== null && _a !== void 0 ? _a : (this.placeholder || '');\n this.ariaLabel = this.options.ariaLabel || '';\n this.inputBackground = this.options.inputBackground;\n this.inputForeground = this.options.inputForeground;\n this.inputBorder = this.options.inputBorder;\n this.inputValidationInfoBorder = this.options.inputValidationInfoBorder;\n this.inputValidationInfoBackground = this.options.inputValidationInfoBackground;\n this.inputValidationInfoForeground = this.options.inputValidationInfoForeground;\n this.inputValidationWarningBorder = this.options.inputValidationWarningBorder;\n this.inputValidationWarningBackground = this.options.inputValidationWarningBackground;\n this.inputValidationWarningForeground = this.options.inputValidationWarningForeground;\n this.inputValidationErrorBorder = this.options.inputValidationErrorBorder;\n this.inputValidationErrorBackground = this.options.inputValidationErrorBackground;\n this.inputValidationErrorForeground = this.options.inputValidationErrorForeground;\n if (this.options.validationOptions) {\n this.validation = this.options.validationOptions.validation;\n }\n this.element = dom.append(container, $('.monaco-inputbox.idle'));\n let tagName = this.options.flexibleHeight ? 'textarea' : 'input';\n let wrapper = dom.append(this.element, $('.ibwrapper'));\n this.input = dom.append(wrapper, $(tagName + '.input.empty'));\n this.input.setAttribute('autocorrect', 'off');\n this.input.setAttribute('autocapitalize', 'off');\n this.input.setAttribute('spellcheck', 'false');\n this.onfocus(this.input, () => this.element.classList.add('synthetic-focus'));\n this.onblur(this.input, () => this.element.classList.remove('synthetic-focus'));\n if (this.options.flexibleHeight) {\n this.maxHeight = typeof this.options.flexibleMaxHeight === 'number' ? this.options.flexibleMaxHeight : Number.POSITIVE_INFINITY;\n this.mirror = dom.append(wrapper, $('div.mirror'));\n this.mirror.innerText = '\\u00a0';\n this.scrollableElement = new ScrollableElement(this.element, { vertical: 1 /* Auto */ });\n if (this.options.flexibleWidth) {\n this.input.setAttribute('wrap', 'off');\n this.mirror.style.whiteSpace = 'pre';\n this.mirror.style.wordWrap = 'initial';\n }\n dom.append(container, this.scrollableElement.getDomNode());\n this._register(this.scrollableElement);\n // from ScrollableElement to DOM\n this._register(this.scrollableElement.onScroll(e => this.input.scrollTop = e.scrollTop));\n const onSelectionChange = Event.filter(domEvent(document, 'selectionchange'), () => {\n const selection = document.getSelection();\n return (selection === null || selection === void 0 ? void 0 : selection.anchorNode) === wrapper;\n });\n // from DOM to ScrollableElement\n this._register(onSelectionChange(this.updateScrollDimensions, this));\n this._register(this.onDidHeightChange(this.updateScrollDimensions, this));\n }\n else {\n this.input.type = this.options.type || 'text';\n this.input.setAttribute('wrap', 'off');\n }\n if (this.ariaLabel) {\n this.input.setAttribute('aria-label', this.ariaLabel);\n }\n if (this.placeholder) {\n this.setPlaceHolder(this.placeholder);\n }\n if (this.tooltip) {\n this.setTooltip(this.tooltip);\n }\n this.oninput(this.input, () => this.onValueChange());\n this.onblur(this.input, () => this.onBlur());\n this.onfocus(this.input, () => this.onFocus());\n this.ignoreGesture(this.input);\n setTimeout(() => this.updateMirror(), 0);\n // Support actions\n if (this.options.actions) {\n this.actionbar = this._register(new ActionBar(this.element));\n this.actionbar.push(this.options.actions, { icon: true, label: false });\n }\n this.applyStyles();\n }\n onBlur() {\n this._hideMessage();\n }\n onFocus() {\n this._showMessage();\n }\n setPlaceHolder(placeHolder) {\n this.placeholder = placeHolder;\n this.input.setAttribute('placeholder', placeHolder);\n }\n setTooltip(tooltip) {\n this.tooltip = tooltip;\n this.input.title = tooltip;\n }\n setAriaLabel(label) {\n this.ariaLabel = label;\n if (label) {\n this.input.setAttribute('aria-label', this.ariaLabel);\n }\n else {\n this.input.removeAttribute('aria-label');\n }\n }\n getAriaLabel() {\n return this.ariaLabel;\n }\n get inputElement() {\n return this.input;\n }\n get value() {\n return this.input.value;\n }\n set value(newValue) {\n if (this.input.value !== newValue) {\n this.input.value = newValue;\n this.onValueChange();\n }\n }\n get height() {\n return typeof this.cachedHeight === 'number' ? this.cachedHeight : dom.getTotalHeight(this.element);\n }\n focus() {\n this.input.focus();\n }\n blur() {\n this.input.blur();\n }\n hasFocus() {\n return document.activeElement === this.input;\n }\n select(range = null) {\n this.input.select();\n if (range) {\n this.input.setSelectionRange(range.start, range.end);\n if (range.end === this.input.value.length) {\n this.input.scrollLeft = this.input.scrollWidth;\n }\n }\n }\n isSelectionAtEnd() {\n return this.input.selectionEnd === this.input.value.length && this.input.selectionStart === this.input.selectionEnd;\n }\n enable() {\n this.input.removeAttribute('disabled');\n }\n disable() {\n this.blur();\n this.input.disabled = true;\n this._hideMessage();\n }\n get width() {\n return dom.getTotalWidth(this.input);\n }\n set width(width) {\n if (this.options.flexibleHeight && this.options.flexibleWidth) {\n // textarea with horizontal scrolling\n let horizontalPadding = 0;\n if (this.mirror) {\n const paddingLeft = parseFloat(this.mirror.style.paddingLeft || '') || 0;\n const paddingRight = parseFloat(this.mirror.style.paddingRight || '') || 0;\n horizontalPadding = paddingLeft + paddingRight;\n }\n this.input.style.width = (width - horizontalPadding) + 'px';\n }\n else {\n this.input.style.width = width + 'px';\n }\n if (this.mirror) {\n this.mirror.style.width = width + 'px';\n }\n }\n set paddingRight(paddingRight) {\n if (this.options.flexibleHeight && this.options.flexibleWidth) {\n this.input.style.width = `calc(100% - ${paddingRight}px)`;\n }\n else {\n this.input.style.paddingRight = paddingRight + 'px';\n }\n if (this.mirror) {\n this.mirror.style.paddingRight = paddingRight + 'px';\n }\n }\n updateScrollDimensions() {\n if (typeof this.cachedContentHeight !== 'number' || typeof this.cachedHeight !== 'number' || !this.scrollableElement) {\n return;\n }\n const scrollHeight = this.cachedContentHeight;\n const height = this.cachedHeight;\n const scrollTop = this.input.scrollTop;\n this.scrollableElement.setScrollDimensions({ scrollHeight, height });\n this.scrollableElement.setScrollPosition({ scrollTop });\n }\n showMessage(message, force) {\n this.message = message;\n this.element.classList.remove('idle');\n this.element.classList.remove('info');\n this.element.classList.remove('warning');\n this.element.classList.remove('error');\n this.element.classList.add(this.classForType(message.type));\n const styles = this.stylesForType(this.message.type);\n this.element.style.border = styles.border ? `1px solid ${styles.border}` : '';\n if (this.hasFocus() || force) {\n this._showMessage();\n }\n }\n hideMessage() {\n this.message = null;\n this.element.classList.remove('info');\n this.element.classList.remove('warning');\n this.element.classList.remove('error');\n this.element.classList.add('idle');\n this._hideMessage();\n this.applyStyles();\n }\n validate() {\n let errorMsg = null;\n if (this.validation) {\n errorMsg = this.validation(this.value);\n if (errorMsg) {\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.showMessage(errorMsg);\n }\n else if (this.inputElement.hasAttribute('aria-invalid')) {\n this.inputElement.removeAttribute('aria-invalid');\n this.hideMessage();\n }\n }\n return errorMsg === null || errorMsg === void 0 ? void 0 : errorMsg.type;\n }\n stylesForType(type) {\n switch (type) {\n case 1 /* INFO */: return { border: this.inputValidationInfoBorder, background: this.inputValidationInfoBackground, foreground: this.inputValidationInfoForeground };\n case 2 /* WARNING */: return { border: this.inputValidationWarningBorder, background: this.inputValidationWarningBackground, foreground: this.inputValidationWarningForeground };\n default: return { border: this.inputValidationErrorBorder, background: this.inputValidationErrorBackground, foreground: this.inputValidationErrorForeground };\n }\n }\n classForType(type) {\n switch (type) {\n case 1 /* INFO */: return 'info';\n case 2 /* WARNING */: return 'warning';\n default: return 'error';\n }\n }\n _showMessage() {\n if (!this.contextViewProvider || !this.message) {\n return;\n }\n let div;\n let layout = () => div.style.width = dom.getTotalWidth(this.element) + 'px';\n this.contextViewProvider.showContextView({\n getAnchor: () => this.element,\n anchorAlignment: 1 /* RIGHT */,\n render: (container) => {\n if (!this.message) {\n return null;\n }\n div = dom.append(container, $('.monaco-inputbox-container'));\n layout();\n const renderOptions = {\n inline: true,\n className: 'monaco-inputbox-message'\n };\n const spanElement = (this.message.formatContent\n ? renderFormattedText(this.message.content, renderOptions)\n : renderText(this.message.content, renderOptions));\n spanElement.classList.add(this.classForType(this.message.type));\n const styles = this.stylesForType(this.message.type);\n spanElement.style.backgroundColor = styles.background ? styles.background.toString() : '';\n spanElement.style.color = styles.foreground ? styles.foreground.toString() : '';\n spanElement.style.border = styles.border ? `1px solid ${styles.border}` : '';\n dom.append(div, spanElement);\n return null;\n },\n onHide: () => {\n this.state = 'closed';\n },\n layout: layout\n });\n // ARIA Support\n let alertText;\n if (this.message.type === 3 /* ERROR */) {\n alertText = nls.localize('alertErrorMessage', \"Error: {0}\", this.message.content);\n }\n else if (this.message.type === 2 /* WARNING */) {\n alertText = nls.localize('alertWarningMessage', \"Warning: {0}\", this.message.content);\n }\n else {\n alertText = nls.localize('alertInfoMessage', \"Info: {0}\", this.message.content);\n }\n aria.alert(alertText);\n this.state = 'open';\n }\n _hideMessage() {\n if (!this.contextViewProvider) {\n return;\n }\n if (this.state === 'open') {\n this.contextViewProvider.hideContextView();\n }\n this.state = 'idle';\n }\n onValueChange() {\n this._onDidChange.fire(this.value);\n this.validate();\n this.updateMirror();\n this.input.classList.toggle('empty', !this.value);\n if (this.state === 'open' && this.contextViewProvider) {\n this.contextViewProvider.layout();\n }\n }\n updateMirror() {\n if (!this.mirror) {\n return;\n }\n const value = this.value;\n const lastCharCode = value.charCodeAt(value.length - 1);\n const suffix = lastCharCode === 10 ? ' ' : '';\n const mirrorTextContent = value + suffix;\n if (mirrorTextContent) {\n this.mirror.textContent = value + suffix;\n }\n else {\n this.mirror.innerText = '\\u00a0';\n }\n this.layout();\n }\n style(styles) {\n this.inputBackground = styles.inputBackground;\n this.inputForeground = styles.inputForeground;\n this.inputBorder = styles.inputBorder;\n this.inputValidationInfoBackground = styles.inputValidationInfoBackground;\n this.inputValidationInfoForeground = styles.inputValidationInfoForeground;\n this.inputValidationInfoBorder = styles.inputValidationInfoBorder;\n this.inputValidationWarningBackground = styles.inputValidationWarningBackground;\n this.inputValidationWarningForeground = styles.inputValidationWarningForeground;\n this.inputValidationWarningBorder = styles.inputValidationWarningBorder;\n this.inputValidationErrorBackground = styles.inputValidationErrorBackground;\n this.inputValidationErrorForeground = styles.inputValidationErrorForeground;\n this.inputValidationErrorBorder = styles.inputValidationErrorBorder;\n this.applyStyles();\n }\n applyStyles() {\n const background = this.inputBackground ? this.inputBackground.toString() : '';\n const foreground = this.inputForeground ? this.inputForeground.toString() : '';\n const border = this.inputBorder ? this.inputBorder.toString() : '';\n this.element.style.backgroundColor = background;\n this.element.style.color = foreground;\n this.input.style.backgroundColor = 'inherit';\n this.input.style.color = foreground;\n this.element.style.borderWidth = border ? '1px' : '';\n this.element.style.borderStyle = border ? 'solid' : '';\n this.element.style.borderColor = border;\n }\n layout() {\n if (!this.mirror) {\n return;\n }\n const previousHeight = this.cachedContentHeight;\n this.cachedContentHeight = dom.getTotalHeight(this.mirror);\n if (previousHeight !== this.cachedContentHeight) {\n this.cachedHeight = Math.min(this.cachedContentHeight, this.maxHeight);\n this.input.style.height = this.cachedHeight + 'px';\n this._onDidHeightChange.fire(this.cachedContentHeight);\n }\n }\n insertAtCursor(text) {\n const inputElement = this.inputElement;\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n const content = inputElement.value;\n if (start !== null && end !== null) {\n this.value = content.substr(0, start) + text + content.substr(end);\n inputElement.setSelectionRange(start + 1, start + 1);\n this.layout();\n }\n }\n dispose() {\n this._hideMessage();\n this.message = null;\n if (this.actionbar) {\n this.actionbar.dispose();\n }\n super.dispose();\n }\n}\nexport class HistoryInputBox extends InputBox {\n constructor(container, contextViewProvider, options) {\n super(container, contextViewProvider, options);\n this.history = new HistoryNavigator(options.history, 100);\n }\n addToHistory() {\n if (this.value && this.value !== this.getCurrentValue()) {\n this.history.add(this.value);\n }\n }\n showNextValue() {\n if (!this.history.has(this.value)) {\n this.addToHistory();\n }\n let next = this.getNextValue();\n if (next) {\n next = next === this.value ? this.getNextValue() : next;\n }\n if (next) {\n this.value = next;\n aria.status(this.value);\n }\n }\n showPreviousValue() {\n if (!this.history.has(this.value)) {\n this.addToHistory();\n }\n let previous = this.getPreviousValue();\n if (previous) {\n previous = previous === this.value ? this.getPreviousValue() : previous;\n }\n if (previous) {\n this.value = previous;\n aria.status(this.value);\n }\n }\n getCurrentValue() {\n let currentValue = this.history.current();\n if (!currentValue) {\n currentValue = this.history.last();\n this.history.next();\n }\n return currentValue;\n }\n getPreviousValue() {\n return this.history.previous() || this.history.first();\n }\n getNextValue() {\n return this.history.next() || this.history.last();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Range } from '../../../common/range.js';\n/**\n * Returns the intersection between a ranged group and a range.\n * Returns `[]` if the intersection is empty.\n */\nexport function groupIntersect(range, groups) {\n const result = [];\n for (let r of groups) {\n if (range.start >= r.range.end) {\n continue;\n }\n if (range.end < r.range.start) {\n break;\n }\n const intersection = Range.intersect(range, r.range);\n if (Range.isEmpty(intersection)) {\n continue;\n }\n result.push({\n range: intersection,\n size: r.size\n });\n }\n return result;\n}\n/**\n * Shifts a range by that `much`.\n */\nexport function shift({ start, end }, much) {\n return { start: start + much, end: end + much };\n}\n/**\n * Consolidates a collection of ranged groups.\n *\n * Consolidation is the process of merging consecutive ranged groups\n * that share the same `size`.\n */\nexport function consolidate(groups) {\n const result = [];\n let previousGroup = null;\n for (let group of groups) {\n const start = group.range.start;\n const end = group.range.end;\n const size = group.size;\n if (previousGroup && size === previousGroup.size) {\n previousGroup.range.end = end;\n continue;\n }\n previousGroup = { range: { start, end }, size };\n result.push(previousGroup);\n }\n return result;\n}\n/**\n * Concatenates several collections of ranged groups into a single\n * collection.\n */\nfunction concat(...groups) {\n return consolidate(groups.reduce((r, g) => r.concat(g), []));\n}\nexport class RangeMap {\n constructor() {\n this.groups = [];\n this._size = 0;\n }\n splice(index, deleteCount, items = []) {\n const diff = items.length - deleteCount;\n const before = groupIntersect({ start: 0, end: index }, this.groups);\n const after = groupIntersect({ start: index + deleteCount, end: Number.POSITIVE_INFINITY }, this.groups)\n .map(g => ({ range: shift(g.range, diff), size: g.size }));\n const middle = items.map((item, i) => ({\n range: { start: index + i, end: index + i + 1 },\n size: item.size\n }));\n this.groups = concat(before, middle, after);\n this._size = this.groups.reduce((t, g) => t + (g.size * (g.range.end - g.range.start)), 0);\n }\n /**\n * Returns the number of items in the range map.\n */\n get count() {\n const len = this.groups.length;\n if (!len) {\n return 0;\n }\n return this.groups[len - 1].range.end;\n }\n /**\n * Returns the sum of the sizes of all items in the range map.\n */\n get size() {\n return this._size;\n }\n /**\n * Returns the index of the item at the given position.\n */\n indexAt(position) {\n if (position < 0) {\n return -1;\n }\n let index = 0;\n let size = 0;\n for (let group of this.groups) {\n const count = group.range.end - group.range.start;\n const newSize = size + (count * group.size);\n if (position < newSize) {\n return index + Math.floor((position - size) / group.size);\n }\n index += count;\n size = newSize;\n }\n return index;\n }\n /**\n * Returns the index of the item right after the item at the\n * index of the given position.\n */\n indexAfter(position) {\n return Math.min(this.indexAt(position) + 1, this.count);\n }\n /**\n * Returns the start position of the item at the given index.\n */\n positionAt(index) {\n if (index < 0) {\n return -1;\n }\n let position = 0;\n let count = 0;\n for (let group of this.groups) {\n const groupCount = group.range.end - group.range.start;\n const newCount = count + groupCount;\n if (index < newCount) {\n return position + ((index - count) * group.size);\n }\n position += groupCount * group.size;\n count = newCount;\n }\n return -1;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { $ } from '../../dom.js';\nfunction removeFromParent(element) {\n try {\n if (element.parentElement) {\n element.parentElement.removeChild(element);\n }\n }\n catch (e) {\n // this will throw if this happens due to a blur event, nasty business\n }\n}\nexport class RowCache {\n constructor(renderers) {\n this.renderers = renderers;\n this.cache = new Map();\n }\n /**\n * Returns a row either by creating a new one or reusing\n * a previously released row which shares the same templateId.\n */\n alloc(templateId) {\n let result = this.getTemplateCache(templateId).pop();\n if (!result) {\n const domNode = $('.monaco-list-row');\n const renderer = this.getRenderer(templateId);\n const templateData = renderer.renderTemplate(domNode);\n result = { domNode, templateId, templateData };\n }\n return result;\n }\n /**\n * Releases the row for eventual reuse.\n */\n release(row) {\n if (!row) {\n return;\n }\n this.releaseRow(row);\n }\n releaseRow(row) {\n const { domNode, templateId } = row;\n if (domNode) {\n domNode.classList.remove('scrolling');\n removeFromParent(domNode);\n }\n const cache = this.getTemplateCache(templateId);\n cache.push(row);\n }\n getTemplateCache(templateId) {\n let result = this.cache.get(templateId);\n if (!result) {\n result = [];\n this.cache.set(templateId, result);\n }\n return result;\n }\n dispose() {\n this.cache.forEach((cachedRows, templateId) => {\n for (const cachedRow of cachedRows) {\n const renderer = this.getRenderer(templateId);\n renderer.disposeTemplate(cachedRow.templateData);\n cachedRow.templateData = null;\n }\n });\n this.cache.clear();\n }\n getRenderer(templateId) {\n const renderer = this.renderers.get(templateId);\n if (!renderer) {\n throw new Error(`No renderer found for ${templateId}`);\n }\n return renderer;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { getOrDefault } from '../../../common/objects.js';\nimport { dispose, Disposable, toDisposable, DisposableStore } from '../../../common/lifecycle.js';\nimport { Gesture, EventType as TouchEventType } from '../../touch.js';\nimport { Event, Emitter } from '../../../common/event.js';\nimport { domEvent } from '../../event.js';\nimport { SmoothScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { Scrollable } from '../../../common/scrollable.js';\nimport { RangeMap, shift } from './rangeMap.js';\nimport { RowCache } from './rowCache.js';\nimport { memoize } from '../../../common/decorators.js';\nimport { Range } from '../../../common/range.js';\nimport { equals, distinct } from '../../../common/arrays.js';\nimport { DataTransfers, StaticDND } from '../../dnd.js';\nimport { disposableTimeout, Delayer } from '../../../common/async.js';\nimport { isFirefox } from '../../browser.js';\nimport { $, animate, getContentHeight, getContentWidth, getTopLeftOffset, scheduleAtNextAnimationFrame } from '../../dom.js';\nconst DefaultOptions = {\n useShadows: true,\n verticalScrollMode: 1 /* Auto */,\n setRowLineHeight: true,\n setRowHeight: true,\n supportDynamicHeights: false,\n dnd: {\n getDragElements(e) { return [e]; },\n getDragURI() { return null; },\n onDragStart() { },\n onDragOver() { return false; },\n drop() { }\n },\n horizontalScrolling: false,\n transformOptimization: true,\n alwaysConsumeMouseWheel: true,\n};\nexport class ElementsDragAndDropData {\n constructor(elements) {\n this.elements = elements;\n }\n update() { }\n getData() {\n return this.elements;\n }\n}\nexport class ExternalElementsDragAndDropData {\n constructor(elements) {\n this.elements = elements;\n }\n update() { }\n getData() {\n return this.elements;\n }\n}\nexport class NativeDragAndDropData {\n constructor() {\n this.types = [];\n this.files = [];\n }\n update(dataTransfer) {\n if (dataTransfer.types) {\n this.types.splice(0, this.types.length, ...dataTransfer.types);\n }\n if (dataTransfer.files) {\n this.files.splice(0, this.files.length);\n for (let i = 0; i < dataTransfer.files.length; i++) {\n const file = dataTransfer.files.item(i);\n if (file && (file.size || file.type)) {\n this.files.push(file);\n }\n }\n }\n }\n getData() {\n return {\n types: this.types,\n files: this.files\n };\n }\n}\nfunction equalsDragFeedback(f1, f2) {\n if (Array.isArray(f1) && Array.isArray(f2)) {\n return equals(f1, f2);\n }\n return f1 === f2;\n}\nclass ListViewAccessibilityProvider {\n constructor(accessibilityProvider) {\n if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.getSetSize) {\n this.getSetSize = accessibilityProvider.getSetSize.bind(accessibilityProvider);\n }\n else {\n this.getSetSize = (e, i, l) => l;\n }\n if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.getPosInSet) {\n this.getPosInSet = accessibilityProvider.getPosInSet.bind(accessibilityProvider);\n }\n else {\n this.getPosInSet = (e, i) => i + 1;\n }\n if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.getRole) {\n this.getRole = accessibilityProvider.getRole.bind(accessibilityProvider);\n }\n else {\n this.getRole = _ => 'listitem';\n }\n if (accessibilityProvider === null || accessibilityProvider === void 0 ? void 0 : accessibilityProvider.isChecked) {\n this.isChecked = accessibilityProvider.isChecked.bind(accessibilityProvider);\n }\n else {\n this.isChecked = _ => undefined;\n }\n }\n}\nexport class ListView {\n constructor(container, virtualDelegate, renderers, options = DefaultOptions) {\n this.virtualDelegate = virtualDelegate;\n this.domId = `list_id_${++ListView.InstanceCount}`;\n this.renderers = new Map();\n this.renderWidth = 0;\n this._scrollHeight = 0;\n this.scrollableElementUpdateDisposable = null;\n this.scrollableElementWidthDelayer = new Delayer(50);\n this.splicing = false;\n this.dragOverAnimationStopDisposable = Disposable.None;\n this.dragOverMouseY = 0;\n this.canDrop = false;\n this.currentDragFeedbackDisposable = Disposable.None;\n this.onDragLeaveTimeout = Disposable.None;\n this.disposables = new DisposableStore();\n this._onDidChangeContentHeight = new Emitter();\n this._horizontalScrolling = false;\n if (options.horizontalScrolling && options.supportDynamicHeights) {\n throw new Error('Horizontal scrolling and dynamic heights not supported simultaneously');\n }\n this.items = [];\n this.itemId = 0;\n this.rangeMap = new RangeMap();\n for (const renderer of renderers) {\n this.renderers.set(renderer.templateId, renderer);\n }\n this.cache = this.disposables.add(new RowCache(this.renderers));\n this.lastRenderTop = 0;\n this.lastRenderHeight = 0;\n this.domNode = document.createElement('div');\n this.domNode.className = 'monaco-list';\n this.domNode.classList.add(this.domId);\n this.domNode.tabIndex = 0;\n this.domNode.classList.toggle('mouse-support', typeof options.mouseSupport === 'boolean' ? options.mouseSupport : true);\n this._horizontalScrolling = getOrDefault(options, o => o.horizontalScrolling, DefaultOptions.horizontalScrolling);\n this.domNode.classList.toggle('horizontal-scrolling', this._horizontalScrolling);\n this.additionalScrollHeight = typeof options.additionalScrollHeight === 'undefined' ? 0 : options.additionalScrollHeight;\n this.accessibilityProvider = new ListViewAccessibilityProvider(options.accessibilityProvider);\n this.rowsContainer = document.createElement('div');\n this.rowsContainer.className = 'monaco-list-rows';\n const transformOptimization = getOrDefault(options, o => o.transformOptimization, DefaultOptions.transformOptimization);\n if (transformOptimization) {\n this.rowsContainer.style.transform = 'translate3d(0px, 0px, 0px)';\n }\n this.disposables.add(Gesture.addTarget(this.rowsContainer));\n this.scrollable = new Scrollable(getOrDefault(options, o => o.smoothScrolling, false) ? 125 : 0, cb => scheduleAtNextAnimationFrame(cb));\n this.scrollableElement = this.disposables.add(new SmoothScrollableElement(this.rowsContainer, {\n alwaysConsumeMouseWheel: getOrDefault(options, o => o.alwaysConsumeMouseWheel, DefaultOptions.alwaysConsumeMouseWheel),\n horizontal: 1 /* Auto */,\n vertical: getOrDefault(options, o => o.verticalScrollMode, DefaultOptions.verticalScrollMode),\n useShadows: getOrDefault(options, o => o.useShadows, DefaultOptions.useShadows),\n }, this.scrollable));\n this.domNode.appendChild(this.scrollableElement.getDomNode());\n container.appendChild(this.domNode);\n this.scrollableElement.onScroll(this.onScroll, this, this.disposables);\n domEvent(this.rowsContainer, TouchEventType.Change)(e => this.onTouchChange(e), this, this.disposables);\n // Prevent the monaco-scrollable-element from scrolling\n // https://github.com/microsoft/vscode/issues/44181\n domEvent(this.scrollableElement.getDomNode(), 'scroll')(e => e.target.scrollTop = 0, null, this.disposables);\n Event.map(domEvent(this.domNode, 'dragover'), e => this.toDragEvent(e))(this.onDragOver, this, this.disposables);\n Event.map(domEvent(this.domNode, 'drop'), e => this.toDragEvent(e))(this.onDrop, this, this.disposables);\n domEvent(this.domNode, 'dragleave')(this.onDragLeave, this, this.disposables);\n domEvent(window, 'dragend')(this.onDragEnd, this, this.disposables);\n this.setRowLineHeight = getOrDefault(options, o => o.setRowLineHeight, DefaultOptions.setRowLineHeight);\n this.setRowHeight = getOrDefault(options, o => o.setRowHeight, DefaultOptions.setRowHeight);\n this.supportDynamicHeights = getOrDefault(options, o => o.supportDynamicHeights, DefaultOptions.supportDynamicHeights);\n this.dnd = getOrDefault(options, o => o.dnd, DefaultOptions.dnd);\n this.layout();\n }\n get contentHeight() { return this.rangeMap.size; }\n get horizontalScrolling() { return this._horizontalScrolling; }\n set horizontalScrolling(value) {\n if (value === this._horizontalScrolling) {\n return;\n }\n if (value && this.supportDynamicHeights) {\n throw new Error('Horizontal scrolling and dynamic heights not supported simultaneously');\n }\n this._horizontalScrolling = value;\n this.domNode.classList.toggle('horizontal-scrolling', this._horizontalScrolling);\n if (this._horizontalScrolling) {\n for (const item of this.items) {\n this.measureItemWidth(item);\n }\n this.updateScrollWidth();\n this.scrollableElement.setScrollDimensions({ width: getContentWidth(this.domNode) });\n this.rowsContainer.style.width = `${Math.max(this.scrollWidth || 0, this.renderWidth)}px`;\n }\n else {\n this.scrollableElementWidthDelayer.cancel();\n this.scrollableElement.setScrollDimensions({ width: this.renderWidth, scrollWidth: this.renderWidth });\n this.rowsContainer.style.width = '';\n }\n }\n updateOptions(options) {\n if (options.additionalScrollHeight !== undefined) {\n this.additionalScrollHeight = options.additionalScrollHeight;\n this.scrollableElement.setScrollDimensions({ scrollHeight: this.scrollHeight });\n }\n if (options.smoothScrolling !== undefined) {\n this.scrollable.setSmoothScrollDuration(options.smoothScrolling ? 125 : 0);\n }\n if (options.horizontalScrolling !== undefined) {\n this.horizontalScrolling = options.horizontalScrolling;\n }\n }\n splice(start, deleteCount, elements = []) {\n if (this.splicing) {\n throw new Error('Can\\'t run recursive splices.');\n }\n this.splicing = true;\n try {\n return this._splice(start, deleteCount, elements);\n }\n finally {\n this.splicing = false;\n this._onDidChangeContentHeight.fire(this.contentHeight);\n }\n }\n _splice(start, deleteCount, elements = []) {\n const previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n const deleteRange = { start, end: start + deleteCount };\n const removeRange = Range.intersect(previousRenderRange, deleteRange);\n // try to reuse rows, avoid removing them from DOM\n const rowsToDispose = new Map();\n for (let i = removeRange.start; i < removeRange.end; i++) {\n const item = this.items[i];\n item.dragStartDisposable.dispose();\n if (item.row) {\n let rows = rowsToDispose.get(item.templateId);\n if (!rows) {\n rows = [];\n rowsToDispose.set(item.templateId, rows);\n }\n const renderer = this.renderers.get(item.templateId);\n if (renderer && renderer.disposeElement) {\n renderer.disposeElement(item.element, i, item.row.templateData, item.size);\n }\n rows.push(item.row);\n }\n item.row = null;\n }\n const previousRestRange = { start: start + deleteCount, end: this.items.length };\n const previousRenderedRestRange = Range.intersect(previousRestRange, previousRenderRange);\n const previousUnrenderedRestRanges = Range.relativeComplement(previousRestRange, previousRenderRange);\n const inserted = elements.map(element => ({\n id: String(this.itemId++),\n element,\n templateId: this.virtualDelegate.getTemplateId(element),\n size: this.virtualDelegate.getHeight(element),\n width: undefined,\n hasDynamicHeight: !!this.virtualDelegate.hasDynamicHeight && this.virtualDelegate.hasDynamicHeight(element),\n lastDynamicHeightWidth: undefined,\n row: null,\n uri: undefined,\n dropTarget: false,\n dragStartDisposable: Disposable.None\n }));\n let deleted;\n // TODO@joao: improve this optimization to catch even more cases\n if (start === 0 && deleteCount >= this.items.length) {\n this.rangeMap = new RangeMap();\n this.rangeMap.splice(0, 0, inserted);\n deleted = this.items;\n this.items = inserted;\n }\n else {\n this.rangeMap.splice(start, deleteCount, inserted);\n deleted = this.items.splice(start, deleteCount, ...inserted);\n }\n const delta = elements.length - deleteCount;\n const renderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n const renderedRestRange = shift(previousRenderedRestRange, delta);\n const updateRange = Range.intersect(renderRange, renderedRestRange);\n for (let i = updateRange.start; i < updateRange.end; i++) {\n this.updateItemInDOM(this.items[i], i);\n }\n const removeRanges = Range.relativeComplement(renderedRestRange, renderRange);\n for (const range of removeRanges) {\n for (let i = range.start; i < range.end; i++) {\n this.removeItemFromDOM(i);\n }\n }\n const unrenderedRestRanges = previousUnrenderedRestRanges.map(r => shift(r, delta));\n const elementsRange = { start, end: start + elements.length };\n const insertRanges = [elementsRange, ...unrenderedRestRanges].map(r => Range.intersect(renderRange, r));\n const beforeElement = this.getNextToLastElement(insertRanges);\n for (const range of insertRanges) {\n for (let i = range.start; i < range.end; i++) {\n const item = this.items[i];\n const rows = rowsToDispose.get(item.templateId);\n const row = rows === null || rows === void 0 ? void 0 : rows.pop();\n this.insertItemInDOM(i, beforeElement, row);\n }\n }\n for (const rows of rowsToDispose.values()) {\n for (const row of rows) {\n this.cache.release(row);\n }\n }\n this.eventuallyUpdateScrollDimensions();\n if (this.supportDynamicHeights) {\n this._rerender(this.scrollTop, this.renderHeight);\n }\n return deleted.map(i => i.element);\n }\n eventuallyUpdateScrollDimensions() {\n this._scrollHeight = this.contentHeight;\n this.rowsContainer.style.height = `${this._scrollHeight}px`;\n if (!this.scrollableElementUpdateDisposable) {\n this.scrollableElementUpdateDisposable = scheduleAtNextAnimationFrame(() => {\n this.scrollableElement.setScrollDimensions({ scrollHeight: this.scrollHeight });\n this.updateScrollWidth();\n this.scrollableElementUpdateDisposable = null;\n });\n }\n }\n eventuallyUpdateScrollWidth() {\n if (!this.horizontalScrolling) {\n this.scrollableElementWidthDelayer.cancel();\n return;\n }\n this.scrollableElementWidthDelayer.trigger(() => this.updateScrollWidth());\n }\n updateScrollWidth() {\n if (!this.horizontalScrolling) {\n return;\n }\n let scrollWidth = 0;\n for (const item of this.items) {\n if (typeof item.width !== 'undefined') {\n scrollWidth = Math.max(scrollWidth, item.width);\n }\n }\n this.scrollWidth = scrollWidth;\n this.scrollableElement.setScrollDimensions({ scrollWidth: scrollWidth === 0 ? 0 : (scrollWidth + 10) });\n }\n rerender() {\n if (!this.supportDynamicHeights) {\n return;\n }\n for (const item of this.items) {\n item.lastDynamicHeightWidth = undefined;\n }\n this._rerender(this.lastRenderTop, this.lastRenderHeight);\n }\n get length() {\n return this.items.length;\n }\n get renderHeight() {\n const scrollDimensions = this.scrollableElement.getScrollDimensions();\n return scrollDimensions.height;\n }\n element(index) {\n return this.items[index].element;\n }\n domElement(index) {\n const row = this.items[index].row;\n return row && row.domNode;\n }\n elementHeight(index) {\n return this.items[index].size;\n }\n elementTop(index) {\n return this.rangeMap.positionAt(index);\n }\n indexAt(position) {\n return this.rangeMap.indexAt(position);\n }\n indexAfter(position) {\n return this.rangeMap.indexAfter(position);\n }\n layout(height, width) {\n let scrollDimensions = {\n height: typeof height === 'number' ? height : getContentHeight(this.domNode)\n };\n if (this.scrollableElementUpdateDisposable) {\n this.scrollableElementUpdateDisposable.dispose();\n this.scrollableElementUpdateDisposable = null;\n scrollDimensions.scrollHeight = this.scrollHeight;\n }\n this.scrollableElement.setScrollDimensions(scrollDimensions);\n if (typeof width !== 'undefined') {\n this.renderWidth = width;\n if (this.supportDynamicHeights) {\n this._rerender(this.scrollTop, this.renderHeight);\n }\n }\n if (this.horizontalScrolling) {\n this.scrollableElement.setScrollDimensions({\n width: typeof width === 'number' ? width : getContentWidth(this.domNode)\n });\n }\n }\n // Render\n render(previousRenderRange, renderTop, renderHeight, renderLeft, scrollWidth, updateItemsInDOM = false) {\n const renderRange = this.getRenderRange(renderTop, renderHeight);\n const rangesToInsert = Range.relativeComplement(renderRange, previousRenderRange);\n const rangesToRemove = Range.relativeComplement(previousRenderRange, renderRange);\n const beforeElement = this.getNextToLastElement(rangesToInsert);\n if (updateItemsInDOM) {\n const rangesToUpdate = Range.intersect(previousRenderRange, renderRange);\n for (let i = rangesToUpdate.start; i < rangesToUpdate.end; i++) {\n this.updateItemInDOM(this.items[i], i);\n }\n }\n for (const range of rangesToInsert) {\n for (let i = range.start; i < range.end; i++) {\n this.insertItemInDOM(i, beforeElement);\n }\n }\n for (const range of rangesToRemove) {\n for (let i = range.start; i < range.end; i++) {\n this.removeItemFromDOM(i);\n }\n }\n if (renderLeft !== undefined) {\n this.rowsContainer.style.left = `-${renderLeft}px`;\n }\n this.rowsContainer.style.top = `-${renderTop}px`;\n if (this.horizontalScrolling && scrollWidth !== undefined) {\n this.rowsContainer.style.width = `${Math.max(scrollWidth, this.renderWidth)}px`;\n }\n this.lastRenderTop = renderTop;\n this.lastRenderHeight = renderHeight;\n }\n // DOM operations\n insertItemInDOM(index, beforeElement, row) {\n const item = this.items[index];\n if (!item.row) {\n item.row = row !== null && row !== void 0 ? row : this.cache.alloc(item.templateId);\n }\n const role = this.accessibilityProvider.getRole(item.element) || 'listitem';\n item.row.domNode.setAttribute('role', role);\n const checked = this.accessibilityProvider.isChecked(item.element);\n if (typeof checked !== 'undefined') {\n item.row.domNode.setAttribute('aria-checked', String(!!checked));\n }\n if (!item.row.domNode.parentElement) {\n if (beforeElement) {\n this.rowsContainer.insertBefore(item.row.domNode, beforeElement);\n }\n else {\n this.rowsContainer.appendChild(item.row.domNode);\n }\n }\n this.updateItemInDOM(item, index);\n const renderer = this.renderers.get(item.templateId);\n if (!renderer) {\n throw new Error(`No renderer found for template id ${item.templateId}`);\n }\n if (renderer) {\n renderer.renderElement(item.element, index, item.row.templateData, item.size);\n }\n const uri = this.dnd.getDragURI(item.element);\n item.dragStartDisposable.dispose();\n item.row.domNode.draggable = !!uri;\n if (uri) {\n const onDragStart = domEvent(item.row.domNode, 'dragstart');\n item.dragStartDisposable = onDragStart(event => this.onDragStart(item.element, uri, event));\n }\n if (this.horizontalScrolling) {\n this.measureItemWidth(item);\n this.eventuallyUpdateScrollWidth();\n }\n }\n measureItemWidth(item) {\n if (!item.row || !item.row.domNode) {\n return;\n }\n item.row.domNode.style.width = isFirefox ? '-moz-fit-content' : 'fit-content';\n item.width = getContentWidth(item.row.domNode);\n const style = window.getComputedStyle(item.row.domNode);\n if (style.paddingLeft) {\n item.width += parseFloat(style.paddingLeft);\n }\n if (style.paddingRight) {\n item.width += parseFloat(style.paddingRight);\n }\n item.row.domNode.style.width = '';\n }\n updateItemInDOM(item, index) {\n item.row.domNode.style.top = `${this.elementTop(index)}px`;\n if (this.setRowHeight) {\n item.row.domNode.style.height = `${item.size}px`;\n }\n if (this.setRowLineHeight) {\n item.row.domNode.style.lineHeight = `${item.size}px`;\n }\n item.row.domNode.setAttribute('data-index', `${index}`);\n item.row.domNode.setAttribute('data-last-element', index === this.length - 1 ? 'true' : 'false');\n item.row.domNode.setAttribute('aria-setsize', String(this.accessibilityProvider.getSetSize(item.element, index, this.length)));\n item.row.domNode.setAttribute('aria-posinset', String(this.accessibilityProvider.getPosInSet(item.element, index)));\n item.row.domNode.setAttribute('id', this.getElementDomId(index));\n item.row.domNode.classList.toggle('drop-target', item.dropTarget);\n }\n removeItemFromDOM(index) {\n const item = this.items[index];\n item.dragStartDisposable.dispose();\n if (item.row) {\n const renderer = this.renderers.get(item.templateId);\n if (renderer && renderer.disposeElement) {\n renderer.disposeElement(item.element, index, item.row.templateData, item.size);\n }\n this.cache.release(item.row);\n item.row = null;\n }\n if (this.horizontalScrolling) {\n this.eventuallyUpdateScrollWidth();\n }\n }\n getScrollTop() {\n const scrollPosition = this.scrollableElement.getScrollPosition();\n return scrollPosition.scrollTop;\n }\n setScrollTop(scrollTop, reuseAnimation) {\n if (this.scrollableElementUpdateDisposable) {\n this.scrollableElementUpdateDisposable.dispose();\n this.scrollableElementUpdateDisposable = null;\n this.scrollableElement.setScrollDimensions({ scrollHeight: this.scrollHeight });\n }\n this.scrollableElement.setScrollPosition({ scrollTop, reuseAnimation });\n }\n get scrollTop() {\n return this.getScrollTop();\n }\n set scrollTop(scrollTop) {\n this.setScrollTop(scrollTop);\n }\n get scrollHeight() {\n return this._scrollHeight + (this.horizontalScrolling ? 10 : 0) + this.additionalScrollHeight;\n }\n // Events\n get onMouseClick() { return Event.map(domEvent(this.domNode, 'click'), e => this.toMouseEvent(e)); }\n get onMouseDblClick() { return Event.map(domEvent(this.domNode, 'dblclick'), e => this.toMouseEvent(e)); }\n get onMouseMiddleClick() { return Event.filter(Event.map(domEvent(this.domNode, 'auxclick'), e => this.toMouseEvent(e)), e => e.browserEvent.button === 1); }\n get onMouseDown() { return Event.map(domEvent(this.domNode, 'mousedown'), e => this.toMouseEvent(e)); }\n get onContextMenu() { return Event.map(domEvent(this.domNode, 'contextmenu'), e => this.toMouseEvent(e)); }\n get onTouchStart() { return Event.map(domEvent(this.domNode, 'touchstart'), e => this.toTouchEvent(e)); }\n get onTap() { return Event.map(domEvent(this.rowsContainer, TouchEventType.Tap), e => this.toGestureEvent(e)); }\n toMouseEvent(browserEvent) {\n const index = this.getItemIndexFromEventTarget(browserEvent.target || null);\n const item = typeof index === 'undefined' ? undefined : this.items[index];\n const element = item && item.element;\n return { browserEvent, index, element };\n }\n toTouchEvent(browserEvent) {\n const index = this.getItemIndexFromEventTarget(browserEvent.target || null);\n const item = typeof index === 'undefined' ? undefined : this.items[index];\n const element = item && item.element;\n return { browserEvent, index, element };\n }\n toGestureEvent(browserEvent) {\n const index = this.getItemIndexFromEventTarget(browserEvent.initialTarget || null);\n const item = typeof index === 'undefined' ? undefined : this.items[index];\n const element = item && item.element;\n return { browserEvent, index, element };\n }\n toDragEvent(browserEvent) {\n const index = this.getItemIndexFromEventTarget(browserEvent.target || null);\n const item = typeof index === 'undefined' ? undefined : this.items[index];\n const element = item && item.element;\n return { browserEvent, index, element };\n }\n onScroll(e) {\n try {\n const previousRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n this.render(previousRenderRange, e.scrollTop, e.height, e.scrollLeft, e.scrollWidth);\n if (this.supportDynamicHeights) {\n this._rerender(e.scrollTop, e.height, e.inSmoothScrolling);\n }\n }\n catch (err) {\n console.error('Got bad scroll event:', e);\n throw err;\n }\n }\n onTouchChange(event) {\n event.preventDefault();\n event.stopPropagation();\n this.scrollTop -= event.translationY;\n }\n // DND\n onDragStart(element, uri, event) {\n if (!event.dataTransfer) {\n return;\n }\n const elements = this.dnd.getDragElements(element);\n event.dataTransfer.effectAllowed = 'copyMove';\n event.dataTransfer.setData(DataTransfers.RESOURCES, JSON.stringify([uri]));\n if (event.dataTransfer.setDragImage) {\n let label;\n if (this.dnd.getDragLabel) {\n label = this.dnd.getDragLabel(elements, event);\n }\n if (typeof label === 'undefined') {\n label = String(elements.length);\n }\n const dragImage = $('.monaco-drag-image');\n dragImage.textContent = label;\n document.body.appendChild(dragImage);\n event.dataTransfer.setDragImage(dragImage, -10, -10);\n setTimeout(() => document.body.removeChild(dragImage), 0);\n }\n this.currentDragData = new ElementsDragAndDropData(elements);\n StaticDND.CurrentDragAndDropData = new ExternalElementsDragAndDropData(elements);\n if (this.dnd.onDragStart) {\n this.dnd.onDragStart(this.currentDragData, event);\n }\n }\n onDragOver(event) {\n event.browserEvent.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)\n this.onDragLeaveTimeout.dispose();\n if (StaticDND.CurrentDragAndDropData && StaticDND.CurrentDragAndDropData.getData() === 'vscode-ui') {\n return false;\n }\n this.setupDragAndDropScrollTopAnimation(event.browserEvent);\n if (!event.browserEvent.dataTransfer) {\n return false;\n }\n // Drag over from outside\n if (!this.currentDragData) {\n if (StaticDND.CurrentDragAndDropData) {\n // Drag over from another list\n this.currentDragData = StaticDND.CurrentDragAndDropData;\n }\n else {\n // Drag over from the desktop\n if (!event.browserEvent.dataTransfer.types) {\n return false;\n }\n this.currentDragData = new NativeDragAndDropData();\n }\n }\n const result = this.dnd.onDragOver(this.currentDragData, event.element, event.index, event.browserEvent);\n this.canDrop = typeof result === 'boolean' ? result : result.accept;\n if (!this.canDrop) {\n this.currentDragFeedback = undefined;\n this.currentDragFeedbackDisposable.dispose();\n return false;\n }\n event.browserEvent.dataTransfer.dropEffect = (typeof result !== 'boolean' && result.effect === 0 /* Copy */) ? 'copy' : 'move';\n let feedback;\n if (typeof result !== 'boolean' && result.feedback) {\n feedback = result.feedback;\n }\n else {\n if (typeof event.index === 'undefined') {\n feedback = [-1];\n }\n else {\n feedback = [event.index];\n }\n }\n // sanitize feedback list\n feedback = distinct(feedback).filter(i => i >= -1 && i < this.length).sort((a, b) => a - b);\n feedback = feedback[0] === -1 ? [-1] : feedback;\n if (equalsDragFeedback(this.currentDragFeedback, feedback)) {\n return true;\n }\n this.currentDragFeedback = feedback;\n this.currentDragFeedbackDisposable.dispose();\n if (feedback[0] === -1) { // entire list feedback\n this.domNode.classList.add('drop-target');\n this.rowsContainer.classList.add('drop-target');\n this.currentDragFeedbackDisposable = toDisposable(() => {\n this.domNode.classList.remove('drop-target');\n this.rowsContainer.classList.remove('drop-target');\n });\n }\n else {\n for (const index of feedback) {\n const item = this.items[index];\n item.dropTarget = true;\n if (item.row) {\n item.row.domNode.classList.add('drop-target');\n }\n }\n this.currentDragFeedbackDisposable = toDisposable(() => {\n for (const index of feedback) {\n const item = this.items[index];\n item.dropTarget = false;\n if (item.row) {\n item.row.domNode.classList.remove('drop-target');\n }\n }\n });\n }\n return true;\n }\n onDragLeave() {\n this.onDragLeaveTimeout.dispose();\n this.onDragLeaveTimeout = disposableTimeout(() => this.clearDragOverFeedback(), 100);\n }\n onDrop(event) {\n if (!this.canDrop) {\n return;\n }\n const dragData = this.currentDragData;\n this.teardownDragAndDropScrollTopAnimation();\n this.clearDragOverFeedback();\n this.currentDragData = undefined;\n StaticDND.CurrentDragAndDropData = undefined;\n if (!dragData || !event.browserEvent.dataTransfer) {\n return;\n }\n event.browserEvent.preventDefault();\n dragData.update(event.browserEvent.dataTransfer);\n this.dnd.drop(dragData, event.element, event.index, event.browserEvent);\n }\n onDragEnd(event) {\n this.canDrop = false;\n this.teardownDragAndDropScrollTopAnimation();\n this.clearDragOverFeedback();\n this.currentDragData = undefined;\n StaticDND.CurrentDragAndDropData = undefined;\n if (this.dnd.onDragEnd) {\n this.dnd.onDragEnd(event);\n }\n }\n clearDragOverFeedback() {\n this.currentDragFeedback = undefined;\n this.currentDragFeedbackDisposable.dispose();\n this.currentDragFeedbackDisposable = Disposable.None;\n }\n // DND scroll top animation\n setupDragAndDropScrollTopAnimation(event) {\n if (!this.dragOverAnimationDisposable) {\n const viewTop = getTopLeftOffset(this.domNode).top;\n this.dragOverAnimationDisposable = animate(this.animateDragAndDropScrollTop.bind(this, viewTop));\n }\n this.dragOverAnimationStopDisposable.dispose();\n this.dragOverAnimationStopDisposable = disposableTimeout(() => {\n if (this.dragOverAnimationDisposable) {\n this.dragOverAnimationDisposable.dispose();\n this.dragOverAnimationDisposable = undefined;\n }\n }, 1000);\n this.dragOverMouseY = event.pageY;\n }\n animateDragAndDropScrollTop(viewTop) {\n if (this.dragOverMouseY === undefined) {\n return;\n }\n const diff = this.dragOverMouseY - viewTop;\n const upperLimit = this.renderHeight - 35;\n if (diff < 35) {\n this.scrollTop += Math.max(-14, Math.floor(0.3 * (diff - 35)));\n }\n else if (diff > upperLimit) {\n this.scrollTop += Math.min(14, Math.floor(0.3 * (diff - upperLimit)));\n }\n }\n teardownDragAndDropScrollTopAnimation() {\n this.dragOverAnimationStopDisposable.dispose();\n if (this.dragOverAnimationDisposable) {\n this.dragOverAnimationDisposable.dispose();\n this.dragOverAnimationDisposable = undefined;\n }\n }\n // Util\n getItemIndexFromEventTarget(target) {\n const scrollableElement = this.scrollableElement.getDomNode();\n let element = target;\n while (element instanceof HTMLElement && element !== this.rowsContainer && scrollableElement.contains(element)) {\n const rawIndex = element.getAttribute('data-index');\n if (rawIndex) {\n const index = Number(rawIndex);\n if (!isNaN(index)) {\n return index;\n }\n }\n element = element.parentElement;\n }\n return undefined;\n }\n getRenderRange(renderTop, renderHeight) {\n return {\n start: this.rangeMap.indexAt(renderTop),\n end: this.rangeMap.indexAfter(renderTop + renderHeight - 1)\n };\n }\n /**\n * Given a stable rendered state, checks every rendered element whether it needs\n * to be probed for dynamic height. Adjusts scroll height and top if necessary.\n */\n _rerender(renderTop, renderHeight, inSmoothScrolling) {\n const previousRenderRange = this.getRenderRange(renderTop, renderHeight);\n // Let's remember the second element's position, this helps in scrolling up\n // and preserving a linear upwards scroll movement\n let anchorElementIndex;\n let anchorElementTopDelta;\n if (renderTop === this.elementTop(previousRenderRange.start)) {\n anchorElementIndex = previousRenderRange.start;\n anchorElementTopDelta = 0;\n }\n else if (previousRenderRange.end - previousRenderRange.start > 1) {\n anchorElementIndex = previousRenderRange.start + 1;\n anchorElementTopDelta = this.elementTop(anchorElementIndex) - renderTop;\n }\n let heightDiff = 0;\n while (true) {\n const renderRange = this.getRenderRange(renderTop, renderHeight);\n let didChange = false;\n for (let i = renderRange.start; i < renderRange.end; i++) {\n const diff = this.probeDynamicHeight(i);\n if (diff !== 0) {\n this.rangeMap.splice(i, 1, [this.items[i]]);\n }\n heightDiff += diff;\n didChange = didChange || diff !== 0;\n }\n if (!didChange) {\n if (heightDiff !== 0) {\n this.eventuallyUpdateScrollDimensions();\n }\n const unrenderRanges = Range.relativeComplement(previousRenderRange, renderRange);\n for (const range of unrenderRanges) {\n for (let i = range.start; i < range.end; i++) {\n if (this.items[i].row) {\n this.removeItemFromDOM(i);\n }\n }\n }\n const renderRanges = Range.relativeComplement(renderRange, previousRenderRange);\n for (const range of renderRanges) {\n for (let i = range.start; i < range.end; i++) {\n const afterIndex = i + 1;\n const beforeRow = afterIndex < this.items.length ? this.items[afterIndex].row : null;\n const beforeElement = beforeRow ? beforeRow.domNode : null;\n this.insertItemInDOM(i, beforeElement);\n }\n }\n for (let i = renderRange.start; i < renderRange.end; i++) {\n if (this.items[i].row) {\n this.updateItemInDOM(this.items[i], i);\n }\n }\n if (typeof anchorElementIndex === 'number') {\n // To compute a destination scroll top, we need to take into account the current smooth scrolling\n // animation, and then reuse it with a new target (to avoid prolonging the scroll)\n // See https://github.com/microsoft/vscode/issues/104144\n // See https://github.com/microsoft/vscode/pull/104284\n // See https://github.com/microsoft/vscode/issues/107704\n const deltaScrollTop = this.scrollable.getFutureScrollPosition().scrollTop - renderTop;\n const newScrollTop = this.elementTop(anchorElementIndex) - anchorElementTopDelta + deltaScrollTop;\n this.setScrollTop(newScrollTop, inSmoothScrolling);\n }\n this._onDidChangeContentHeight.fire(this.contentHeight);\n return;\n }\n }\n }\n probeDynamicHeight(index) {\n const item = this.items[index];\n if (!item.hasDynamicHeight || item.lastDynamicHeightWidth === this.renderWidth) {\n return 0;\n }\n if (!!this.virtualDelegate.hasDynamicHeight && !this.virtualDelegate.hasDynamicHeight(item.element)) {\n return 0;\n }\n const size = item.size;\n if (!this.setRowHeight && item.row) {\n let newSize = item.row.domNode.offsetHeight;\n item.size = newSize;\n item.lastDynamicHeightWidth = this.renderWidth;\n return newSize - size;\n }\n const row = this.cache.alloc(item.templateId);\n row.domNode.style.height = '';\n this.rowsContainer.appendChild(row.domNode);\n const renderer = this.renderers.get(item.templateId);\n if (renderer) {\n renderer.renderElement(item.element, index, row.templateData, undefined);\n if (renderer.disposeElement) {\n renderer.disposeElement(item.element, index, row.templateData, undefined);\n }\n }\n item.size = row.domNode.offsetHeight;\n if (this.virtualDelegate.setDynamicHeight) {\n this.virtualDelegate.setDynamicHeight(item.element, item.size);\n }\n item.lastDynamicHeightWidth = this.renderWidth;\n this.rowsContainer.removeChild(row.domNode);\n this.cache.release(row);\n return item.size - size;\n }\n getNextToLastElement(ranges) {\n const lastRange = ranges[ranges.length - 1];\n if (!lastRange) {\n return null;\n }\n const nextToLastItem = this.items[lastRange.end];\n if (!nextToLastItem) {\n return null;\n }\n if (!nextToLastItem.row) {\n return null;\n }\n return nextToLastItem.row.domNode;\n }\n getElementDomId(index) {\n return `${this.domId}_${index}`;\n }\n // Dispose\n dispose() {\n if (this.items) {\n for (const item of this.items) {\n if (item.row) {\n const renderer = this.renderers.get(item.row.templateId);\n if (renderer) {\n if (renderer.disposeElement) {\n renderer.disposeElement(item.element, -1, item.row.templateData, undefined);\n }\n renderer.disposeTemplate(item.row.templateData);\n }\n }\n }\n this.items = [];\n }\n if (this.domNode && this.domNode.parentNode) {\n this.domNode.parentNode.removeChild(this.domNode);\n }\n dispose(this.disposables);\n }\n}\nListView.InstanceCount = 0;\n__decorate([\n memoize\n], ListView.prototype, \"onMouseClick\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onMouseDblClick\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onMouseMiddleClick\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onMouseDown\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onContextMenu\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onTouchStart\", null);\n__decorate([\n memoize\n], ListView.prototype, \"onTap\", null);\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 *--------------------------------------------------------------------------------------------*/\nexport class ListError extends Error {\n constructor(user, message) {\n super(`ListError [${user}] ${message}`);\n }\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 *--------------------------------------------------------------------------------------------*/\nexport class CombinedSpliceable {\n constructor(spliceables) {\n this.spliceables = spliceables;\n }\n splice(start, deleteCount, elements) {\n this.spliceables.forEach(s => s.splice(start, deleteCount, elements));\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport './list.css';\nimport { dispose, DisposableStore } from '../../../common/lifecycle.js';\nimport { isNumber } from '../../../common/types.js';\nimport { range, binarySearch, firstOrDefault } from '../../../common/arrays.js';\nimport { memoize } from '../../../common/decorators.js';\nimport * as platform from '../../../common/platform.js';\nimport { Gesture } from '../../touch.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { Event, Emitter, EventBufferer } from '../../../common/event.js';\nimport { domEvent, stopEvent } from '../../event.js';\nimport { ListError } from './list.js';\nimport { ListView } from './listView.js';\nimport { Color } from '../../../common/color.js';\nimport { mixin } from '../../../common/objects.js';\nimport { CombinedSpliceable } from './splice.js';\nimport { clamp } from '../../../common/numbers.js';\nimport { matchesPrefix } from '../../../common/filters.js';\nimport { alert } from '../aria/aria.js';\nimport { createStyleSheet } from '../../dom.js';\nimport { timeout } from '../../../common/async.js';\nclass TraitRenderer {\n constructor(trait) {\n this.trait = trait;\n this.renderedElements = [];\n }\n get templateId() {\n return `template:${this.trait.trait}`;\n }\n renderTemplate(container) {\n return container;\n }\n renderElement(element, index, templateData) {\n const renderedElementIndex = this.renderedElements.findIndex(el => el.templateData === templateData);\n if (renderedElementIndex >= 0) {\n const rendered = this.renderedElements[renderedElementIndex];\n this.trait.unrender(templateData);\n rendered.index = index;\n }\n else {\n const rendered = { index, templateData };\n this.renderedElements.push(rendered);\n }\n this.trait.renderIndex(index, templateData);\n }\n splice(start, deleteCount, insertCount) {\n const rendered = [];\n for (const renderedElement of this.renderedElements) {\n if (renderedElement.index < start) {\n rendered.push(renderedElement);\n }\n else if (renderedElement.index >= start + deleteCount) {\n rendered.push({\n index: renderedElement.index + insertCount - deleteCount,\n templateData: renderedElement.templateData\n });\n }\n }\n this.renderedElements = rendered;\n }\n renderIndexes(indexes) {\n for (const { index, templateData } of this.renderedElements) {\n if (indexes.indexOf(index) > -1) {\n this.trait.renderIndex(index, templateData);\n }\n }\n }\n disposeTemplate(templateData) {\n const index = this.renderedElements.findIndex(el => el.templateData === templateData);\n if (index < 0) {\n return;\n }\n this.renderedElements.splice(index, 1);\n }\n}\nclass Trait {\n constructor(_trait) {\n this._trait = _trait;\n this.indexes = [];\n this.sortedIndexes = [];\n this._onChange = new Emitter();\n this.onChange = this._onChange.event;\n }\n get trait() { return this._trait; }\n get renderer() {\n return new TraitRenderer(this);\n }\n splice(start, deleteCount, elements) {\n const diff = elements.length - deleteCount;\n const end = start + deleteCount;\n const indexes = [\n ...this.sortedIndexes.filter(i => i < start),\n ...elements.map((hasTrait, i) => hasTrait ? i + start : -1).filter(i => i !== -1),\n ...this.sortedIndexes.filter(i => i >= end).map(i => i + diff)\n ];\n this.renderer.splice(start, deleteCount, elements.length);\n this._set(indexes, indexes);\n }\n renderIndex(index, container) {\n container.classList.toggle(this._trait, this.contains(index));\n }\n unrender(container) {\n container.classList.remove(this._trait);\n }\n /**\n * Sets the indexes which should have this trait.\n *\n * @param indexes Indexes which should have this trait.\n * @return The old indexes which had this trait.\n */\n set(indexes, browserEvent) {\n return this._set(indexes, [...indexes].sort(numericSort), browserEvent);\n }\n _set(indexes, sortedIndexes, browserEvent) {\n const result = this.indexes;\n const sortedResult = this.sortedIndexes;\n this.indexes = indexes;\n this.sortedIndexes = sortedIndexes;\n const toRender = disjunction(sortedResult, indexes);\n this.renderer.renderIndexes(toRender);\n this._onChange.fire({ indexes, browserEvent });\n return result;\n }\n get() {\n return this.indexes;\n }\n contains(index) {\n return binarySearch(this.sortedIndexes, index, numericSort) >= 0;\n }\n dispose() {\n dispose(this._onChange);\n }\n}\n__decorate([\n memoize\n], Trait.prototype, \"renderer\", null);\nclass SelectionTrait extends Trait {\n constructor(setAriaSelected) {\n super('selected');\n this.setAriaSelected = setAriaSelected;\n }\n renderIndex(index, container) {\n super.renderIndex(index, container);\n if (this.setAriaSelected) {\n if (this.contains(index)) {\n container.setAttribute('aria-selected', 'true');\n }\n else {\n container.setAttribute('aria-selected', 'false');\n }\n }\n }\n}\n/**\n * The TraitSpliceable is used as a util class to be able\n * to preserve traits across splice calls, given an identity\n * provider.\n */\nclass TraitSpliceable {\n constructor(trait, view, identityProvider) {\n this.trait = trait;\n this.view = view;\n this.identityProvider = identityProvider;\n }\n splice(start, deleteCount, elements) {\n if (!this.identityProvider) {\n return this.trait.splice(start, deleteCount, elements.map(() => false));\n }\n const pastElementsWithTrait = this.trait.get().map(i => this.identityProvider.getId(this.view.element(i)).toString());\n const elementsWithTrait = elements.map(e => pastElementsWithTrait.indexOf(this.identityProvider.getId(e).toString()) > -1);\n this.trait.splice(start, deleteCount, elementsWithTrait);\n }\n}\nexport function isInputElement(e) {\n return e.tagName === 'INPUT' || e.tagName === 'TEXTAREA';\n}\nexport function isMonacoEditor(e) {\n if (e.classList.contains('monaco-editor')) {\n return true;\n }\n if (e.classList.contains('monaco-list')) {\n return false;\n }\n if (!e.parentElement) {\n return false;\n }\n return isMonacoEditor(e.parentElement);\n}\nclass KeyboardController {\n constructor(list, view, options) {\n this.list = list;\n this.view = view;\n this.disposables = new DisposableStore();\n const multipleSelectionSupport = options.multipleSelectionSupport !== false;\n const onKeyDown = Event.chain(domEvent(view.domNode, 'keydown'))\n .filter(e => !isInputElement(e.target))\n .map(e => new StandardKeyboardEvent(e));\n onKeyDown.filter(e => e.keyCode === 3 /* Enter */).on(this.onEnter, this, this.disposables);\n onKeyDown.filter(e => e.keyCode === 16 /* UpArrow */).on(this.onUpArrow, this, this.disposables);\n onKeyDown.filter(e => e.keyCode === 18 /* DownArrow */).on(this.onDownArrow, this, this.disposables);\n onKeyDown.filter(e => e.keyCode === 11 /* PageUp */).on(this.onPageUpArrow, this, this.disposables);\n onKeyDown.filter(e => e.keyCode === 12 /* PageDown */).on(this.onPageDownArrow, this, this.disposables);\n onKeyDown.filter(e => e.keyCode === 9 /* Escape */).on(this.onEscape, this, this.disposables);\n if (multipleSelectionSupport) {\n onKeyDown.filter(e => (platform.isMacintosh ? e.metaKey : e.ctrlKey) && e.keyCode === 31 /* KEY_A */).on(this.onCtrlA, this, this.disposables);\n }\n }\n onEnter(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.setSelection(this.list.getFocus(), e.browserEvent);\n }\n onUpArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.focusPrevious(1, false, e.browserEvent);\n this.list.reveal(this.list.getFocus()[0]);\n this.view.domNode.focus();\n }\n onDownArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.focusNext(1, false, e.browserEvent);\n this.list.reveal(this.list.getFocus()[0]);\n this.view.domNode.focus();\n }\n onPageUpArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.focusPreviousPage(e.browserEvent);\n this.list.reveal(this.list.getFocus()[0]);\n this.view.domNode.focus();\n }\n onPageDownArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.focusNextPage(e.browserEvent);\n this.list.reveal(this.list.getFocus()[0]);\n this.view.domNode.focus();\n }\n onCtrlA(e) {\n e.preventDefault();\n e.stopPropagation();\n this.list.setSelection(range(this.list.length), e.browserEvent);\n this.view.domNode.focus();\n }\n onEscape(e) {\n if (this.list.getSelection().length) {\n e.preventDefault();\n e.stopPropagation();\n this.list.setSelection([], e.browserEvent);\n this.view.domNode.focus();\n }\n }\n dispose() {\n this.disposables.dispose();\n }\n}\nvar TypeLabelControllerState;\n(function (TypeLabelControllerState) {\n TypeLabelControllerState[TypeLabelControllerState[\"Idle\"] = 0] = \"Idle\";\n TypeLabelControllerState[TypeLabelControllerState[\"Typing\"] = 1] = \"Typing\";\n})(TypeLabelControllerState || (TypeLabelControllerState = {}));\nexport const DefaultKeyboardNavigationDelegate = new class {\n mightProducePrintableCharacter(event) {\n if (event.ctrlKey || event.metaKey || event.altKey) {\n return false;\n }\n return (event.keyCode >= 31 /* KEY_A */ && event.keyCode <= 56 /* KEY_Z */)\n || (event.keyCode >= 21 /* KEY_0 */ && event.keyCode <= 30 /* KEY_9 */)\n || (event.keyCode >= 93 /* NUMPAD_0 */ && event.keyCode <= 102 /* NUMPAD_9 */)\n || (event.keyCode >= 80 /* US_SEMICOLON */ && event.keyCode <= 90 /* US_QUOTE */);\n }\n};\nclass TypeLabelController {\n constructor(list, view, keyboardNavigationLabelProvider, delegate) {\n this.list = list;\n this.view = view;\n this.keyboardNavigationLabelProvider = keyboardNavigationLabelProvider;\n this.delegate = delegate;\n this.enabled = false;\n this.state = TypeLabelControllerState.Idle;\n this.automaticKeyboardNavigation = true;\n this.triggered = false;\n this.previouslyFocused = -1;\n this.enabledDisposables = new DisposableStore();\n this.disposables = new DisposableStore();\n this.updateOptions(list.options);\n }\n updateOptions(options) {\n const enableKeyboardNavigation = typeof options.enableKeyboardNavigation === 'undefined' ? true : !!options.enableKeyboardNavigation;\n if (enableKeyboardNavigation) {\n this.enable();\n }\n else {\n this.disable();\n }\n if (typeof options.automaticKeyboardNavigation !== 'undefined') {\n this.automaticKeyboardNavigation = options.automaticKeyboardNavigation;\n }\n }\n enable() {\n if (this.enabled) {\n return;\n }\n const onChar = Event.chain(domEvent(this.view.domNode, 'keydown'))\n .filter(e => !isInputElement(e.target))\n .filter(() => this.automaticKeyboardNavigation || this.triggered)\n .map(event => new StandardKeyboardEvent(event))\n .filter(e => this.delegate.mightProducePrintableCharacter(e))\n .forEach(e => { e.stopPropagation(); e.preventDefault(); })\n .map(event => event.browserEvent.key)\n .event;\n const onClear = Event.debounce(onChar, () => null, 800);\n const onInput = Event.reduce(Event.any(onChar, onClear), (r, i) => i === null ? null : ((r || '') + i));\n onInput(this.onInput, this, this.enabledDisposables);\n onClear(this.onClear, this, this.enabledDisposables);\n this.enabled = true;\n this.triggered = false;\n }\n disable() {\n if (!this.enabled) {\n return;\n }\n this.enabledDisposables.clear();\n this.enabled = false;\n this.triggered = false;\n }\n onClear() {\n var _a;\n const focus = this.list.getFocus();\n if (focus.length > 0 && focus[0] === this.previouslyFocused) {\n // List: re-anounce element on typing end since typed keys will interupt aria label of focused element\n // Do not announce if there was a focus change at the end to prevent duplication https://github.com/microsoft/vscode/issues/95961\n const ariaLabel = (_a = this.list.options.accessibilityProvider) === null || _a === void 0 ? void 0 : _a.getAriaLabel(this.list.element(focus[0]));\n if (ariaLabel) {\n alert(ariaLabel);\n }\n }\n this.previouslyFocused = -1;\n }\n onInput(word) {\n if (!word) {\n this.state = TypeLabelControllerState.Idle;\n this.triggered = false;\n return;\n }\n const focus = this.list.getFocus();\n const start = focus.length > 0 ? focus[0] : 0;\n const delta = this.state === TypeLabelControllerState.Idle ? 1 : 0;\n this.state = TypeLabelControllerState.Typing;\n for (let i = 0; i < this.list.length; i++) {\n const index = (start + i + delta) % this.list.length;\n const label = this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(this.view.element(index));\n const labelStr = label && label.toString();\n if (typeof labelStr === 'undefined' || matchesPrefix(word, labelStr)) {\n this.previouslyFocused = start;\n this.list.setFocus([index]);\n this.list.reveal(index);\n return;\n }\n }\n }\n dispose() {\n this.disable();\n this.enabledDisposables.dispose();\n this.disposables.dispose();\n }\n}\nclass DOMFocusController {\n constructor(list, view) {\n this.list = list;\n this.view = view;\n this.disposables = new DisposableStore();\n const onKeyDown = Event.chain(domEvent(view.domNode, 'keydown'))\n .filter(e => !isInputElement(e.target))\n .map(e => new StandardKeyboardEvent(e));\n onKeyDown.filter(e => e.keyCode === 2 /* Tab */ && !e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey)\n .on(this.onTab, this, this.disposables);\n }\n onTab(e) {\n if (e.target !== this.view.domNode) {\n return;\n }\n const focus = this.list.getFocus();\n if (focus.length === 0) {\n return;\n }\n const focusedDomElement = this.view.domElement(focus[0]);\n if (!focusedDomElement) {\n return;\n }\n const tabIndexElement = focusedDomElement.querySelector('[tabIndex]');\n if (!tabIndexElement || !(tabIndexElement instanceof HTMLElement) || tabIndexElement.tabIndex === -1) {\n return;\n }\n const style = window.getComputedStyle(tabIndexElement);\n if (style.visibility === 'hidden' || style.display === 'none') {\n return;\n }\n e.preventDefault();\n e.stopPropagation();\n tabIndexElement.focus();\n }\n dispose() {\n this.disposables.dispose();\n }\n}\nexport function isSelectionSingleChangeEvent(event) {\n return platform.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey;\n}\nexport function isSelectionRangeChangeEvent(event) {\n return event.browserEvent.shiftKey;\n}\nfunction isMouseRightClick(event) {\n return event instanceof MouseEvent && event.button === 2;\n}\nconst DefaultMultipleSelectionController = {\n isSelectionSingleChangeEvent,\n isSelectionRangeChangeEvent\n};\nexport class MouseController {\n constructor(list) {\n this.list = list;\n this.disposables = new DisposableStore();\n this._onPointer = new Emitter();\n this.onPointer = this._onPointer.event;\n this.multipleSelectionSupport = !(list.options.multipleSelectionSupport === false);\n if (this.multipleSelectionSupport) {\n this.multipleSelectionController = list.options.multipleSelectionController || DefaultMultipleSelectionController;\n }\n this.mouseSupport = typeof list.options.mouseSupport === 'undefined' || !!list.options.mouseSupport;\n if (this.mouseSupport) {\n list.onMouseDown(this.onMouseDown, this, this.disposables);\n list.onContextMenu(this.onContextMenu, this, this.disposables);\n list.onMouseDblClick(this.onDoubleClick, this, this.disposables);\n list.onTouchStart(this.onMouseDown, this, this.disposables);\n this.disposables.add(Gesture.addTarget(list.getHTMLElement()));\n }\n Event.any(list.onMouseClick, list.onMouseMiddleClick, list.onTap)(this.onViewPointer, this, this.disposables);\n }\n isSelectionSingleChangeEvent(event) {\n if (this.multipleSelectionController) {\n return this.multipleSelectionController.isSelectionSingleChangeEvent(event);\n }\n return platform.isMacintosh ? event.browserEvent.metaKey : event.browserEvent.ctrlKey;\n }\n isSelectionRangeChangeEvent(event) {\n if (this.multipleSelectionController) {\n return this.multipleSelectionController.isSelectionRangeChangeEvent(event);\n }\n return event.browserEvent.shiftKey;\n }\n isSelectionChangeEvent(event) {\n return this.isSelectionSingleChangeEvent(event) || this.isSelectionRangeChangeEvent(event);\n }\n onMouseDown(e) {\n if (isMonacoEditor(e.browserEvent.target)) {\n return;\n }\n if (document.activeElement !== e.browserEvent.target) {\n this.list.domFocus();\n }\n }\n onContextMenu(e) {\n if (isMonacoEditor(e.browserEvent.target)) {\n return;\n }\n const focus = typeof e.index === 'undefined' ? [] : [e.index];\n this.list.setFocus(focus, e.browserEvent);\n }\n onViewPointer(e) {\n if (!this.mouseSupport) {\n return;\n }\n if (isInputElement(e.browserEvent.target) || isMonacoEditor(e.browserEvent.target)) {\n return;\n }\n const focus = e.index;\n if (typeof focus === 'undefined') {\n this.list.setFocus([], e.browserEvent);\n this.list.setSelection([], e.browserEvent);\n this.list.setAnchor(undefined);\n return;\n }\n if (this.multipleSelectionSupport && this.isSelectionRangeChangeEvent(e)) {\n return this.changeSelection(e);\n }\n if (this.multipleSelectionSupport && this.isSelectionChangeEvent(e)) {\n return this.changeSelection(e);\n }\n this.list.setFocus([focus], e.browserEvent);\n this.list.setAnchor(focus);\n if (!isMouseRightClick(e.browserEvent)) {\n this.list.setSelection([focus], e.browserEvent);\n }\n this._onPointer.fire(e);\n }\n onDoubleClick(e) {\n if (isInputElement(e.browserEvent.target) || isMonacoEditor(e.browserEvent.target)) {\n return;\n }\n if (this.multipleSelectionSupport && this.isSelectionChangeEvent(e)) {\n return;\n }\n const focus = this.list.getFocus();\n this.list.setSelection(focus, e.browserEvent);\n }\n changeSelection(e) {\n const focus = e.index;\n const anchor = this.list.getAnchor();\n if (this.isSelectionRangeChangeEvent(e) && typeof anchor === 'number') {\n const min = Math.min(anchor, focus);\n const max = Math.max(anchor, focus);\n const rangeSelection = range(min, max + 1);\n const selection = this.list.getSelection();\n const contiguousRange = getContiguousRangeContaining(disjunction(selection, [anchor]), anchor);\n if (contiguousRange.length === 0) {\n return;\n }\n const newSelection = disjunction(rangeSelection, relativeComplement(selection, contiguousRange));\n this.list.setSelection(newSelection, e.browserEvent);\n this.list.setFocus([focus], e.browserEvent);\n }\n else if (this.isSelectionSingleChangeEvent(e)) {\n const selection = this.list.getSelection();\n const newSelection = selection.filter(i => i !== focus);\n this.list.setFocus([focus]);\n this.list.setAnchor(focus);\n if (selection.length === newSelection.length) {\n this.list.setSelection([...newSelection, focus], e.browserEvent);\n }\n else {\n this.list.setSelection(newSelection, e.browserEvent);\n }\n }\n }\n dispose() {\n this.disposables.dispose();\n }\n}\nexport class DefaultStyleController {\n constructor(styleElement, selectorSuffix) {\n this.styleElement = styleElement;\n this.selectorSuffix = selectorSuffix;\n }\n style(styles) {\n const suffix = this.selectorSuffix && `.${this.selectorSuffix}`;\n const content = [];\n if (styles.listBackground) {\n if (styles.listBackground.isOpaque()) {\n content.push(`.monaco-list${suffix} .monaco-list-rows { background: ${styles.listBackground}; }`);\n }\n else if (!platform.isMacintosh) { // subpixel AA doesn't exist in macOS\n console.warn(`List with id '${this.selectorSuffix}' was styled with a non-opaque background color. This will break sub-pixel antialiasing.`);\n }\n }\n if (styles.listFocusBackground) {\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.focused { background-color: ${styles.listFocusBackground}; }`);\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.focused:hover { background-color: ${styles.listFocusBackground}; }`); // overwrite :hover style in this case!\n }\n if (styles.listFocusForeground) {\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.focused { color: ${styles.listFocusForeground}; }`);\n }\n if (styles.listActiveSelectionBackground) {\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.selected { background-color: ${styles.listActiveSelectionBackground}; }`);\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.selected:hover { background-color: ${styles.listActiveSelectionBackground}; }`); // overwrite :hover style in this case!\n }\n if (styles.listActiveSelectionForeground) {\n content.push(`.monaco-list${suffix}:focus .monaco-list-row.selected { color: ${styles.listActiveSelectionForeground}; }`);\n }\n if (styles.listFocusAndSelectionBackground) {\n content.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${suffix}:focus .monaco-list-row.selected.focused { background-color: ${styles.listFocusAndSelectionBackground}; }\n\t\t\t`);\n }\n if (styles.listFocusAndSelectionForeground) {\n content.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${suffix}:focus .monaco-list-row.selected.focused { color: ${styles.listFocusAndSelectionForeground}; }\n\t\t\t`);\n }\n if (styles.listInactiveFocusForeground) {\n content.push(`.monaco-list${suffix} .monaco-list-row.focused { color: ${styles.listInactiveFocusForeground}; }`);\n content.push(`.monaco-list${suffix} .monaco-list-row.focused:hover { color: ${styles.listInactiveFocusForeground}; }`); // overwrite :hover style in this case!\n }\n if (styles.listInactiveFocusBackground) {\n content.push(`.monaco-list${suffix} .monaco-list-row.focused { background-color: ${styles.listInactiveFocusBackground}; }`);\n content.push(`.monaco-list${suffix} .monaco-list-row.focused:hover { background-color: ${styles.listInactiveFocusBackground}; }`); // overwrite :hover style in this case!\n }\n if (styles.listInactiveSelectionBackground) {\n content.push(`.monaco-list${suffix} .monaco-list-row.selected { background-color: ${styles.listInactiveSelectionBackground}; }`);\n content.push(`.monaco-list${suffix} .monaco-list-row.selected:hover { background-color: ${styles.listInactiveSelectionBackground}; }`); // overwrite :hover style in this case!\n }\n if (styles.listInactiveSelectionForeground) {\n content.push(`.monaco-list${suffix} .monaco-list-row.selected { color: ${styles.listInactiveSelectionForeground}; }`);\n }\n if (styles.listHoverBackground) {\n content.push(`.monaco-list${suffix}:not(.drop-target) .monaco-list-row:hover:not(.selected):not(.focused) { background-color: ${styles.listHoverBackground}; }`);\n }\n if (styles.listHoverForeground) {\n content.push(`.monaco-list${suffix} .monaco-list-row:hover:not(.selected):not(.focused) { color: ${styles.listHoverForeground}; }`);\n }\n if (styles.listSelectionOutline) {\n content.push(`.monaco-list${suffix} .monaco-list-row.selected { outline: 1px dotted ${styles.listSelectionOutline}; outline-offset: -1px; }`);\n }\n if (styles.listFocusOutline) {\n content.push(`\n\t\t\t\t.monaco-drag-image,\n\t\t\t\t.monaco-list${suffix}:focus .monaco-list-row.focused { outline: 1px solid ${styles.listFocusOutline}; outline-offset: -1px; }\n\t\t\t`);\n }\n if (styles.listInactiveFocusOutline) {\n content.push(`.monaco-list${suffix} .monaco-list-row.focused { outline: 1px dotted ${styles.listInactiveFocusOutline}; outline-offset: -1px; }`);\n }\n if (styles.listHoverOutline) {\n content.push(`.monaco-list${suffix} .monaco-list-row:hover { outline: 1px dashed ${styles.listHoverOutline}; outline-offset: -1px; }`);\n }\n if (styles.listDropBackground) {\n content.push(`\n\t\t\t\t.monaco-list${suffix}.drop-target,\n\t\t\t\t.monaco-list${suffix} .monaco-list-rows.drop-target,\n\t\t\t\t.monaco-list${suffix} .monaco-list-row.drop-target { background-color: ${styles.listDropBackground} !important; color: inherit !important; }\n\t\t\t`);\n }\n if (styles.listFilterWidgetBackground) {\n content.push(`.monaco-list-type-filter { background-color: ${styles.listFilterWidgetBackground} }`);\n }\n if (styles.listFilterWidgetOutline) {\n content.push(`.monaco-list-type-filter { border: 1px solid ${styles.listFilterWidgetOutline}; }`);\n }\n if (styles.listFilterWidgetNoMatchesOutline) {\n content.push(`.monaco-list-type-filter.no-matches { border: 1px solid ${styles.listFilterWidgetNoMatchesOutline}; }`);\n }\n if (styles.listMatchesShadow) {\n content.push(`.monaco-list-type-filter { box-shadow: 1px 1px 1px ${styles.listMatchesShadow}; }`);\n }\n if (styles.tableColumnsBorder) {\n content.push(`\n\t\t\t\t.monaco-table:hover > .monaco-split-view2,\n\t\t\t\t.monaco-table:hover > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: ${styles.tableColumnsBorder};\n\t\t\t}`);\n }\n this.styleElement.textContent = content.join('\\n');\n }\n}\nconst defaultStyles = {\n listFocusBackground: Color.fromHex('#7FB0D0'),\n listActiveSelectionBackground: Color.fromHex('#0E639C'),\n listActiveSelectionForeground: Color.fromHex('#FFFFFF'),\n listFocusAndSelectionBackground: Color.fromHex('#094771'),\n listFocusAndSelectionForeground: Color.fromHex('#FFFFFF'),\n listInactiveSelectionBackground: Color.fromHex('#3F3F46'),\n listHoverBackground: Color.fromHex('#2A2D2E'),\n listDropBackground: Color.fromHex('#383B3D'),\n treeIndentGuidesStroke: Color.fromHex('#a9a9a9'),\n tableColumnsBorder: Color.fromHex('#cccccc').transparent(0.2)\n};\nconst DefaultOptions = {\n keyboardSupport: true,\n mouseSupport: true,\n multipleSelectionSupport: true,\n dnd: {\n getDragURI() { return null; },\n onDragStart() { },\n onDragOver() { return false; },\n drop() { }\n }\n};\n// TODO@Joao: move these utils into a SortedArray class\nfunction getContiguousRangeContaining(range, value) {\n const index = range.indexOf(value);\n if (index === -1) {\n return [];\n }\n const result = [];\n let i = index - 1;\n while (i >= 0 && range[i] === value - (index - i)) {\n result.push(range[i--]);\n }\n result.reverse();\n i = index;\n while (i < range.length && range[i] === value + (i - index)) {\n result.push(range[i++]);\n }\n return result;\n}\n/**\n * Given two sorted collections of numbers, returns the intersection\n * between them (OR).\n */\nfunction disjunction(one, other) {\n const result = [];\n let i = 0, j = 0;\n while (i < one.length || j < other.length) {\n if (i >= one.length) {\n result.push(other[j++]);\n }\n else if (j >= other.length) {\n result.push(one[i++]);\n }\n else if (one[i] === other[j]) {\n result.push(one[i]);\n i++;\n j++;\n continue;\n }\n else if (one[i] < other[j]) {\n result.push(one[i++]);\n }\n else {\n result.push(other[j++]);\n }\n }\n return result;\n}\n/**\n * Given two sorted collections of numbers, returns the relative\n * complement between them (XOR).\n */\nfunction relativeComplement(one, other) {\n const result = [];\n let i = 0, j = 0;\n while (i < one.length || j < other.length) {\n if (i >= one.length) {\n result.push(other[j++]);\n }\n else if (j >= other.length) {\n result.push(one[i++]);\n }\n else if (one[i] === other[j]) {\n i++;\n j++;\n continue;\n }\n else if (one[i] < other[j]) {\n result.push(one[i++]);\n }\n else {\n j++;\n }\n }\n return result;\n}\nconst numericSort = (a, b) => a - b;\nclass PipelineRenderer {\n constructor(_templateId, renderers) {\n this._templateId = _templateId;\n this.renderers = renderers;\n }\n get templateId() {\n return this._templateId;\n }\n renderTemplate(container) {\n return this.renderers.map(r => r.renderTemplate(container));\n }\n renderElement(element, index, templateData, height) {\n let i = 0;\n for (const renderer of this.renderers) {\n renderer.renderElement(element, index, templateData[i++], height);\n }\n }\n disposeElement(element, index, templateData, height) {\n let i = 0;\n for (const renderer of this.renderers) {\n if (renderer.disposeElement) {\n renderer.disposeElement(element, index, templateData[i], height);\n }\n i += 1;\n }\n }\n disposeTemplate(templateData) {\n let i = 0;\n for (const renderer of this.renderers) {\n renderer.disposeTemplate(templateData[i++]);\n }\n }\n}\nclass AccessibiltyRenderer {\n constructor(accessibilityProvider) {\n this.accessibilityProvider = accessibilityProvider;\n this.templateId = 'a18n';\n }\n renderTemplate(container) {\n return container;\n }\n renderElement(element, index, container) {\n const ariaLabel = this.accessibilityProvider.getAriaLabel(element);\n if (ariaLabel) {\n container.setAttribute('aria-label', ariaLabel);\n }\n else {\n container.removeAttribute('aria-label');\n }\n const ariaLevel = this.accessibilityProvider.getAriaLevel && this.accessibilityProvider.getAriaLevel(element);\n if (typeof ariaLevel === 'number') {\n container.setAttribute('aria-level', `${ariaLevel}`);\n }\n else {\n container.removeAttribute('aria-level');\n }\n }\n disposeTemplate(templateData) {\n // noop\n }\n}\nclass ListViewDragAndDrop {\n constructor(list, dnd) {\n this.list = list;\n this.dnd = dnd;\n }\n getDragElements(element) {\n const selection = this.list.getSelectedElements();\n const elements = selection.indexOf(element) > -1 ? selection : [element];\n return elements;\n }\n getDragURI(element) {\n return this.dnd.getDragURI(element);\n }\n getDragLabel(elements, originalEvent) {\n if (this.dnd.getDragLabel) {\n return this.dnd.getDragLabel(elements, originalEvent);\n }\n return undefined;\n }\n onDragStart(data, originalEvent) {\n if (this.dnd.onDragStart) {\n this.dnd.onDragStart(data, originalEvent);\n }\n }\n onDragOver(data, targetElement, targetIndex, originalEvent) {\n return this.dnd.onDragOver(data, targetElement, targetIndex, originalEvent);\n }\n onDragEnd(originalEvent) {\n if (this.dnd.onDragEnd) {\n this.dnd.onDragEnd(originalEvent);\n }\n }\n drop(data, targetElement, targetIndex, originalEvent) {\n this.dnd.drop(data, targetElement, targetIndex, originalEvent);\n }\n}\nexport class List {\n constructor(user, container, virtualDelegate, renderers, _options = DefaultOptions) {\n var _a;\n this.user = user;\n this._options = _options;\n this.focus = new Trait('focused');\n this.anchor = new Trait('anchor');\n this.eventBufferer = new EventBufferer();\n this._ariaLabel = '';\n this.disposables = new DisposableStore();\n this._onDidDispose = new Emitter();\n this.onDidDispose = this._onDidDispose.event;\n const role = this._options.accessibilityProvider && this._options.accessibilityProvider.getWidgetRole ? (_a = this._options.accessibilityProvider) === null || _a === void 0 ? void 0 : _a.getWidgetRole() : 'list';\n this.selection = new SelectionTrait(role !== 'listbox');\n mixin(_options, defaultStyles, false);\n const baseRenderers = [this.focus.renderer, this.selection.renderer];\n this.accessibilityProvider = _options.accessibilityProvider;\n if (this.accessibilityProvider) {\n baseRenderers.push(new AccessibiltyRenderer(this.accessibilityProvider));\n if (this.accessibilityProvider.onDidChangeActiveDescendant) {\n this.accessibilityProvider.onDidChangeActiveDescendant(this.onDidChangeActiveDescendant, this, this.disposables);\n }\n }\n renderers = renderers.map(r => new PipelineRenderer(r.templateId, [...baseRenderers, r]));\n const viewOptions = Object.assign(Object.assign({}, _options), { dnd: _options.dnd && new ListViewDragAndDrop(this, _options.dnd) });\n this.view = new ListView(container, virtualDelegate, renderers, viewOptions);\n this.view.domNode.setAttribute('role', role);\n if (_options.styleController) {\n this.styleController = _options.styleController(this.view.domId);\n }\n else {\n const styleElement = createStyleSheet(this.view.domNode);\n this.styleController = new DefaultStyleController(styleElement, this.view.domId);\n }\n this.spliceable = new CombinedSpliceable([\n new TraitSpliceable(this.focus, this.view, _options.identityProvider),\n new TraitSpliceable(this.selection, this.view, _options.identityProvider),\n new TraitSpliceable(this.anchor, this.view, _options.identityProvider),\n this.view\n ]);\n this.disposables.add(this.focus);\n this.disposables.add(this.selection);\n this.disposables.add(this.anchor);\n this.disposables.add(this.view);\n this.disposables.add(this._onDidDispose);\n this.onDidFocus = Event.map(domEvent(this.view.domNode, 'focus', true), () => null);\n this.onDidBlur = Event.map(domEvent(this.view.domNode, 'blur', true), () => null);\n this.disposables.add(new DOMFocusController(this, this.view));\n if (typeof _options.keyboardSupport !== 'boolean' || _options.keyboardSupport) {\n const controller = new KeyboardController(this, this.view, _options);\n this.disposables.add(controller);\n }\n if (_options.keyboardNavigationLabelProvider) {\n const delegate = _options.keyboardNavigationDelegate || DefaultKeyboardNavigationDelegate;\n this.typeLabelController = new TypeLabelController(this, this.view, _options.keyboardNavigationLabelProvider, delegate);\n this.disposables.add(this.typeLabelController);\n }\n this.mouseController = this.createMouseController(_options);\n this.disposables.add(this.mouseController);\n this.onDidChangeFocus(this._onFocusChange, this, this.disposables);\n this.onDidChangeSelection(this._onSelectionChange, this, this.disposables);\n if (this.accessibilityProvider) {\n this.ariaLabel = this.accessibilityProvider.getWidgetAriaLabel();\n }\n if (_options.multipleSelectionSupport) {\n this.view.domNode.setAttribute('aria-multiselectable', 'true');\n }\n }\n get onDidChangeFocus() {\n return Event.map(this.eventBufferer.wrapEvent(this.focus.onChange), e => this.toListEvent(e));\n }\n get onDidChangeSelection() {\n return Event.map(this.eventBufferer.wrapEvent(this.selection.onChange), e => this.toListEvent(e));\n }\n get domId() { return this.view.domId; }\n get onMouseClick() { return this.view.onMouseClick; }\n get onMouseDblClick() { return this.view.onMouseDblClick; }\n get onMouseMiddleClick() { return this.view.onMouseMiddleClick; }\n get onPointer() { return this.mouseController.onPointer; }\n get onMouseDown() { return this.view.onMouseDown; }\n get onTouchStart() { return this.view.onTouchStart; }\n get onTap() { return this.view.onTap; }\n /**\n * Possible context menu trigger events:\n * - ContextMenu key\n * - Shift F10\n * - Ctrl Option Shift M (macOS with VoiceOver)\n * - Mouse right click\n */\n get onContextMenu() {\n let didJustPressContextMenuKey = false;\n const fromKeyDown = Event.chain(domEvent(this.view.domNode, 'keydown'))\n .map(e => new StandardKeyboardEvent(e))\n .filter(e => didJustPressContextMenuKey = e.keyCode === 58 /* ContextMenu */ || (e.shiftKey && e.keyCode === 68 /* F10 */))\n .map(stopEvent)\n .filter(() => false)\n .event;\n const fromKeyUp = Event.chain(domEvent(this.view.domNode, 'keyup'))\n .forEach(() => didJustPressContextMenuKey = false)\n .map(e => new StandardKeyboardEvent(e))\n .filter(e => e.keyCode === 58 /* ContextMenu */ || (e.shiftKey && e.keyCode === 68 /* F10 */))\n .map(stopEvent)\n .map(({ browserEvent }) => {\n const focus = this.getFocus();\n const index = focus.length ? focus[0] : undefined;\n const element = typeof index !== 'undefined' ? this.view.element(index) : undefined;\n const anchor = typeof index !== 'undefined' ? this.view.domElement(index) : this.view.domNode;\n return { index, element, anchor, browserEvent };\n })\n .event;\n const fromMouse = Event.chain(this.view.onContextMenu)\n .filter(_ => !didJustPressContextMenuKey)\n .map(({ element, index, browserEvent }) => ({ element, index, anchor: { x: browserEvent.clientX + 1, y: browserEvent.clientY }, browserEvent }))\n .event;\n return Event.any(fromKeyDown, fromKeyUp, fromMouse);\n }\n get onKeyDown() { return domEvent(this.view.domNode, 'keydown'); }\n createMouseController(options) {\n return new MouseController(this);\n }\n updateOptions(optionsUpdate = {}) {\n this._options = Object.assign(Object.assign({}, this._options), optionsUpdate);\n if (this.typeLabelController) {\n this.typeLabelController.updateOptions(this._options);\n }\n this.view.updateOptions(optionsUpdate);\n }\n get options() {\n return this._options;\n }\n splice(start, deleteCount, elements = []) {\n if (start < 0 || start > this.view.length) {\n throw new ListError(this.user, `Invalid start index: ${start}`);\n }\n if (deleteCount < 0) {\n throw new ListError(this.user, `Invalid delete count: ${deleteCount}`);\n }\n if (deleteCount === 0 && elements.length === 0) {\n return;\n }\n this.eventBufferer.bufferEvents(() => this.spliceable.splice(start, deleteCount, elements));\n }\n rerender() {\n this.view.rerender();\n }\n element(index) {\n return this.view.element(index);\n }\n get length() {\n return this.view.length;\n }\n get contentHeight() {\n return this.view.contentHeight;\n }\n get scrollTop() {\n return this.view.getScrollTop();\n }\n set scrollTop(scrollTop) {\n this.view.setScrollTop(scrollTop);\n }\n get ariaLabel() {\n return this._ariaLabel;\n }\n set ariaLabel(value) {\n this._ariaLabel = value;\n this.view.domNode.setAttribute('aria-label', value);\n }\n domFocus() {\n this.view.domNode.focus({ preventScroll: true });\n }\n layout(height, width) {\n this.view.layout(height, width);\n }\n setSelection(indexes, browserEvent) {\n for (const index of indexes) {\n if (index < 0 || index >= this.length) {\n throw new ListError(this.user, `Invalid index ${index}`);\n }\n }\n this.selection.set(indexes, browserEvent);\n }\n getSelection() {\n return this.selection.get();\n }\n getSelectedElements() {\n return this.getSelection().map(i => this.view.element(i));\n }\n setAnchor(index) {\n if (typeof index === 'undefined') {\n this.anchor.set([]);\n return;\n }\n if (index < 0 || index >= this.length) {\n throw new ListError(this.user, `Invalid index ${index}`);\n }\n this.anchor.set([index]);\n }\n getAnchor() {\n return firstOrDefault(this.anchor.get(), undefined);\n }\n setFocus(indexes, browserEvent) {\n for (const index of indexes) {\n if (index < 0 || index >= this.length) {\n throw new ListError(this.user, `Invalid index ${index}`);\n }\n }\n this.focus.set(indexes, browserEvent);\n }\n focusNext(n = 1, loop = false, browserEvent, filter) {\n if (this.length === 0) {\n return;\n }\n const focus = this.focus.get();\n const index = this.findNextIndex(focus.length > 0 ? focus[0] + n : 0, loop, filter);\n if (index > -1) {\n this.setFocus([index], browserEvent);\n }\n }\n focusPrevious(n = 1, loop = false, browserEvent, filter) {\n if (this.length === 0) {\n return;\n }\n const focus = this.focus.get();\n const index = this.findPreviousIndex(focus.length > 0 ? focus[0] - n : 0, loop, filter);\n if (index > -1) {\n this.setFocus([index], browserEvent);\n }\n }\n focusNextPage(browserEvent, filter) {\n return __awaiter(this, void 0, void 0, function* () {\n let lastPageIndex = this.view.indexAt(this.view.getScrollTop() + this.view.renderHeight);\n lastPageIndex = lastPageIndex === 0 ? 0 : lastPageIndex - 1;\n const lastPageElement = this.view.element(lastPageIndex);\n const currentlyFocusedElement = this.getFocusedElements()[0];\n if (currentlyFocusedElement !== lastPageElement) {\n const lastGoodPageIndex = this.findPreviousIndex(lastPageIndex, false, filter);\n if (lastGoodPageIndex > -1 && currentlyFocusedElement !== this.view.element(lastGoodPageIndex)) {\n this.setFocus([lastGoodPageIndex], browserEvent);\n }\n else {\n this.setFocus([lastPageIndex], browserEvent);\n }\n }\n else {\n const previousScrollTop = this.view.getScrollTop();\n this.view.setScrollTop(previousScrollTop + this.view.renderHeight - this.view.elementHeight(lastPageIndex));\n if (this.view.getScrollTop() !== previousScrollTop) {\n this.setFocus([]);\n // Let the scroll event listener run\n yield timeout(0);\n yield this.focusNextPage(browserEvent, filter);\n }\n }\n });\n }\n focusPreviousPage(browserEvent, filter) {\n return __awaiter(this, void 0, void 0, function* () {\n let firstPageIndex;\n const scrollTop = this.view.getScrollTop();\n if (scrollTop === 0) {\n firstPageIndex = this.view.indexAt(scrollTop);\n }\n else {\n firstPageIndex = this.view.indexAfter(scrollTop - 1);\n }\n const firstPageElement = this.view.element(firstPageIndex);\n const currentlyFocusedElement = this.getFocusedElements()[0];\n if (currentlyFocusedElement !== firstPageElement) {\n const firstGoodPageIndex = this.findNextIndex(firstPageIndex, false, filter);\n if (firstGoodPageIndex > -1 && currentlyFocusedElement !== this.view.element(firstGoodPageIndex)) {\n this.setFocus([firstGoodPageIndex], browserEvent);\n }\n else {\n this.setFocus([firstPageIndex], browserEvent);\n }\n }\n else {\n const previousScrollTop = scrollTop;\n this.view.setScrollTop(scrollTop - this.view.renderHeight);\n if (this.view.getScrollTop() !== previousScrollTop) {\n this.setFocus([]);\n // Let the scroll event listener run\n yield timeout(0);\n yield this.focusPreviousPage(browserEvent, filter);\n }\n }\n });\n }\n focusLast(browserEvent, filter) {\n if (this.length === 0) {\n return;\n }\n const index = this.findPreviousIndex(this.length - 1, false, filter);\n if (index > -1) {\n this.setFocus([index], browserEvent);\n }\n }\n focusFirst(browserEvent, filter) {\n this.focusNth(0, browserEvent, filter);\n }\n focusNth(n, browserEvent, filter) {\n if (this.length === 0) {\n return;\n }\n const index = this.findNextIndex(n, false, filter);\n if (index > -1) {\n this.setFocus([index], browserEvent);\n }\n }\n findNextIndex(index, loop = false, filter) {\n for (let i = 0; i < this.length; i++) {\n if (index >= this.length && !loop) {\n return -1;\n }\n index = index % this.length;\n if (!filter || filter(this.element(index))) {\n return index;\n }\n index++;\n }\n return -1;\n }\n findPreviousIndex(index, loop = false, filter) {\n for (let i = 0; i < this.length; i++) {\n if (index < 0 && !loop) {\n return -1;\n }\n index = (this.length + (index % this.length)) % this.length;\n if (!filter || filter(this.element(index))) {\n return index;\n }\n index--;\n }\n return -1;\n }\n getFocus() {\n return this.focus.get();\n }\n getFocusedElements() {\n return this.getFocus().map(i => this.view.element(i));\n }\n reveal(index, relativeTop) {\n if (index < 0 || index >= this.length) {\n throw new ListError(this.user, `Invalid index ${index}`);\n }\n const scrollTop = this.view.getScrollTop();\n const elementTop = this.view.elementTop(index);\n const elementHeight = this.view.elementHeight(index);\n if (isNumber(relativeTop)) {\n // y = mx + b\n const m = elementHeight - this.view.renderHeight;\n this.view.setScrollTop(m * clamp(relativeTop, 0, 1) + elementTop);\n }\n else {\n const viewItemBottom = elementTop + elementHeight;\n const scrollBottom = scrollTop + this.view.renderHeight;\n if (elementTop < scrollTop && viewItemBottom >= scrollBottom) {\n // The element is already overflowing the viewport, no-op\n }\n else if (elementTop < scrollTop || (viewItemBottom >= scrollBottom && elementHeight >= this.view.renderHeight)) {\n this.view.setScrollTop(elementTop);\n }\n else if (viewItemBottom >= scrollBottom) {\n this.view.setScrollTop(viewItemBottom - this.view.renderHeight);\n }\n }\n }\n /**\n * Returns the relative position of an element rendered in the list.\n * Returns `null` if the element isn't *entirely* in the visible viewport.\n */\n getRelativeTop(index) {\n if (index < 0 || index >= this.length) {\n throw new ListError(this.user, `Invalid index ${index}`);\n }\n const scrollTop = this.view.getScrollTop();\n const elementTop = this.view.elementTop(index);\n const elementHeight = this.view.elementHeight(index);\n if (elementTop < scrollTop || elementTop + elementHeight > scrollTop + this.view.renderHeight) {\n return null;\n }\n // y = mx + b\n const m = elementHeight - this.view.renderHeight;\n return Math.abs((scrollTop - elementTop) / m);\n }\n getHTMLElement() {\n return this.view.domNode;\n }\n style(styles) {\n this.styleController.style(styles);\n }\n toListEvent({ indexes, browserEvent }) {\n return { indexes, elements: indexes.map(i => this.view.element(i)), browserEvent };\n }\n _onFocusChange() {\n const focus = this.focus.get();\n this.view.domNode.classList.toggle('element-focused', focus.length > 0);\n this.onDidChangeActiveDescendant();\n }\n onDidChangeActiveDescendant() {\n var _a;\n const focus = this.focus.get();\n if (focus.length > 0) {\n let id;\n if ((_a = this.accessibilityProvider) === null || _a === void 0 ? void 0 : _a.getActiveDescendantId) {\n id = this.accessibilityProvider.getActiveDescendantId(this.view.element(focus[0]));\n }\n this.view.domNode.setAttribute('aria-activedescendant', id || this.view.getElementDomId(focus[0]));\n }\n else {\n this.view.domNode.removeAttribute('aria-activedescendant');\n }\n }\n _onSelectionChange() {\n const selection = this.selection.get();\n this.view.domNode.classList.toggle('selection-none', selection.length === 0);\n this.view.domNode.classList.toggle('selection-single', selection.length === 1);\n this.view.domNode.classList.toggle('selection-multiple', selection.length > 1);\n }\n dispose() {\n this._onDidDispose.fire();\n this.disposables.dispose();\n this._onDidDispose.dispose();\n }\n}\n__decorate([\n memoize\n], List.prototype, \"onDidChangeFocus\", null);\n__decorate([\n memoize\n], List.prototype, \"onDidChangeSelection\", null);\n__decorate([\n memoize\n], List.prototype, \"onContextMenu\", null);\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 *--------------------------------------------------------------------------------------------*/\nimport './mouseCursor.css';\nexport const MOUSE_CURSOR_TEXT_CSS_CLASS_NAME = `monaco-mouse-cursor-text`;\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 *--------------------------------------------------------------------------------------------*/\nimport './sash.css';\nimport { dispose, Disposable, DisposableStore, toDisposable } from '../../../common/lifecycle.js';\nimport { isMacintosh } from '../../../common/platform.js';\nimport * as types from '../../../common/types.js';\nimport { EventType, Gesture } from '../../touch.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { Emitter } from '../../../common/event.js';\nimport { getElementsByTagName, EventHelper, createStyleSheet, addDisposableListener, append, $ } from '../../dom.js';\nimport { domEvent } from '../../event.js';\nimport { Delayer } from '../../../common/async.js';\nlet DEBUG = false;\nexport var OrthogonalEdge;\n(function (OrthogonalEdge) {\n OrthogonalEdge[\"North\"] = \"north\";\n OrthogonalEdge[\"South\"] = \"south\";\n OrthogonalEdge[\"East\"] = \"east\";\n OrthogonalEdge[\"West\"] = \"west\";\n})(OrthogonalEdge || (OrthogonalEdge = {}));\nlet globalSize = 4;\nconst onDidChangeGlobalSize = new Emitter();\nlet globalHoverDelay = 300;\nconst onDidChangeHoverDelay = new Emitter();\nexport class Sash extends Disposable {\n constructor(container, layoutProvider, options) {\n super();\n this.hoverDelay = globalHoverDelay;\n this.hoverDelayer = this._register(new Delayer(this.hoverDelay));\n this._state = 3 /* Enabled */;\n this._onDidEnablementChange = this._register(new Emitter());\n this.onDidEnablementChange = this._onDidEnablementChange.event;\n this._onDidStart = this._register(new Emitter());\n this.onDidStart = this._onDidStart.event;\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._onDidReset = this._register(new Emitter());\n this.onDidReset = this._onDidReset.event;\n this._onDidEnd = this._register(new Emitter());\n this.onDidEnd = this._onDidEnd.event;\n this.linkedSash = undefined;\n this.orthogonalStartSashDisposables = this._register(new DisposableStore());\n this.orthogonalStartDragHandleDisposables = this._register(new DisposableStore());\n this.orthogonalEndSashDisposables = this._register(new DisposableStore());\n this.orthogonalEndDragHandleDisposables = this._register(new DisposableStore());\n this.el = append(container, $('.monaco-sash'));\n if (options.orthogonalEdge) {\n this.el.classList.add(`orthogonal-edge-${options.orthogonalEdge}`);\n }\n if (isMacintosh) {\n this.el.classList.add('mac');\n }\n this._register(domEvent(this.el, 'mousedown')(this.onMouseDown, this));\n this._register(domEvent(this.el, 'dblclick')(this.onMouseDoubleClick, this));\n this._register(domEvent(this.el, 'mouseenter')(() => Sash.onMouseEnter(this)));\n this._register(domEvent(this.el, 'mouseleave')(() => Sash.onMouseLeave(this)));\n this._register(Gesture.addTarget(this.el));\n this._register(domEvent(this.el, EventType.Start)(e => this.onTouchStart(e), this));\n if (typeof options.size === 'number') {\n this.size = options.size;\n if (options.orientation === 0 /* VERTICAL */) {\n this.el.style.width = `${this.size}px`;\n }\n else {\n this.el.style.height = `${this.size}px`;\n }\n }\n else {\n this.size = globalSize;\n this._register(onDidChangeGlobalSize.event(size => {\n this.size = size;\n this.layout();\n }));\n }\n this._register(onDidChangeHoverDelay.event(delay => this.hoverDelay = delay));\n this.hidden = false;\n this.layoutProvider = layoutProvider;\n this.orthogonalStartSash = options.orthogonalStartSash;\n this.orthogonalEndSash = options.orthogonalEndSash;\n this.orientation = options.orientation || 0 /* VERTICAL */;\n if (this.orientation === 1 /* HORIZONTAL */) {\n this.el.classList.add('horizontal');\n this.el.classList.remove('vertical');\n }\n else {\n this.el.classList.remove('horizontal');\n this.el.classList.add('vertical');\n }\n this.el.classList.toggle('debug', DEBUG);\n this.layout();\n }\n get state() { return this._state; }\n set state(state) {\n if (this._state === state) {\n return;\n }\n this.el.classList.toggle('disabled', state === 0 /* Disabled */);\n this.el.classList.toggle('minimum', state === 1 /* Minimum */);\n this.el.classList.toggle('maximum', state === 2 /* Maximum */);\n this._state = state;\n this._onDidEnablementChange.fire(state);\n }\n get orthogonalStartSash() { return this._orthogonalStartSash; }\n set orthogonalStartSash(sash) {\n this.orthogonalStartDragHandleDisposables.clear();\n this.orthogonalStartSashDisposables.clear();\n if (sash) {\n const onChange = (state) => {\n this.orthogonalStartDragHandleDisposables.clear();\n if (state !== 0 /* Disabled */) {\n this._orthogonalStartDragHandle = append(this.el, $('.orthogonal-drag-handle.start'));\n this.orthogonalStartDragHandleDisposables.add(toDisposable(() => this._orthogonalStartDragHandle.remove()));\n domEvent(this._orthogonalStartDragHandle, 'mouseenter')(() => Sash.onMouseEnter(sash), undefined, this.orthogonalStartDragHandleDisposables);\n domEvent(this._orthogonalStartDragHandle, 'mouseleave')(() => Sash.onMouseLeave(sash), undefined, this.orthogonalStartDragHandleDisposables);\n }\n };\n this.orthogonalStartSashDisposables.add(sash.onDidEnablementChange(onChange, this));\n onChange(sash.state);\n }\n this._orthogonalStartSash = sash;\n }\n get orthogonalEndSash() { return this._orthogonalEndSash; }\n set orthogonalEndSash(sash) {\n this.orthogonalEndDragHandleDisposables.clear();\n this.orthogonalEndSashDisposables.clear();\n if (sash) {\n const onChange = (state) => {\n this.orthogonalEndDragHandleDisposables.clear();\n if (state !== 0 /* Disabled */) {\n this._orthogonalEndDragHandle = append(this.el, $('.orthogonal-drag-handle.end'));\n this.orthogonalEndDragHandleDisposables.add(toDisposable(() => this._orthogonalEndDragHandle.remove()));\n domEvent(this._orthogonalEndDragHandle, 'mouseenter')(() => Sash.onMouseEnter(sash), undefined, this.orthogonalEndDragHandleDisposables);\n domEvent(this._orthogonalEndDragHandle, 'mouseleave')(() => Sash.onMouseLeave(sash), undefined, this.orthogonalEndDragHandleDisposables);\n }\n };\n this.orthogonalEndSashDisposables.add(sash.onDidEnablementChange(onChange, this));\n onChange(sash.state);\n }\n this._orthogonalEndSash = sash;\n }\n onMouseDown(e) {\n EventHelper.stop(e, false);\n let isMultisashResize = false;\n if (!e.__orthogonalSashEvent) {\n const orthogonalSash = this.getOrthogonalSash(e);\n if (orthogonalSash) {\n isMultisashResize = true;\n e.__orthogonalSashEvent = true;\n orthogonalSash.onMouseDown(e);\n }\n }\n if (this.linkedSash && !e.__linkedSashEvent) {\n e.__linkedSashEvent = true;\n this.linkedSash.onMouseDown(e);\n }\n if (!this.state) {\n return;\n }\n // Select both iframes and webviews; internally Electron nests an iframe\n // in its <webview> component, but this isn't queryable.\n const iframes = [\n ...getElementsByTagName('iframe'),\n ...getElementsByTagName('webview'),\n ];\n for (const iframe of iframes) {\n iframe.style.pointerEvents = 'none'; // disable mouse events on iframes as long as we drag the sash\n }\n const mouseDownEvent = new StandardMouseEvent(e);\n const startX = mouseDownEvent.posx;\n const startY = mouseDownEvent.posy;\n const altKey = mouseDownEvent.altKey;\n const startEvent = { startX, currentX: startX, startY, currentY: startY, altKey };\n this.el.classList.add('active');\n this._onDidStart.fire(startEvent);\n // fix https://github.com/microsoft/vscode/issues/21675\n const style = createStyleSheet(this.el);\n const updateStyle = () => {\n let cursor = '';\n if (isMultisashResize) {\n cursor = 'all-scroll';\n }\n else if (this.orientation === 1 /* HORIZONTAL */) {\n if (this.state === 1 /* Minimum */) {\n cursor = 's-resize';\n }\n else if (this.state === 2 /* Maximum */) {\n cursor = 'n-resize';\n }\n else {\n cursor = isMacintosh ? 'row-resize' : 'ns-resize';\n }\n }\n else {\n if (this.state === 1 /* Minimum */) {\n cursor = 'e-resize';\n }\n else if (this.state === 2 /* Maximum */) {\n cursor = 'w-resize';\n }\n else {\n cursor = isMacintosh ? 'col-resize' : 'ew-resize';\n }\n }\n style.textContent = `* { cursor: ${cursor} !important; }`;\n };\n const disposables = new DisposableStore();\n updateStyle();\n if (!isMultisashResize) {\n this.onDidEnablementChange(updateStyle, null, disposables);\n }\n const onMouseMove = (e) => {\n EventHelper.stop(e, false);\n const mouseMoveEvent = new StandardMouseEvent(e);\n const event = { startX, currentX: mouseMoveEvent.posx, startY, currentY: mouseMoveEvent.posy, altKey };\n this._onDidChange.fire(event);\n };\n const onMouseUp = (e) => {\n EventHelper.stop(e, false);\n this.el.removeChild(style);\n this.el.classList.remove('active');\n this._onDidEnd.fire();\n disposables.dispose();\n for (const iframe of iframes) {\n iframe.style.pointerEvents = 'auto';\n }\n };\n domEvent(window, 'mousemove')(onMouseMove, null, disposables);\n domEvent(window, 'mouseup')(onMouseUp, null, disposables);\n }\n onMouseDoubleClick(e) {\n const orthogonalSash = this.getOrthogonalSash(e);\n if (orthogonalSash) {\n orthogonalSash._onDidReset.fire();\n }\n if (this.linkedSash) {\n this.linkedSash._onDidReset.fire();\n }\n this._onDidReset.fire();\n }\n onTouchStart(event) {\n EventHelper.stop(event);\n const listeners = [];\n const startX = event.pageX;\n const startY = event.pageY;\n const altKey = event.altKey;\n this._onDidStart.fire({\n startX: startX,\n currentX: startX,\n startY: startY,\n currentY: startY,\n altKey\n });\n listeners.push(addDisposableListener(this.el, EventType.Change, (event) => {\n if (types.isNumber(event.pageX) && types.isNumber(event.pageY)) {\n this._onDidChange.fire({\n startX: startX,\n currentX: event.pageX,\n startY: startY,\n currentY: event.pageY,\n altKey\n });\n }\n }));\n listeners.push(addDisposableListener(this.el, EventType.End, () => {\n this._onDidEnd.fire();\n dispose(listeners);\n }));\n }\n static onMouseEnter(sash, fromLinkedSash = false) {\n if (sash.el.classList.contains('active')) {\n sash.hoverDelayer.cancel();\n sash.el.classList.add('hover');\n }\n else {\n sash.hoverDelayer.trigger(() => sash.el.classList.add('hover'), sash.hoverDelay).then(undefined, () => { });\n }\n if (!fromLinkedSash && sash.linkedSash) {\n Sash.onMouseEnter(sash.linkedSash, true);\n }\n }\n static onMouseLeave(sash, fromLinkedSash = false) {\n sash.hoverDelayer.cancel();\n sash.el.classList.remove('hover');\n if (!fromLinkedSash && sash.linkedSash) {\n Sash.onMouseLeave(sash.linkedSash, true);\n }\n }\n clearSashHoverState() {\n Sash.onMouseLeave(this);\n }\n layout() {\n if (this.orientation === 0 /* VERTICAL */) {\n const verticalProvider = this.layoutProvider;\n this.el.style.left = verticalProvider.getVerticalSashLeft(this) - (this.size / 2) + 'px';\n if (verticalProvider.getVerticalSashTop) {\n this.el.style.top = verticalProvider.getVerticalSashTop(this) + 'px';\n }\n if (verticalProvider.getVerticalSashHeight) {\n this.el.style.height = verticalProvider.getVerticalSashHeight(this) + 'px';\n }\n }\n else {\n const horizontalProvider = this.layoutProvider;\n this.el.style.top = horizontalProvider.getHorizontalSashTop(this) - (this.size / 2) + 'px';\n if (horizontalProvider.getHorizontalSashLeft) {\n this.el.style.left = horizontalProvider.getHorizontalSashLeft(this) + 'px';\n }\n if (horizontalProvider.getHorizontalSashWidth) {\n this.el.style.width = horizontalProvider.getHorizontalSashWidth(this) + 'px';\n }\n }\n }\n hide() {\n this.hidden = true;\n this.el.style.display = 'none';\n this.el.setAttribute('aria-hidden', 'true');\n }\n getOrthogonalSash(e) {\n if (!e.target || !(e.target instanceof HTMLElement)) {\n return undefined;\n }\n if (e.target.classList.contains('orthogonal-drag-handle')) {\n return e.target.classList.contains('start') ? this.orthogonalStartSash : this.orthogonalEndSash;\n }\n return undefined;\n }\n dispose() {\n super.dispose();\n this.el.remove();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { GlobalMouseMoveMonitor, standardMouseMoveMerger } from '../../globalMouseMoveMonitor.js';\nimport { Widget } from '../widget.js';\nimport { IntervalTimer, TimeoutTimer } from '../../../common/async.js';\n/**\n * The arrow image size.\n */\nexport const ARROW_IMG_SIZE = 11;\nexport class ScrollbarArrow extends Widget {\n constructor(opts) {\n super();\n this._onActivate = opts.onActivate;\n this.bgDomNode = document.createElement('div');\n this.bgDomNode.className = 'arrow-background';\n this.bgDomNode.style.position = 'absolute';\n this.bgDomNode.style.width = opts.bgWidth + 'px';\n this.bgDomNode.style.height = opts.bgHeight + 'px';\n if (typeof opts.top !== 'undefined') {\n this.bgDomNode.style.top = '0px';\n }\n if (typeof opts.left !== 'undefined') {\n this.bgDomNode.style.left = '0px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.bgDomNode.style.bottom = '0px';\n }\n if (typeof opts.right !== 'undefined') {\n this.bgDomNode.style.right = '0px';\n }\n this.domNode = document.createElement('div');\n this.domNode.className = opts.className;\n this.domNode.classList.add(...opts.icon.classNamesArray);\n this.domNode.style.position = 'absolute';\n this.domNode.style.width = ARROW_IMG_SIZE + 'px';\n this.domNode.style.height = ARROW_IMG_SIZE + 'px';\n if (typeof opts.top !== 'undefined') {\n this.domNode.style.top = opts.top + 'px';\n }\n if (typeof opts.left !== 'undefined') {\n this.domNode.style.left = opts.left + 'px';\n }\n if (typeof opts.bottom !== 'undefined') {\n this.domNode.style.bottom = opts.bottom + 'px';\n }\n if (typeof opts.right !== 'undefined') {\n this.domNode.style.right = opts.right + 'px';\n }\n this._mouseMoveMonitor = this._register(new GlobalMouseMoveMonitor());\n this.onmousedown(this.bgDomNode, (e) => this._arrowMouseDown(e));\n this.onmousedown(this.domNode, (e) => this._arrowMouseDown(e));\n this._mousedownRepeatTimer = this._register(new IntervalTimer());\n this._mousedownScheduleRepeatTimer = this._register(new TimeoutTimer());\n }\n _arrowMouseDown(e) {\n const scheduleRepeater = () => {\n this._mousedownRepeatTimer.cancelAndSet(() => this._onActivate(), 1000 / 24);\n };\n this._onActivate();\n this._mousedownRepeatTimer.cancel();\n this._mousedownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n this._mouseMoveMonitor.startMonitoring(e.target, e.buttons, standardMouseMoveMerger, (mouseMoveData) => {\n /* Intentional empty */\n }, () => {\n this._mousedownRepeatTimer.cancel();\n this._mousedownScheduleRepeatTimer.cancel();\n });\n e.preventDefault();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { TimeoutTimer } from '../../../common/async.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nexport class ScrollbarVisibilityController extends Disposable {\n constructor(visibility, visibleClassName, invisibleClassName) {\n super();\n this._visibility = visibility;\n this._visibleClassName = visibleClassName;\n this._invisibleClassName = invisibleClassName;\n this._domNode = null;\n this._isVisible = false;\n this._isNeeded = false;\n this._shouldBeVisible = false;\n this._revealTimer = this._register(new TimeoutTimer());\n }\n // ----------------- Hide / Reveal\n applyVisibilitySetting(shouldBeVisible) {\n if (this._visibility === 2 /* Hidden */) {\n return false;\n }\n if (this._visibility === 3 /* Visible */) {\n return true;\n }\n return shouldBeVisible;\n }\n setShouldBeVisible(rawShouldBeVisible) {\n const shouldBeVisible = this.applyVisibilitySetting(rawShouldBeVisible);\n if (this._shouldBeVisible !== shouldBeVisible) {\n this._shouldBeVisible = shouldBeVisible;\n this.ensureVisibility();\n }\n }\n setIsNeeded(isNeeded) {\n if (this._isNeeded !== isNeeded) {\n this._isNeeded = isNeeded;\n this.ensureVisibility();\n }\n }\n setDomNode(domNode) {\n this._domNode = domNode;\n this._domNode.setClassName(this._invisibleClassName);\n // Now that the flags & the dom node are in a consistent state, ensure the Hidden/Visible configuration\n this.setShouldBeVisible(false);\n }\n ensureVisibility() {\n if (!this._isNeeded) {\n // Nothing to be rendered\n this._hide(false);\n return;\n }\n if (this._shouldBeVisible) {\n this._reveal();\n }\n else {\n this._hide(true);\n }\n }\n _reveal() {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n // The CSS animation doesn't play otherwise\n this._revealTimer.setIfNotSet(() => {\n if (this._domNode) {\n this._domNode.setClassName(this._visibleClassName);\n }\n }, 0);\n }\n _hide(withFadeAway) {\n this._revealTimer.cancel();\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n if (this._domNode) {\n this._domNode.setClassName(this._invisibleClassName + (withFadeAway ? ' fade' : ''));\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../dom.js';\nimport { createFastDomNode } from '../../fastDomNode.js';\nimport { GlobalMouseMoveMonitor, standardMouseMoveMerger } from '../../globalMouseMoveMonitor.js';\nimport { ScrollbarArrow } from './scrollbarArrow.js';\nimport { ScrollbarVisibilityController } from './scrollbarVisibilityController.js';\nimport { Widget } from '../widget.js';\nimport * as platform from '../../../common/platform.js';\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst MOUSE_DRAG_RESET_DISTANCE = 140;\nexport class AbstractScrollbar extends Widget {\n constructor(opts) {\n super();\n this._lazyRender = opts.lazyRender;\n this._host = opts.host;\n this._scrollable = opts.scrollable;\n this._scrollByPage = opts.scrollByPage;\n this._scrollbarState = opts.scrollbarState;\n this._visibilityController = this._register(new ScrollbarVisibilityController(opts.visibility, 'visible scrollbar ' + opts.extraScrollbarClassName, 'invisible scrollbar ' + opts.extraScrollbarClassName));\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._mouseMoveMonitor = this._register(new GlobalMouseMoveMonitor());\n this._shouldRender = true;\n this.domNode = createFastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n this._visibilityController.setDomNode(this.domNode);\n this.domNode.setPosition('absolute');\n this.onmousedown(this.domNode.domNode, (e) => this._domNodeMouseDown(e));\n }\n // ----------------- creation\n /**\n * Creates the dom node for an arrow & adds it to the container\n */\n _createArrow(opts) {\n const arrow = this._register(new ScrollbarArrow(opts));\n this.domNode.domNode.appendChild(arrow.bgDomNode);\n this.domNode.domNode.appendChild(arrow.domNode);\n }\n /**\n * Creates the slider dom node, adds it to the container & hooks up the events\n */\n _createSlider(top, left, width, height) {\n this.slider = createFastDomNode(document.createElement('div'));\n this.slider.setClassName('slider');\n this.slider.setPosition('absolute');\n this.slider.setTop(top);\n this.slider.setLeft(left);\n if (typeof width === 'number') {\n this.slider.setWidth(width);\n }\n if (typeof height === 'number') {\n this.slider.setHeight(height);\n }\n this.slider.setLayerHinting(true);\n this.slider.setContain('strict');\n this.domNode.domNode.appendChild(this.slider.domNode);\n this.onmousedown(this.slider.domNode, (e) => {\n if (e.leftButton) {\n e.preventDefault();\n this._sliderMouseDown(e, () => { });\n }\n });\n this.onclick(this.slider.domNode, e => {\n if (e.leftButton) {\n e.stopPropagation();\n }\n });\n }\n // ----------------- Update state\n _onElementSize(visibleSize) {\n if (this._scrollbarState.setVisibleSize(visibleSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n _onElementScrollSize(elementScrollSize) {\n if (this._scrollbarState.setScrollSize(elementScrollSize)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n _onElementScrollPosition(elementScrollPosition) {\n if (this._scrollbarState.setScrollPosition(elementScrollPosition)) {\n this._visibilityController.setIsNeeded(this._scrollbarState.isNeeded());\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n return this._shouldRender;\n }\n // ----------------- rendering\n beginReveal() {\n this._visibilityController.setShouldBeVisible(true);\n }\n beginHide() {\n this._visibilityController.setShouldBeVisible(false);\n }\n render() {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n this._renderDomNode(this._scrollbarState.getRectangleLargeSize(), this._scrollbarState.getRectangleSmallSize());\n this._updateSlider(this._scrollbarState.getSliderSize(), this._scrollbarState.getArrowSize() + this._scrollbarState.getSliderPosition());\n }\n // ----------------- DOM events\n _domNodeMouseDown(e) {\n if (e.target !== this.domNode.domNode) {\n return;\n }\n this._onMouseDown(e);\n }\n delegateMouseDown(e) {\n const domTop = this.domNode.domNode.getClientRects()[0].top;\n const sliderStart = domTop + this._scrollbarState.getSliderPosition();\n const sliderStop = domTop + this._scrollbarState.getSliderPosition() + this._scrollbarState.getSliderSize();\n const mousePos = this._sliderMousePosition(e);\n if (sliderStart <= mousePos && mousePos <= sliderStop) {\n // Act as if it was a mouse down on the slider\n if (e.leftButton) {\n e.preventDefault();\n this._sliderMouseDown(e, () => { });\n }\n }\n else {\n // Act as if it was a mouse down on the scrollbar\n this._onMouseDown(e);\n }\n }\n _onMouseDown(e) {\n let offsetX;\n let offsetY;\n if (e.target === this.domNode.domNode && typeof e.browserEvent.offsetX === 'number' && typeof e.browserEvent.offsetY === 'number') {\n offsetX = e.browserEvent.offsetX;\n offsetY = e.browserEvent.offsetY;\n }\n else {\n const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n offsetX = e.posx - domNodePosition.left;\n offsetY = e.posy - domNodePosition.top;\n }\n const offset = this._mouseDownRelativePosition(offsetX, offsetY);\n this._setDesiredScrollPositionNow(this._scrollByPage\n ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n : this._scrollbarState.getDesiredScrollPositionFromOffset(offset));\n if (e.leftButton) {\n e.preventDefault();\n this._sliderMouseDown(e, () => { });\n }\n }\n _sliderMouseDown(e, onDragFinished) {\n const initialMousePosition = this._sliderMousePosition(e);\n const initialMouseOrthogonalPosition = this._sliderOrthogonalMousePosition(e);\n const initialScrollbarState = this._scrollbarState.clone();\n this.slider.toggleClassName('active', true);\n this._mouseMoveMonitor.startMonitoring(e.target, e.buttons, standardMouseMoveMerger, (mouseMoveData) => {\n const mouseOrthogonalPosition = this._sliderOrthogonalMousePosition(mouseMoveData);\n const mouseOrthogonalDelta = Math.abs(mouseOrthogonalPosition - initialMouseOrthogonalPosition);\n if (platform.isWindows && mouseOrthogonalDelta > MOUSE_DRAG_RESET_DISTANCE) {\n // The mouse has wondered away from the scrollbar => reset dragging\n this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n return;\n }\n const mousePosition = this._sliderMousePosition(mouseMoveData);\n const mouseDelta = mousePosition - initialMousePosition;\n this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(mouseDelta));\n }, () => {\n this.slider.toggleClassName('active', false);\n this._host.onDragEnd();\n onDragFinished();\n });\n this._host.onDragStart();\n }\n _setDesiredScrollPositionNow(_desiredScrollPosition) {\n const desiredScrollPosition = {};\n this.writeScrollPosition(desiredScrollPosition, _desiredScrollPosition);\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n updateScrollbarSize(scrollbarSize) {\n this._updateScrollbarSize(scrollbarSize);\n this._scrollbarState.setScrollbarSize(scrollbarSize);\n this._shouldRender = true;\n if (!this._lazyRender) {\n this.render();\n }\n }\n isNeeded() {\n return this._scrollbarState.isNeeded();\n }\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/**\n * The minimal size of the slider (such that it can still be clickable) -- it is artificially enlarged.\n */\nconst MINIMUM_SLIDER_SIZE = 20;\nexport class ScrollbarState {\n constructor(arrowSize, scrollbarSize, oppositeScrollbarSize, visibleSize, scrollSize, scrollPosition) {\n this._scrollbarSize = Math.round(scrollbarSize);\n this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\n this._arrowSize = Math.round(arrowSize);\n this._visibleSize = visibleSize;\n this._scrollSize = scrollSize;\n this._scrollPosition = scrollPosition;\n this._computedAvailableSize = 0;\n this._computedIsNeeded = false;\n this._computedSliderSize = 0;\n this._computedSliderRatio = 0;\n this._computedSliderPosition = 0;\n this._refreshComputedValues();\n }\n clone() {\n return new ScrollbarState(this._arrowSize, this._scrollbarSize, this._oppositeScrollbarSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n }\n setVisibleSize(visibleSize) {\n const iVisibleSize = Math.round(visibleSize);\n if (this._visibleSize !== iVisibleSize) {\n this._visibleSize = iVisibleSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n setScrollSize(scrollSize) {\n const iScrollSize = Math.round(scrollSize);\n if (this._scrollSize !== iScrollSize) {\n this._scrollSize = iScrollSize;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n setScrollPosition(scrollPosition) {\n const iScrollPosition = Math.round(scrollPosition);\n if (this._scrollPosition !== iScrollPosition) {\n this._scrollPosition = iScrollPosition;\n this._refreshComputedValues();\n return true;\n }\n return false;\n }\n setScrollbarSize(scrollbarSize) {\n this._scrollbarSize = scrollbarSize;\n }\n static _computeValues(oppositeScrollbarSize, arrowSize, visibleSize, scrollSize, scrollPosition) {\n const computedAvailableSize = Math.max(0, visibleSize - oppositeScrollbarSize);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * arrowSize);\n const computedIsNeeded = (scrollSize > 0 && scrollSize > visibleSize);\n if (!computedIsNeeded) {\n // There is no need for a slider\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedRepresentableSize),\n computedSliderRatio: 0,\n computedSliderPosition: 0,\n };\n }\n // We must artificially increase the size of the slider if needed, since the slider would be too small to grab with the mouse otherwise\n const computedSliderSize = Math.round(Math.max(MINIMUM_SLIDER_SIZE, Math.floor(visibleSize * computedRepresentableSize / scrollSize)));\n // The slider can move from 0 to `computedRepresentableSize` - `computedSliderSize`\n // in the same way `scrollPosition` can move from 0 to `scrollSize` - `visibleSize`.\n const computedSliderRatio = (computedRepresentableSize - computedSliderSize) / (scrollSize - visibleSize);\n const computedSliderPosition = (scrollPosition * computedSliderRatio);\n return {\n computedAvailableSize: Math.round(computedAvailableSize),\n computedIsNeeded: computedIsNeeded,\n computedSliderSize: Math.round(computedSliderSize),\n computedSliderRatio: computedSliderRatio,\n computedSliderPosition: Math.round(computedSliderPosition),\n };\n }\n _refreshComputedValues() {\n const r = ScrollbarState._computeValues(this._oppositeScrollbarSize, this._arrowSize, this._visibleSize, this._scrollSize, this._scrollPosition);\n this._computedAvailableSize = r.computedAvailableSize;\n this._computedIsNeeded = r.computedIsNeeded;\n this._computedSliderSize = r.computedSliderSize;\n this._computedSliderRatio = r.computedSliderRatio;\n this._computedSliderPosition = r.computedSliderPosition;\n }\n getArrowSize() {\n return this._arrowSize;\n }\n getScrollPosition() {\n return this._scrollPosition;\n }\n getRectangleLargeSize() {\n return this._computedAvailableSize;\n }\n getRectangleSmallSize() {\n return this._scrollbarSize;\n }\n isNeeded() {\n return this._computedIsNeeded;\n }\n getSliderSize() {\n return this._computedSliderSize;\n }\n getSliderPosition() {\n return this._computedSliderPosition;\n }\n /**\n * Compute a desired `scrollPosition` such that `offset` ends up in the center of the slider.\n * `offset` is based on the same coordinate system as the `sliderPosition`.\n */\n getDesiredScrollPositionFromOffset(offset) {\n if (!this._computedIsNeeded) {\n // no need for a slider\n return 0;\n }\n const desiredSliderPosition = offset - this._arrowSize - this._computedSliderSize / 2;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\n /**\n * Compute a desired `scrollPosition` from if offset is before or after the slider position.\n * If offset is before slider, treat as a page up (or left). If after, page down (or right).\n * `offset` and `_computedSliderPosition` are based on the same coordinate system.\n * `_visibleSize` corresponds to a \"page\" of lines in the returned coordinate system.\n */\n getDesiredScrollPositionFromOffsetPaged(offset) {\n if (!this._computedIsNeeded) {\n // no need for a slider\n return 0;\n }\n const correctedOffset = offset - this._arrowSize; // compensate if has arrows\n let desiredScrollPosition = this._scrollPosition;\n if (correctedOffset < this._computedSliderPosition) {\n desiredScrollPosition -= this._visibleSize; // page up/left\n }\n else {\n desiredScrollPosition += this._visibleSize; // page down/right\n }\n return desiredScrollPosition;\n }\n /**\n * Compute a desired `scrollPosition` such that the slider moves by `delta`.\n */\n getDesiredScrollPositionFromDelta(delta) {\n if (!this._computedIsNeeded) {\n // no need for a slider\n return 0;\n }\n const desiredSliderPosition = this._computedSliderPosition + delta;\n return Math.round(desiredSliderPosition / this._computedSliderRatio);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { StandardWheelEvent } from '../../mouseEvent.js';\nimport { AbstractScrollbar } from './abstractScrollbar.js';\nimport { ARROW_IMG_SIZE } from './scrollbarArrow.js';\nimport { ScrollbarState } from './scrollbarState.js';\nimport { Codicon, registerCodicon } from '../../../common/codicons.js';\nconst scrollbarButtonLeftIcon = registerCodicon('scrollbar-button-left', Codicon.triangleLeft);\nconst scrollbarButtonRightIcon = registerCodicon('scrollbar-button-right', Codicon.triangleRight);\nexport class HorizontalScrollbar extends AbstractScrollbar {\n constructor(scrollable, options, host) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState((options.horizontalHasArrows ? options.arrowSize : 0), (options.horizontal === 2 /* Hidden */ ? 0 : options.horizontalScrollbarSize), (options.vertical === 2 /* Hidden */ ? 0 : options.verticalScrollbarSize), scrollDimensions.width, scrollDimensions.scrollWidth, scrollPosition.scrollLeft),\n visibility: options.horizontal,\n extraScrollbarClassName: 'horizontal',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n if (options.horizontalHasArrows) {\n const arrowDelta = (options.arrowSize - ARROW_IMG_SIZE) / 2;\n const scrollbarDelta = (options.horizontalScrollbarSize - ARROW_IMG_SIZE) / 2;\n this._createArrow({\n className: 'scra',\n icon: scrollbarButtonLeftIcon,\n top: scrollbarDelta,\n left: arrowDelta,\n bottom: undefined,\n right: undefined,\n bgWidth: options.arrowSize,\n bgHeight: options.horizontalScrollbarSize,\n onActivate: () => this._host.onMouseWheel(new StandardWheelEvent(null, 1, 0)),\n });\n this._createArrow({\n className: 'scra',\n icon: scrollbarButtonRightIcon,\n top: scrollbarDelta,\n left: undefined,\n bottom: undefined,\n right: arrowDelta,\n bgWidth: options.arrowSize,\n bgHeight: options.horizontalScrollbarSize,\n onActivate: () => this._host.onMouseWheel(new StandardWheelEvent(null, -1, 0)),\n });\n }\n this._createSlider(Math.floor((options.horizontalScrollbarSize - options.horizontalSliderSize) / 2), 0, undefined, options.horizontalSliderSize);\n }\n _updateSlider(sliderSize, sliderPosition) {\n this.slider.setWidth(sliderSize);\n this.slider.setLeft(sliderPosition);\n }\n _renderDomNode(largeSize, smallSize) {\n this.domNode.setWidth(largeSize);\n this.domNode.setHeight(smallSize);\n this.domNode.setLeft(0);\n this.domNode.setBottom(0);\n }\n onDidScroll(e) {\n this._shouldRender = this._onElementScrollSize(e.scrollWidth) || this._shouldRender;\n this._shouldRender = this._onElementScrollPosition(e.scrollLeft) || this._shouldRender;\n this._shouldRender = this._onElementSize(e.width) || this._shouldRender;\n return this._shouldRender;\n }\n _mouseDownRelativePosition(offsetX, offsetY) {\n return offsetX;\n }\n _sliderMousePosition(e) {\n return e.posx;\n }\n _sliderOrthogonalMousePosition(e) {\n return e.posy;\n }\n _updateScrollbarSize(size) {\n this.slider.setHeight(size);\n }\n writeScrollPosition(target, scrollPosition) {\n target.scrollLeft = scrollPosition;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { StandardWheelEvent } from '../../mouseEvent.js';\nimport { AbstractScrollbar } from './abstractScrollbar.js';\nimport { ARROW_IMG_SIZE } from './scrollbarArrow.js';\nimport { ScrollbarState } from './scrollbarState.js';\nimport { Codicon, registerCodicon } from '../../../common/codicons.js';\nconst scrollbarButtonUpIcon = registerCodicon('scrollbar-button-up', Codicon.triangleUp);\nconst scrollbarButtonDownIcon = registerCodicon('scrollbar-button-down', Codicon.triangleDown);\nexport class VerticalScrollbar extends AbstractScrollbar {\n constructor(scrollable, options, host) {\n const scrollDimensions = scrollable.getScrollDimensions();\n const scrollPosition = scrollable.getCurrentScrollPosition();\n super({\n lazyRender: options.lazyRender,\n host: host,\n scrollbarState: new ScrollbarState((options.verticalHasArrows ? options.arrowSize : 0), (options.vertical === 2 /* Hidden */ ? 0 : options.verticalScrollbarSize), \n // give priority to vertical scroll bar over horizontal and let it scroll all the way to the bottom\n 0, scrollDimensions.height, scrollDimensions.scrollHeight, scrollPosition.scrollTop),\n visibility: options.vertical,\n extraScrollbarClassName: 'vertical',\n scrollable: scrollable,\n scrollByPage: options.scrollByPage\n });\n if (options.verticalHasArrows) {\n const arrowDelta = (options.arrowSize - ARROW_IMG_SIZE) / 2;\n const scrollbarDelta = (options.verticalScrollbarSize - ARROW_IMG_SIZE) / 2;\n this._createArrow({\n className: 'scra',\n icon: scrollbarButtonUpIcon,\n top: arrowDelta,\n left: scrollbarDelta,\n bottom: undefined,\n right: undefined,\n bgWidth: options.verticalScrollbarSize,\n bgHeight: options.arrowSize,\n onActivate: () => this._host.onMouseWheel(new StandardWheelEvent(null, 0, 1)),\n });\n this._createArrow({\n className: 'scra',\n icon: scrollbarButtonDownIcon,\n top: undefined,\n left: scrollbarDelta,\n bottom: arrowDelta,\n right: undefined,\n bgWidth: options.verticalScrollbarSize,\n bgHeight: options.arrowSize,\n onActivate: () => this._host.onMouseWheel(new StandardWheelEvent(null, 0, -1)),\n });\n }\n this._createSlider(0, Math.floor((options.verticalScrollbarSize - options.verticalSliderSize) / 2), options.verticalSliderSize, undefined);\n }\n _updateSlider(sliderSize, sliderPosition) {\n this.slider.setHeight(sliderSize);\n this.slider.setTop(sliderPosition);\n }\n _renderDomNode(largeSize, smallSize) {\n this.domNode.setWidth(smallSize);\n this.domNode.setHeight(largeSize);\n this.domNode.setRight(0);\n this.domNode.setTop(0);\n }\n onDidScroll(e) {\n this._shouldRender = this._onElementScrollSize(e.scrollHeight) || this._shouldRender;\n this._shouldRender = this._onElementScrollPosition(e.scrollTop) || this._shouldRender;\n this._shouldRender = this._onElementSize(e.height) || this._shouldRender;\n return this._shouldRender;\n }\n _mouseDownRelativePosition(offsetX, offsetY) {\n return offsetY;\n }\n _sliderMousePosition(e) {\n return e.posy;\n }\n _sliderOrthogonalMousePosition(e) {\n return e.posx;\n }\n _updateScrollbarSize(size) {\n this.slider.setWidth(size);\n }\n writeScrollPosition(target, scrollPosition) {\n target.scrollTop = scrollPosition;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './media/scrollbars.css';\nimport * as dom from '../../dom.js';\nimport { createFastDomNode } from '../../fastDomNode.js';\nimport { StandardWheelEvent } from '../../mouseEvent.js';\nimport { HorizontalScrollbar } from './horizontalScrollbar.js';\nimport { VerticalScrollbar } from './verticalScrollbar.js';\nimport { Widget } from '../widget.js';\nimport { TimeoutTimer } from '../../../common/async.js';\nimport { Emitter } from '../../../common/event.js';\nimport { dispose } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport { Scrollable } from '../../../common/scrollable.js';\nimport { getZoomFactor } from '../../browser.js';\nconst HIDE_TIMEOUT = 500;\nconst SCROLL_WHEEL_SENSITIVITY = 50;\nconst SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED = true;\nclass MouseWheelClassifierItem {\n constructor(timestamp, deltaX, deltaY) {\n this.timestamp = timestamp;\n this.deltaX = deltaX;\n this.deltaY = deltaY;\n this.score = 0;\n }\n}\nexport class MouseWheelClassifier {\n constructor() {\n this._capacity = 5;\n this._memory = [];\n this._front = -1;\n this._rear = -1;\n }\n isPhysicalMouseWheel() {\n if (this._front === -1 && this._rear === -1) {\n // no elements\n return false;\n }\n // 0.5 * last + 0.25 * 2nd last + 0.125 * 3rd last + ...\n let remainingInfluence = 1;\n let score = 0;\n let iteration = 1;\n let index = this._rear;\n do {\n const influence = (index === this._front ? remainingInfluence : Math.pow(2, -iteration));\n remainingInfluence -= influence;\n score += this._memory[index].score * influence;\n if (index === this._front) {\n break;\n }\n index = (this._capacity + index - 1) % this._capacity;\n iteration++;\n } while (true);\n return (score <= 0.5);\n }\n accept(timestamp, deltaX, deltaY) {\n const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\n item.score = this._computeScore(item);\n if (this._front === -1 && this._rear === -1) {\n this._memory[0] = item;\n this._front = 0;\n this._rear = 0;\n }\n else {\n this._rear = (this._rear + 1) % this._capacity;\n if (this._rear === this._front) {\n // Drop oldest\n this._front = (this._front + 1) % this._capacity;\n }\n this._memory[this._rear] = item;\n }\n }\n /**\n * A score between 0 and 1 for `item`.\n * - a score towards 0 indicates that the source appears to be a physical mouse wheel\n * - a score towards 1 indicates that the source appears to be a touchpad or magic mouse, etc.\n */\n _computeScore(item) {\n if (Math.abs(item.deltaX) > 0 && Math.abs(item.deltaY) > 0) {\n // both axes exercised => definitely not a physical mouse wheel\n return 1;\n }\n let score = 0.5;\n const prev = (this._front === -1 && this._rear === -1 ? null : this._memory[this._rear]);\n if (prev) {\n // const deltaT = item.timestamp - prev.timestamp;\n // if (deltaT < 1000 / 30) {\n // \t// sooner than X times per second => indicator that this is not a physical mouse wheel\n // \tscore += 0.25;\n // }\n // if (item.deltaX === prev.deltaX && item.deltaY === prev.deltaY) {\n // \t// equal amplitude => indicator that this is a physical mouse wheel\n // \tscore -= 0.25;\n // }\n }\n if (!this._isAlmostInt(item.deltaX) || !this._isAlmostInt(item.deltaY)) {\n // non-integer deltas => indicator that this is not a physical mouse wheel\n score += 0.25;\n }\n return Math.min(Math.max(score, 0), 1);\n }\n _isAlmostInt(value) {\n const delta = Math.abs(Math.round(value) - value);\n return (delta < 0.01);\n }\n}\nMouseWheelClassifier.INSTANCE = new MouseWheelClassifier();\nexport class AbstractScrollableElement extends Widget {\n constructor(element, options, scrollable) {\n super();\n this._onScroll = this._register(new Emitter());\n this.onScroll = this._onScroll.event;\n this._onWillScroll = this._register(new Emitter());\n element.style.overflow = 'hidden';\n this._options = resolveOptions(options);\n this._scrollable = scrollable;\n this._register(this._scrollable.onScroll((e) => {\n this._onWillScroll.fire(e);\n this._onDidScroll(e);\n this._onScroll.fire(e);\n }));\n const scrollbarHost = {\n onMouseWheel: (mouseWheelEvent) => this._onMouseWheel(mouseWheelEvent),\n onDragStart: () => this._onDragStart(),\n onDragEnd: () => this._onDragEnd(),\n };\n this._verticalScrollbar = this._register(new VerticalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._horizontalScrollbar = this._register(new HorizontalScrollbar(this._scrollable, this._options, scrollbarHost));\n this._domNode = document.createElement('div');\n this._domNode.className = 'monaco-scrollable-element ' + this._options.className;\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.style.position = 'relative';\n this._domNode.style.overflow = 'hidden';\n this._domNode.appendChild(element);\n this._domNode.appendChild(this._horizontalScrollbar.domNode.domNode);\n this._domNode.appendChild(this._verticalScrollbar.domNode.domNode);\n if (this._options.useShadows) {\n this._leftShadowDomNode = createFastDomNode(document.createElement('div'));\n this._leftShadowDomNode.setClassName('shadow');\n this._domNode.appendChild(this._leftShadowDomNode.domNode);\n this._topShadowDomNode = createFastDomNode(document.createElement('div'));\n this._topShadowDomNode.setClassName('shadow');\n this._domNode.appendChild(this._topShadowDomNode.domNode);\n this._topLeftShadowDomNode = createFastDomNode(document.createElement('div'));\n this._topLeftShadowDomNode.setClassName('shadow');\n this._domNode.appendChild(this._topLeftShadowDomNode.domNode);\n }\n else {\n this._leftShadowDomNode = null;\n this._topShadowDomNode = null;\n this._topLeftShadowDomNode = null;\n }\n this._listenOnDomNode = this._options.listenOnDomNode || this._domNode;\n this._mouseWheelToDispose = [];\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n this.onmouseover(this._listenOnDomNode, (e) => this._onMouseOver(e));\n this.onnonbubblingmouseout(this._listenOnDomNode, (e) => this._onMouseOut(e));\n this._hideTimeout = this._register(new TimeoutTimer());\n this._isDragging = false;\n this._mouseIsOver = false;\n this._shouldRender = true;\n this._revealOnScroll = true;\n }\n dispose() {\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n super.dispose();\n }\n /**\n * Get the generated 'scrollable' dom node\n */\n getDomNode() {\n return this._domNode;\n }\n getOverviewRulerLayoutInfo() {\n return {\n parent: this._domNode,\n insertBefore: this._verticalScrollbar.domNode.domNode,\n };\n }\n /**\n * Delegate a mouse down event to the vertical scrollbar.\n * This is to help with clicking somewhere else and having the scrollbar react.\n */\n delegateVerticalScrollbarMouseDown(browserEvent) {\n this._verticalScrollbar.delegateMouseDown(browserEvent);\n }\n getScrollDimensions() {\n return this._scrollable.getScrollDimensions();\n }\n setScrollDimensions(dimensions) {\n this._scrollable.setScrollDimensions(dimensions, false);\n }\n /**\n * Update the class name of the scrollable element.\n */\n updateClassName(newClassName) {\n this._options.className = newClassName;\n // Defaults are different on Macs\n if (platform.isMacintosh) {\n this._options.className += ' mac';\n }\n this._domNode.className = 'monaco-scrollable-element ' + this._options.className;\n }\n /**\n * Update configuration options for the scrollbar.\n * Really this is Editor.IEditorScrollbarOptions, but base shouldn't\n * depend on Editor.\n */\n updateOptions(newOptions) {\n if (typeof newOptions.handleMouseWheel !== 'undefined') {\n this._options.handleMouseWheel = newOptions.handleMouseWheel;\n this._setListeningToMouseWheel(this._options.handleMouseWheel);\n }\n if (typeof newOptions.mouseWheelScrollSensitivity !== 'undefined') {\n this._options.mouseWheelScrollSensitivity = newOptions.mouseWheelScrollSensitivity;\n }\n if (typeof newOptions.fastScrollSensitivity !== 'undefined') {\n this._options.fastScrollSensitivity = newOptions.fastScrollSensitivity;\n }\n if (typeof newOptions.scrollPredominantAxis !== 'undefined') {\n this._options.scrollPredominantAxis = newOptions.scrollPredominantAxis;\n }\n if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n this._horizontalScrollbar.updateScrollbarSize(newOptions.horizontalScrollbarSize);\n }\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n // -------------------- mouse wheel scrolling --------------------\n _setListeningToMouseWheel(shouldListen) {\n const isListening = (this._mouseWheelToDispose.length > 0);\n if (isListening === shouldListen) {\n // No change\n return;\n }\n // Stop listening (if necessary)\n this._mouseWheelToDispose = dispose(this._mouseWheelToDispose);\n // Start listening (if necessary)\n if (shouldListen) {\n const onMouseWheel = (browserEvent) => {\n this._onMouseWheel(new StandardWheelEvent(browserEvent));\n };\n this._mouseWheelToDispose.push(dom.addDisposableListener(this._listenOnDomNode, dom.EventType.MOUSE_WHEEL, onMouseWheel, { passive: false }));\n }\n }\n _onMouseWheel(e) {\n const classifier = MouseWheelClassifier.INSTANCE;\n if (SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED) {\n const osZoomFactor = window.devicePixelRatio / getZoomFactor();\n if (platform.isWindows || platform.isLinux) {\n // On Windows and Linux, the incoming delta events are multiplied with the OS zoom factor.\n // The OS zoom factor can be reverse engineered by using the device pixel ratio and the configured zoom factor into account.\n classifier.accept(Date.now(), e.deltaX / osZoomFactor, e.deltaY / osZoomFactor);\n }\n else {\n classifier.accept(Date.now(), e.deltaX, e.deltaY);\n }\n }\n // console.log(`${Date.now()}, ${e.deltaY}, ${e.deltaX}`);\n let didScroll = false;\n if (e.deltaY || e.deltaX) {\n let deltaY = e.deltaY * this._options.mouseWheelScrollSensitivity;\n let deltaX = e.deltaX * this._options.mouseWheelScrollSensitivity;\n if (this._options.scrollPredominantAxis) {\n if (Math.abs(deltaY) >= Math.abs(deltaX)) {\n deltaX = 0;\n }\n else {\n deltaY = 0;\n }\n }\n if (this._options.flipAxes) {\n [deltaY, deltaX] = [deltaX, deltaY];\n }\n // Convert vertical scrolling to horizontal if shift is held, this\n // is handled at a higher level on Mac\n const shiftConvert = !platform.isMacintosh && e.browserEvent && e.browserEvent.shiftKey;\n if ((this._options.scrollYToX || shiftConvert) && !deltaX) {\n deltaX = deltaY;\n deltaY = 0;\n }\n if (e.browserEvent && e.browserEvent.altKey) {\n // fastScrolling\n deltaX = deltaX * this._options.fastScrollSensitivity;\n deltaY = deltaY * this._options.fastScrollSensitivity;\n }\n const futureScrollPosition = this._scrollable.getFutureScrollPosition();\n let desiredScrollPosition = {};\n if (deltaY) {\n const desiredScrollTop = futureScrollPosition.scrollTop - SCROLL_WHEEL_SENSITIVITY * deltaY;\n this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n }\n if (deltaX) {\n const desiredScrollLeft = futureScrollPosition.scrollLeft - SCROLL_WHEEL_SENSITIVITY * deltaX;\n this._horizontalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollLeft);\n }\n // Check that we are scrolling towards a location which is valid\n desiredScrollPosition = this._scrollable.validateScrollPosition(desiredScrollPosition);\n if (futureScrollPosition.scrollLeft !== desiredScrollPosition.scrollLeft || futureScrollPosition.scrollTop !== desiredScrollPosition.scrollTop) {\n const canPerformSmoothScroll = (SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED\n && this._options.mouseWheelSmoothScroll\n && classifier.isPhysicalMouseWheel());\n if (canPerformSmoothScroll) {\n this._scrollable.setScrollPositionSmooth(desiredScrollPosition);\n }\n else {\n this._scrollable.setScrollPositionNow(desiredScrollPosition);\n }\n didScroll = true;\n }\n }\n let consumeMouseWheel = didScroll;\n if (!consumeMouseWheel && this._options.alwaysConsumeMouseWheel) {\n consumeMouseWheel = true;\n }\n if (!consumeMouseWheel && this._options.consumeMouseWheelIfScrollbarIsNeeded && (this._verticalScrollbar.isNeeded() || this._horizontalScrollbar.isNeeded())) {\n consumeMouseWheel = true;\n }\n if (consumeMouseWheel) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n _onDidScroll(e) {\n this._shouldRender = this._horizontalScrollbar.onDidScroll(e) || this._shouldRender;\n this._shouldRender = this._verticalScrollbar.onDidScroll(e) || this._shouldRender;\n if (this._options.useShadows) {\n this._shouldRender = true;\n }\n if (this._revealOnScroll) {\n this._reveal();\n }\n if (!this._options.lazyRender) {\n this._render();\n }\n }\n /**\n * Render / mutate the DOM now.\n * Should be used together with the ctor option `lazyRender`.\n */\n renderNow() {\n if (!this._options.lazyRender) {\n throw new Error('Please use `lazyRender` together with `renderNow`!');\n }\n this._render();\n }\n _render() {\n if (!this._shouldRender) {\n return;\n }\n this._shouldRender = false;\n this._horizontalScrollbar.render();\n this._verticalScrollbar.render();\n if (this._options.useShadows) {\n const scrollState = this._scrollable.getCurrentScrollPosition();\n const enableTop = scrollState.scrollTop > 0;\n const enableLeft = scrollState.scrollLeft > 0;\n const leftClassName = (enableLeft ? ' left' : '');\n const topClassName = (enableTop ? ' top' : '');\n const topLeftClassName = (enableLeft || enableTop ? ' top-left-corner' : '');\n this._leftShadowDomNode.setClassName(`shadow${leftClassName}`);\n this._topShadowDomNode.setClassName(`shadow${topClassName}`);\n this._topLeftShadowDomNode.setClassName(`shadow${topLeftClassName}${topClassName}${leftClassName}`);\n }\n }\n // -------------------- fade in / fade out --------------------\n _onDragStart() {\n this._isDragging = true;\n this._reveal();\n }\n _onDragEnd() {\n this._isDragging = false;\n this._hide();\n }\n _onMouseOut(e) {\n this._mouseIsOver = false;\n this._hide();\n }\n _onMouseOver(e) {\n this._mouseIsOver = true;\n this._reveal();\n }\n _reveal() {\n this._verticalScrollbar.beginReveal();\n this._horizontalScrollbar.beginReveal();\n this._scheduleHide();\n }\n _hide() {\n if (!this._mouseIsOver && !this._isDragging) {\n this._verticalScrollbar.beginHide();\n this._horizontalScrollbar.beginHide();\n }\n }\n _scheduleHide() {\n if (!this._mouseIsOver && !this._isDragging) {\n this._hideTimeout.cancelAndSet(() => this._hide(), HIDE_TIMEOUT);\n }\n }\n}\nexport class ScrollableElement extends AbstractScrollableElement {\n constructor(element, options) {\n options = options || {};\n options.mouseWheelSmoothScroll = false;\n const scrollable = new Scrollable(0, (callback) => dom.scheduleAtNextAnimationFrame(callback));\n super(element, options, scrollable);\n this._register(scrollable);\n }\n setScrollPosition(update) {\n this._scrollable.setScrollPositionNow(update);\n }\n}\nexport class SmoothScrollableElement extends AbstractScrollableElement {\n constructor(element, options, scrollable) {\n super(element, options, scrollable);\n }\n setScrollPosition(update) {\n if (update.reuseAnimation) {\n this._scrollable.setScrollPositionSmooth(update, update.reuseAnimation);\n }\n else {\n this._scrollable.setScrollPositionNow(update);\n }\n }\n getScrollPosition() {\n return this._scrollable.getCurrentScrollPosition();\n }\n}\nexport class DomScrollableElement extends ScrollableElement {\n constructor(element, options) {\n super(element, options);\n this._element = element;\n this.onScroll((e) => {\n if (e.scrollTopChanged) {\n this._element.scrollTop = e.scrollTop;\n }\n if (e.scrollLeftChanged) {\n this._element.scrollLeft = e.scrollLeft;\n }\n });\n this.scanDomNode();\n }\n scanDomNode() {\n // width, scrollLeft, scrollWidth, height, scrollTop, scrollHeight\n this.setScrollDimensions({\n width: this._element.clientWidth,\n scrollWidth: this._element.scrollWidth,\n height: this._element.clientHeight,\n scrollHeight: this._element.scrollHeight\n });\n this.setScrollPosition({\n scrollLeft: this._element.scrollLeft,\n scrollTop: this._element.scrollTop,\n });\n }\n}\nfunction resolveOptions(opts) {\n const result = {\n lazyRender: (typeof opts.lazyRender !== 'undefined' ? opts.lazyRender : false),\n className: (typeof opts.className !== 'undefined' ? opts.className : ''),\n useShadows: (typeof opts.useShadows !== 'undefined' ? opts.useShadows : true),\n handleMouseWheel: (typeof opts.handleMouseWheel !== 'undefined' ? opts.handleMouseWheel : true),\n flipAxes: (typeof opts.flipAxes !== 'undefined' ? opts.flipAxes : false),\n consumeMouseWheelIfScrollbarIsNeeded: (typeof opts.consumeMouseWheelIfScrollbarIsNeeded !== 'undefined' ? opts.consumeMouseWheelIfScrollbarIsNeeded : false),\n alwaysConsumeMouseWheel: (typeof opts.alwaysConsumeMouseWheel !== 'undefined' ? opts.alwaysConsumeMouseWheel : false),\n scrollYToX: (typeof opts.scrollYToX !== 'undefined' ? opts.scrollYToX : false),\n mouseWheelScrollSensitivity: (typeof opts.mouseWheelScrollSensitivity !== 'undefined' ? opts.mouseWheelScrollSensitivity : 1),\n fastScrollSensitivity: (typeof opts.fastScrollSensitivity !== 'undefined' ? opts.fastScrollSensitivity : 5),\n scrollPredominantAxis: (typeof opts.scrollPredominantAxis !== 'undefined' ? opts.scrollPredominantAxis : true),\n mouseWheelSmoothScroll: (typeof opts.mouseWheelSmoothScroll !== 'undefined' ? opts.mouseWheelSmoothScroll : true),\n arrowSize: (typeof opts.arrowSize !== 'undefined' ? opts.arrowSize : 11),\n listenOnDomNode: (typeof opts.listenOnDomNode !== 'undefined' ? opts.listenOnDomNode : null),\n horizontal: (typeof opts.horizontal !== 'undefined' ? opts.horizontal : 1 /* Auto */),\n horizontalScrollbarSize: (typeof opts.horizontalScrollbarSize !== 'undefined' ? opts.horizontalScrollbarSize : 10),\n horizontalSliderSize: (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : 0),\n horizontalHasArrows: (typeof opts.horizontalHasArrows !== 'undefined' ? opts.horizontalHasArrows : false),\n vertical: (typeof opts.vertical !== 'undefined' ? opts.vertical : 1 /* Auto */),\n verticalScrollbarSize: (typeof opts.verticalScrollbarSize !== 'undefined' ? opts.verticalScrollbarSize : 10),\n verticalHasArrows: (typeof opts.verticalHasArrows !== 'undefined' ? opts.verticalHasArrows : false),\n verticalSliderSize: (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : 0),\n scrollByPage: (typeof opts.scrollByPage !== 'undefined' ? opts.scrollByPage : false)\n };\n result.horizontalSliderSize = (typeof opts.horizontalSliderSize !== 'undefined' ? opts.horizontalSliderSize : result.horizontalScrollbarSize);\n result.verticalSliderSize = (typeof opts.verticalSliderSize !== 'undefined' ? opts.verticalSliderSize : result.verticalScrollbarSize);\n // Defaults are different on Macs\n if (platform.isMacintosh) {\n result.className += ' mac';\n }\n return result;\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 *--------------------------------------------------------------------------------------------*/\nimport './splitview.css';\nimport { toDisposable, Disposable, combinedDisposable } from '../../../common/lifecycle.js';\nimport { Event, Emitter } from '../../../common/event.js';\nimport * as types from '../../../common/types.js';\nimport { clamp } from '../../../common/numbers.js';\nimport { range, pushToStart, pushToEnd } from '../../../common/arrays.js';\nimport { Sash } from '../sash/sash.js';\nimport { Color } from '../../../common/color.js';\nimport { domEvent } from '../../event.js';\nimport { $, append, scheduleAtNextAnimationFrame } from '../../dom.js';\nimport { SmoothScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { Scrollable } from '../../../common/scrollable.js';\nconst defaultStyles = {\n separatorBorder: Color.transparent\n};\nclass ViewItem {\n constructor(container, view, size, disposable) {\n this.container = container;\n this.view = view;\n this.disposable = disposable;\n this._cachedVisibleSize = undefined;\n if (typeof size === 'number') {\n this._size = size;\n this._cachedVisibleSize = undefined;\n container.classList.add('visible');\n }\n else {\n this._size = 0;\n this._cachedVisibleSize = size.cachedVisibleSize;\n }\n }\n set size(size) {\n this._size = size;\n }\n get size() {\n return this._size;\n }\n get visible() {\n return typeof this._cachedVisibleSize === 'undefined';\n }\n setVisible(visible, size) {\n if (visible === this.visible) {\n return;\n }\n if (visible) {\n this.size = clamp(this._cachedVisibleSize, this.viewMinimumSize, this.viewMaximumSize);\n this._cachedVisibleSize = undefined;\n }\n else {\n this._cachedVisibleSize = typeof size === 'number' ? size : this.size;\n this.size = 0;\n }\n this.container.classList.toggle('visible', visible);\n if (this.view.setVisible) {\n this.view.setVisible(visible);\n }\n }\n get minimumSize() { return this.visible ? this.view.minimumSize : 0; }\n get viewMinimumSize() { return this.view.minimumSize; }\n get maximumSize() { return this.visible ? this.view.maximumSize : 0; }\n get viewMaximumSize() { return this.view.maximumSize; }\n get priority() { return this.view.priority; }\n get snap() { return !!this.view.snap; }\n set enabled(enabled) {\n this.container.style.pointerEvents = enabled ? '' : 'none';\n }\n layout(offset, layoutContext) {\n this.layoutContainer(offset);\n this.view.layout(this.size, offset, layoutContext);\n }\n dispose() {\n this.disposable.dispose();\n return this.view;\n }\n}\nclass VerticalViewItem extends ViewItem {\n layoutContainer(offset) {\n this.container.style.top = `${offset}px`;\n this.container.style.height = `${this.size}px`;\n }\n}\nclass HorizontalViewItem extends ViewItem {\n layoutContainer(offset) {\n this.container.style.left = `${offset}px`;\n this.container.style.width = `${this.size}px`;\n }\n}\nvar State;\n(function (State) {\n State[State[\"Idle\"] = 0] = \"Idle\";\n State[State[\"Busy\"] = 1] = \"Busy\";\n})(State || (State = {}));\nexport var Sizing;\n(function (Sizing) {\n Sizing.Distribute = { type: 'distribute' };\n function Split(index) { return { type: 'split', index }; }\n Sizing.Split = Split;\n function Invisible(cachedVisibleSize) { return { type: 'invisible', cachedVisibleSize }; }\n Sizing.Invisible = Invisible;\n})(Sizing || (Sizing = {}));\nexport class SplitView extends Disposable {\n constructor(container, options = {}) {\n var _a, _b;\n super();\n this.size = 0;\n this.contentSize = 0;\n this.proportions = undefined;\n this.viewItems = [];\n this.sashItems = [];\n this.state = State.Idle;\n this._onDidSashChange = this._register(new Emitter());\n this.onDidSashChange = this._onDidSashChange.event;\n this._onDidSashReset = this._register(new Emitter());\n this._startSnappingEnabled = true;\n this._endSnappingEnabled = true;\n this.orientation = types.isUndefined(options.orientation) ? 0 /* VERTICAL */ : options.orientation;\n this.inverseAltBehavior = !!options.inverseAltBehavior;\n this.proportionalLayout = types.isUndefined(options.proportionalLayout) ? true : !!options.proportionalLayout;\n this.getSashOrthogonalSize = options.getSashOrthogonalSize;\n this.el = document.createElement('div');\n this.el.classList.add('monaco-split-view2');\n this.el.classList.add(this.orientation === 0 /* VERTICAL */ ? 'vertical' : 'horizontal');\n container.appendChild(this.el);\n this.sashContainer = append(this.el, $('.sash-container'));\n this.viewContainer = $('.split-view-container');\n this.scrollable = new Scrollable(125, scheduleAtNextAnimationFrame);\n this.scrollableElement = this._register(new SmoothScrollableElement(this.viewContainer, {\n vertical: this.orientation === 0 /* VERTICAL */ ? ((_a = options.scrollbarVisibility) !== null && _a !== void 0 ? _a : 1 /* Auto */) : 2 /* Hidden */,\n horizontal: this.orientation === 1 /* HORIZONTAL */ ? ((_b = options.scrollbarVisibility) !== null && _b !== void 0 ? _b : 1 /* Auto */) : 2 /* Hidden */\n }, this.scrollable));\n this._register(this.scrollableElement.onScroll(e => {\n this.viewContainer.scrollTop = e.scrollTop;\n this.viewContainer.scrollLeft = e.scrollLeft;\n }));\n append(this.el, this.scrollableElement.getDomNode());\n this.style(options.styles || defaultStyles);\n // We have an existing set of view, add them now\n if (options.descriptor) {\n this.size = options.descriptor.size;\n options.descriptor.views.forEach((viewDescriptor, index) => {\n const sizing = types.isUndefined(viewDescriptor.visible) || viewDescriptor.visible ? viewDescriptor.size : { type: 'invisible', cachedVisibleSize: viewDescriptor.size };\n const view = viewDescriptor.view;\n this.doAddView(view, sizing, index, true);\n });\n // Initialize content size and proportions for first layout\n this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);\n this.saveProportions();\n }\n }\n get orthogonalStartSash() { return this._orthogonalStartSash; }\n set orthogonalStartSash(sash) {\n for (const sashItem of this.sashItems) {\n sashItem.sash.orthogonalStartSash = sash;\n }\n this._orthogonalStartSash = sash;\n }\n get orthogonalEndSash() { return this._orthogonalEndSash; }\n set orthogonalEndSash(sash) {\n for (const sashItem of this.sashItems) {\n sashItem.sash.orthogonalEndSash = sash;\n }\n this._orthogonalEndSash = sash;\n }\n get startSnappingEnabled() { return this._startSnappingEnabled; }\n set startSnappingEnabled(startSnappingEnabled) {\n if (this._startSnappingEnabled === startSnappingEnabled) {\n return;\n }\n this._startSnappingEnabled = startSnappingEnabled;\n this.updateSashEnablement();\n }\n get endSnappingEnabled() { return this._endSnappingEnabled; }\n set endSnappingEnabled(endSnappingEnabled) {\n if (this._endSnappingEnabled === endSnappingEnabled) {\n return;\n }\n this._endSnappingEnabled = endSnappingEnabled;\n this.updateSashEnablement();\n }\n style(styles) {\n if (styles.separatorBorder.isTransparent()) {\n this.el.classList.remove('separator-border');\n this.el.style.removeProperty('--separator-border');\n }\n else {\n this.el.classList.add('separator-border');\n this.el.style.setProperty('--separator-border', styles.separatorBorder.toString());\n }\n }\n addView(view, size, index = this.viewItems.length, skipLayout) {\n this.doAddView(view, size, index, skipLayout);\n }\n layout(size, layoutContext) {\n const previousSize = Math.max(this.size, this.contentSize);\n this.size = size;\n this.layoutContext = layoutContext;\n if (!this.proportions) {\n const indexes = range(this.viewItems.length);\n const lowPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 1 /* Low */);\n const highPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 2 /* High */);\n this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);\n }\n else {\n for (let i = 0; i < this.viewItems.length; i++) {\n const item = this.viewItems[i];\n item.size = clamp(Math.round(this.proportions[i] * size), item.minimumSize, item.maximumSize);\n }\n }\n this.distributeEmptySpace();\n this.layoutViews();\n }\n saveProportions() {\n if (this.proportionalLayout && this.contentSize > 0) {\n this.proportions = this.viewItems.map(i => i.size / this.contentSize);\n }\n }\n onSashStart({ sash, start, alt }) {\n for (const item of this.viewItems) {\n item.enabled = false;\n }\n const index = this.sashItems.findIndex(item => item.sash === sash);\n // This way, we can press Alt while we resize a sash, macOS style!\n const disposable = combinedDisposable(domEvent(document.body, 'keydown')(e => resetSashDragState(this.sashDragState.current, e.altKey)), domEvent(document.body, 'keyup')(() => resetSashDragState(this.sashDragState.current, false)));\n const resetSashDragState = (start, alt) => {\n const sizes = this.viewItems.map(i => i.size);\n let minDelta = Number.NEGATIVE_INFINITY;\n let maxDelta = Number.POSITIVE_INFINITY;\n if (this.inverseAltBehavior) {\n alt = !alt;\n }\n if (alt) {\n // When we're using the last sash with Alt, we're resizing\n // the view to the left/up, instead of right/down as usual\n // Thus, we must do the inverse of the usual\n const isLastSash = index === this.sashItems.length - 1;\n if (isLastSash) {\n const viewItem = this.viewItems[index];\n minDelta = (viewItem.minimumSize - viewItem.size) / 2;\n maxDelta = (viewItem.maximumSize - viewItem.size) / 2;\n }\n else {\n const viewItem = this.viewItems[index + 1];\n minDelta = (viewItem.size - viewItem.maximumSize) / 2;\n maxDelta = (viewItem.size - viewItem.minimumSize) / 2;\n }\n }\n let snapBefore;\n let snapAfter;\n if (!alt) {\n const upIndexes = range(index, -1);\n const downIndexes = range(index + 1, this.viewItems.length);\n const minDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].minimumSize - sizes[i]), 0);\n const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].viewMaximumSize - sizes[i]), 0);\n const maxDeltaDown = downIndexes.length === 0 ? Number.POSITIVE_INFINITY : downIndexes.reduce((r, i) => r + (sizes[i] - this.viewItems[i].minimumSize), 0);\n const minDeltaDown = downIndexes.length === 0 ? Number.NEGATIVE_INFINITY : downIndexes.reduce((r, i) => r + (sizes[i] - this.viewItems[i].viewMaximumSize), 0);\n const minDelta = Math.max(minDeltaUp, minDeltaDown);\n const maxDelta = Math.min(maxDeltaDown, maxDeltaUp);\n const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);\n const snapAfterIndex = this.findFirstSnapIndex(downIndexes);\n if (typeof snapBeforeIndex === 'number') {\n const viewItem = this.viewItems[snapBeforeIndex];\n const halfSize = Math.floor(viewItem.viewMinimumSize / 2);\n snapBefore = {\n index: snapBeforeIndex,\n limitDelta: viewItem.visible ? minDelta - halfSize : minDelta + halfSize,\n size: viewItem.size\n };\n }\n if (typeof snapAfterIndex === 'number') {\n const viewItem = this.viewItems[snapAfterIndex];\n const halfSize = Math.floor(viewItem.viewMinimumSize / 2);\n snapAfter = {\n index: snapAfterIndex,\n limitDelta: viewItem.visible ? maxDelta + halfSize : maxDelta - halfSize,\n size: viewItem.size\n };\n }\n }\n this.sashDragState = { start, current: start, index, sizes, minDelta, maxDelta, alt, snapBefore, snapAfter, disposable };\n };\n resetSashDragState(start, alt);\n }\n onSashChange({ current }) {\n const { index, start, sizes, alt, minDelta, maxDelta, snapBefore, snapAfter } = this.sashDragState;\n this.sashDragState.current = current;\n const delta = current - start;\n const newDelta = this.resize(index, delta, sizes, undefined, undefined, minDelta, maxDelta, snapBefore, snapAfter);\n if (alt) {\n const isLastSash = index === this.sashItems.length - 1;\n const newSizes = this.viewItems.map(i => i.size);\n const viewItemIndex = isLastSash ? index : index + 1;\n const viewItem = this.viewItems[viewItemIndex];\n const newMinDelta = viewItem.size - viewItem.maximumSize;\n const newMaxDelta = viewItem.size - viewItem.minimumSize;\n const resizeIndex = isLastSash ? index - 1 : index + 1;\n this.resize(resizeIndex, -newDelta, newSizes, undefined, undefined, newMinDelta, newMaxDelta);\n }\n this.distributeEmptySpace();\n this.layoutViews();\n }\n onSashEnd(index) {\n this._onDidSashChange.fire(index);\n this.sashDragState.disposable.dispose();\n this.saveProportions();\n for (const item of this.viewItems) {\n item.enabled = true;\n }\n }\n onViewChange(item, size) {\n const index = this.viewItems.indexOf(item);\n if (index < 0 || index >= this.viewItems.length) {\n return;\n }\n size = typeof size === 'number' ? size : item.size;\n size = clamp(size, item.minimumSize, item.maximumSize);\n if (this.inverseAltBehavior && index > 0) {\n // In this case, we want the view to grow or shrink both sides equally\n // so we just resize the \"left\" side by half and let `resize` do the clamping magic\n this.resize(index - 1, Math.floor((item.size - size) / 2));\n this.distributeEmptySpace();\n this.layoutViews();\n }\n else {\n item.size = size;\n this.relayout([index], undefined);\n }\n }\n resizeView(index, size) {\n if (this.state !== State.Idle) {\n throw new Error('Cant modify splitview');\n }\n this.state = State.Busy;\n if (index < 0 || index >= this.viewItems.length) {\n return;\n }\n const indexes = range(this.viewItems.length).filter(i => i !== index);\n const lowPriorityIndexes = [...indexes.filter(i => this.viewItems[i].priority === 1 /* Low */), index];\n const highPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 2 /* High */);\n const item = this.viewItems[index];\n size = Math.round(size);\n size = clamp(size, item.minimumSize, Math.min(item.maximumSize, this.size));\n item.size = size;\n this.relayout(lowPriorityIndexes, highPriorityIndexes);\n this.state = State.Idle;\n }\n distributeViewSizes() {\n const flexibleViewItems = [];\n let flexibleSize = 0;\n for (const item of this.viewItems) {\n if (item.maximumSize - item.minimumSize > 0) {\n flexibleViewItems.push(item);\n flexibleSize += item.size;\n }\n }\n const size = Math.floor(flexibleSize / flexibleViewItems.length);\n for (const item of flexibleViewItems) {\n item.size = clamp(size, item.minimumSize, item.maximumSize);\n }\n const indexes = range(this.viewItems.length);\n const lowPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 1 /* Low */);\n const highPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 2 /* High */);\n this.relayout(lowPriorityIndexes, highPriorityIndexes);\n }\n getViewSize(index) {\n if (index < 0 || index >= this.viewItems.length) {\n return -1;\n }\n return this.viewItems[index].size;\n }\n doAddView(view, size, index = this.viewItems.length, skipLayout) {\n if (this.state !== State.Idle) {\n throw new Error('Cant modify splitview');\n }\n this.state = State.Busy;\n // Add view\n const container = $('.split-view-view');\n if (index === this.viewItems.length) {\n this.viewContainer.appendChild(container);\n }\n else {\n this.viewContainer.insertBefore(container, this.viewContainer.children.item(index));\n }\n const onChangeDisposable = view.onDidChange(size => this.onViewChange(item, size));\n const containerDisposable = toDisposable(() => this.viewContainer.removeChild(container));\n const disposable = combinedDisposable(onChangeDisposable, containerDisposable);\n let viewSize;\n if (typeof size === 'number') {\n viewSize = size;\n }\n else if (size.type === 'split') {\n viewSize = this.getViewSize(size.index) / 2;\n }\n else if (size.type === 'invisible') {\n viewSize = { cachedVisibleSize: size.cachedVisibleSize };\n }\n else {\n viewSize = view.minimumSize;\n }\n const item = this.orientation === 0 /* VERTICAL */\n ? new VerticalViewItem(container, view, viewSize, disposable)\n : new HorizontalViewItem(container, view, viewSize, disposable);\n this.viewItems.splice(index, 0, item);\n // Add sash\n if (this.viewItems.length > 1) {\n let opts = { orthogonalStartSash: this.orthogonalStartSash, orthogonalEndSash: this.orthogonalEndSash };\n const sash = this.orientation === 0 /* VERTICAL */\n ? new Sash(this.sashContainer, { getHorizontalSashTop: s => this.getSashPosition(s), getHorizontalSashWidth: this.getSashOrthogonalSize }, Object.assign(Object.assign({}, opts), { orientation: 1 /* HORIZONTAL */ }))\n : new Sash(this.sashContainer, { getVerticalSashLeft: s => this.getSashPosition(s), getVerticalSashHeight: this.getSashOrthogonalSize }, Object.assign(Object.assign({}, opts), { orientation: 0 /* VERTICAL */ }));\n const sashEventMapper = this.orientation === 0 /* VERTICAL */\n ? (e) => ({ sash, start: e.startY, current: e.currentY, alt: e.altKey })\n : (e) => ({ sash, start: e.startX, current: e.currentX, alt: e.altKey });\n const onStart = Event.map(sash.onDidStart, sashEventMapper);\n const onStartDisposable = onStart(this.onSashStart, this);\n const onChange = Event.map(sash.onDidChange, sashEventMapper);\n const onChangeDisposable = onChange(this.onSashChange, this);\n const onEnd = Event.map(sash.onDidEnd, () => this.sashItems.findIndex(item => item.sash === sash));\n const onEndDisposable = onEnd(this.onSashEnd, this);\n const onDidResetDisposable = sash.onDidReset(() => {\n const index = this.sashItems.findIndex(item => item.sash === sash);\n const upIndexes = range(index, -1);\n const downIndexes = range(index + 1, this.viewItems.length);\n const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);\n const snapAfterIndex = this.findFirstSnapIndex(downIndexes);\n if (typeof snapBeforeIndex === 'number' && !this.viewItems[snapBeforeIndex].visible) {\n return;\n }\n if (typeof snapAfterIndex === 'number' && !this.viewItems[snapAfterIndex].visible) {\n return;\n }\n this._onDidSashReset.fire(index);\n });\n const disposable = combinedDisposable(onStartDisposable, onChangeDisposable, onEndDisposable, onDidResetDisposable, sash);\n const sashItem = { sash, disposable };\n this.sashItems.splice(index - 1, 0, sashItem);\n }\n container.appendChild(view.element);\n let highPriorityIndexes;\n if (typeof size !== 'number' && size.type === 'split') {\n highPriorityIndexes = [size.index];\n }\n if (!skipLayout) {\n this.relayout([index], highPriorityIndexes);\n }\n this.state = State.Idle;\n if (!skipLayout && typeof size !== 'number' && size.type === 'distribute') {\n this.distributeViewSizes();\n }\n }\n relayout(lowPriorityIndexes, highPriorityIndexes) {\n const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);\n this.resize(this.viewItems.length - 1, this.size - contentSize, undefined, lowPriorityIndexes, highPriorityIndexes);\n this.distributeEmptySpace();\n this.layoutViews();\n this.saveProportions();\n }\n resize(index, delta, sizes = this.viewItems.map(i => i.size), lowPriorityIndexes, highPriorityIndexes, overloadMinDelta = Number.NEGATIVE_INFINITY, overloadMaxDelta = Number.POSITIVE_INFINITY, snapBefore, snapAfter) {\n if (index < 0 || index >= this.viewItems.length) {\n return 0;\n }\n const upIndexes = range(index, -1);\n const downIndexes = range(index + 1, this.viewItems.length);\n if (highPriorityIndexes) {\n for (const index of highPriorityIndexes) {\n pushToStart(upIndexes, index);\n pushToStart(downIndexes, index);\n }\n }\n if (lowPriorityIndexes) {\n for (const index of lowPriorityIndexes) {\n pushToEnd(upIndexes, index);\n pushToEnd(downIndexes, index);\n }\n }\n const upItems = upIndexes.map(i => this.viewItems[i]);\n const upSizes = upIndexes.map(i => sizes[i]);\n const downItems = downIndexes.map(i => this.viewItems[i]);\n const downSizes = downIndexes.map(i => sizes[i]);\n const minDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].minimumSize - sizes[i]), 0);\n const maxDeltaUp = upIndexes.reduce((r, i) => r + (this.viewItems[i].maximumSize - sizes[i]), 0);\n const maxDeltaDown = downIndexes.length === 0 ? Number.POSITIVE_INFINITY : downIndexes.reduce((r, i) => r + (sizes[i] - this.viewItems[i].minimumSize), 0);\n const minDeltaDown = downIndexes.length === 0 ? Number.NEGATIVE_INFINITY : downIndexes.reduce((r, i) => r + (sizes[i] - this.viewItems[i].maximumSize), 0);\n const minDelta = Math.max(minDeltaUp, minDeltaDown, overloadMinDelta);\n const maxDelta = Math.min(maxDeltaDown, maxDeltaUp, overloadMaxDelta);\n let snapped = false;\n if (snapBefore) {\n const snapView = this.viewItems[snapBefore.index];\n const visible = delta >= snapBefore.limitDelta;\n snapped = visible !== snapView.visible;\n snapView.setVisible(visible, snapBefore.size);\n }\n if (!snapped && snapAfter) {\n const snapView = this.viewItems[snapAfter.index];\n const visible = delta < snapAfter.limitDelta;\n snapped = visible !== snapView.visible;\n snapView.setVisible(visible, snapAfter.size);\n }\n if (snapped) {\n return this.resize(index, delta, sizes, lowPriorityIndexes, highPriorityIndexes, overloadMinDelta, overloadMaxDelta);\n }\n delta = clamp(delta, minDelta, maxDelta);\n for (let i = 0, deltaUp = delta; i < upItems.length; i++) {\n const item = upItems[i];\n const size = clamp(upSizes[i] + deltaUp, item.minimumSize, item.maximumSize);\n const viewDelta = size - upSizes[i];\n deltaUp -= viewDelta;\n item.size = size;\n }\n for (let i = 0, deltaDown = delta; i < downItems.length; i++) {\n const item = downItems[i];\n const size = clamp(downSizes[i] - deltaDown, item.minimumSize, item.maximumSize);\n const viewDelta = size - downSizes[i];\n deltaDown += viewDelta;\n item.size = size;\n }\n return delta;\n }\n distributeEmptySpace(lowPriorityIndex) {\n const contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);\n let emptyDelta = this.size - contentSize;\n const indexes = range(this.viewItems.length - 1, -1);\n const lowPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 1 /* Low */);\n const highPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 2 /* High */);\n for (const index of highPriorityIndexes) {\n pushToStart(indexes, index);\n }\n for (const index of lowPriorityIndexes) {\n pushToEnd(indexes, index);\n }\n if (typeof lowPriorityIndex === 'number') {\n pushToEnd(indexes, lowPriorityIndex);\n }\n for (let i = 0; emptyDelta !== 0 && i < indexes.length; i++) {\n const item = this.viewItems[indexes[i]];\n const size = clamp(item.size + emptyDelta, item.minimumSize, item.maximumSize);\n const viewDelta = size - item.size;\n emptyDelta -= viewDelta;\n item.size = size;\n }\n }\n layoutViews() {\n // Save new content size\n this.contentSize = this.viewItems.reduce((r, i) => r + i.size, 0);\n // Layout views\n let offset = 0;\n for (const viewItem of this.viewItems) {\n viewItem.layout(offset, this.layoutContext);\n offset += viewItem.size;\n }\n // Layout sashes\n this.sashItems.forEach(item => item.sash.layout());\n this.updateSashEnablement();\n this.updateScrollableElement();\n }\n updateScrollableElement() {\n if (this.orientation === 0 /* VERTICAL */) {\n this.scrollableElement.setScrollDimensions({\n height: this.size,\n scrollHeight: this.contentSize\n });\n }\n else {\n this.scrollableElement.setScrollDimensions({\n width: this.size,\n scrollWidth: this.contentSize\n });\n }\n }\n updateSashEnablement() {\n let previous = false;\n const collapsesDown = this.viewItems.map(i => previous = (i.size - i.minimumSize > 0) || previous);\n previous = false;\n const expandsDown = this.viewItems.map(i => previous = (i.maximumSize - i.size > 0) || previous);\n const reverseViews = [...this.viewItems].reverse();\n previous = false;\n const collapsesUp = reverseViews.map(i => previous = (i.size - i.minimumSize > 0) || previous).reverse();\n previous = false;\n const expandsUp = reverseViews.map(i => previous = (i.maximumSize - i.size > 0) || previous).reverse();\n let position = 0;\n for (let index = 0; index < this.sashItems.length; index++) {\n const { sash } = this.sashItems[index];\n const viewItem = this.viewItems[index];\n position += viewItem.size;\n const min = !(collapsesDown[index] && expandsUp[index + 1]);\n const max = !(expandsDown[index] && collapsesUp[index + 1]);\n if (min && max) {\n const upIndexes = range(index, -1);\n const downIndexes = range(index + 1, this.viewItems.length);\n const snapBeforeIndex = this.findFirstSnapIndex(upIndexes);\n const snapAfterIndex = this.findFirstSnapIndex(downIndexes);\n const snappedBefore = typeof snapBeforeIndex === 'number' && !this.viewItems[snapBeforeIndex].visible;\n const snappedAfter = typeof snapAfterIndex === 'number' && !this.viewItems[snapAfterIndex].visible;\n if (snappedBefore && collapsesUp[index] && (position > 0 || this.startSnappingEnabled)) {\n sash.state = 1 /* Minimum */;\n }\n else if (snappedAfter && collapsesDown[index] && (position < this.contentSize || this.endSnappingEnabled)) {\n sash.state = 2 /* Maximum */;\n }\n else {\n sash.state = 0 /* Disabled */;\n }\n }\n else if (min && !max) {\n sash.state = 1 /* Minimum */;\n }\n else if (!min && max) {\n sash.state = 2 /* Maximum */;\n }\n else {\n sash.state = 3 /* Enabled */;\n }\n }\n }\n getSashPosition(sash) {\n let position = 0;\n for (let i = 0; i < this.sashItems.length; i++) {\n position += this.viewItems[i].size;\n if (this.sashItems[i].sash === sash) {\n return position;\n }\n }\n return 0;\n }\n findFirstSnapIndex(indexes) {\n // visible views first\n for (const index of indexes) {\n const viewItem = this.viewItems[index];\n if (!viewItem.visible) {\n continue;\n }\n if (viewItem.snap) {\n return index;\n }\n }\n // then, hidden views\n for (const index of indexes) {\n const viewItem = this.viewItems[index];\n if (viewItem.visible && viewItem.maximumSize - viewItem.minimumSize > 0) {\n return undefined;\n }\n if (!viewItem.visible && viewItem.snap) {\n return index;\n }\n }\n return undefined;\n }\n dispose() {\n super.dispose();\n this.viewItems.forEach(i => i.dispose());\n this.viewItems = [];\n this.sashItems.forEach(i => i.disposable.dispose());\n this.sashItems = [];\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../dom.js';\nimport { StandardKeyboardEvent } from '../keyboardEvent.js';\nimport { StandardMouseEvent } from '../mouseEvent.js';\nimport { Disposable } from '../../common/lifecycle.js';\nimport { Gesture } from '../touch.js';\nexport class Widget extends Disposable {\n onclick(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.CLICK, (e) => listener(new StandardMouseEvent(e))));\n }\n onmousedown(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_DOWN, (e) => listener(new StandardMouseEvent(e))));\n }\n onmouseover(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_OVER, (e) => listener(new StandardMouseEvent(e))));\n }\n onnonbubblingmouseout(domNode, listener) {\n this._register(dom.addDisposableNonBubblingMouseOutListener(domNode, (e) => listener(new StandardMouseEvent(e))));\n }\n onkeydown(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.KEY_DOWN, (e) => listener(new StandardKeyboardEvent(e))));\n }\n onkeyup(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.KEY_UP, (e) => listener(new StandardKeyboardEvent(e))));\n }\n oninput(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.INPUT, listener));\n }\n onblur(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.BLUR, listener));\n }\n onfocus(domNode, listener) {\n this._register(dom.addDisposableListener(domNode, dom.EventType.FOCUS, listener));\n }\n ignoreGesture(domNode) {\n Gesture.ignoreTarget(domNode);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../nls.js';\nimport { Disposable } from './lifecycle.js';\nimport { Emitter } from './event.js';\nexport class Action extends Disposable {\n constructor(id, label = '', cssClass = '', enabled = true, actionCallback) {\n super();\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._enabled = true;\n this._checked = false;\n this._id = id;\n this._label = label;\n this._cssClass = cssClass;\n this._enabled = enabled;\n this._actionCallback = actionCallback;\n }\n get id() {\n return this._id;\n }\n get label() {\n return this._label;\n }\n set label(value) {\n this._setLabel(value);\n }\n _setLabel(value) {\n if (this._label !== value) {\n this._label = value;\n this._onDidChange.fire({ label: value });\n }\n }\n get tooltip() {\n return this._tooltip || '';\n }\n set tooltip(value) {\n this._setTooltip(value);\n }\n _setTooltip(value) {\n if (this._tooltip !== value) {\n this._tooltip = value;\n this._onDidChange.fire({ tooltip: value });\n }\n }\n get class() {\n return this._cssClass;\n }\n set class(value) {\n this._setClass(value);\n }\n _setClass(value) {\n if (this._cssClass !== value) {\n this._cssClass = value;\n this._onDidChange.fire({ class: value });\n }\n }\n get enabled() {\n return this._enabled;\n }\n set enabled(value) {\n this._setEnabled(value);\n }\n _setEnabled(value) {\n if (this._enabled !== value) {\n this._enabled = value;\n this._onDidChange.fire({ enabled: value });\n }\n }\n get checked() {\n return this._checked;\n }\n set checked(value) {\n this._setChecked(value);\n }\n _setChecked(value) {\n if (this._checked !== value) {\n this._checked = value;\n this._onDidChange.fire({ checked: value });\n }\n }\n run(event, data) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._actionCallback) {\n yield this._actionCallback(event);\n }\n });\n }\n}\nexport class ActionRunner extends Disposable {\n constructor() {\n super(...arguments);\n this._onBeforeRun = this._register(new Emitter());\n this.onBeforeRun = this._onBeforeRun.event;\n this._onDidRun = this._register(new Emitter());\n this.onDidRun = this._onDidRun.event;\n }\n run(action, context) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!action.enabled) {\n return;\n }\n this._onBeforeRun.fire({ action });\n let error = undefined;\n try {\n yield this.runAction(action, context);\n }\n catch (e) {\n error = e;\n }\n this._onDidRun.fire({ action, error });\n });\n }\n runAction(action, context) {\n return __awaiter(this, void 0, void 0, function* () {\n yield action.run(context);\n });\n }\n}\nexport class Separator extends Action {\n constructor(label) {\n super(Separator.ID, label, label ? 'separator text' : 'separator');\n this.checked = false;\n this.enabled = false;\n }\n}\nSeparator.ID = 'vs.actions.separator';\nexport class SubmenuAction {\n constructor(id, label, actions, cssClass) {\n this.tooltip = '';\n this.enabled = true;\n this.checked = false;\n this.id = id;\n this.label = label;\n this.class = cssClass;\n this._actions = actions;\n }\n get actions() { return this._actions; }\n dispose() {\n // there is NOTHING to dispose and the SubmenuAction should\n // never have anything to dispose as it is a convenience type\n // to bridge into the rendering world.\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () { });\n }\n}\nexport class EmptySubmenuAction extends Action {\n constructor() {\n super(EmptySubmenuAction.ID, nls.localize('submenu.empty', '(empty)'), undefined, false);\n }\n}\nEmptySubmenuAction.ID = 'vs.actions.empty';\n","/**\n * Returns the last element of an array.\n * @param array The array.\n * @param n Which element from the end (default is zero).\n */\nexport function tail(array, n = 0) {\n return array[array.length - (1 + n)];\n}\nexport function tail2(arr) {\n if (arr.length === 0) {\n throw new Error('Invalid tail call');\n }\n return [arr.slice(0, arr.length - 1), arr[arr.length - 1]];\n}\nexport function equals(one, other, itemEquals = (a, b) => a === b) {\n if (one === other) {\n return true;\n }\n if (!one || !other) {\n return false;\n }\n if (one.length !== other.length) {\n return false;\n }\n for (let i = 0, len = one.length; i < len; i++) {\n if (!itemEquals(one[i], other[i])) {\n return false;\n }\n }\n return true;\n}\nexport function binarySearch(array, key, comparator) {\n let low = 0, high = array.length - 1;\n while (low <= high) {\n const mid = ((low + high) / 2) | 0;\n const comp = comparator(array[mid], key);\n if (comp < 0) {\n low = mid + 1;\n }\n else if (comp > 0) {\n high = mid - 1;\n }\n else {\n return mid;\n }\n }\n return -(low + 1);\n}\n/**\n * Takes a sorted array and a function p. The array is sorted in such a way that all elements where p(x) is false\n * are located before all elements where p(x) is true.\n * @returns the least x for which p(x) is true or array.length if no element fullfills the given function.\n */\nexport function findFirstInSorted(array, p) {\n let low = 0, high = array.length;\n if (high === 0) {\n return 0; // no children\n }\n while (low < high) {\n const mid = Math.floor((low + high) / 2);\n if (p(array[mid])) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n return low;\n}\nexport function quickSelect(nth, data, compare) {\n nth = nth | 0;\n if (nth >= data.length) {\n throw new TypeError('invalid index');\n }\n let pivotValue = data[Math.floor(data.length * Math.random())];\n let lower = [];\n let higher = [];\n let pivots = [];\n for (let value of data) {\n const val = compare(value, pivotValue);\n if (val < 0) {\n lower.push(value);\n }\n else if (val > 0) {\n higher.push(value);\n }\n else {\n pivots.push(value);\n }\n }\n if (nth < lower.length) {\n return quickSelect(nth, lower, compare);\n }\n else if (nth < lower.length + pivots.length) {\n return pivots[0];\n }\n else {\n return quickSelect(nth - (lower.length + pivots.length), higher, compare);\n }\n}\nexport function groupBy(data, compare) {\n const result = [];\n let currentGroup = undefined;\n for (const element of data.slice(0).sort(compare)) {\n if (!currentGroup || compare(currentGroup[0], element) !== 0) {\n currentGroup = [element];\n result.push(currentGroup);\n }\n else {\n currentGroup.push(element);\n }\n }\n return result;\n}\n/**\n * @returns New array with all falsy values removed. The original array IS NOT modified.\n */\nexport function coalesce(array) {\n return array.filter(e => !!e);\n}\n/**\n * @returns false if the provided object is an array and not empty.\n */\nexport function isFalsyOrEmpty(obj) {\n return !Array.isArray(obj) || obj.length === 0;\n}\nexport function isNonEmptyArray(obj) {\n return Array.isArray(obj) && obj.length > 0;\n}\n/**\n * Removes duplicates from the given array. The optional keyFn allows to specify\n * how elements are checked for equalness by returning a unique string for each.\n */\nexport function distinct(array, keyFn) {\n if (!keyFn) {\n return array.filter((element, position) => {\n return array.indexOf(element) === position;\n });\n }\n const seen = Object.create(null);\n return array.filter((elem) => {\n const key = keyFn(elem);\n if (seen[key]) {\n return false;\n }\n seen[key] = true;\n return true;\n });\n}\nexport function distinctES6(array) {\n const seen = new Set();\n return array.filter(element => {\n if (seen.has(element)) {\n return false;\n }\n seen.add(element);\n return true;\n });\n}\nexport function firstOrDefault(array, notFoundValue) {\n return array.length > 0 ? array[0] : notFoundValue;\n}\nexport function flatten(arr) {\n return [].concat(...arr);\n}\nexport function range(arg, to) {\n let from = typeof to === 'number' ? arg : 0;\n if (typeof to === 'number') {\n from = arg;\n }\n else {\n from = 0;\n to = arg;\n }\n const result = [];\n if (from <= to) {\n for (let i = from; i < to; i++) {\n result.push(i);\n }\n }\n else {\n for (let i = from; i > to; i--) {\n result.push(i);\n }\n }\n return result;\n}\n/**\n * Insert `insertArr` inside `target` at `insertIndex`.\n * Please don't touch unless you understand https://jsperf.com/inserting-an-array-within-an-array\n */\nexport function arrayInsert(target, insertIndex, insertArr) {\n const before = target.slice(0, insertIndex);\n const after = target.slice(insertIndex);\n return before.concat(insertArr, after);\n}\n/**\n * Pushes an element to the start of the array, if found.\n */\nexport function pushToStart(arr, value) {\n const index = arr.indexOf(value);\n if (index > -1) {\n arr.splice(index, 1);\n arr.unshift(value);\n }\n}\n/**\n * Pushes an element to the end of the array, if found.\n */\nexport function pushToEnd(arr, value) {\n const index = arr.indexOf(value);\n if (index > -1) {\n arr.splice(index, 1);\n arr.push(value);\n }\n}\nexport function asArray(x) {\n return Array.isArray(x) ? x : [x];\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/**\n * Throws an error with the provided message if the provided value does not evaluate to a true Javascript value.\n */\nexport function ok(value, message) {\n if (!value) {\n throw new Error(message ? `Assertion failed (${message})` : 'Assertion Failed');\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CancellationTokenSource } from './cancellation.js';\nimport { canceled } from './errors.js';\nimport { toDisposable } from './lifecycle.js';\nexport function isThenable(obj) {\n return !!obj && typeof obj.then === 'function';\n}\nexport function createCancelablePromise(callback) {\n const source = new CancellationTokenSource();\n const thenable = callback(source.token);\n const promise = new Promise((resolve, reject) => {\n source.token.onCancellationRequested(() => {\n reject(canceled());\n });\n Promise.resolve(thenable).then(value => {\n source.dispose();\n resolve(value);\n }, err => {\n source.dispose();\n reject(err);\n });\n });\n return new class {\n cancel() {\n source.cancel();\n }\n then(resolve, reject) {\n return promise.then(resolve, reject);\n }\n catch(reject) {\n return this.then(undefined, reject);\n }\n finally(onfinally) {\n return promise.finally(onfinally);\n }\n };\n}\nexport function raceCancellation(promise, token, defaultValue) {\n return Promise.race([promise, new Promise(resolve => token.onCancellationRequested(() => resolve(defaultValue)))]);\n}\n/**\n * A helper to prevent accumulation of sequential async tasks.\n *\n * Imagine a mail man with the sole task of delivering letters. As soon as\n * a letter submitted for delivery, he drives to the destination, delivers it\n * and returns to his base. Imagine that during the trip, N more letters were submitted.\n * When the mail man returns, he picks those N letters and delivers them all in a\n * single trip. Even though N+1 submissions occurred, only 2 deliveries were made.\n *\n * The throttler implements this via the queue() method, by providing it a task\n * factory. Following the example:\n *\n * \t\tconst throttler = new Throttler();\n * \t\tconst letters = [];\n *\n * \t\tfunction deliver() {\n * \t\t\tconst lettersToDeliver = letters;\n * \t\t\tletters = [];\n * \t\t\treturn makeTheTrip(lettersToDeliver);\n * \t\t}\n *\n * \t\tfunction onLetterReceived(l) {\n * \t\t\tletters.push(l);\n * \t\t\tthrottler.queue(deliver);\n * \t\t}\n */\nexport class Throttler {\n constructor() {\n this.activePromise = null;\n this.queuedPromise = null;\n this.queuedPromiseFactory = null;\n }\n queue(promiseFactory) {\n if (this.activePromise) {\n this.queuedPromiseFactory = promiseFactory;\n if (!this.queuedPromise) {\n const onComplete = () => {\n this.queuedPromise = null;\n const result = this.queue(this.queuedPromiseFactory);\n this.queuedPromiseFactory = null;\n return result;\n };\n this.queuedPromise = new Promise(resolve => {\n this.activePromise.then(onComplete, onComplete).then(resolve);\n });\n }\n return new Promise((resolve, reject) => {\n this.queuedPromise.then(resolve, reject);\n });\n }\n this.activePromise = promiseFactory();\n return new Promise((resolve, reject) => {\n this.activePromise.then((result) => {\n this.activePromise = null;\n resolve(result);\n }, (err) => {\n this.activePromise = null;\n reject(err);\n });\n });\n }\n}\n/**\n * A helper to delay (debounce) execution of a task that is being requested often.\n *\n * Following the throttler, now imagine the mail man wants to optimize the number of\n * trips proactively. The trip itself can be long, so he decides not to make the trip\n * as soon as a letter is submitted. Instead he waits a while, in case more\n * letters are submitted. After said waiting period, if no letters were submitted, he\n * decides to make the trip. Imagine that N more letters were submitted after the first\n * one, all within a short period of time between each other. Even though N+1\n * submissions occurred, only 1 delivery was made.\n *\n * The delayer offers this behavior via the trigger() method, into which both the task\n * to be executed and the waiting period (delay) must be passed in as arguments. Following\n * the example:\n *\n * \t\tconst delayer = new Delayer(WAITING_PERIOD);\n * \t\tconst letters = [];\n *\n * \t\tfunction letterReceived(l) {\n * \t\t\tletters.push(l);\n * \t\t\tdelayer.trigger(() => { return makeTheTrip(); });\n * \t\t}\n */\nexport class Delayer {\n constructor(defaultDelay) {\n this.defaultDelay = defaultDelay;\n this.timeout = null;\n this.completionPromise = null;\n this.doResolve = null;\n this.doReject = null;\n this.task = null;\n }\n trigger(task, delay = this.defaultDelay) {\n this.task = task;\n this.cancelTimeout();\n if (!this.completionPromise) {\n this.completionPromise = new Promise((resolve, reject) => {\n this.doResolve = resolve;\n this.doReject = reject;\n }).then(() => {\n this.completionPromise = null;\n this.doResolve = null;\n if (this.task) {\n const task = this.task;\n this.task = null;\n return task();\n }\n return undefined;\n });\n }\n this.timeout = setTimeout(() => {\n this.timeout = null;\n if (this.doResolve) {\n this.doResolve(null);\n }\n }, delay);\n return this.completionPromise;\n }\n isTriggered() {\n return this.timeout !== null;\n }\n cancel() {\n this.cancelTimeout();\n if (this.completionPromise) {\n if (this.doReject) {\n this.doReject(canceled());\n }\n this.completionPromise = null;\n }\n }\n cancelTimeout() {\n if (this.timeout !== null) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n }\n dispose() {\n this.cancelTimeout();\n }\n}\n/**\n * A helper to delay execution of a task that is being requested often, while\n * preventing accumulation of consecutive executions, while the task runs.\n *\n * The mail man is clever and waits for a certain amount of time, before going\n * out to deliver letters. While the mail man is going out, more letters arrive\n * and can only be delivered once he is back. Once he is back the mail man will\n * do one more trip to deliver the letters that have accumulated while he was out.\n */\nexport class ThrottledDelayer {\n constructor(defaultDelay) {\n this.delayer = new Delayer(defaultDelay);\n this.throttler = new Throttler();\n }\n trigger(promiseFactory, delay) {\n return this.delayer.trigger(() => this.throttler.queue(promiseFactory), delay);\n }\n cancel() {\n this.delayer.cancel();\n }\n dispose() {\n this.delayer.dispose();\n }\n}\nexport function timeout(millis, token) {\n if (!token) {\n return createCancelablePromise(token => timeout(millis, token));\n }\n return new Promise((resolve, reject) => {\n const handle = setTimeout(resolve, millis);\n token.onCancellationRequested(() => {\n clearTimeout(handle);\n reject(canceled());\n });\n });\n}\nexport function disposableTimeout(handler, timeout = 0) {\n const timer = setTimeout(handler, timeout);\n return toDisposable(() => clearTimeout(timer));\n}\nexport function first(promiseFactories, shouldStop = t => !!t, defaultValue = null) {\n let index = 0;\n const len = promiseFactories.length;\n const loop = () => {\n if (index >= len) {\n return Promise.resolve(defaultValue);\n }\n const factory = promiseFactories[index++];\n const promise = Promise.resolve(factory());\n return promise.then(result => {\n if (shouldStop(result)) {\n return Promise.resolve(result);\n }\n return loop();\n });\n };\n return loop();\n}\nexport class TimeoutTimer {\n constructor(runner, timeout) {\n this._token = -1;\n if (typeof runner === 'function' && typeof timeout === 'number') {\n this.setIfNotSet(runner, timeout);\n }\n }\n dispose() {\n this.cancel();\n }\n cancel() {\n if (this._token !== -1) {\n clearTimeout(this._token);\n this._token = -1;\n }\n }\n cancelAndSet(runner, timeout) {\n this.cancel();\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n setIfNotSet(runner, timeout) {\n if (this._token !== -1) {\n // timer is already set\n return;\n }\n this._token = setTimeout(() => {\n this._token = -1;\n runner();\n }, timeout);\n }\n}\nexport class IntervalTimer {\n constructor() {\n this._token = -1;\n }\n dispose() {\n this.cancel();\n }\n cancel() {\n if (this._token !== -1) {\n clearInterval(this._token);\n this._token = -1;\n }\n }\n cancelAndSet(runner, interval) {\n this.cancel();\n this._token = setInterval(() => {\n runner();\n }, interval);\n }\n}\nexport class RunOnceScheduler {\n constructor(runner, delay) {\n this.timeoutToken = -1;\n this.runner = runner;\n this.timeout = delay;\n this.timeoutHandler = this.onTimeout.bind(this);\n }\n /**\n * Dispose RunOnceScheduler\n */\n dispose() {\n this.cancel();\n this.runner = null;\n }\n /**\n * Cancel current scheduled runner (if any).\n */\n cancel() {\n if (this.isScheduled()) {\n clearTimeout(this.timeoutToken);\n this.timeoutToken = -1;\n }\n }\n /**\n * Cancel previous runner (if any) & schedule a new runner.\n */\n schedule(delay = this.timeout) {\n this.cancel();\n this.timeoutToken = setTimeout(this.timeoutHandler, delay);\n }\n get delay() {\n return this.timeout;\n }\n set delay(value) {\n this.timeout = value;\n }\n /**\n * Returns true if scheduled.\n */\n isScheduled() {\n return this.timeoutToken !== -1;\n }\n onTimeout() {\n this.timeoutToken = -1;\n if (this.runner) {\n this.doRun();\n }\n }\n doRun() {\n if (this.runner) {\n this.runner();\n }\n }\n}\n/**\n * Execute the callback the next time the browser is idle\n */\nexport let runWhenIdle;\n(function () {\n if (typeof requestIdleCallback !== 'function' || typeof cancelIdleCallback !== 'function') {\n const dummyIdle = Object.freeze({\n didTimeout: true,\n timeRemaining() { return 15; }\n });\n runWhenIdle = (runner) => {\n const handle = setTimeout(() => runner(dummyIdle));\n let disposed = false;\n return {\n dispose() {\n if (disposed) {\n return;\n }\n disposed = true;\n clearTimeout(handle);\n }\n };\n };\n }\n else {\n runWhenIdle = (runner, timeout) => {\n const handle = requestIdleCallback(runner, typeof timeout === 'number' ? { timeout } : undefined);\n let disposed = false;\n return {\n dispose() {\n if (disposed) {\n return;\n }\n disposed = true;\n cancelIdleCallback(handle);\n }\n };\n };\n }\n})();\n/**\n * An implementation of the \"idle-until-urgent\"-strategy as introduced\n * here: https://philipwalton.com/articles/idle-until-urgent/\n */\nexport class IdleValue {\n constructor(executor) {\n this._didRun = false;\n this._executor = () => {\n try {\n this._value = executor();\n }\n catch (err) {\n this._error = err;\n }\n finally {\n this._didRun = true;\n }\n };\n this._handle = runWhenIdle(() => this._executor());\n }\n dispose() {\n this._handle.dispose();\n }\n get value() {\n if (!this._didRun) {\n this._handle.dispose();\n this._executor();\n }\n if (this._error) {\n throw this._error;\n }\n return this._value;\n }\n}\n//#endregion\n//#region Promises\nexport var Promises;\n(function (Promises) {\n /**\n * A polyfill of `Promise.allSettled`: returns after all promises have\n * resolved or rejected and provides access to each result or error\n * in the order of the original passed in promises array.\n * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled\n */\n function allSettled(promises) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof Promise.allSettled === 'function') {\n return allSettledNative(promises); // in some environments we can benefit from native implementation\n }\n return allSettledShim(promises);\n });\n }\n Promises.allSettled = allSettled;\n function allSettledNative(promises) {\n return __awaiter(this, void 0, void 0, function* () {\n return Promise.allSettled(promises);\n });\n }\n function allSettledShim(promises) {\n return __awaiter(this, void 0, void 0, function* () {\n return Promise.all(promises.map(promise => (promise.then(value => {\n const fulfilled = { status: 'fulfilled', value };\n return fulfilled;\n }, error => {\n const rejected = { status: 'rejected', reason: error };\n return rejected;\n }))));\n });\n }\n /**\n * A drop-in replacement for `Promise.all` with the only difference\n * that the method awaits every promise to either fulfill or reject.\n *\n * Similar to `Promise.all`, only the first error will be returned\n * if any.\n */\n function settled(promises) {\n return __awaiter(this, void 0, void 0, function* () {\n let firstError = undefined;\n const result = yield Promise.all(promises.map(promise => promise.then(value => value, error => {\n if (!firstError) {\n firstError = error;\n }\n return undefined; // do not rethrow so that other promises can settle\n })));\n if (typeof firstError !== 'undefined') {\n throw firstError;\n }\n return result; // cast is needed and protected by the `throw` above\n });\n }\n Promises.settled = settled;\n})(Promises || (Promises = {}));\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from './strings.js';\nconst hasBuffer = (typeof Buffer !== 'undefined');\nconst hasTextDecoder = (typeof TextDecoder !== 'undefined');\nlet textDecoder;\nexport class VSBuffer {\n constructor(buffer) {\n this.buffer = buffer;\n this.byteLength = this.buffer.byteLength;\n }\n static wrap(actual) {\n if (hasBuffer && !(Buffer.isBuffer(actual))) {\n // https://nodejs.org/dist/latest-v10.x/docs/api/buffer.html#buffer_class_method_buffer_from_arraybuffer_byteoffset_length\n // Create a zero-copy Buffer wrapper around the ArrayBuffer pointed to by the Uint8Array\n actual = Buffer.from(actual.buffer, actual.byteOffset, actual.byteLength);\n }\n return new VSBuffer(actual);\n }\n toString() {\n if (hasBuffer) {\n return this.buffer.toString();\n }\n else if (hasTextDecoder) {\n if (!textDecoder) {\n textDecoder = new TextDecoder();\n }\n return textDecoder.decode(this.buffer);\n }\n else {\n return strings.decodeUTF8(this.buffer);\n }\n }\n}\nexport function readUInt16LE(source, offset) {\n return (((source[offset + 0] << 0) >>> 0) |\n ((source[offset + 1] << 8) >>> 0));\n}\nexport function writeUInt16LE(destination, value, offset) {\n destination[offset + 0] = (value & 0b11111111);\n value = value >>> 8;\n destination[offset + 1] = (value & 0b11111111);\n}\nexport function readUInt32BE(source, offset) {\n return (source[offset] * Math.pow(2, 24)\n + source[offset + 1] * Math.pow(2, 16)\n + source[offset + 2] * Math.pow(2, 8)\n + source[offset + 3]);\n}\nexport function writeUInt32BE(destination, value, offset) {\n destination[offset + 3] = value;\n value = value >>> 8;\n destination[offset + 2] = value;\n value = value >>> 8;\n destination[offset + 1] = value;\n value = value >>> 8;\n destination[offset] = value;\n}\nexport function readUInt8(source, offset) {\n return source[offset];\n}\nexport function writeUInt8(destination, value, offset) {\n destination[offset] = value;\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter, Event } from './event.js';\nconst shortcutEvent = Object.freeze(function (callback, context) {\n const handle = setTimeout(callback.bind(context), 0);\n return { dispose() { clearTimeout(handle); } };\n});\nexport var CancellationToken;\n(function (CancellationToken) {\n function isCancellationToken(thing) {\n if (thing === CancellationToken.None || thing === CancellationToken.Cancelled) {\n return true;\n }\n if (thing instanceof MutableToken) {\n return true;\n }\n if (!thing || typeof thing !== 'object') {\n return false;\n }\n return typeof thing.isCancellationRequested === 'boolean'\n && typeof thing.onCancellationRequested === 'function';\n }\n CancellationToken.isCancellationToken = isCancellationToken;\n CancellationToken.None = Object.freeze({\n isCancellationRequested: false,\n onCancellationRequested: Event.None\n });\n CancellationToken.Cancelled = Object.freeze({\n isCancellationRequested: true,\n onCancellationRequested: shortcutEvent\n });\n})(CancellationToken || (CancellationToken = {}));\nclass MutableToken {\n constructor() {\n this._isCancelled = false;\n this._emitter = null;\n }\n cancel() {\n if (!this._isCancelled) {\n this._isCancelled = true;\n if (this._emitter) {\n this._emitter.fire(undefined);\n this.dispose();\n }\n }\n }\n get isCancellationRequested() {\n return this._isCancelled;\n }\n get onCancellationRequested() {\n if (this._isCancelled) {\n return shortcutEvent;\n }\n if (!this._emitter) {\n this._emitter = new Emitter();\n }\n return this._emitter.event;\n }\n dispose() {\n if (this._emitter) {\n this._emitter.dispose();\n this._emitter = null;\n }\n }\n}\nexport class CancellationTokenSource {\n constructor(parent) {\n this._token = undefined;\n this._parentListener = undefined;\n this._parentListener = parent && parent.onCancellationRequested(this.cancel, this);\n }\n get token() {\n if (!this._token) {\n // be lazy and create the token only when\n // actually needed\n this._token = new MutableToken();\n }\n return this._token;\n }\n cancel() {\n if (!this._token) {\n // save an object by returning the default\n // cancelled token when cancellation happens\n // before someone asks for the token\n this._token = CancellationToken.Cancelled;\n }\n else if (this._token instanceof MutableToken) {\n // actually cancel\n this._token.cancel();\n }\n }\n dispose(cancel = false) {\n if (cancel) {\n this.cancel();\n }\n if (this._parentListener) {\n this._parentListener.dispose();\n }\n if (!this._token) {\n // ensure to initialize with an empty token if we had none\n this._token = CancellationToken.None;\n }\n else if (this._token instanceof MutableToken) {\n // actually dispose\n this._token.dispose();\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from './event.js';\nclass Registry {\n constructor() {\n this._icons = new Map();\n this._onDidRegister = new Emitter();\n }\n add(icon) {\n const existing = this._icons.get(icon.id);\n if (!existing) {\n this._icons.set(icon.id, icon);\n this._onDidRegister.fire(icon);\n }\n else if (icon.description) {\n existing.description = icon.description;\n }\n else {\n console.error(`Duplicate registration of codicon ${icon.id}`);\n }\n }\n get(id) {\n return this._icons.get(id);\n }\n get all() {\n return this._icons.values();\n }\n get onDidRegister() {\n return this._onDidRegister.event;\n }\n}\nconst _registry = new Registry();\nexport const iconRegistry = _registry;\nexport function registerCodicon(id, def) {\n return new Codicon(id, def);\n}\n// Selects all codicon names encapsulated in the `$()` syntax and wraps the\n// results with spaces so that screen readers can read the text better.\nexport function getCodiconAriaLabel(text) {\n if (!text) {\n return '';\n }\n return text.replace(/\\$\\((.*?)\\)/g, (_match, codiconName) => ` ${codiconName} `).trim();\n}\nexport class Codicon {\n constructor(id, definition, description) {\n this.id = id;\n this.definition = definition;\n this.description = description;\n _registry.add(this);\n }\n get classNames() { return 'codicon codicon-' + this.id; }\n // classNamesArray is useful for migrating to ES6 classlist\n get classNamesArray() { return ['codicon', 'codicon-' + this.id]; }\n get cssSelector() { return '.codicon.codicon-' + this.id; }\n}\nexport var CSSIcon;\n(function (CSSIcon) {\n CSSIcon.iconNameSegment = '[A-Za-z0-9]+';\n CSSIcon.iconNameExpression = '[A-Za-z0-9\\\\-]+';\n CSSIcon.iconModifierExpression = '~[A-Za-z]+';\n const cssIconIdRegex = new RegExp(`^(${CSSIcon.iconNameExpression})(${CSSIcon.iconModifierExpression})?$`);\n function asClassNameArray(icon) {\n if (icon instanceof Codicon) {\n return ['codicon', 'codicon-' + icon.id];\n }\n const match = cssIconIdRegex.exec(icon.id);\n if (!match) {\n return asClassNameArray(Codicon.error);\n }\n let [, id, modifier] = match;\n const classNames = ['codicon', 'codicon-' + id];\n if (modifier) {\n classNames.push('codicon-modifier-' + modifier.substr(1));\n }\n return classNames;\n }\n CSSIcon.asClassNameArray = asClassNameArray;\n function asClassName(icon) {\n return asClassNameArray(icon).join(' ');\n }\n CSSIcon.asClassName = asClassName;\n function asCSSSelector(icon) {\n return '.' + asClassNameArray(icon).join('.');\n }\n CSSIcon.asCSSSelector = asCSSSelector;\n})(CSSIcon || (CSSIcon = {}));\n(function (Codicon) {\n // built-in icons, with image name\n Codicon.add = new Codicon('add', { fontCharacter: '\\\\ea60' });\n Codicon.plus = new Codicon('plus', { fontCharacter: '\\\\ea60' });\n Codicon.gistNew = new Codicon('gist-new', { fontCharacter: '\\\\ea60' });\n Codicon.repoCreate = new Codicon('repo-create', { fontCharacter: '\\\\ea60' });\n Codicon.lightbulb = new Codicon('lightbulb', { fontCharacter: '\\\\ea61' });\n Codicon.lightBulb = new Codicon('light-bulb', { fontCharacter: '\\\\ea61' });\n Codicon.repo = new Codicon('repo', { fontCharacter: '\\\\ea62' });\n Codicon.repoDelete = new Codicon('repo-delete', { fontCharacter: '\\\\ea62' });\n Codicon.gistFork = new Codicon('gist-fork', { fontCharacter: '\\\\ea63' });\n Codicon.repoForked = new Codicon('repo-forked', { fontCharacter: '\\\\ea63' });\n Codicon.gitPullRequest = new Codicon('git-pull-request', { fontCharacter: '\\\\ea64' });\n Codicon.gitPullRequestAbandoned = new Codicon('git-pull-request-abandoned', { fontCharacter: '\\\\ea64' });\n Codicon.recordKeys = new Codicon('record-keys', { fontCharacter: '\\\\ea65' });\n Codicon.keyboard = new Codicon('keyboard', { fontCharacter: '\\\\ea65' });\n Codicon.tag = new Codicon('tag', { fontCharacter: '\\\\ea66' });\n Codicon.tagAdd = new Codicon('tag-add', { fontCharacter: '\\\\ea66' });\n Codicon.tagRemove = new Codicon('tag-remove', { fontCharacter: '\\\\ea66' });\n Codicon.person = new Codicon('person', { fontCharacter: '\\\\ea67' });\n Codicon.personFollow = new Codicon('person-follow', { fontCharacter: '\\\\ea67' });\n Codicon.personOutline = new Codicon('person-outline', { fontCharacter: '\\\\ea67' });\n Codicon.personFilled = new Codicon('person-filled', { fontCharacter: '\\\\ea67' });\n Codicon.gitBranch = new Codicon('git-branch', { fontCharacter: '\\\\ea68' });\n Codicon.gitBranchCreate = new Codicon('git-branch-create', { fontCharacter: '\\\\ea68' });\n Codicon.gitBranchDelete = new Codicon('git-branch-delete', { fontCharacter: '\\\\ea68' });\n Codicon.sourceControl = new Codicon('source-control', { fontCharacter: '\\\\ea68' });\n Codicon.mirror = new Codicon('mirror', { fontCharacter: '\\\\ea69' });\n Codicon.mirrorPublic = new Codicon('mirror-public', { fontCharacter: '\\\\ea69' });\n Codicon.star = new Codicon('star', { fontCharacter: '\\\\ea6a' });\n Codicon.starAdd = new Codicon('star-add', { fontCharacter: '\\\\ea6a' });\n Codicon.starDelete = new Codicon('star-delete', { fontCharacter: '\\\\ea6a' });\n Codicon.starEmpty = new Codicon('star-empty', { fontCharacter: '\\\\ea6a' });\n Codicon.comment = new Codicon('comment', { fontCharacter: '\\\\ea6b' });\n Codicon.commentAdd = new Codicon('comment-add', { fontCharacter: '\\\\ea6b' });\n Codicon.alert = new Codicon('alert', { fontCharacter: '\\\\ea6c' });\n Codicon.warning = new Codicon('warning', { fontCharacter: '\\\\ea6c' });\n Codicon.search = new Codicon('search', { fontCharacter: '\\\\ea6d' });\n Codicon.searchSave = new Codicon('search-save', { fontCharacter: '\\\\ea6d' });\n Codicon.logOut = new Codicon('log-out', { fontCharacter: '\\\\ea6e' });\n Codicon.signOut = new Codicon('sign-out', { fontCharacter: '\\\\ea6e' });\n Codicon.logIn = new Codicon('log-in', { fontCharacter: '\\\\ea6f' });\n Codicon.signIn = new Codicon('sign-in', { fontCharacter: '\\\\ea6f' });\n Codicon.eye = new Codicon('eye', { fontCharacter: '\\\\ea70' });\n Codicon.eyeUnwatch = new Codicon('eye-unwatch', { fontCharacter: '\\\\ea70' });\n Codicon.eyeWatch = new Codicon('eye-watch', { fontCharacter: '\\\\ea70' });\n Codicon.circleFilled = new Codicon('circle-filled', { fontCharacter: '\\\\ea71' });\n Codicon.primitiveDot = new Codicon('primitive-dot', { fontCharacter: '\\\\ea71' });\n Codicon.closeDirty = new Codicon('close-dirty', { fontCharacter: '\\\\ea71' });\n Codicon.debugBreakpoint = new Codicon('debug-breakpoint', { fontCharacter: '\\\\ea71' });\n Codicon.debugBreakpointDisabled = new Codicon('debug-breakpoint-disabled', { fontCharacter: '\\\\ea71' });\n Codicon.debugHint = new Codicon('debug-hint', { fontCharacter: '\\\\ea71' });\n Codicon.primitiveSquare = new Codicon('primitive-square', { fontCharacter: '\\\\ea72' });\n Codicon.edit = new Codicon('edit', { fontCharacter: '\\\\ea73' });\n Codicon.pencil = new Codicon('pencil', { fontCharacter: '\\\\ea73' });\n Codicon.info = new Codicon('info', { fontCharacter: '\\\\ea74' });\n Codicon.issueOpened = new Codicon('issue-opened', { fontCharacter: '\\\\ea74' });\n Codicon.gistPrivate = new Codicon('gist-private', { fontCharacter: '\\\\ea75' });\n Codicon.gitForkPrivate = new Codicon('git-fork-private', { fontCharacter: '\\\\ea75' });\n Codicon.lock = new Codicon('lock', { fontCharacter: '\\\\ea75' });\n Codicon.mirrorPrivate = new Codicon('mirror-private', { fontCharacter: '\\\\ea75' });\n Codicon.close = new Codicon('close', { fontCharacter: '\\\\ea76' });\n Codicon.removeClose = new Codicon('remove-close', { fontCharacter: '\\\\ea76' });\n Codicon.x = new Codicon('x', { fontCharacter: '\\\\ea76' });\n Codicon.repoSync = new Codicon('repo-sync', { fontCharacter: '\\\\ea77' });\n Codicon.sync = new Codicon('sync', { fontCharacter: '\\\\ea77' });\n Codicon.clone = new Codicon('clone', { fontCharacter: '\\\\ea78' });\n Codicon.desktopDownload = new Codicon('desktop-download', { fontCharacter: '\\\\ea78' });\n Codicon.beaker = new Codicon('beaker', { fontCharacter: '\\\\ea79' });\n Codicon.microscope = new Codicon('microscope', { fontCharacter: '\\\\ea79' });\n Codicon.vm = new Codicon('vm', { fontCharacter: '\\\\ea7a' });\n Codicon.deviceDesktop = new Codicon('device-desktop', { fontCharacter: '\\\\ea7a' });\n Codicon.file = new Codicon('file', { fontCharacter: '\\\\ea7b' });\n Codicon.fileText = new Codicon('file-text', { fontCharacter: '\\\\ea7b' });\n Codicon.more = new Codicon('more', { fontCharacter: '\\\\ea7c' });\n Codicon.ellipsis = new Codicon('ellipsis', { fontCharacter: '\\\\ea7c' });\n Codicon.kebabHorizontal = new Codicon('kebab-horizontal', { fontCharacter: '\\\\ea7c' });\n Codicon.mailReply = new Codicon('mail-reply', { fontCharacter: '\\\\ea7d' });\n Codicon.reply = new Codicon('reply', { fontCharacter: '\\\\ea7d' });\n Codicon.organization = new Codicon('organization', { fontCharacter: '\\\\ea7e' });\n Codicon.organizationFilled = new Codicon('organization-filled', { fontCharacter: '\\\\ea7e' });\n Codicon.organizationOutline = new Codicon('organization-outline', { fontCharacter: '\\\\ea7e' });\n Codicon.newFile = new Codicon('new-file', { fontCharacter: '\\\\ea7f' });\n Codicon.fileAdd = new Codicon('file-add', { fontCharacter: '\\\\ea7f' });\n Codicon.newFolder = new Codicon('new-folder', { fontCharacter: '\\\\ea80' });\n Codicon.fileDirectoryCreate = new Codicon('file-directory-create', { fontCharacter: '\\\\ea80' });\n Codicon.trash = new Codicon('trash', { fontCharacter: '\\\\ea81' });\n Codicon.trashcan = new Codicon('trashcan', { fontCharacter: '\\\\ea81' });\n Codicon.history = new Codicon('history', { fontCharacter: '\\\\ea82' });\n Codicon.clock = new Codicon('clock', { fontCharacter: '\\\\ea82' });\n Codicon.folder = new Codicon('folder', { fontCharacter: '\\\\ea83' });\n Codicon.fileDirectory = new Codicon('file-directory', { fontCharacter: '\\\\ea83' });\n Codicon.symbolFolder = new Codicon('symbol-folder', { fontCharacter: '\\\\ea83' });\n Codicon.logoGithub = new Codicon('logo-github', { fontCharacter: '\\\\ea84' });\n Codicon.markGithub = new Codicon('mark-github', { fontCharacter: '\\\\ea84' });\n Codicon.github = new Codicon('github', { fontCharacter: '\\\\ea84' });\n Codicon.terminal = new Codicon('terminal', { fontCharacter: '\\\\ea85' });\n Codicon.console = new Codicon('console', { fontCharacter: '\\\\ea85' });\n Codicon.repl = new Codicon('repl', { fontCharacter: '\\\\ea85' });\n Codicon.zap = new Codicon('zap', { fontCharacter: '\\\\ea86' });\n Codicon.symbolEvent = new Codicon('symbol-event', { fontCharacter: '\\\\ea86' });\n Codicon.error = new Codicon('error', { fontCharacter: '\\\\ea87' });\n Codicon.stop = new Codicon('stop', { fontCharacter: '\\\\ea87' });\n Codicon.variable = new Codicon('variable', { fontCharacter: '\\\\ea88' });\n Codicon.symbolVariable = new Codicon('symbol-variable', { fontCharacter: '\\\\ea88' });\n Codicon.array = new Codicon('array', { fontCharacter: '\\\\ea8a' });\n Codicon.symbolArray = new Codicon('symbol-array', { fontCharacter: '\\\\ea8a' });\n Codicon.symbolModule = new Codicon('symbol-module', { fontCharacter: '\\\\ea8b' });\n Codicon.symbolPackage = new Codicon('symbol-package', { fontCharacter: '\\\\ea8b' });\n Codicon.symbolNamespace = new Codicon('symbol-namespace', { fontCharacter: '\\\\ea8b' });\n Codicon.symbolObject = new Codicon('symbol-object', { fontCharacter: '\\\\ea8b' });\n Codicon.symbolMethod = new Codicon('symbol-method', { fontCharacter: '\\\\ea8c' });\n Codicon.symbolFunction = new Codicon('symbol-function', { fontCharacter: '\\\\ea8c' });\n Codicon.symbolConstructor = new Codicon('symbol-constructor', { fontCharacter: '\\\\ea8c' });\n Codicon.symbolBoolean = new Codicon('symbol-boolean', { fontCharacter: '\\\\ea8f' });\n Codicon.symbolNull = new Codicon('symbol-null', { fontCharacter: '\\\\ea8f' });\n Codicon.symbolNumeric = new Codicon('symbol-numeric', { fontCharacter: '\\\\ea90' });\n Codicon.symbolNumber = new Codicon('symbol-number', { fontCharacter: '\\\\ea90' });\n Codicon.symbolStructure = new Codicon('symbol-structure', { fontCharacter: '\\\\ea91' });\n Codicon.symbolStruct = new Codicon('symbol-struct', { fontCharacter: '\\\\ea91' });\n Codicon.symbolParameter = new Codicon('symbol-parameter', { fontCharacter: '\\\\ea92' });\n Codicon.symbolTypeParameter = new Codicon('symbol-type-parameter', { fontCharacter: '\\\\ea92' });\n Codicon.symbolKey = new Codicon('symbol-key', { fontCharacter: '\\\\ea93' });\n Codicon.symbolText = new Codicon('symbol-text', { fontCharacter: '\\\\ea93' });\n Codicon.symbolReference = new Codicon('symbol-reference', { fontCharacter: '\\\\ea94' });\n Codicon.goToFile = new Codicon('go-to-file', { fontCharacter: '\\\\ea94' });\n Codicon.symbolEnum = new Codicon('symbol-enum', { fontCharacter: '\\\\ea95' });\n Codicon.symbolValue = new Codicon('symbol-value', { fontCharacter: '\\\\ea95' });\n Codicon.symbolRuler = new Codicon('symbol-ruler', { fontCharacter: '\\\\ea96' });\n Codicon.symbolUnit = new Codicon('symbol-unit', { fontCharacter: '\\\\ea96' });\n Codicon.activateBreakpoints = new Codicon('activate-breakpoints', { fontCharacter: '\\\\ea97' });\n Codicon.archive = new Codicon('archive', { fontCharacter: '\\\\ea98' });\n Codicon.arrowBoth = new Codicon('arrow-both', { fontCharacter: '\\\\ea99' });\n Codicon.arrowDown = new Codicon('arrow-down', { fontCharacter: '\\\\ea9a' });\n Codicon.arrowLeft = new Codicon('arrow-left', { fontCharacter: '\\\\ea9b' });\n Codicon.arrowRight = new Codicon('arrow-right', { fontCharacter: '\\\\ea9c' });\n Codicon.arrowSmallDown = new Codicon('arrow-small-down', { fontCharacter: '\\\\ea9d' });\n Codicon.arrowSmallLeft = new Codicon('arrow-small-left', { fontCharacter: '\\\\ea9e' });\n Codicon.arrowSmallRight = new Codicon('arrow-small-right', { fontCharacter: '\\\\ea9f' });\n Codicon.arrowSmallUp = new Codicon('arrow-small-up', { fontCharacter: '\\\\eaa0' });\n Codicon.arrowUp = new Codicon('arrow-up', { fontCharacter: '\\\\eaa1' });\n Codicon.bell = new Codicon('bell', { fontCharacter: '\\\\eaa2' });\n Codicon.bold = new Codicon('bold', { fontCharacter: '\\\\eaa3' });\n Codicon.book = new Codicon('book', { fontCharacter: '\\\\eaa4' });\n Codicon.bookmark = new Codicon('bookmark', { fontCharacter: '\\\\eaa5' });\n Codicon.debugBreakpointConditionalUnverified = new Codicon('debug-breakpoint-conditional-unverified', { fontCharacter: '\\\\eaa6' });\n Codicon.debugBreakpointConditional = new Codicon('debug-breakpoint-conditional', { fontCharacter: '\\\\eaa7' });\n Codicon.debugBreakpointConditionalDisabled = new Codicon('debug-breakpoint-conditional-disabled', { fontCharacter: '\\\\eaa7' });\n Codicon.debugBreakpointDataUnverified = new Codicon('debug-breakpoint-data-unverified', { fontCharacter: '\\\\eaa8' });\n Codicon.debugBreakpointData = new Codicon('debug-breakpoint-data', { fontCharacter: '\\\\eaa9' });\n Codicon.debugBreakpointDataDisabled = new Codicon('debug-breakpoint-data-disabled', { fontCharacter: '\\\\eaa9' });\n Codicon.debugBreakpointLogUnverified = new Codicon('debug-breakpoint-log-unverified', { fontCharacter: '\\\\eaaa' });\n Codicon.debugBreakpointLog = new Codicon('debug-breakpoint-log', { fontCharacter: '\\\\eaab' });\n Codicon.debugBreakpointLogDisabled = new Codicon('debug-breakpoint-log-disabled', { fontCharacter: '\\\\eaab' });\n Codicon.briefcase = new Codicon('briefcase', { fontCharacter: '\\\\eaac' });\n Codicon.broadcast = new Codicon('broadcast', { fontCharacter: '\\\\eaad' });\n Codicon.browser = new Codicon('browser', { fontCharacter: '\\\\eaae' });\n Codicon.bug = new Codicon('bug', { fontCharacter: '\\\\eaaf' });\n Codicon.calendar = new Codicon('calendar', { fontCharacter: '\\\\eab0' });\n Codicon.caseSensitive = new Codicon('case-sensitive', { fontCharacter: '\\\\eab1' });\n Codicon.check = new Codicon('check', { fontCharacter: '\\\\eab2' });\n Codicon.checklist = new Codicon('checklist', { fontCharacter: '\\\\eab3' });\n Codicon.chevronDown = new Codicon('chevron-down', { fontCharacter: '\\\\eab4' });\n Codicon.chevronLeft = new Codicon('chevron-left', { fontCharacter: '\\\\eab5' });\n Codicon.chevronRight = new Codicon('chevron-right', { fontCharacter: '\\\\eab6' });\n Codicon.chevronUp = new Codicon('chevron-up', { fontCharacter: '\\\\eab7' });\n Codicon.chromeClose = new Codicon('chrome-close', { fontCharacter: '\\\\eab8' });\n Codicon.chromeMaximize = new Codicon('chrome-maximize', { fontCharacter: '\\\\eab9' });\n Codicon.chromeMinimize = new Codicon('chrome-minimize', { fontCharacter: '\\\\eaba' });\n Codicon.chromeRestore = new Codicon('chrome-restore', { fontCharacter: '\\\\eabb' });\n Codicon.circleOutline = new Codicon('circle-outline', { fontCharacter: '\\\\eabc' });\n Codicon.debugBreakpointUnverified = new Codicon('debug-breakpoint-unverified', { fontCharacter: '\\\\eabc' });\n Codicon.circleSlash = new Codicon('circle-slash', { fontCharacter: '\\\\eabd' });\n Codicon.circuitBoard = new Codicon('circuit-board', { fontCharacter: '\\\\eabe' });\n Codicon.clearAll = new Codicon('clear-all', { fontCharacter: '\\\\eabf' });\n Codicon.clippy = new Codicon('clippy', { fontCharacter: '\\\\eac0' });\n Codicon.closeAll = new Codicon('close-all', { fontCharacter: '\\\\eac1' });\n Codicon.cloudDownload = new Codicon('cloud-download', { fontCharacter: '\\\\eac2' });\n Codicon.cloudUpload = new Codicon('cloud-upload', { fontCharacter: '\\\\eac3' });\n Codicon.code = new Codicon('code', { fontCharacter: '\\\\eac4' });\n Codicon.collapseAll = new Codicon('collapse-all', { fontCharacter: '\\\\eac5' });\n Codicon.colorMode = new Codicon('color-mode', { fontCharacter: '\\\\eac6' });\n Codicon.commentDiscussion = new Codicon('comment-discussion', { fontCharacter: '\\\\eac7' });\n Codicon.compareChanges = new Codicon('compare-changes', { fontCharacter: '\\\\eafd' });\n Codicon.creditCard = new Codicon('credit-card', { fontCharacter: '\\\\eac9' });\n Codicon.dash = new Codicon('dash', { fontCharacter: '\\\\eacc' });\n Codicon.dashboard = new Codicon('dashboard', { fontCharacter: '\\\\eacd' });\n Codicon.database = new Codicon('database', { fontCharacter: '\\\\eace' });\n Codicon.debugContinue = new Codicon('debug-continue', { fontCharacter: '\\\\eacf' });\n Codicon.debugDisconnect = new Codicon('debug-disconnect', { fontCharacter: '\\\\ead0' });\n Codicon.debugPause = new Codicon('debug-pause', { fontCharacter: '\\\\ead1' });\n Codicon.debugRestart = new Codicon('debug-restart', { fontCharacter: '\\\\ead2' });\n Codicon.debugStart = new Codicon('debug-start', { fontCharacter: '\\\\ead3' });\n Codicon.debugStepInto = new Codicon('debug-step-into', { fontCharacter: '\\\\ead4' });\n Codicon.debugStepOut = new Codicon('debug-step-out', { fontCharacter: '\\\\ead5' });\n Codicon.debugStepOver = new Codicon('debug-step-over', { fontCharacter: '\\\\ead6' });\n Codicon.debugStop = new Codicon('debug-stop', { fontCharacter: '\\\\ead7' });\n Codicon.debug = new Codicon('debug', { fontCharacter: '\\\\ead8' });\n Codicon.deviceCameraVideo = new Codicon('device-camera-video', { fontCharacter: '\\\\ead9' });\n Codicon.deviceCamera = new Codicon('device-camera', { fontCharacter: '\\\\eada' });\n Codicon.deviceMobile = new Codicon('device-mobile', { fontCharacter: '\\\\eadb' });\n Codicon.diffAdded = new Codicon('diff-added', { fontCharacter: '\\\\eadc' });\n Codicon.diffIgnored = new Codicon('diff-ignored', { fontCharacter: '\\\\eadd' });\n Codicon.diffModified = new Codicon('diff-modified', { fontCharacter: '\\\\eade' });\n Codicon.diffRemoved = new Codicon('diff-removed', { fontCharacter: '\\\\eadf' });\n Codicon.diffRenamed = new Codicon('diff-renamed', { fontCharacter: '\\\\eae0' });\n Codicon.diff = new Codicon('diff', { fontCharacter: '\\\\eae1' });\n Codicon.discard = new Codicon('discard', { fontCharacter: '\\\\eae2' });\n Codicon.editorLayout = new Codicon('editor-layout', { fontCharacter: '\\\\eae3' });\n Codicon.emptyWindow = new Codicon('empty-window', { fontCharacter: '\\\\eae4' });\n Codicon.exclude = new Codicon('exclude', { fontCharacter: '\\\\eae5' });\n Codicon.extensions = new Codicon('extensions', { fontCharacter: '\\\\eae6' });\n Codicon.eyeClosed = new Codicon('eye-closed', { fontCharacter: '\\\\eae7' });\n Codicon.fileBinary = new Codicon('file-binary', { fontCharacter: '\\\\eae8' });\n Codicon.fileCode = new Codicon('file-code', { fontCharacter: '\\\\eae9' });\n Codicon.fileMedia = new Codicon('file-media', { fontCharacter: '\\\\eaea' });\n Codicon.filePdf = new Codicon('file-pdf', { fontCharacter: '\\\\eaeb' });\n Codicon.fileSubmodule = new Codicon('file-submodule', { fontCharacter: '\\\\eaec' });\n Codicon.fileSymlinkDirectory = new Codicon('file-symlink-directory', { fontCharacter: '\\\\eaed' });\n Codicon.fileSymlinkFile = new Codicon('file-symlink-file', { fontCharacter: '\\\\eaee' });\n Codicon.fileZip = new Codicon('file-zip', { fontCharacter: '\\\\eaef' });\n Codicon.files = new Codicon('files', { fontCharacter: '\\\\eaf0' });\n Codicon.filter = new Codicon('filter', { fontCharacter: '\\\\eaf1' });\n Codicon.flame = new Codicon('flame', { fontCharacter: '\\\\eaf2' });\n Codicon.foldDown = new Codicon('fold-down', { fontCharacter: '\\\\eaf3' });\n Codicon.foldUp = new Codicon('fold-up', { fontCharacter: '\\\\eaf4' });\n Codicon.fold = new Codicon('fold', { fontCharacter: '\\\\eaf5' });\n Codicon.folderActive = new Codicon('folder-active', { fontCharacter: '\\\\eaf6' });\n Codicon.folderOpened = new Codicon('folder-opened', { fontCharacter: '\\\\eaf7' });\n Codicon.gear = new Codicon('gear', { fontCharacter: '\\\\eaf8' });\n Codicon.gift = new Codicon('gift', { fontCharacter: '\\\\eaf9' });\n Codicon.gistSecret = new Codicon('gist-secret', { fontCharacter: '\\\\eafa' });\n Codicon.gist = new Codicon('gist', { fontCharacter: '\\\\eafb' });\n Codicon.gitCommit = new Codicon('git-commit', { fontCharacter: '\\\\eafc' });\n Codicon.gitCompare = new Codicon('git-compare', { fontCharacter: '\\\\eafd' });\n Codicon.gitMerge = new Codicon('git-merge', { fontCharacter: '\\\\eafe' });\n Codicon.githubAction = new Codicon('github-action', { fontCharacter: '\\\\eaff' });\n Codicon.githubAlt = new Codicon('github-alt', { fontCharacter: '\\\\eb00' });\n Codicon.globe = new Codicon('globe', { fontCharacter: '\\\\eb01' });\n Codicon.grabber = new Codicon('grabber', { fontCharacter: '\\\\eb02' });\n Codicon.graph = new Codicon('graph', { fontCharacter: '\\\\eb03' });\n Codicon.gripper = new Codicon('gripper', { fontCharacter: '\\\\eb04' });\n Codicon.heart = new Codicon('heart', { fontCharacter: '\\\\eb05' });\n Codicon.home = new Codicon('home', { fontCharacter: '\\\\eb06' });\n Codicon.horizontalRule = new Codicon('horizontal-rule', { fontCharacter: '\\\\eb07' });\n Codicon.hubot = new Codicon('hubot', { fontCharacter: '\\\\eb08' });\n Codicon.inbox = new Codicon('inbox', { fontCharacter: '\\\\eb09' });\n Codicon.issueClosed = new Codicon('issue-closed', { fontCharacter: '\\\\eb0a' });\n Codicon.issueReopened = new Codicon('issue-reopened', { fontCharacter: '\\\\eb0b' });\n Codicon.issues = new Codicon('issues', { fontCharacter: '\\\\eb0c' });\n Codicon.italic = new Codicon('italic', { fontCharacter: '\\\\eb0d' });\n Codicon.jersey = new Codicon('jersey', { fontCharacter: '\\\\eb0e' });\n Codicon.json = new Codicon('json', { fontCharacter: '\\\\eb0f' });\n Codicon.kebabVertical = new Codicon('kebab-vertical', { fontCharacter: '\\\\eb10' });\n Codicon.key = new Codicon('key', { fontCharacter: '\\\\eb11' });\n Codicon.law = new Codicon('law', { fontCharacter: '\\\\eb12' });\n Codicon.lightbulbAutofix = new Codicon('lightbulb-autofix', { fontCharacter: '\\\\eb13' });\n Codicon.linkExternal = new Codicon('link-external', { fontCharacter: '\\\\eb14' });\n Codicon.link = new Codicon('link', { fontCharacter: '\\\\eb15' });\n Codicon.listOrdered = new Codicon('list-ordered', { fontCharacter: '\\\\eb16' });\n Codicon.listUnordered = new Codicon('list-unordered', { fontCharacter: '\\\\eb17' });\n Codicon.liveShare = new Codicon('live-share', { fontCharacter: '\\\\eb18' });\n Codicon.loading = new Codicon('loading', { fontCharacter: '\\\\eb19' });\n Codicon.location = new Codicon('location', { fontCharacter: '\\\\eb1a' });\n Codicon.mailRead = new Codicon('mail-read', { fontCharacter: '\\\\eb1b' });\n Codicon.mail = new Codicon('mail', { fontCharacter: '\\\\eb1c' });\n Codicon.markdown = new Codicon('markdown', { fontCharacter: '\\\\eb1d' });\n Codicon.megaphone = new Codicon('megaphone', { fontCharacter: '\\\\eb1e' });\n Codicon.mention = new Codicon('mention', { fontCharacter: '\\\\eb1f' });\n Codicon.milestone = new Codicon('milestone', { fontCharacter: '\\\\eb20' });\n Codicon.mortarBoard = new Codicon('mortar-board', { fontCharacter: '\\\\eb21' });\n Codicon.move = new Codicon('move', { fontCharacter: '\\\\eb22' });\n Codicon.multipleWindows = new Codicon('multiple-windows', { fontCharacter: '\\\\eb23' });\n Codicon.mute = new Codicon('mute', { fontCharacter: '\\\\eb24' });\n Codicon.noNewline = new Codicon('no-newline', { fontCharacter: '\\\\eb25' });\n Codicon.note = new Codicon('note', { fontCharacter: '\\\\eb26' });\n Codicon.octoface = new Codicon('octoface', { fontCharacter: '\\\\eb27' });\n Codicon.openPreview = new Codicon('open-preview', { fontCharacter: '\\\\eb28' });\n Codicon.package_ = new Codicon('package', { fontCharacter: '\\\\eb29' });\n Codicon.paintcan = new Codicon('paintcan', { fontCharacter: '\\\\eb2a' });\n Codicon.pin = new Codicon('pin', { fontCharacter: '\\\\eb2b' });\n Codicon.play = new Codicon('play', { fontCharacter: '\\\\eb2c' });\n Codicon.run = new Codicon('run', { fontCharacter: '\\\\eb2c' });\n Codicon.plug = new Codicon('plug', { fontCharacter: '\\\\eb2d' });\n Codicon.preserveCase = new Codicon('preserve-case', { fontCharacter: '\\\\eb2e' });\n Codicon.preview = new Codicon('preview', { fontCharacter: '\\\\eb2f' });\n Codicon.project = new Codicon('project', { fontCharacter: '\\\\eb30' });\n Codicon.pulse = new Codicon('pulse', { fontCharacter: '\\\\eb31' });\n Codicon.question = new Codicon('question', { fontCharacter: '\\\\eb32' });\n Codicon.quote = new Codicon('quote', { fontCharacter: '\\\\eb33' });\n Codicon.radioTower = new Codicon('radio-tower', { fontCharacter: '\\\\eb34' });\n Codicon.reactions = new Codicon('reactions', { fontCharacter: '\\\\eb35' });\n Codicon.references = new Codicon('references', { fontCharacter: '\\\\eb36' });\n Codicon.refresh = new Codicon('refresh', { fontCharacter: '\\\\eb37' });\n Codicon.regex = new Codicon('regex', { fontCharacter: '\\\\eb38' });\n Codicon.remoteExplorer = new Codicon('remote-explorer', { fontCharacter: '\\\\eb39' });\n Codicon.remote = new Codicon('remote', { fontCharacter: '\\\\eb3a' });\n Codicon.remove = new Codicon('remove', { fontCharacter: '\\\\eb3b' });\n Codicon.replaceAll = new Codicon('replace-all', { fontCharacter: '\\\\eb3c' });\n Codicon.replace = new Codicon('replace', { fontCharacter: '\\\\eb3d' });\n Codicon.repoClone = new Codicon('repo-clone', { fontCharacter: '\\\\eb3e' });\n Codicon.repoForcePush = new Codicon('repo-force-push', { fontCharacter: '\\\\eb3f' });\n Codicon.repoPull = new Codicon('repo-pull', { fontCharacter: '\\\\eb40' });\n Codicon.repoPush = new Codicon('repo-push', { fontCharacter: '\\\\eb41' });\n Codicon.report = new Codicon('report', { fontCharacter: '\\\\eb42' });\n Codicon.requestChanges = new Codicon('request-changes', { fontCharacter: '\\\\eb43' });\n Codicon.rocket = new Codicon('rocket', { fontCharacter: '\\\\eb44' });\n Codicon.rootFolderOpened = new Codicon('root-folder-opened', { fontCharacter: '\\\\eb45' });\n Codicon.rootFolder = new Codicon('root-folder', { fontCharacter: '\\\\eb46' });\n Codicon.rss = new Codicon('rss', { fontCharacter: '\\\\eb47' });\n Codicon.ruby = new Codicon('ruby', { fontCharacter: '\\\\eb48' });\n Codicon.saveAll = new Codicon('save-all', { fontCharacter: '\\\\eb49' });\n Codicon.saveAs = new Codicon('save-as', { fontCharacter: '\\\\eb4a' });\n Codicon.save = new Codicon('save', { fontCharacter: '\\\\eb4b' });\n Codicon.screenFull = new Codicon('screen-full', { fontCharacter: '\\\\eb4c' });\n Codicon.screenNormal = new Codicon('screen-normal', { fontCharacter: '\\\\eb4d' });\n Codicon.searchStop = new Codicon('search-stop', { fontCharacter: '\\\\eb4e' });\n Codicon.server = new Codicon('server', { fontCharacter: '\\\\eb50' });\n Codicon.settingsGear = new Codicon('settings-gear', { fontCharacter: '\\\\eb51' });\n Codicon.settings = new Codicon('settings', { fontCharacter: '\\\\eb52' });\n Codicon.shield = new Codicon('shield', { fontCharacter: '\\\\eb53' });\n Codicon.smiley = new Codicon('smiley', { fontCharacter: '\\\\eb54' });\n Codicon.sortPrecedence = new Codicon('sort-precedence', { fontCharacter: '\\\\eb55' });\n Codicon.splitHorizontal = new Codicon('split-horizontal', { fontCharacter: '\\\\eb56' });\n Codicon.splitVertical = new Codicon('split-vertical', { fontCharacter: '\\\\eb57' });\n Codicon.squirrel = new Codicon('squirrel', { fontCharacter: '\\\\eb58' });\n Codicon.starFull = new Codicon('star-full', { fontCharacter: '\\\\eb59' });\n Codicon.starHalf = new Codicon('star-half', { fontCharacter: '\\\\eb5a' });\n Codicon.symbolClass = new Codicon('symbol-class', { fontCharacter: '\\\\eb5b' });\n Codicon.symbolColor = new Codicon('symbol-color', { fontCharacter: '\\\\eb5c' });\n Codicon.symbolConstant = new Codicon('symbol-constant', { fontCharacter: '\\\\eb5d' });\n Codicon.symbolEnumMember = new Codicon('symbol-enum-member', { fontCharacter: '\\\\eb5e' });\n Codicon.symbolField = new Codicon('symbol-field', { fontCharacter: '\\\\eb5f' });\n Codicon.symbolFile = new Codicon('symbol-file', { fontCharacter: '\\\\eb60' });\n Codicon.symbolInterface = new Codicon('symbol-interface', { fontCharacter: '\\\\eb61' });\n Codicon.symbolKeyword = new Codicon('symbol-keyword', { fontCharacter: '\\\\eb62' });\n Codicon.symbolMisc = new Codicon('symbol-misc', { fontCharacter: '\\\\eb63' });\n Codicon.symbolOperator = new Codicon('symbol-operator', { fontCharacter: '\\\\eb64' });\n Codicon.symbolProperty = new Codicon('symbol-property', { fontCharacter: '\\\\eb65' });\n Codicon.wrench = new Codicon('wrench', { fontCharacter: '\\\\eb65' });\n Codicon.wrenchSubaction = new Codicon('wrench-subaction', { fontCharacter: '\\\\eb65' });\n Codicon.symbolSnippet = new Codicon('symbol-snippet', { fontCharacter: '\\\\eb66' });\n Codicon.tasklist = new Codicon('tasklist', { fontCharacter: '\\\\eb67' });\n Codicon.telescope = new Codicon('telescope', { fontCharacter: '\\\\eb68' });\n Codicon.textSize = new Codicon('text-size', { fontCharacter: '\\\\eb69' });\n Codicon.threeBars = new Codicon('three-bars', { fontCharacter: '\\\\eb6a' });\n Codicon.thumbsdown = new Codicon('thumbsdown', { fontCharacter: '\\\\eb6b' });\n Codicon.thumbsup = new Codicon('thumbsup', { fontCharacter: '\\\\eb6c' });\n Codicon.tools = new Codicon('tools', { fontCharacter: '\\\\eb6d' });\n Codicon.triangleDown = new Codicon('triangle-down', { fontCharacter: '\\\\eb6e' });\n Codicon.triangleLeft = new Codicon('triangle-left', { fontCharacter: '\\\\eb6f' });\n Codicon.triangleRight = new Codicon('triangle-right', { fontCharacter: '\\\\eb70' });\n Codicon.triangleUp = new Codicon('triangle-up', { fontCharacter: '\\\\eb71' });\n Codicon.twitter = new Codicon('twitter', { fontCharacter: '\\\\eb72' });\n Codicon.unfold = new Codicon('unfold', { fontCharacter: '\\\\eb73' });\n Codicon.unlock = new Codicon('unlock', { fontCharacter: '\\\\eb74' });\n Codicon.unmute = new Codicon('unmute', { fontCharacter: '\\\\eb75' });\n Codicon.unverified = new Codicon('unverified', { fontCharacter: '\\\\eb76' });\n Codicon.verified = new Codicon('verified', { fontCharacter: '\\\\eb77' });\n Codicon.versions = new Codicon('versions', { fontCharacter: '\\\\eb78' });\n Codicon.vmActive = new Codicon('vm-active', { fontCharacter: '\\\\eb79' });\n Codicon.vmOutline = new Codicon('vm-outline', { fontCharacter: '\\\\eb7a' });\n Codicon.vmRunning = new Codicon('vm-running', { fontCharacter: '\\\\eb7b' });\n Codicon.watch = new Codicon('watch', { fontCharacter: '\\\\eb7c' });\n Codicon.whitespace = new Codicon('whitespace', { fontCharacter: '\\\\eb7d' });\n Codicon.wholeWord = new Codicon('whole-word', { fontCharacter: '\\\\eb7e' });\n Codicon.window = new Codicon('window', { fontCharacter: '\\\\eb7f' });\n Codicon.wordWrap = new Codicon('word-wrap', { fontCharacter: '\\\\eb80' });\n Codicon.zoomIn = new Codicon('zoom-in', { fontCharacter: '\\\\eb81' });\n Codicon.zoomOut = new Codicon('zoom-out', { fontCharacter: '\\\\eb82' });\n Codicon.listFilter = new Codicon('list-filter', { fontCharacter: '\\\\eb83' });\n Codicon.listFlat = new Codicon('list-flat', { fontCharacter: '\\\\eb84' });\n Codicon.listSelection = new Codicon('list-selection', { fontCharacter: '\\\\eb85' });\n Codicon.selection = new Codicon('selection', { fontCharacter: '\\\\eb85' });\n Codicon.listTree = new Codicon('list-tree', { fontCharacter: '\\\\eb86' });\n Codicon.debugBreakpointFunctionUnverified = new Codicon('debug-breakpoint-function-unverified', { fontCharacter: '\\\\eb87' });\n Codicon.debugBreakpointFunction = new Codicon('debug-breakpoint-function', { fontCharacter: '\\\\eb88' });\n Codicon.debugBreakpointFunctionDisabled = new Codicon('debug-breakpoint-function-disabled', { fontCharacter: '\\\\eb88' });\n Codicon.debugStackframeActive = new Codicon('debug-stackframe-active', { fontCharacter: '\\\\eb89' });\n Codicon.debugStackframeDot = new Codicon('debug-stackframe-dot', { fontCharacter: '\\\\eb8a' });\n Codicon.debugStackframe = new Codicon('debug-stackframe', { fontCharacter: '\\\\eb8b' });\n Codicon.debugStackframeFocused = new Codicon('debug-stackframe-focused', { fontCharacter: '\\\\eb8b' });\n Codicon.debugBreakpointUnsupported = new Codicon('debug-breakpoint-unsupported', { fontCharacter: '\\\\eb8c' });\n Codicon.symbolString = new Codicon('symbol-string', { fontCharacter: '\\\\eb8d' });\n Codicon.debugReverseContinue = new Codicon('debug-reverse-continue', { fontCharacter: '\\\\eb8e' });\n Codicon.debugStepBack = new Codicon('debug-step-back', { fontCharacter: '\\\\eb8f' });\n Codicon.debugRestartFrame = new Codicon('debug-restart-frame', { fontCharacter: '\\\\eb90' });\n Codicon.callIncoming = new Codicon('call-incoming', { fontCharacter: '\\\\eb92' });\n Codicon.callOutgoing = new Codicon('call-outgoing', { fontCharacter: '\\\\eb93' });\n Codicon.menu = new Codicon('menu', { fontCharacter: '\\\\eb94' });\n Codicon.expandAll = new Codicon('expand-all', { fontCharacter: '\\\\eb95' });\n Codicon.feedback = new Codicon('feedback', { fontCharacter: '\\\\eb96' });\n Codicon.groupByRefType = new Codicon('group-by-ref-type', { fontCharacter: '\\\\eb97' });\n Codicon.ungroupByRefType = new Codicon('ungroup-by-ref-type', { fontCharacter: '\\\\eb98' });\n Codicon.account = new Codicon('account', { fontCharacter: '\\\\eb99' });\n Codicon.bellDot = new Codicon('bell-dot', { fontCharacter: '\\\\eb9a' });\n Codicon.debugConsole = new Codicon('debug-console', { fontCharacter: '\\\\eb9b' });\n Codicon.library = new Codicon('library', { fontCharacter: '\\\\eb9c' });\n Codicon.output = new Codicon('output', { fontCharacter: '\\\\eb9d' });\n Codicon.runAll = new Codicon('run-all', { fontCharacter: '\\\\eb9e' });\n Codicon.syncIgnored = new Codicon('sync-ignored', { fontCharacter: '\\\\eb9f' });\n Codicon.pinned = new Codicon('pinned', { fontCharacter: '\\\\eba0' });\n Codicon.githubInverted = new Codicon('github-inverted', { fontCharacter: '\\\\eba1' });\n Codicon.debugAlt = new Codicon('debug-alt', { fontCharacter: '\\\\eb91' });\n Codicon.serverProcess = new Codicon('server-process', { fontCharacter: '\\\\eba2' });\n Codicon.serverEnvironment = new Codicon('server-environment', { fontCharacter: '\\\\eba3' });\n Codicon.pass = new Codicon('pass', { fontCharacter: '\\\\eba4' });\n Codicon.stopCircle = new Codicon('stop-circle', { fontCharacter: '\\\\eba5' });\n Codicon.playCircle = new Codicon('play-circle', { fontCharacter: '\\\\eba6' });\n Codicon.record = new Codicon('record', { fontCharacter: '\\\\eba7' });\n Codicon.debugAltSmall = new Codicon('debug-alt-small', { fontCharacter: '\\\\eba8' });\n Codicon.vmConnect = new Codicon('vm-connect', { fontCharacter: '\\\\eba9' });\n Codicon.cloud = new Codicon('cloud', { fontCharacter: '\\\\ebaa' });\n Codicon.merge = new Codicon('merge', { fontCharacter: '\\\\ebab' });\n Codicon.exportIcon = new Codicon('export', { fontCharacter: '\\\\ebac' });\n Codicon.graphLeft = new Codicon('graph-left', { fontCharacter: '\\\\ebad' });\n Codicon.magnet = new Codicon('magnet', { fontCharacter: '\\\\ebae' });\n Codicon.notebook = new Codicon('notebook', { fontCharacter: '\\\\ebaf' });\n Codicon.redo = new Codicon('redo', { fontCharacter: '\\\\ebb0' });\n Codicon.checkAll = new Codicon('check-all', { fontCharacter: '\\\\ebb1' });\n Codicon.pinnedDirty = new Codicon('pinned-dirty', { fontCharacter: '\\\\ebb2' });\n Codicon.passFilled = new Codicon('pass-filled', { fontCharacter: '\\\\ebb3' });\n Codicon.circleLargeFilled = new Codicon('circle-large-filled', { fontCharacter: '\\\\ebb4' });\n Codicon.circleLargeOutline = new Codicon('circle-large-outline', { fontCharacter: '\\\\ebb5' });\n Codicon.combine = new Codicon('combine', { fontCharacter: '\\\\ebb6' });\n Codicon.gather = new Codicon('gather', { fontCharacter: '\\\\ebb6' });\n Codicon.table = new Codicon('table', { fontCharacter: '\\\\ebb7' });\n Codicon.variableGroup = new Codicon('variable-group', { fontCharacter: '\\\\ebb8' });\n Codicon.typeHierarchy = new Codicon('type-hierarchy', { fontCharacter: '\\\\ebb9' });\n Codicon.typeHierarchySub = new Codicon('type-hierarchy-sub', { fontCharacter: '\\\\ebba' });\n Codicon.typeHierarchySuper = new Codicon('type-hierarchy-super', { fontCharacter: '\\\\ebbb' });\n Codicon.gitPullRequestCreate = new Codicon('git-pull-request-create', { fontCharacter: '\\\\ebbc' });\n Codicon.runAbove = new Codicon('run-above', { fontCharacter: '\\\\ebbd' });\n Codicon.runBelow = new Codicon('run-below', { fontCharacter: '\\\\ebbe' });\n Codicon.notebookTemplate = new Codicon('notebook-template', { fontCharacter: '\\\\ebbf' });\n Codicon.debugRerun = new Codicon('debug-rerun', { fontCharacter: '\\\\ebc0' });\n Codicon.workspaceTrusted = new Codicon('workspace-trusted', { fontCharacter: '\\\\ebc1' });\n Codicon.workspaceUntrusted = new Codicon('workspace-untrusted', { fontCharacter: '\\\\ebc2' });\n Codicon.workspaceUnspecified = new Codicon('workspace-unspecified', { fontCharacter: '\\\\ebc3' });\n Codicon.terminalCmd = new Codicon('terminal-cmd', { fontCharacter: '\\\\ebc4' });\n Codicon.terminalDebian = new Codicon('terminal-debian', { fontCharacter: '\\\\ebc5' });\n Codicon.terminalLinux = new Codicon('terminal-linux', { fontCharacter: '\\\\ebc6' });\n Codicon.terminalPowershell = new Codicon('terminal-powershell', { fontCharacter: '\\\\ebc7' });\n Codicon.terminalTmux = new Codicon('terminal-tmux', { fontCharacter: '\\\\ebc8' });\n Codicon.terminalUbuntu = new Codicon('terminal-ubuntu', { fontCharacter: '\\\\ebc9' });\n Codicon.terminalBash = new Codicon('terminal-bash', { fontCharacter: '\\\\ebca' });\n Codicon.arrowSwap = new Codicon('arrow-swap', { fontCharacter: '\\\\ebcb' });\n Codicon.copy = new Codicon('copy', { fontCharacter: '\\\\ebcc' });\n Codicon.personAdd = new Codicon('person-add', { fontCharacter: '\\\\ebcd' });\n Codicon.filterFilled = new Codicon('filter-filled', { fontCharacter: '\\\\ebce' });\n Codicon.wand = new Codicon('wand', { fontCharacter: '\\\\ebcf' });\n Codicon.debugLineByLine = new Codicon('debug-line-by-line', { fontCharacter: '\\\\ebd0' });\n Codicon.dropDownButton = new Codicon('drop-down-button', Codicon.chevronDown.definition);\n})(Codicon || (Codicon = {}));\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 *--------------------------------------------------------------------------------------------*/\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\n/**\n * Iterates over each entry in the provided dictionary. The iterator allows\n * to remove elements and will stop when the callback returns {{false}}.\n */\nexport function forEach(from, callback) {\n for (let key in from) {\n if (hasOwnProperty.call(from, key)) {\n const result = callback({ key: key, value: from[key] }, function () {\n delete from[key];\n });\n if (result === false) {\n return;\n }\n }\n }\n}\nexport class SetMap {\n constructor() {\n this.map = new Map();\n }\n add(key, value) {\n let values = this.map.get(key);\n if (!values) {\n values = new Set();\n this.map.set(key, values);\n }\n values.add(value);\n }\n delete(key, value) {\n const values = this.map.get(key);\n if (!values) {\n return;\n }\n values.delete(value);\n if (values.size === 0) {\n this.map.delete(key);\n }\n }\n forEach(key, fn) {\n const values = this.map.get(key);\n if (!values) {\n return;\n }\n values.forEach(fn);\n }\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 *--------------------------------------------------------------------------------------------*/\nfunction roundFloat(number, decimalPoints) {\n const decimal = Math.pow(10, decimalPoints);\n return Math.round(number * decimal) / decimal;\n}\nexport class RGBA {\n constructor(r, g, b, a = 1) {\n this.r = Math.min(255, Math.max(0, r)) | 0;\n this.g = Math.min(255, Math.max(0, g)) | 0;\n this.b = Math.min(255, Math.max(0, b)) | 0;\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n }\n static equals(a, b) {\n return a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a;\n }\n}\nexport class HSLA {\n constructor(h, s, l, a) {\n this.h = Math.max(Math.min(360, h), 0) | 0;\n this.s = roundFloat(Math.max(Math.min(1, s), 0), 3);\n this.l = roundFloat(Math.max(Math.min(1, l), 0), 3);\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n }\n static equals(a, b) {\n return a.h === b.h && a.s === b.s && a.l === b.l && a.a === b.a;\n }\n /**\n * Converts an RGB color value to HSL. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes r, g, and b are contained in the set [0, 255] and\n * returns h in the set [0, 360], s, and l in the set [0, 1].\n */\n static fromRGBA(rgba) {\n const r = rgba.r / 255;\n const g = rgba.g / 255;\n const b = rgba.b / 255;\n const a = rgba.a;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (min + max) / 2;\n const chroma = max - min;\n if (chroma > 0) {\n s = Math.min((l <= 0.5 ? chroma / (2 * l) : chroma / (2 - (2 * l))), 1);\n switch (max) {\n case r:\n h = (g - b) / chroma + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / chroma + 2;\n break;\n case b:\n h = (r - g) / chroma + 4;\n break;\n }\n h *= 60;\n h = Math.round(h);\n }\n return new HSLA(h, s, l, a);\n }\n static _hue2rgb(p, q, t) {\n if (t < 0) {\n t += 1;\n }\n if (t > 1) {\n t -= 1;\n }\n if (t < 1 / 6) {\n return p + (q - p) * 6 * t;\n }\n if (t < 1 / 2) {\n return q;\n }\n if (t < 2 / 3) {\n return p + (q - p) * (2 / 3 - t) * 6;\n }\n return p;\n }\n /**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n * Assumes h in the set [0, 360] s, and l are contained in the set [0, 1] and\n * returns r, g, and b in the set [0, 255].\n */\n static toRGBA(hsla) {\n const h = hsla.h / 360;\n const { s, l, a } = hsla;\n let r, g, b;\n if (s === 0) {\n r = g = b = l; // achromatic\n }\n else {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = HSLA._hue2rgb(p, q, h + 1 / 3);\n g = HSLA._hue2rgb(p, q, h);\n b = HSLA._hue2rgb(p, q, h - 1 / 3);\n }\n return new RGBA(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), a);\n }\n}\nexport class HSVA {\n constructor(h, s, v, a) {\n this.h = Math.max(Math.min(360, h), 0) | 0;\n this.s = roundFloat(Math.max(Math.min(1, s), 0), 3);\n this.v = roundFloat(Math.max(Math.min(1, v), 0), 3);\n this.a = roundFloat(Math.max(Math.min(1, a), 0), 3);\n }\n static equals(a, b) {\n return a.h === b.h && a.s === b.s && a.v === b.v && a.a === b.a;\n }\n // from http://www.rapidtables.com/convert/color/rgb-to-hsv.htm\n static fromRGBA(rgba) {\n const r = rgba.r / 255;\n const g = rgba.g / 255;\n const b = rgba.b / 255;\n const cmax = Math.max(r, g, b);\n const cmin = Math.min(r, g, b);\n const delta = cmax - cmin;\n const s = cmax === 0 ? 0 : (delta / cmax);\n let m;\n if (delta === 0) {\n m = 0;\n }\n else if (cmax === r) {\n m = ((((g - b) / delta) % 6) + 6) % 6;\n }\n else if (cmax === g) {\n m = ((b - r) / delta) + 2;\n }\n else {\n m = ((r - g) / delta) + 4;\n }\n return new HSVA(Math.round(m * 60), s, cmax, rgba.a);\n }\n // from http://www.rapidtables.com/convert/color/hsv-to-rgb.htm\n static toRGBA(hsva) {\n const { h, s, v, a } = hsva;\n const c = v * s;\n const x = c * (1 - Math.abs((h / 60) % 2 - 1));\n const m = v - c;\n let [r, g, b] = [0, 0, 0];\n if (h < 60) {\n r = c;\n g = x;\n }\n else if (h < 120) {\n r = x;\n g = c;\n }\n else if (h < 180) {\n g = c;\n b = x;\n }\n else if (h < 240) {\n g = x;\n b = c;\n }\n else if (h < 300) {\n r = x;\n b = c;\n }\n else if (h <= 360) {\n r = c;\n b = x;\n }\n r = Math.round((r + m) * 255);\n g = Math.round((g + m) * 255);\n b = Math.round((b + m) * 255);\n return new RGBA(r, g, b, a);\n }\n}\nexport class Color {\n constructor(arg) {\n if (!arg) {\n throw new Error('Color needs a value');\n }\n else if (arg instanceof RGBA) {\n this.rgba = arg;\n }\n else if (arg instanceof HSLA) {\n this._hsla = arg;\n this.rgba = HSLA.toRGBA(arg);\n }\n else if (arg instanceof HSVA) {\n this._hsva = arg;\n this.rgba = HSVA.toRGBA(arg);\n }\n else {\n throw new Error('Invalid color ctor argument');\n }\n }\n static fromHex(hex) {\n return Color.Format.CSS.parseHex(hex) || Color.red;\n }\n get hsla() {\n if (this._hsla) {\n return this._hsla;\n }\n else {\n return HSLA.fromRGBA(this.rgba);\n }\n }\n get hsva() {\n if (this._hsva) {\n return this._hsva;\n }\n return HSVA.fromRGBA(this.rgba);\n }\n equals(other) {\n return !!other && RGBA.equals(this.rgba, other.rgba) && HSLA.equals(this.hsla, other.hsla) && HSVA.equals(this.hsva, other.hsva);\n }\n /**\n * http://www.w3.org/TR/WCAG20/#relativeluminancedef\n * Returns the number in the set [0, 1]. O => Darkest Black. 1 => Lightest white.\n */\n getRelativeLuminance() {\n const R = Color._relativeLuminanceForComponent(this.rgba.r);\n const G = Color._relativeLuminanceForComponent(this.rgba.g);\n const B = Color._relativeLuminanceForComponent(this.rgba.b);\n const luminance = 0.2126 * R + 0.7152 * G + 0.0722 * B;\n return roundFloat(luminance, 4);\n }\n static _relativeLuminanceForComponent(color) {\n const c = color / 255;\n return (c <= 0.03928) ? c / 12.92 : Math.pow(((c + 0.055) / 1.055), 2.4);\n }\n /**\n *\thttp://24ways.org/2010/calculating-color-contrast\n * Return 'true' if lighter color otherwise 'false'\n */\n isLighter() {\n const yiq = (this.rgba.r * 299 + this.rgba.g * 587 + this.rgba.b * 114) / 1000;\n return yiq >= 128;\n }\n isLighterThan(another) {\n const lum1 = this.getRelativeLuminance();\n const lum2 = another.getRelativeLuminance();\n return lum1 > lum2;\n }\n isDarkerThan(another) {\n const lum1 = this.getRelativeLuminance();\n const lum2 = another.getRelativeLuminance();\n return lum1 < lum2;\n }\n lighten(factor) {\n return new Color(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l + this.hsla.l * factor, this.hsla.a));\n }\n darken(factor) {\n return new Color(new HSLA(this.hsla.h, this.hsla.s, this.hsla.l - this.hsla.l * factor, this.hsla.a));\n }\n transparent(factor) {\n const { r, g, b, a } = this.rgba;\n return new Color(new RGBA(r, g, b, a * factor));\n }\n isTransparent() {\n return this.rgba.a === 0;\n }\n isOpaque() {\n return this.rgba.a === 1;\n }\n opposite() {\n return new Color(new RGBA(255 - this.rgba.r, 255 - this.rgba.g, 255 - this.rgba.b, this.rgba.a));\n }\n toString() {\n return '' + Color.Format.CSS.format(this);\n }\n static getLighterColor(of, relative, factor) {\n if (of.isLighterThan(relative)) {\n return of;\n }\n factor = factor ? factor : 0.5;\n const lum1 = of.getRelativeLuminance();\n const lum2 = relative.getRelativeLuminance();\n factor = factor * (lum2 - lum1) / lum2;\n return of.lighten(factor);\n }\n static getDarkerColor(of, relative, factor) {\n if (of.isDarkerThan(relative)) {\n return of;\n }\n factor = factor ? factor : 0.5;\n const lum1 = of.getRelativeLuminance();\n const lum2 = relative.getRelativeLuminance();\n factor = factor * (lum1 - lum2) / lum1;\n return of.darken(factor);\n }\n}\nColor.white = new Color(new RGBA(255, 255, 255, 1));\nColor.black = new Color(new RGBA(0, 0, 0, 1));\nColor.red = new Color(new RGBA(255, 0, 0, 1));\nColor.blue = new Color(new RGBA(0, 0, 255, 1));\nColor.cyan = new Color(new RGBA(0, 255, 255, 1));\nColor.lightgrey = new Color(new RGBA(211, 211, 211, 1));\nColor.transparent = new Color(new RGBA(0, 0, 0, 0));\n(function (Color) {\n let Format;\n (function (Format) {\n let CSS;\n (function (CSS) {\n function formatRGB(color) {\n if (color.rgba.a === 1) {\n return `rgb(${color.rgba.r}, ${color.rgba.g}, ${color.rgba.b})`;\n }\n return Color.Format.CSS.formatRGBA(color);\n }\n CSS.formatRGB = formatRGB;\n function formatRGBA(color) {\n return `rgba(${color.rgba.r}, ${color.rgba.g}, ${color.rgba.b}, ${+(color.rgba.a).toFixed(2)})`;\n }\n CSS.formatRGBA = formatRGBA;\n function formatHSL(color) {\n if (color.hsla.a === 1) {\n return `hsl(${color.hsla.h}, ${(color.hsla.s * 100).toFixed(2)}%, ${(color.hsla.l * 100).toFixed(2)}%)`;\n }\n return Color.Format.CSS.formatHSLA(color);\n }\n CSS.formatHSL = formatHSL;\n function formatHSLA(color) {\n return `hsla(${color.hsla.h}, ${(color.hsla.s * 100).toFixed(2)}%, ${(color.hsla.l * 100).toFixed(2)}%, ${color.hsla.a.toFixed(2)})`;\n }\n CSS.formatHSLA = formatHSLA;\n function _toTwoDigitHex(n) {\n const r = n.toString(16);\n return r.length !== 2 ? '0' + r : r;\n }\n /**\n * Formats the color as #RRGGBB\n */\n function formatHex(color) {\n return `#${_toTwoDigitHex(color.rgba.r)}${_toTwoDigitHex(color.rgba.g)}${_toTwoDigitHex(color.rgba.b)}`;\n }\n CSS.formatHex = formatHex;\n /**\n * Formats the color as #RRGGBBAA\n * If 'compact' is set, colors without transparancy will be printed as #RRGGBB\n */\n function formatHexA(color, compact = false) {\n if (compact && color.rgba.a === 1) {\n return Color.Format.CSS.formatHex(color);\n }\n return `#${_toTwoDigitHex(color.rgba.r)}${_toTwoDigitHex(color.rgba.g)}${_toTwoDigitHex(color.rgba.b)}${_toTwoDigitHex(Math.round(color.rgba.a * 255))}`;\n }\n CSS.formatHexA = formatHexA;\n /**\n * The default format will use HEX if opaque and RGBA otherwise.\n */\n function format(color) {\n if (color.isOpaque()) {\n return Color.Format.CSS.formatHex(color);\n }\n return Color.Format.CSS.formatRGBA(color);\n }\n CSS.format = format;\n /**\n * Converts an Hex color value to a Color.\n * returns r, g, and b are contained in the set [0, 255]\n * @param hex string (#RGB, #RGBA, #RRGGBB or #RRGGBBAA).\n */\n function parseHex(hex) {\n const length = hex.length;\n if (length === 0) {\n // Invalid color\n return null;\n }\n if (hex.charCodeAt(0) !== 35 /* Hash */) {\n // Does not begin with a #\n return null;\n }\n if (length === 7) {\n // #RRGGBB format\n const r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2));\n const g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4));\n const b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6));\n return new Color(new RGBA(r, g, b, 1));\n }\n if (length === 9) {\n // #RRGGBBAA format\n const r = 16 * _parseHexDigit(hex.charCodeAt(1)) + _parseHexDigit(hex.charCodeAt(2));\n const g = 16 * _parseHexDigit(hex.charCodeAt(3)) + _parseHexDigit(hex.charCodeAt(4));\n const b = 16 * _parseHexDigit(hex.charCodeAt(5)) + _parseHexDigit(hex.charCodeAt(6));\n const a = 16 * _parseHexDigit(hex.charCodeAt(7)) + _parseHexDigit(hex.charCodeAt(8));\n return new Color(new RGBA(r, g, b, a / 255));\n }\n if (length === 4) {\n // #RGB format\n const r = _parseHexDigit(hex.charCodeAt(1));\n const g = _parseHexDigit(hex.charCodeAt(2));\n const b = _parseHexDigit(hex.charCodeAt(3));\n return new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b));\n }\n if (length === 5) {\n // #RGBA format\n const r = _parseHexDigit(hex.charCodeAt(1));\n const g = _parseHexDigit(hex.charCodeAt(2));\n const b = _parseHexDigit(hex.charCodeAt(3));\n const a = _parseHexDigit(hex.charCodeAt(4));\n return new Color(new RGBA(16 * r + r, 16 * g + g, 16 * b + b, (16 * a + a) / 255));\n }\n // Invalid color\n return null;\n }\n CSS.parseHex = parseHex;\n function _parseHexDigit(charCode) {\n switch (charCode) {\n case 48 /* Digit0 */: return 0;\n case 49 /* Digit1 */: return 1;\n case 50 /* Digit2 */: return 2;\n case 51 /* Digit3 */: return 3;\n case 52 /* Digit4 */: return 4;\n case 53 /* Digit5 */: return 5;\n case 54 /* Digit6 */: return 6;\n case 55 /* Digit7 */: return 7;\n case 56 /* Digit8 */: return 8;\n case 57 /* Digit9 */: return 9;\n case 97 /* a */: return 10;\n case 65 /* A */: return 10;\n case 98 /* b */: return 11;\n case 66 /* B */: return 11;\n case 99 /* c */: return 12;\n case 67 /* C */: return 12;\n case 100 /* d */: return 13;\n case 68 /* D */: return 13;\n case 101 /* e */: return 14;\n case 69 /* E */: return 14;\n case 102 /* f */: return 15;\n case 70 /* F */: return 15;\n }\n return 0;\n }\n })(CSS = Format.CSS || (Format.CSS = {}));\n })(Format = Color.Format || (Color.Format = {}));\n})(Color || (Color = {}));\n","let memoizeId = 0;\nexport function createMemoizer() {\n const memoizeKeyPrefix = `$memoize${memoizeId++}`;\n let self = undefined;\n const result = function memoize(target, key, descriptor) {\n let fnKey = null;\n let fn = null;\n if (typeof descriptor.value === 'function') {\n fnKey = 'value';\n fn = descriptor.value;\n if (fn.length !== 0) {\n console.warn('Memoize should only be used in functions with zero parameters');\n }\n }\n else if (typeof descriptor.get === 'function') {\n fnKey = 'get';\n fn = descriptor.get;\n }\n if (!fn) {\n throw new Error('not supported');\n }\n const memoizeKey = `${memoizeKeyPrefix}:${key}`;\n descriptor[fnKey] = function (...args) {\n self = this;\n if (!this.hasOwnProperty(memoizeKey)) {\n Object.defineProperty(this, memoizeKey, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: fn.apply(this, args)\n });\n }\n return this[memoizeKey];\n };\n };\n result.clear = () => {\n if (typeof self === 'undefined') {\n return;\n }\n Object.getOwnPropertyNames(self).forEach(property => {\n if (property.indexOf(memoizeKeyPrefix) === 0) {\n delete self[property];\n }\n });\n };\n return result;\n}\nexport function memoize(target, key, descriptor) {\n return createMemoizer()(target, key, descriptor);\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/**\n * Represents information about a specific difference between two sequences.\n */\nexport class DiffChange {\n /**\n * Constructs a new DiffChange with the given sequence information\n * and content.\n */\n constructor(originalStart, originalLength, modifiedStart, modifiedLength) {\n //Debug.Assert(originalLength > 0 || modifiedLength > 0, \"originalLength and modifiedLength cannot both be <= 0\");\n this.originalStart = originalStart;\n this.originalLength = originalLength;\n this.modifiedStart = modifiedStart;\n this.modifiedLength = modifiedLength;\n }\n /**\n * The end point (exclusive) of the change in the original sequence.\n */\n getOriginalEnd() {\n return this.originalStart + this.originalLength;\n }\n /**\n * The end point (exclusive) of the change in the modified sequence.\n */\n getModifiedEnd() {\n return this.modifiedStart + this.modifiedLength;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { DiffChange } from './diffChange.js';\nimport { stringHash } from '../hash.js';\nexport class StringDiffSequence {\n constructor(source) {\n this.source = source;\n }\n getElements() {\n const source = this.source;\n const characters = new Int32Array(source.length);\n for (let i = 0, len = source.length; i < len; i++) {\n characters[i] = source.charCodeAt(i);\n }\n return characters;\n }\n}\nexport function stringDiff(original, modified, pretty) {\n return new LcsDiff(new StringDiffSequence(original), new StringDiffSequence(modified)).ComputeDiff(pretty).changes;\n}\n//\n// The code below has been ported from a C# implementation in VS\n//\nexport class Debug {\n static Assert(condition, message) {\n if (!condition) {\n throw new Error(message);\n }\n }\n}\nexport class MyArray {\n /**\n * Copies a range of elements from an Array starting at the specified source index and pastes\n * them to another Array starting at the specified destination index. The length and the indexes\n * are specified as 64-bit integers.\n * sourceArray:\n *\t\tThe Array that contains the data to copy.\n * sourceIndex:\n *\t\tA 64-bit integer that represents the index in the sourceArray at which copying begins.\n * destinationArray:\n *\t\tThe Array that receives the data.\n * destinationIndex:\n *\t\tA 64-bit integer that represents the index in the destinationArray at which storing begins.\n * length:\n *\t\tA 64-bit integer that represents the number of elements to copy.\n */\n static Copy(sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\n for (let i = 0; i < length; i++) {\n destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\n }\n }\n static Copy2(sourceArray, sourceIndex, destinationArray, destinationIndex, length) {\n for (let i = 0; i < length; i++) {\n destinationArray[destinationIndex + i] = sourceArray[sourceIndex + i];\n }\n }\n}\n/**\n * A utility class which helps to create the set of DiffChanges from\n * a difference operation. This class accepts original DiffElements and\n * modified DiffElements that are involved in a particular change. The\n * MarktNextChange() method can be called to mark the separation between\n * distinct changes. At the end, the Changes property can be called to retrieve\n * the constructed changes.\n */\nclass DiffChangeHelper {\n /**\n * Constructs a new DiffChangeHelper for the given DiffSequences.\n */\n constructor() {\n this.m_changes = [];\n this.m_originalStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n this.m_modifiedStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n this.m_originalCount = 0;\n this.m_modifiedCount = 0;\n }\n /**\n * Marks the beginning of the next change in the set of differences.\n */\n MarkNextChange() {\n // Only add to the list if there is something to add\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n // Add the new change to our list\n this.m_changes.push(new DiffChange(this.m_originalStart, this.m_originalCount, this.m_modifiedStart, this.m_modifiedCount));\n }\n // Reset for the next change\n this.m_originalCount = 0;\n this.m_modifiedCount = 0;\n this.m_originalStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n this.m_modifiedStart = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n }\n /**\n * Adds the original element at the given position to the elements\n * affected by the current change. The modified index gives context\n * to the change position with respect to the original sequence.\n * @param originalIndex The index of the original element to add.\n * @param modifiedIndex The index of the modified element that provides corresponding position in the modified sequence.\n */\n AddOriginalElement(originalIndex, modifiedIndex) {\n // The 'true' start index is the smallest of the ones we've seen\n this.m_originalStart = Math.min(this.m_originalStart, originalIndex);\n this.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\n this.m_originalCount++;\n }\n /**\n * Adds the modified element at the given position to the elements\n * affected by the current change. The original index gives context\n * to the change position with respect to the modified sequence.\n * @param originalIndex The index of the original element that provides corresponding position in the original sequence.\n * @param modifiedIndex The index of the modified element to add.\n */\n AddModifiedElement(originalIndex, modifiedIndex) {\n // The 'true' start index is the smallest of the ones we've seen\n this.m_originalStart = Math.min(this.m_originalStart, originalIndex);\n this.m_modifiedStart = Math.min(this.m_modifiedStart, modifiedIndex);\n this.m_modifiedCount++;\n }\n /**\n * Retrieves all of the changes marked by the class.\n */\n getChanges() {\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n // Finish up on whatever is left\n this.MarkNextChange();\n }\n return this.m_changes;\n }\n /**\n * Retrieves all of the changes marked by the class in the reverse order\n */\n getReverseChanges() {\n if (this.m_originalCount > 0 || this.m_modifiedCount > 0) {\n // Finish up on whatever is left\n this.MarkNextChange();\n }\n this.m_changes.reverse();\n return this.m_changes;\n }\n}\n/**\n * An implementation of the difference algorithm described in\n * \"An O(ND) Difference Algorithm and its variations\" by Eugene W. Myers\n */\nexport class LcsDiff {\n /**\n * Constructs the DiffFinder\n */\n constructor(originalSequence, modifiedSequence, continueProcessingPredicate = null) {\n this.ContinueProcessingPredicate = continueProcessingPredicate;\n const [originalStringElements, originalElementsOrHash, originalHasStrings] = LcsDiff._getElements(originalSequence);\n const [modifiedStringElements, modifiedElementsOrHash, modifiedHasStrings] = LcsDiff._getElements(modifiedSequence);\n this._hasStrings = (originalHasStrings && modifiedHasStrings);\n this._originalStringElements = originalStringElements;\n this._originalElementsOrHash = originalElementsOrHash;\n this._modifiedStringElements = modifiedStringElements;\n this._modifiedElementsOrHash = modifiedElementsOrHash;\n this.m_forwardHistory = [];\n this.m_reverseHistory = [];\n }\n static _isStringArray(arr) {\n return (arr.length > 0 && typeof arr[0] === 'string');\n }\n static _getElements(sequence) {\n const elements = sequence.getElements();\n if (LcsDiff._isStringArray(elements)) {\n const hashes = new Int32Array(elements.length);\n for (let i = 0, len = elements.length; i < len; i++) {\n hashes[i] = stringHash(elements[i], 0);\n }\n return [elements, hashes, true];\n }\n if (elements instanceof Int32Array) {\n return [[], elements, false];\n }\n return [[], new Int32Array(elements), false];\n }\n ElementsAreEqual(originalIndex, newIndex) {\n if (this._originalElementsOrHash[originalIndex] !== this._modifiedElementsOrHash[newIndex]) {\n return false;\n }\n return (this._hasStrings ? this._originalStringElements[originalIndex] === this._modifiedStringElements[newIndex] : true);\n }\n OriginalElementsAreEqual(index1, index2) {\n if (this._originalElementsOrHash[index1] !== this._originalElementsOrHash[index2]) {\n return false;\n }\n return (this._hasStrings ? this._originalStringElements[index1] === this._originalStringElements[index2] : true);\n }\n ModifiedElementsAreEqual(index1, index2) {\n if (this._modifiedElementsOrHash[index1] !== this._modifiedElementsOrHash[index2]) {\n return false;\n }\n return (this._hasStrings ? this._modifiedStringElements[index1] === this._modifiedStringElements[index2] : true);\n }\n ComputeDiff(pretty) {\n return this._ComputeDiff(0, this._originalElementsOrHash.length - 1, 0, this._modifiedElementsOrHash.length - 1, pretty);\n }\n /**\n * Computes the differences between the original and modified input\n * sequences on the bounded range.\n * @returns An array of the differences between the two input sequences.\n */\n _ComputeDiff(originalStart, originalEnd, modifiedStart, modifiedEnd, pretty) {\n const quitEarlyArr = [false];\n let changes = this.ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr);\n if (pretty) {\n // We have to clean up the computed diff to be more intuitive\n // but it turns out this cannot be done correctly until the entire set\n // of diffs have been computed\n changes = this.PrettifyChanges(changes);\n }\n return {\n quitEarly: quitEarlyArr[0],\n changes: changes\n };\n }\n /**\n * Private helper method which computes the differences on the bounded range\n * recursively.\n * @returns An array of the differences between the two input sequences.\n */\n ComputeDiffRecursive(originalStart, originalEnd, modifiedStart, modifiedEnd, quitEarlyArr) {\n quitEarlyArr[0] = false;\n // Find the start of the differences\n while (originalStart <= originalEnd && modifiedStart <= modifiedEnd && this.ElementsAreEqual(originalStart, modifiedStart)) {\n originalStart++;\n modifiedStart++;\n }\n // Find the end of the differences\n while (originalEnd >= originalStart && modifiedEnd >= modifiedStart && this.ElementsAreEqual(originalEnd, modifiedEnd)) {\n originalEnd--;\n modifiedEnd--;\n }\n // In the special case where we either have all insertions or all deletions or the sequences are identical\n if (originalStart > originalEnd || modifiedStart > modifiedEnd) {\n let changes;\n if (modifiedStart <= modifiedEnd) {\n Debug.Assert(originalStart === originalEnd + 1, 'originalStart should only be one more than originalEnd');\n // All insertions\n changes = [\n new DiffChange(originalStart, 0, modifiedStart, modifiedEnd - modifiedStart + 1)\n ];\n }\n else if (originalStart <= originalEnd) {\n Debug.Assert(modifiedStart === modifiedEnd + 1, 'modifiedStart should only be one more than modifiedEnd');\n // All deletions\n changes = [\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, 0)\n ];\n }\n else {\n Debug.Assert(originalStart === originalEnd + 1, 'originalStart should only be one more than originalEnd');\n Debug.Assert(modifiedStart === modifiedEnd + 1, 'modifiedStart should only be one more than modifiedEnd');\n // Identical sequences - No differences\n changes = [];\n }\n return changes;\n }\n // This problem can be solved using the Divide-And-Conquer technique.\n const midOriginalArr = [0];\n const midModifiedArr = [0];\n const result = this.ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr);\n const midOriginal = midOriginalArr[0];\n const midModified = midModifiedArr[0];\n if (result !== null) {\n // Result is not-null when there was enough memory to compute the changes while\n // searching for the recursion point\n return result;\n }\n else if (!quitEarlyArr[0]) {\n // We can break the problem down recursively by finding the changes in the\n // First Half: (originalStart, modifiedStart) to (midOriginal, midModified)\n // Second Half: (midOriginal + 1, minModified + 1) to (originalEnd, modifiedEnd)\n // NOTE: ComputeDiff() is inclusive, therefore the second range starts on the next point\n const leftChanges = this.ComputeDiffRecursive(originalStart, midOriginal, modifiedStart, midModified, quitEarlyArr);\n let rightChanges = [];\n if (!quitEarlyArr[0]) {\n rightChanges = this.ComputeDiffRecursive(midOriginal + 1, originalEnd, midModified + 1, modifiedEnd, quitEarlyArr);\n }\n else {\n // We did't have time to finish the first half, so we don't have time to compute this half.\n // Consider the entire rest of the sequence different.\n rightChanges = [\n new DiffChange(midOriginal + 1, originalEnd - (midOriginal + 1) + 1, midModified + 1, modifiedEnd - (midModified + 1) + 1)\n ];\n }\n return this.ConcatenateChanges(leftChanges, rightChanges);\n }\n // If we hit here, we quit early, and so can't return anything meaningful\n return [\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)\n ];\n }\n WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr) {\n let forwardChanges = null;\n let reverseChanges = null;\n // First, walk backward through the forward diagonals history\n let changeHelper = new DiffChangeHelper();\n let diagonalMin = diagonalForwardStart;\n let diagonalMax = diagonalForwardEnd;\n let diagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalForwardOffset;\n let lastOriginalIndex = -1073741824 /* MIN_SAFE_SMALL_INTEGER */;\n let historyIndex = this.m_forwardHistory.length - 1;\n do {\n // Get the diagonal index from the relative diagonal number\n const diagonal = diagonalRelative + diagonalForwardBase;\n // Figure out where we came from\n if (diagonal === diagonalMin || (diagonal < diagonalMax && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {\n // Vertical line (the element is an insert)\n originalIndex = forwardPoints[diagonal + 1];\n modifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\n if (originalIndex < lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex;\n changeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex);\n diagonalRelative = (diagonal + 1) - diagonalForwardBase; //Setup for the next iteration\n }\n else {\n // Horizontal line (the element is a deletion)\n originalIndex = forwardPoints[diagonal - 1] + 1;\n modifiedIndex = originalIndex - diagonalRelative - diagonalForwardOffset;\n if (originalIndex < lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex - 1;\n changeHelper.AddOriginalElement(originalIndex, modifiedIndex + 1);\n diagonalRelative = (diagonal - 1) - diagonalForwardBase; //Setup for the next iteration\n }\n if (historyIndex >= 0) {\n forwardPoints = this.m_forwardHistory[historyIndex];\n diagonalForwardBase = forwardPoints[0]; //We stored this in the first spot\n diagonalMin = 1;\n diagonalMax = forwardPoints.length - 1;\n }\n } while (--historyIndex >= -1);\n // Ironically, we get the forward changes as the reverse of the\n // order we added them since we technically added them backwards\n forwardChanges = changeHelper.getReverseChanges();\n if (quitEarlyArr[0]) {\n // TODO: Calculate a partial from the reverse diagonals.\n // For now, just assume everything after the midOriginal/midModified point is a diff\n let originalStartPoint = midOriginalArr[0] + 1;\n let modifiedStartPoint = midModifiedArr[0] + 1;\n if (forwardChanges !== null && forwardChanges.length > 0) {\n const lastForwardChange = forwardChanges[forwardChanges.length - 1];\n originalStartPoint = Math.max(originalStartPoint, lastForwardChange.getOriginalEnd());\n modifiedStartPoint = Math.max(modifiedStartPoint, lastForwardChange.getModifiedEnd());\n }\n reverseChanges = [\n new DiffChange(originalStartPoint, originalEnd - originalStartPoint + 1, modifiedStartPoint, modifiedEnd - modifiedStartPoint + 1)\n ];\n }\n else {\n // Now walk backward through the reverse diagonals history\n changeHelper = new DiffChangeHelper();\n diagonalMin = diagonalReverseStart;\n diagonalMax = diagonalReverseEnd;\n diagonalRelative = (midOriginalArr[0] - midModifiedArr[0]) - diagonalReverseOffset;\n lastOriginalIndex = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n historyIndex = (deltaIsEven) ? this.m_reverseHistory.length - 1 : this.m_reverseHistory.length - 2;\n do {\n // Get the diagonal index from the relative diagonal number\n const diagonal = diagonalRelative + diagonalReverseBase;\n // Figure out where we came from\n if (diagonal === diagonalMin || (diagonal < diagonalMax && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {\n // Horizontal line (the element is a deletion))\n originalIndex = reversePoints[diagonal + 1] - 1;\n modifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\n if (originalIndex > lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex + 1;\n changeHelper.AddOriginalElement(originalIndex + 1, modifiedIndex + 1);\n diagonalRelative = (diagonal + 1) - diagonalReverseBase; //Setup for the next iteration\n }\n else {\n // Vertical line (the element is an insertion)\n originalIndex = reversePoints[diagonal - 1];\n modifiedIndex = originalIndex - diagonalRelative - diagonalReverseOffset;\n if (originalIndex > lastOriginalIndex) {\n changeHelper.MarkNextChange();\n }\n lastOriginalIndex = originalIndex;\n changeHelper.AddModifiedElement(originalIndex + 1, modifiedIndex + 1);\n diagonalRelative = (diagonal - 1) - diagonalReverseBase; //Setup for the next iteration\n }\n if (historyIndex >= 0) {\n reversePoints = this.m_reverseHistory[historyIndex];\n diagonalReverseBase = reversePoints[0]; //We stored this in the first spot\n diagonalMin = 1;\n diagonalMax = reversePoints.length - 1;\n }\n } while (--historyIndex >= -1);\n // There are cases where the reverse history will find diffs that\n // are correct, but not intuitive, so we need shift them.\n reverseChanges = changeHelper.getChanges();\n }\n return this.ConcatenateChanges(forwardChanges, reverseChanges);\n }\n /**\n * Given the range to compute the diff on, this method finds the point:\n * (midOriginal, midModified)\n * that exists in the middle of the LCS of the two sequences and\n * is the point at which the LCS problem may be broken down recursively.\n * This method will try to keep the LCS trace in memory. If the LCS recursion\n * point is calculated and the full trace is available in memory, then this method\n * will return the change list.\n * @param originalStart The start bound of the original sequence range\n * @param originalEnd The end bound of the original sequence range\n * @param modifiedStart The start bound of the modified sequence range\n * @param modifiedEnd The end bound of the modified sequence range\n * @param midOriginal The middle point of the original sequence range\n * @param midModified The middle point of the modified sequence range\n * @returns The diff changes, if available, otherwise null\n */\n ComputeRecursionPoint(originalStart, originalEnd, modifiedStart, modifiedEnd, midOriginalArr, midModifiedArr, quitEarlyArr) {\n let originalIndex = 0, modifiedIndex = 0;\n let diagonalForwardStart = 0, diagonalForwardEnd = 0;\n let diagonalReverseStart = 0, diagonalReverseEnd = 0;\n // To traverse the edit graph and produce the proper LCS, our actual\n // start position is just outside the given boundary\n originalStart--;\n modifiedStart--;\n // We set these up to make the compiler happy, but they will\n // be replaced before we return with the actual recursion point\n midOriginalArr[0] = 0;\n midModifiedArr[0] = 0;\n // Clear out the history\n this.m_forwardHistory = [];\n this.m_reverseHistory = [];\n // Each cell in the two arrays corresponds to a diagonal in the edit graph.\n // The integer value in the cell represents the originalIndex of the furthest\n // reaching point found so far that ends in that diagonal.\n // The modifiedIndex can be computed mathematically from the originalIndex and the diagonal number.\n const maxDifferences = (originalEnd - originalStart) + (modifiedEnd - modifiedStart);\n const numDiagonals = maxDifferences + 1;\n const forwardPoints = new Int32Array(numDiagonals);\n const reversePoints = new Int32Array(numDiagonals);\n // diagonalForwardBase: Index into forwardPoints of the diagonal which passes through (originalStart, modifiedStart)\n // diagonalReverseBase: Index into reversePoints of the diagonal which passes through (originalEnd, modifiedEnd)\n const diagonalForwardBase = (modifiedEnd - modifiedStart);\n const diagonalReverseBase = (originalEnd - originalStart);\n // diagonalForwardOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the\n // diagonal number (relative to diagonalForwardBase)\n // diagonalReverseOffset: Geometric offset which allows modifiedIndex to be computed from originalIndex and the\n // diagonal number (relative to diagonalReverseBase)\n const diagonalForwardOffset = (originalStart - modifiedStart);\n const diagonalReverseOffset = (originalEnd - modifiedEnd);\n // delta: The difference between the end diagonal and the start diagonal. This is used to relate diagonal numbers\n // relative to the start diagonal with diagonal numbers relative to the end diagonal.\n // The Even/Oddn-ness of this delta is important for determining when we should check for overlap\n const delta = diagonalReverseBase - diagonalForwardBase;\n const deltaIsEven = (delta % 2 === 0);\n // Here we set up the start and end points as the furthest points found so far\n // in both the forward and reverse directions, respectively\n forwardPoints[diagonalForwardBase] = originalStart;\n reversePoints[diagonalReverseBase] = originalEnd;\n // Remember if we quit early, and thus need to do a best-effort result instead of a real result.\n quitEarlyArr[0] = false;\n // A couple of points:\n // --With this method, we iterate on the number of differences between the two sequences.\n // The more differences there actually are, the longer this will take.\n // --Also, as the number of differences increases, we have to search on diagonals further\n // away from the reference diagonal (which is diagonalForwardBase for forward, diagonalReverseBase for reverse).\n // --We extend on even diagonals (relative to the reference diagonal) only when numDifferences\n // is even and odd diagonals only when numDifferences is odd.\n for (let numDifferences = 1; numDifferences <= (maxDifferences / 2) + 1; numDifferences++) {\n let furthestOriginalIndex = 0;\n let furthestModifiedIndex = 0;\n // Run the algorithm in the forward direction\n diagonalForwardStart = this.ClipDiagonalBound(diagonalForwardBase - numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\n diagonalForwardEnd = this.ClipDiagonalBound(diagonalForwardBase + numDifferences, numDifferences, diagonalForwardBase, numDiagonals);\n for (let diagonal = diagonalForwardStart; diagonal <= diagonalForwardEnd; diagonal += 2) {\n // STEP 1: We extend the furthest reaching point in the present diagonal\n // by looking at the diagonals above and below and picking the one whose point\n // is further away from the start point (originalStart, modifiedStart)\n if (diagonal === diagonalForwardStart || (diagonal < diagonalForwardEnd && forwardPoints[diagonal - 1] < forwardPoints[diagonal + 1])) {\n originalIndex = forwardPoints[diagonal + 1];\n }\n else {\n originalIndex = forwardPoints[diagonal - 1] + 1;\n }\n modifiedIndex = originalIndex - (diagonal - diagonalForwardBase) - diagonalForwardOffset;\n // Save the current originalIndex so we can test for false overlap in step 3\n const tempOriginalIndex = originalIndex;\n // STEP 2: We can continue to extend the furthest reaching point in the present diagonal\n // so long as the elements are equal.\n while (originalIndex < originalEnd && modifiedIndex < modifiedEnd && this.ElementsAreEqual(originalIndex + 1, modifiedIndex + 1)) {\n originalIndex++;\n modifiedIndex++;\n }\n forwardPoints[diagonal] = originalIndex;\n if (originalIndex + modifiedIndex > furthestOriginalIndex + furthestModifiedIndex) {\n furthestOriginalIndex = originalIndex;\n furthestModifiedIndex = modifiedIndex;\n }\n // STEP 3: If delta is odd (overlap first happens on forward when delta is odd)\n // and diagonal is in the range of reverse diagonals computed for numDifferences-1\n // (the previous iteration; we haven't computed reverse diagonals for numDifferences yet)\n // then check for overlap.\n if (!deltaIsEven && Math.abs(diagonal - diagonalReverseBase) <= (numDifferences - 1)) {\n if (originalIndex >= reversePoints[diagonal]) {\n midOriginalArr[0] = originalIndex;\n midModifiedArr[0] = modifiedIndex;\n if (tempOriginalIndex <= reversePoints[diagonal] && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\n // BINGO! We overlapped, and we have the full trace in memory!\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n else {\n // Either false overlap, or we didn't have enough memory for the full trace\n // Just return the recursion point\n return null;\n }\n }\n }\n }\n // Check to see if we should be quitting early, before moving on to the next iteration.\n const matchLengthOfLongest = ((furthestOriginalIndex - originalStart) + (furthestModifiedIndex - modifiedStart) - numDifferences) / 2;\n if (this.ContinueProcessingPredicate !== null && !this.ContinueProcessingPredicate(furthestOriginalIndex, matchLengthOfLongest)) {\n // We can't finish, so skip ahead to generating a result from what we have.\n quitEarlyArr[0] = true;\n // Use the furthest distance we got in the forward direction.\n midOriginalArr[0] = furthestOriginalIndex;\n midModifiedArr[0] = furthestModifiedIndex;\n if (matchLengthOfLongest > 0 && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\n // Enough of the history is in memory to walk it backwards\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n else {\n // We didn't actually remember enough of the history.\n //Since we are quiting the diff early, we need to shift back the originalStart and modified start\n //back into the boundary limits since we decremented their value above beyond the boundary limit.\n originalStart++;\n modifiedStart++;\n return [\n new DiffChange(originalStart, originalEnd - originalStart + 1, modifiedStart, modifiedEnd - modifiedStart + 1)\n ];\n }\n }\n // Run the algorithm in the reverse direction\n diagonalReverseStart = this.ClipDiagonalBound(diagonalReverseBase - numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\n diagonalReverseEnd = this.ClipDiagonalBound(diagonalReverseBase + numDifferences, numDifferences, diagonalReverseBase, numDiagonals);\n for (let diagonal = diagonalReverseStart; diagonal <= diagonalReverseEnd; diagonal += 2) {\n // STEP 1: We extend the furthest reaching point in the present diagonal\n // by looking at the diagonals above and below and picking the one whose point\n // is further away from the start point (originalEnd, modifiedEnd)\n if (diagonal === diagonalReverseStart || (diagonal < diagonalReverseEnd && reversePoints[diagonal - 1] >= reversePoints[diagonal + 1])) {\n originalIndex = reversePoints[diagonal + 1] - 1;\n }\n else {\n originalIndex = reversePoints[diagonal - 1];\n }\n modifiedIndex = originalIndex - (diagonal - diagonalReverseBase) - diagonalReverseOffset;\n // Save the current originalIndex so we can test for false overlap\n const tempOriginalIndex = originalIndex;\n // STEP 2: We can continue to extend the furthest reaching point in the present diagonal\n // as long as the elements are equal.\n while (originalIndex > originalStart && modifiedIndex > modifiedStart && this.ElementsAreEqual(originalIndex, modifiedIndex)) {\n originalIndex--;\n modifiedIndex--;\n }\n reversePoints[diagonal] = originalIndex;\n // STEP 4: If delta is even (overlap first happens on reverse when delta is even)\n // and diagonal is in the range of forward diagonals computed for numDifferences\n // then check for overlap.\n if (deltaIsEven && Math.abs(diagonal - diagonalForwardBase) <= numDifferences) {\n if (originalIndex <= forwardPoints[diagonal]) {\n midOriginalArr[0] = originalIndex;\n midModifiedArr[0] = modifiedIndex;\n if (tempOriginalIndex >= forwardPoints[diagonal] && 1447 /* MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* MaxDifferencesHistory */ + 1)) {\n // BINGO! We overlapped, and we have the full trace in memory!\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n else {\n // Either false overlap, or we didn't have enough memory for the full trace\n // Just return the recursion point\n return null;\n }\n }\n }\n }\n // Save current vectors to history before the next iteration\n if (numDifferences <= 1447 /* MaxDifferencesHistory */) {\n // We are allocating space for one extra int, which we fill with\n // the index of the diagonal base index\n let temp = new Int32Array(diagonalForwardEnd - diagonalForwardStart + 2);\n temp[0] = diagonalForwardBase - diagonalForwardStart + 1;\n MyArray.Copy2(forwardPoints, diagonalForwardStart, temp, 1, diagonalForwardEnd - diagonalForwardStart + 1);\n this.m_forwardHistory.push(temp);\n temp = new Int32Array(diagonalReverseEnd - diagonalReverseStart + 2);\n temp[0] = diagonalReverseBase - diagonalReverseStart + 1;\n MyArray.Copy2(reversePoints, diagonalReverseStart, temp, 1, diagonalReverseEnd - diagonalReverseStart + 1);\n this.m_reverseHistory.push(temp);\n }\n }\n // If we got here, then we have the full trace in history. We just have to convert it to a change list\n // NOTE: This part is a bit messy\n return this.WALKTRACE(diagonalForwardBase, diagonalForwardStart, diagonalForwardEnd, diagonalForwardOffset, diagonalReverseBase, diagonalReverseStart, diagonalReverseEnd, diagonalReverseOffset, forwardPoints, reversePoints, originalIndex, originalEnd, midOriginalArr, modifiedIndex, modifiedEnd, midModifiedArr, deltaIsEven, quitEarlyArr);\n }\n /**\n * Shifts the given changes to provide a more intuitive diff.\n * While the first element in a diff matches the first element after the diff,\n * we shift the diff down.\n *\n * @param changes The list of changes to shift\n * @returns The shifted changes\n */\n PrettifyChanges(changes) {\n // Shift all the changes down first\n for (let i = 0; i < changes.length; i++) {\n const change = changes[i];\n const originalStop = (i < changes.length - 1) ? changes[i + 1].originalStart : this._originalElementsOrHash.length;\n const modifiedStop = (i < changes.length - 1) ? changes[i + 1].modifiedStart : this._modifiedElementsOrHash.length;\n const checkOriginal = change.originalLength > 0;\n const checkModified = change.modifiedLength > 0;\n while (change.originalStart + change.originalLength < originalStop &&\n change.modifiedStart + change.modifiedLength < modifiedStop &&\n (!checkOriginal || this.OriginalElementsAreEqual(change.originalStart, change.originalStart + change.originalLength)) &&\n (!checkModified || this.ModifiedElementsAreEqual(change.modifiedStart, change.modifiedStart + change.modifiedLength))) {\n change.originalStart++;\n change.modifiedStart++;\n }\n let mergedChangeArr = [null];\n if (i < changes.length - 1 && this.ChangesOverlap(changes[i], changes[i + 1], mergedChangeArr)) {\n changes[i] = mergedChangeArr[0];\n changes.splice(i + 1, 1);\n i--;\n continue;\n }\n }\n // Shift changes back up until we hit empty or whitespace-only lines\n for (let i = changes.length - 1; i >= 0; i--) {\n const change = changes[i];\n let originalStop = 0;\n let modifiedStop = 0;\n if (i > 0) {\n const prevChange = changes[i - 1];\n originalStop = prevChange.originalStart + prevChange.originalLength;\n modifiedStop = prevChange.modifiedStart + prevChange.modifiedLength;\n }\n const checkOriginal = change.originalLength > 0;\n const checkModified = change.modifiedLength > 0;\n let bestDelta = 0;\n let bestScore = this._boundaryScore(change.originalStart, change.originalLength, change.modifiedStart, change.modifiedLength);\n for (let delta = 1;; delta++) {\n const originalStart = change.originalStart - delta;\n const modifiedStart = change.modifiedStart - delta;\n if (originalStart < originalStop || modifiedStart < modifiedStop) {\n break;\n }\n if (checkOriginal && !this.OriginalElementsAreEqual(originalStart, originalStart + change.originalLength)) {\n break;\n }\n if (checkModified && !this.ModifiedElementsAreEqual(modifiedStart, modifiedStart + change.modifiedLength)) {\n break;\n }\n const touchingPreviousChange = (originalStart === originalStop && modifiedStart === modifiedStop);\n const score = ((touchingPreviousChange ? 5 : 0)\n + this._boundaryScore(originalStart, change.originalLength, modifiedStart, change.modifiedLength));\n if (score > bestScore) {\n bestScore = score;\n bestDelta = delta;\n }\n }\n change.originalStart -= bestDelta;\n change.modifiedStart -= bestDelta;\n const mergedChangeArr = [null];\n if (i > 0 && this.ChangesOverlap(changes[i - 1], changes[i], mergedChangeArr)) {\n changes[i - 1] = mergedChangeArr[0];\n changes.splice(i, 1);\n i++;\n continue;\n }\n }\n // There could be multiple longest common substrings.\n // Give preference to the ones containing longer lines\n if (this._hasStrings) {\n for (let i = 1, len = changes.length; i < len; i++) {\n const aChange = changes[i - 1];\n const bChange = changes[i];\n const matchedLength = bChange.originalStart - aChange.originalStart - aChange.originalLength;\n const aOriginalStart = aChange.originalStart;\n const bOriginalEnd = bChange.originalStart + bChange.originalLength;\n const abOriginalLength = bOriginalEnd - aOriginalStart;\n const aModifiedStart = aChange.modifiedStart;\n const bModifiedEnd = bChange.modifiedStart + bChange.modifiedLength;\n const abModifiedLength = bModifiedEnd - aModifiedStart;\n // Avoid wasting a lot of time with these searches\n if (matchedLength < 5 && abOriginalLength < 20 && abModifiedLength < 20) {\n const t = this._findBetterContiguousSequence(aOriginalStart, abOriginalLength, aModifiedStart, abModifiedLength, matchedLength);\n if (t) {\n const [originalMatchStart, modifiedMatchStart] = t;\n if (originalMatchStart !== aChange.originalStart + aChange.originalLength || modifiedMatchStart !== aChange.modifiedStart + aChange.modifiedLength) {\n // switch to another sequence that has a better score\n aChange.originalLength = originalMatchStart - aChange.originalStart;\n aChange.modifiedLength = modifiedMatchStart - aChange.modifiedStart;\n bChange.originalStart = originalMatchStart + matchedLength;\n bChange.modifiedStart = modifiedMatchStart + matchedLength;\n bChange.originalLength = bOriginalEnd - bChange.originalStart;\n bChange.modifiedLength = bModifiedEnd - bChange.modifiedStart;\n }\n }\n }\n }\n }\n return changes;\n }\n _findBetterContiguousSequence(originalStart, originalLength, modifiedStart, modifiedLength, desiredLength) {\n if (originalLength < desiredLength || modifiedLength < desiredLength) {\n return null;\n }\n const originalMax = originalStart + originalLength - desiredLength + 1;\n const modifiedMax = modifiedStart + modifiedLength - desiredLength + 1;\n let bestScore = 0;\n let bestOriginalStart = 0;\n let bestModifiedStart = 0;\n for (let i = originalStart; i < originalMax; i++) {\n for (let j = modifiedStart; j < modifiedMax; j++) {\n const score = this._contiguousSequenceScore(i, j, desiredLength);\n if (score > 0 && score > bestScore) {\n bestScore = score;\n bestOriginalStart = i;\n bestModifiedStart = j;\n }\n }\n }\n if (bestScore > 0) {\n return [bestOriginalStart, bestModifiedStart];\n }\n return null;\n }\n _contiguousSequenceScore(originalStart, modifiedStart, length) {\n let score = 0;\n for (let l = 0; l < length; l++) {\n if (!this.ElementsAreEqual(originalStart + l, modifiedStart + l)) {\n return 0;\n }\n score += this._originalStringElements[originalStart + l].length;\n }\n return score;\n }\n _OriginalIsBoundary(index) {\n if (index <= 0 || index >= this._originalElementsOrHash.length - 1) {\n return true;\n }\n return (this._hasStrings && /^\\s*$/.test(this._originalStringElements[index]));\n }\n _OriginalRegionIsBoundary(originalStart, originalLength) {\n if (this._OriginalIsBoundary(originalStart) || this._OriginalIsBoundary(originalStart - 1)) {\n return true;\n }\n if (originalLength > 0) {\n const originalEnd = originalStart + originalLength;\n if (this._OriginalIsBoundary(originalEnd - 1) || this._OriginalIsBoundary(originalEnd)) {\n return true;\n }\n }\n return false;\n }\n _ModifiedIsBoundary(index) {\n if (index <= 0 || index >= this._modifiedElementsOrHash.length - 1) {\n return true;\n }\n return (this._hasStrings && /^\\s*$/.test(this._modifiedStringElements[index]));\n }\n _ModifiedRegionIsBoundary(modifiedStart, modifiedLength) {\n if (this._ModifiedIsBoundary(modifiedStart) || this._ModifiedIsBoundary(modifiedStart - 1)) {\n return true;\n }\n if (modifiedLength > 0) {\n const modifiedEnd = modifiedStart + modifiedLength;\n if (this._ModifiedIsBoundary(modifiedEnd - 1) || this._ModifiedIsBoundary(modifiedEnd)) {\n return true;\n }\n }\n return false;\n }\n _boundaryScore(originalStart, originalLength, modifiedStart, modifiedLength) {\n const originalScore = (this._OriginalRegionIsBoundary(originalStart, originalLength) ? 1 : 0);\n const modifiedScore = (this._ModifiedRegionIsBoundary(modifiedStart, modifiedLength) ? 1 : 0);\n return (originalScore + modifiedScore);\n }\n /**\n * Concatenates the two input DiffChange lists and returns the resulting\n * list.\n * @param The left changes\n * @param The right changes\n * @returns The concatenated list\n */\n ConcatenateChanges(left, right) {\n let mergedChangeArr = [];\n if (left.length === 0 || right.length === 0) {\n return (right.length > 0) ? right : left;\n }\n else if (this.ChangesOverlap(left[left.length - 1], right[0], mergedChangeArr)) {\n // Since we break the problem down recursively, it is possible that we\n // might recurse in the middle of a change thereby splitting it into\n // two changes. Here in the combining stage, we detect and fuse those\n // changes back together\n const result = new Array(left.length + right.length - 1);\n MyArray.Copy(left, 0, result, 0, left.length - 1);\n result[left.length - 1] = mergedChangeArr[0];\n MyArray.Copy(right, 1, result, left.length, right.length - 1);\n return result;\n }\n else {\n const result = new Array(left.length + right.length);\n MyArray.Copy(left, 0, result, 0, left.length);\n MyArray.Copy(right, 0, result, left.length, right.length);\n return result;\n }\n }\n /**\n * Returns true if the two changes overlap and can be merged into a single\n * change\n * @param left The left change\n * @param right The right change\n * @param mergedChange The merged change if the two overlap, null otherwise\n * @returns True if the two changes overlap\n */\n ChangesOverlap(left, right, mergedChangeArr) {\n Debug.Assert(left.originalStart <= right.originalStart, 'Left change is not less than or equal to right change');\n Debug.Assert(left.modifiedStart <= right.modifiedStart, 'Left change is not less than or equal to right change');\n if (left.originalStart + left.originalLength >= right.originalStart || left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\n const originalStart = left.originalStart;\n let originalLength = left.originalLength;\n const modifiedStart = left.modifiedStart;\n let modifiedLength = left.modifiedLength;\n if (left.originalStart + left.originalLength >= right.originalStart) {\n originalLength = right.originalStart + right.originalLength - left.originalStart;\n }\n if (left.modifiedStart + left.modifiedLength >= right.modifiedStart) {\n modifiedLength = right.modifiedStart + right.modifiedLength - left.modifiedStart;\n }\n mergedChangeArr[0] = new DiffChange(originalStart, originalLength, modifiedStart, modifiedLength);\n return true;\n }\n else {\n mergedChangeArr[0] = null;\n return false;\n }\n }\n /**\n * Helper method used to clip a diagonal index to the range of valid\n * diagonals. This also decides whether or not the diagonal index,\n * if it exceeds the boundary, should be clipped to the boundary or clipped\n * one inside the boundary depending on the Even/Odd status of the boundary\n * and numDifferences.\n * @param diagonal The index of the diagonal to clip.\n * @param numDifferences The current number of differences being iterated upon.\n * @param diagonalBaseIndex The base reference diagonal.\n * @param numDiagonals The total number of diagonals.\n * @returns The clipped diagonal index.\n */\n ClipDiagonalBound(diagonal, numDifferences, diagonalBaseIndex, numDiagonals) {\n if (diagonal >= 0 && diagonal < numDiagonals) {\n // Nothing to clip, its in range\n return diagonal;\n }\n // diagonalsBelow: The number of diagonals below the reference diagonal\n // diagonalsAbove: The number of diagonals above the reference diagonal\n const diagonalsBelow = diagonalBaseIndex;\n const diagonalsAbove = numDiagonals - diagonalBaseIndex - 1;\n const diffEven = (numDifferences % 2 === 0);\n if (diagonal < 0) {\n const lowerBoundEven = (diagonalsBelow % 2 === 0);\n return (diffEven === lowerBoundEven) ? 0 : 1;\n }\n else {\n const upperBoundEven = (diagonalsAbove % 2 === 0);\n return (diffEven === upperBoundEven) ? numDiagonals - 1 : numDiagonals - 2;\n }\n }\n}\n","// Avoid circular dependency on EventEmitter by implementing a subset of the interface.\nexport class ErrorHandler {\n constructor() {\n this.listeners = [];\n this.unexpectedErrorHandler = function (e) {\n setTimeout(() => {\n if (e.stack) {\n throw new Error(e.message + '\\n\\n' + e.stack);\n }\n throw e;\n }, 0);\n };\n }\n emit(e) {\n this.listeners.forEach((listener) => {\n listener(e);\n });\n }\n onUnexpectedError(e) {\n this.unexpectedErrorHandler(e);\n this.emit(e);\n }\n // For external errors, we don't want the listeners to be called\n onUnexpectedExternalError(e) {\n this.unexpectedErrorHandler(e);\n }\n}\nexport const errorHandler = new ErrorHandler();\nexport function onUnexpectedError(e) {\n // ignore errors from cancelled promises\n if (!isPromiseCanceledError(e)) {\n errorHandler.onUnexpectedError(e);\n }\n return undefined;\n}\nexport function onUnexpectedExternalError(e) {\n // ignore errors from cancelled promises\n if (!isPromiseCanceledError(e)) {\n errorHandler.onUnexpectedExternalError(e);\n }\n return undefined;\n}\nexport function transformErrorForSerialization(error) {\n if (error instanceof Error) {\n let { name, message } = error;\n const stack = error.stacktrace || error.stack;\n return {\n $isError: true,\n name,\n message,\n stack\n };\n }\n // return as is\n return error;\n}\nconst canceledName = 'Canceled';\n/**\n * Checks if the given error is a promise in canceled state\n */\nexport function isPromiseCanceledError(error) {\n return error instanceof Error && error.name === canceledName && error.message === canceledName;\n}\n/**\n * Returns an error that signals cancellation.\n */\nexport function canceled() {\n const error = new Error(canceledName);\n error.name = error.message;\n return error;\n}\nexport function illegalArgument(name) {\n if (name) {\n return new Error(`Illegal argument: ${name}`);\n }\n else {\n return new Error('Illegal argument');\n }\n}\nexport function illegalState(name) {\n if (name) {\n return new Error(`Illegal state: ${name}`);\n }\n else {\n return new Error('Illegal state');\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from './errors.js';\nimport { Disposable, combinedDisposable, DisposableStore } from './lifecycle.js';\nimport { LinkedList } from './linkedList.js';\nimport { StopWatch } from './stopwatch.js';\nexport var Event;\n(function (Event) {\n Event.None = () => Disposable.None;\n /**\n * Given an event, returns another event which only fires once.\n */\n function once(event) {\n return (listener, thisArgs = null, disposables) => {\n // we need this, in case the event fires during the listener call\n let didFire = false;\n let result;\n result = event(e => {\n if (didFire) {\n return;\n }\n else if (result) {\n result.dispose();\n }\n else {\n didFire = true;\n }\n return listener.call(thisArgs, e);\n }, null, disposables);\n if (didFire) {\n result.dispose();\n }\n return result;\n };\n }\n Event.once = once;\n /**\n * Given an event and a `map` function, returns another event which maps each element\n * through the mapping function.\n */\n function map(event, map) {\n return snapshot((listener, thisArgs = null, disposables) => event(i => listener.call(thisArgs, map(i)), null, disposables));\n }\n Event.map = map;\n /**\n * Given an event and an `each` function, returns another identical event and calls\n * the `each` function per each element.\n */\n function forEach(event, each) {\n return snapshot((listener, thisArgs = null, disposables) => event(i => { each(i); listener.call(thisArgs, i); }, null, disposables));\n }\n Event.forEach = forEach;\n function filter(event, filter) {\n return snapshot((listener, thisArgs = null, disposables) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables));\n }\n Event.filter = filter;\n /**\n * Given an event, returns the same event but typed as `Event<void>`.\n */\n function signal(event) {\n return event;\n }\n Event.signal = signal;\n function any(...events) {\n return (listener, thisArgs = null, disposables) => combinedDisposable(...events.map(event => event(e => listener.call(thisArgs, e), null, disposables)));\n }\n Event.any = any;\n /**\n * Given an event and a `merge` function, returns another event which maps each element\n * and the cumulative result through the `merge` function. Similar to `map`, but with memory.\n */\n function reduce(event, merge, initial) {\n let output = initial;\n return map(event, e => {\n output = merge(output, e);\n return output;\n });\n }\n Event.reduce = reduce;\n /**\n * Given a chain of event processing functions (filter, map, etc), each\n * function will be invoked per event & per listener. Snapshotting an event\n * chain allows each function to be invoked just once per event.\n */\n function snapshot(event) {\n let listener;\n const emitter = new Emitter({\n onFirstListenerAdd() {\n listener = event(emitter.fire, emitter);\n },\n onLastListenerRemove() {\n listener.dispose();\n }\n });\n return emitter.event;\n }\n Event.snapshot = snapshot;\n function debounce(event, merge, delay = 100, leading = false, leakWarningThreshold) {\n let subscription;\n let output = undefined;\n let handle = undefined;\n let numDebouncedCalls = 0;\n const emitter = new Emitter({\n leakWarningThreshold,\n onFirstListenerAdd() {\n subscription = event(cur => {\n numDebouncedCalls++;\n output = merge(output, cur);\n if (leading && !handle) {\n emitter.fire(output);\n output = undefined;\n }\n clearTimeout(handle);\n handle = setTimeout(() => {\n const _output = output;\n output = undefined;\n handle = undefined;\n if (!leading || numDebouncedCalls > 1) {\n emitter.fire(_output);\n }\n numDebouncedCalls = 0;\n }, delay);\n });\n },\n onLastListenerRemove() {\n subscription.dispose();\n }\n });\n return emitter.event;\n }\n Event.debounce = debounce;\n /**\n * Given an event, it returns another event which fires only once and as soon as\n * the input event emits. The event data is the number of millis it took for the\n * event to fire.\n */\n function stopwatch(event) {\n const start = new Date().getTime();\n return map(once(event), _ => new Date().getTime() - start);\n }\n Event.stopwatch = stopwatch;\n /**\n * Given an event, it returns another event which fires only when the event\n * element changes.\n */\n function latch(event) {\n let firstCall = true;\n let cache;\n return filter(event, value => {\n const shouldEmit = firstCall || value !== cache;\n firstCall = false;\n cache = value;\n return shouldEmit;\n });\n }\n Event.latch = latch;\n /**\n * Buffers the provided event until a first listener comes\n * along, at which point fire all the events at once and\n * pipe the event from then on.\n *\n * ```typescript\n * const emitter = new Emitter<number>();\n * const event = emitter.event;\n * const bufferedEvent = buffer(event);\n *\n * emitter.fire(1);\n * emitter.fire(2);\n * emitter.fire(3);\n * // nothing...\n *\n * const listener = bufferedEvent(num => console.log(num));\n * // 1, 2, 3\n *\n * emitter.fire(4);\n * // 4\n * ```\n */\n function buffer(event, nextTick = false, _buffer = []) {\n let buffer = _buffer.slice();\n let listener = event(e => {\n if (buffer) {\n buffer.push(e);\n }\n else {\n emitter.fire(e);\n }\n });\n const flush = () => {\n if (buffer) {\n buffer.forEach(e => emitter.fire(e));\n }\n buffer = null;\n };\n const emitter = new Emitter({\n onFirstListenerAdd() {\n if (!listener) {\n listener = event(e => emitter.fire(e));\n }\n },\n onFirstListenerDidAdd() {\n if (buffer) {\n if (nextTick) {\n setTimeout(flush);\n }\n else {\n flush();\n }\n }\n },\n onLastListenerRemove() {\n if (listener) {\n listener.dispose();\n }\n listener = null;\n }\n });\n return emitter.event;\n }\n Event.buffer = buffer;\n class ChainableEvent {\n constructor(event) {\n this.event = event;\n }\n map(fn) {\n return new ChainableEvent(map(this.event, fn));\n }\n forEach(fn) {\n return new ChainableEvent(forEach(this.event, fn));\n }\n filter(fn) {\n return new ChainableEvent(filter(this.event, fn));\n }\n reduce(merge, initial) {\n return new ChainableEvent(reduce(this.event, merge, initial));\n }\n latch() {\n return new ChainableEvent(latch(this.event));\n }\n debounce(merge, delay = 100, leading = false, leakWarningThreshold) {\n return new ChainableEvent(debounce(this.event, merge, delay, leading, leakWarningThreshold));\n }\n on(listener, thisArgs, disposables) {\n return this.event(listener, thisArgs, disposables);\n }\n once(listener, thisArgs, disposables) {\n return once(this.event)(listener, thisArgs, disposables);\n }\n }\n function chain(event) {\n return new ChainableEvent(event);\n }\n Event.chain = chain;\n function fromNodeEventEmitter(emitter, eventName, map = id => id) {\n const fn = (...args) => result.fire(map(...args));\n const onFirstListenerAdd = () => emitter.on(eventName, fn);\n const onLastListenerRemove = () => emitter.removeListener(eventName, fn);\n const result = new Emitter({ onFirstListenerAdd, onLastListenerRemove });\n return result.event;\n }\n Event.fromNodeEventEmitter = fromNodeEventEmitter;\n function fromDOMEventEmitter(emitter, eventName, map = id => id) {\n const fn = (...args) => result.fire(map(...args));\n const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);\n const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);\n const result = new Emitter({ onFirstListenerAdd, onLastListenerRemove });\n return result.event;\n }\n Event.fromDOMEventEmitter = fromDOMEventEmitter;\n function fromPromise(promise) {\n const emitter = new Emitter();\n let shouldEmit = false;\n promise\n .then(undefined, () => null)\n .then(() => {\n if (!shouldEmit) {\n setTimeout(() => emitter.fire(undefined), 0);\n }\n else {\n emitter.fire(undefined);\n }\n });\n shouldEmit = true;\n return emitter.event;\n }\n Event.fromPromise = fromPromise;\n function toPromise(event) {\n return new Promise(resolve => once(event)(resolve));\n }\n Event.toPromise = toPromise;\n})(Event || (Event = {}));\nclass EventProfiling {\n constructor(name) {\n this._listenerCount = 0;\n this._invocationCount = 0;\n this._elapsedOverall = 0;\n this._name = `${name}_${EventProfiling._idPool++}`;\n }\n start(listenerCount) {\n this._stopWatch = new StopWatch(true);\n this._listenerCount = listenerCount;\n }\n stop() {\n if (this._stopWatch) {\n const elapsed = this._stopWatch.elapsed();\n this._elapsedOverall += elapsed;\n this._invocationCount += 1;\n console.info(`did FIRE ${this._name}: elapsed_ms: ${elapsed.toFixed(5)}, listener: ${this._listenerCount} (elapsed_overall: ${this._elapsedOverall.toFixed(2)}, invocations: ${this._invocationCount})`);\n this._stopWatch = undefined;\n }\n }\n}\nEventProfiling._idPool = 0;\nlet _globalLeakWarningThreshold = -1;\nclass LeakageMonitor {\n constructor(customThreshold, name = Math.random().toString(18).slice(2, 5)) {\n this.customThreshold = customThreshold;\n this.name = name;\n this._warnCountdown = 0;\n }\n dispose() {\n if (this._stacks) {\n this._stacks.clear();\n }\n }\n check(listenerCount) {\n let threshold = _globalLeakWarningThreshold;\n if (typeof this.customThreshold === 'number') {\n threshold = this.customThreshold;\n }\n if (threshold <= 0 || listenerCount < threshold) {\n return undefined;\n }\n if (!this._stacks) {\n this._stacks = new Map();\n }\n const stack = new Error().stack.split('\\n').slice(3).join('\\n');\n const count = (this._stacks.get(stack) || 0);\n this._stacks.set(stack, count + 1);\n this._warnCountdown -= 1;\n if (this._warnCountdown <= 0) {\n // only warn on first exceed and then every time the limit\n // is exceeded by 50% again\n this._warnCountdown = threshold * 0.5;\n // find most frequent listener and print warning\n let topStack;\n let topCount = 0;\n for (const [stack, count] of this._stacks) {\n if (!topStack || topCount < count) {\n topStack = stack;\n topCount = count;\n }\n }\n console.warn(`[${this.name}] potential listener LEAK detected, having ${listenerCount} listeners already. MOST frequent listener (${topCount}):`);\n console.warn(topStack);\n }\n return () => {\n const count = (this._stacks.get(stack) || 0);\n this._stacks.set(stack, count - 1);\n };\n }\n}\n/**\n * The Emitter can be used to expose an Event to the public\n * to fire it from the insides.\n * Sample:\n class Document {\n\n private readonly _onDidChange = new Emitter<(value:string)=>any>();\n\n public onDidChange = this._onDidChange.event;\n\n // getter-style\n // get onDidChange(): Event<(value:string)=>any> {\n // \treturn this._onDidChange.event;\n // }\n\n private _doIt() {\n //...\n this._onDidChange.fire(value);\n }\n }\n */\nexport class Emitter {\n constructor(options) {\n var _a;\n this._disposed = false;\n this._options = options;\n this._leakageMon = _globalLeakWarningThreshold > 0 ? new LeakageMonitor(this._options && this._options.leakWarningThreshold) : undefined;\n this._perfMon = ((_a = this._options) === null || _a === void 0 ? void 0 : _a._profName) ? new EventProfiling(this._options._profName) : undefined;\n }\n /**\n * For the public to allow to subscribe\n * to events from this Emitter\n */\n get event() {\n if (!this._event) {\n this._event = (listener, thisArgs, disposables) => {\n var _a;\n if (!this._listeners) {\n this._listeners = new LinkedList();\n }\n const firstListener = this._listeners.isEmpty();\n if (firstListener && this._options && this._options.onFirstListenerAdd) {\n this._options.onFirstListenerAdd(this);\n }\n const remove = this._listeners.push(!thisArgs ? listener : [listener, thisArgs]);\n if (firstListener && this._options && this._options.onFirstListenerDidAdd) {\n this._options.onFirstListenerDidAdd(this);\n }\n if (this._options && this._options.onListenerDidAdd) {\n this._options.onListenerDidAdd(this, listener, thisArgs);\n }\n // check and record this emitter for potential leakage\n const removeMonitor = (_a = this._leakageMon) === null || _a === void 0 ? void 0 : _a.check(this._listeners.size);\n let result;\n result = {\n dispose: () => {\n if (removeMonitor) {\n removeMonitor();\n }\n result.dispose = Emitter._noop;\n if (!this._disposed) {\n remove();\n if (this._options && this._options.onLastListenerRemove) {\n const hasListeners = (this._listeners && !this._listeners.isEmpty());\n if (!hasListeners) {\n this._options.onLastListenerRemove(this);\n }\n }\n }\n }\n };\n if (disposables instanceof DisposableStore) {\n disposables.add(result);\n }\n else if (Array.isArray(disposables)) {\n disposables.push(result);\n }\n return result;\n };\n }\n return this._event;\n }\n /**\n * To be kept private to fire an event to\n * subscribers\n */\n fire(event) {\n var _a, _b;\n if (this._listeners) {\n // put all [listener,event]-pairs into delivery queue\n // then emit all event. an inner/nested event might be\n // the driver of this\n if (!this._deliveryQueue) {\n this._deliveryQueue = new LinkedList();\n }\n for (let listener of this._listeners) {\n this._deliveryQueue.push([listener, event]);\n }\n // start/stop performance insight collection\n (_a = this._perfMon) === null || _a === void 0 ? void 0 : _a.start(this._deliveryQueue.size);\n while (this._deliveryQueue.size > 0) {\n const [listener, event] = this._deliveryQueue.shift();\n try {\n if (typeof listener === 'function') {\n listener.call(undefined, event);\n }\n else {\n listener[0].call(listener[1], event);\n }\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n (_b = this._perfMon) === null || _b === void 0 ? void 0 : _b.stop();\n }\n }\n dispose() {\n var _a, _b, _c;\n (_a = this._listeners) === null || _a === void 0 ? void 0 : _a.clear();\n (_b = this._deliveryQueue) === null || _b === void 0 ? void 0 : _b.clear();\n (_c = this._leakageMon) === null || _c === void 0 ? void 0 : _c.dispose();\n this._disposed = true;\n }\n}\nEmitter._noop = function () { };\nexport class PauseableEmitter extends Emitter {\n constructor(options) {\n super(options);\n this._isPaused = 0;\n this._eventQueue = new LinkedList();\n this._mergeFn = options === null || options === void 0 ? void 0 : options.merge;\n }\n pause() {\n this._isPaused++;\n }\n resume() {\n if (this._isPaused !== 0 && --this._isPaused === 0) {\n if (this._mergeFn) {\n // use the merge function to create a single composite\n // event. make a copy in case firing pauses this emitter\n const events = Array.from(this._eventQueue);\n this._eventQueue.clear();\n super.fire(this._mergeFn(events));\n }\n else {\n // no merging, fire each event individually and test\n // that this emitter isn't paused halfway through\n while (!this._isPaused && this._eventQueue.size !== 0) {\n super.fire(this._eventQueue.shift());\n }\n }\n }\n }\n fire(event) {\n if (this._listeners) {\n if (this._isPaused !== 0) {\n this._eventQueue.push(event);\n }\n else {\n super.fire(event);\n }\n }\n }\n}\n/**\n * The EventBufferer is useful in situations in which you want\n * to delay firing your events during some code.\n * You can wrap that code and be sure that the event will not\n * be fired during that wrap.\n *\n * ```\n * const emitter: Emitter;\n * const delayer = new EventDelayer();\n * const delayedEvent = delayer.wrapEvent(emitter.event);\n *\n * delayedEvent(console.log);\n *\n * delayer.bufferEvents(() => {\n * emitter.fire(); // event will not be fired yet\n * });\n *\n * // event will only be fired at this point\n * ```\n */\nexport class EventBufferer {\n constructor() {\n this.buffers = [];\n }\n wrapEvent(event) {\n return (listener, thisArgs, disposables) => {\n return event(i => {\n const buffer = this.buffers[this.buffers.length - 1];\n if (buffer) {\n buffer.push(() => listener.call(thisArgs, i));\n }\n else {\n listener.call(thisArgs, i);\n }\n }, undefined, disposables);\n };\n }\n bufferEvents(fn) {\n const buffer = [];\n this.buffers.push(buffer);\n const r = fn();\n this.buffers.pop();\n buffer.forEach(flush => flush());\n return r;\n }\n}\n/**\n * A Relay is an event forwarder which functions as a replugabble event pipe.\n * Once created, you can connect an input event to it and it will simply forward\n * events from that input event through its own `event` property. The `input`\n * can be changed at any point in time.\n */\nexport class Relay {\n constructor() {\n this.listening = false;\n this.inputEvent = Event.None;\n this.inputEventListener = Disposable.None;\n this.emitter = new Emitter({\n onFirstListenerDidAdd: () => {\n this.listening = true;\n this.inputEventListener = this.inputEvent(this.emitter.fire, this.emitter);\n },\n onLastListenerRemove: () => {\n this.listening = false;\n this.inputEventListener.dispose();\n }\n });\n this.event = this.emitter.event;\n }\n set input(event) {\n this.inputEvent = event;\n if (this.listening) {\n this.inputEventListener.dispose();\n this.inputEventListener = event(this.emitter.fire, this.emitter);\n }\n }\n dispose() {\n this.inputEventListener.dispose();\n this.emitter.dispose();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { isWindows } from './platform.js';\nimport { startsWithIgnoreCase } from './strings.js';\nimport { sep, posix, normalize } from './path.js';\n/**\n * Takes a Windows OS path and changes backward slashes to forward slashes.\n * This should only be done for OS paths from Windows (or user provided paths potentially from Windows).\n * Using it on a Linux or MaxOS path might change it.\n */\nexport function toSlashes(osPath) {\n return osPath.replace(/[\\\\/]/g, posix.sep);\n}\nexport function isEqualOrParent(base, parentCandidate, ignoreCase, separator = sep) {\n if (base === parentCandidate) {\n return true;\n }\n if (!base || !parentCandidate) {\n return false;\n }\n if (parentCandidate.length > base.length) {\n return false;\n }\n if (ignoreCase) {\n const beginsWith = startsWithIgnoreCase(base, parentCandidate);\n if (!beginsWith) {\n return false;\n }\n if (parentCandidate.length === base.length) {\n return true; // same path, different casing\n }\n let sepOffset = parentCandidate.length;\n if (parentCandidate.charAt(parentCandidate.length - 1) === separator) {\n sepOffset--; // adjust the expected sep offset in case our candidate already ends in separator character\n }\n return base.charAt(sepOffset) === separator;\n }\n if (parentCandidate.charAt(parentCandidate.length - 1) !== separator) {\n parentCandidate += separator;\n }\n return base.indexOf(parentCandidate) === 0;\n}\nexport function isWindowsDriveLetter(char0) {\n return char0 >= 65 /* A */ && char0 <= 90 /* Z */ || char0 >= 97 /* a */ && char0 <= 122 /* z */;\n}\nexport function isRootOrDriveLetter(path) {\n const pathNormalized = normalize(path);\n if (isWindows) {\n if (path.length > 3) {\n return false;\n }\n return hasDriveLetter(pathNormalized) &&\n (path.length === 2 || pathNormalized.charCodeAt(2) === 92 /* Backslash */);\n }\n return pathNormalized === posix.sep;\n}\nexport function hasDriveLetter(path) {\n if (isWindows) {\n return isWindowsDriveLetter(path.charCodeAt(0)) && path.charCodeAt(1) === 58 /* Colon */;\n }\n return false;\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 *--------------------------------------------------------------------------------------------*/\nimport { LRUCache } from './map.js';\nimport * as strings from './strings.js';\n// Combined filters\n/**\n * @returns A filter which combines the provided set\n * of filters with an or. The *first* filters that\n * matches defined the return value of the returned\n * filter.\n */\nexport function or(...filter) {\n return function (word, wordToMatchAgainst) {\n for (let i = 0, len = filter.length; i < len; i++) {\n const match = filter[i](word, wordToMatchAgainst);\n if (match) {\n return match;\n }\n }\n return null;\n };\n}\nexport const matchesPrefix = _matchesPrefix.bind(undefined, true);\nfunction _matchesPrefix(ignoreCase, word, wordToMatchAgainst) {\n if (!wordToMatchAgainst || wordToMatchAgainst.length < word.length) {\n return null;\n }\n let matches;\n if (ignoreCase) {\n matches = strings.startsWithIgnoreCase(wordToMatchAgainst, word);\n }\n else {\n matches = wordToMatchAgainst.indexOf(word) === 0;\n }\n if (!matches) {\n return null;\n }\n return word.length > 0 ? [{ start: 0, end: word.length }] : [];\n}\n// Contiguous Substring\nexport function matchesContiguousSubString(word, wordToMatchAgainst) {\n const index = wordToMatchAgainst.toLowerCase().indexOf(word.toLowerCase());\n if (index === -1) {\n return null;\n }\n return [{ start: index, end: index + word.length }];\n}\n// Substring\nexport function matchesSubString(word, wordToMatchAgainst) {\n return _matchesSubString(word.toLowerCase(), wordToMatchAgainst.toLowerCase(), 0, 0);\n}\nfunction _matchesSubString(word, wordToMatchAgainst, i, j) {\n if (i === word.length) {\n return [];\n }\n else if (j === wordToMatchAgainst.length) {\n return null;\n }\n else {\n if (word[i] === wordToMatchAgainst[j]) {\n let result = null;\n if (result = _matchesSubString(word, wordToMatchAgainst, i + 1, j + 1)) {\n return join({ start: j, end: j + 1 }, result);\n }\n return null;\n }\n return _matchesSubString(word, wordToMatchAgainst, i, j + 1);\n }\n}\n// CamelCase\nfunction isLower(code) {\n return 97 /* a */ <= code && code <= 122 /* z */;\n}\nexport function isUpper(code) {\n return 65 /* A */ <= code && code <= 90 /* Z */;\n}\nfunction isNumber(code) {\n return 48 /* Digit0 */ <= code && code <= 57 /* Digit9 */;\n}\nfunction isWhitespace(code) {\n return (code === 32 /* Space */\n || code === 9 /* Tab */\n || code === 10 /* LineFeed */\n || code === 13 /* CarriageReturn */);\n}\nconst wordSeparators = new Set();\n'`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?'\n .split('')\n .forEach(s => wordSeparators.add(s.charCodeAt(0)));\nfunction isWordSeparator(code) {\n return isWhitespace(code) || wordSeparators.has(code);\n}\nfunction charactersMatch(codeA, codeB) {\n return (codeA === codeB) || (isWordSeparator(codeA) && isWordSeparator(codeB));\n}\nfunction isAlphanumeric(code) {\n return isLower(code) || isUpper(code) || isNumber(code);\n}\nfunction join(head, tail) {\n if (tail.length === 0) {\n tail = [head];\n }\n else if (head.end === tail[0].start) {\n tail[0].start = head.start;\n }\n else {\n tail.unshift(head);\n }\n return tail;\n}\nfunction nextAnchor(camelCaseWord, start) {\n for (let i = start; i < camelCaseWord.length; i++) {\n const c = camelCaseWord.charCodeAt(i);\n if (isUpper(c) || isNumber(c) || (i > 0 && !isAlphanumeric(camelCaseWord.charCodeAt(i - 1)))) {\n return i;\n }\n }\n return camelCaseWord.length;\n}\nfunction _matchesCamelCase(word, camelCaseWord, i, j) {\n if (i === word.length) {\n return [];\n }\n else if (j === camelCaseWord.length) {\n return null;\n }\n else if (word[i] !== camelCaseWord[j].toLowerCase()) {\n return null;\n }\n else {\n let result = null;\n let nextUpperIndex = j + 1;\n result = _matchesCamelCase(word, camelCaseWord, i + 1, j + 1);\n while (!result && (nextUpperIndex = nextAnchor(camelCaseWord, nextUpperIndex)) < camelCaseWord.length) {\n result = _matchesCamelCase(word, camelCaseWord, i + 1, nextUpperIndex);\n nextUpperIndex++;\n }\n return result === null ? null : join({ start: j, end: j + 1 }, result);\n }\n}\n// Heuristic to avoid computing camel case matcher for words that don't\n// look like camelCaseWords.\nfunction analyzeCamelCaseWord(word) {\n let upper = 0, lower = 0, alpha = 0, numeric = 0, code = 0;\n for (let i = 0; i < word.length; i++) {\n code = word.charCodeAt(i);\n if (isUpper(code)) {\n upper++;\n }\n if (isLower(code)) {\n lower++;\n }\n if (isAlphanumeric(code)) {\n alpha++;\n }\n if (isNumber(code)) {\n numeric++;\n }\n }\n const upperPercent = upper / word.length;\n const lowerPercent = lower / word.length;\n const alphaPercent = alpha / word.length;\n const numericPercent = numeric / word.length;\n return { upperPercent, lowerPercent, alphaPercent, numericPercent };\n}\nfunction isUpperCaseWord(analysis) {\n const { upperPercent, lowerPercent } = analysis;\n return lowerPercent === 0 && upperPercent > 0.6;\n}\nfunction isCamelCaseWord(analysis) {\n const { upperPercent, lowerPercent, alphaPercent, numericPercent } = analysis;\n return lowerPercent > 0.2 && upperPercent < 0.8 && alphaPercent > 0.6 && numericPercent < 0.2;\n}\n// Heuristic to avoid computing camel case matcher for words that don't\n// look like camel case patterns.\nfunction isCamelCasePattern(word) {\n let upper = 0, lower = 0, code = 0, whitespace = 0;\n for (let i = 0; i < word.length; i++) {\n code = word.charCodeAt(i);\n if (isUpper(code)) {\n upper++;\n }\n if (isLower(code)) {\n lower++;\n }\n if (isWhitespace(code)) {\n whitespace++;\n }\n }\n if ((upper === 0 || lower === 0) && whitespace === 0) {\n return word.length <= 30;\n }\n else {\n return upper <= 5;\n }\n}\nexport function matchesCamelCase(word, camelCaseWord) {\n if (!camelCaseWord) {\n return null;\n }\n camelCaseWord = camelCaseWord.trim();\n if (camelCaseWord.length === 0) {\n return null;\n }\n if (!isCamelCasePattern(word)) {\n return null;\n }\n if (camelCaseWord.length > 60) {\n return null;\n }\n const analysis = analyzeCamelCaseWord(camelCaseWord);\n if (!isCamelCaseWord(analysis)) {\n if (!isUpperCaseWord(analysis)) {\n return null;\n }\n camelCaseWord = camelCaseWord.toLowerCase();\n }\n let result = null;\n let i = 0;\n word = word.toLowerCase();\n while (i < camelCaseWord.length && (result = _matchesCamelCase(word, camelCaseWord, 0, i)) === null) {\n i = nextAnchor(camelCaseWord, i + 1);\n }\n return result;\n}\n// Matches beginning of words supporting non-ASCII languages\n// If `contiguous` is true then matches word with beginnings of the words in the target. E.g. \"pul\" will match \"Git: Pull\"\n// Otherwise also matches sub string of the word with beginnings of the words in the target. E.g. \"gp\" or \"g p\" will match \"Git: Pull\"\n// Useful in cases where the target is words (e.g. command labels)\nexport function matchesWords(word, target, contiguous = false) {\n if (!target || target.length === 0) {\n return null;\n }\n let result = null;\n let i = 0;\n word = word.toLowerCase();\n target = target.toLowerCase();\n while (i < target.length && (result = _matchesWords(word, target, 0, i, contiguous)) === null) {\n i = nextWord(target, i + 1);\n }\n return result;\n}\nfunction _matchesWords(word, target, i, j, contiguous) {\n if (i === word.length) {\n return [];\n }\n else if (j === target.length) {\n return null;\n }\n else if (!charactersMatch(word.charCodeAt(i), target.charCodeAt(j))) {\n return null;\n }\n else {\n let result = null;\n let nextWordIndex = j + 1;\n result = _matchesWords(word, target, i + 1, j + 1, contiguous);\n if (!contiguous) {\n while (!result && (nextWordIndex = nextWord(target, nextWordIndex)) < target.length) {\n result = _matchesWords(word, target, i + 1, nextWordIndex, contiguous);\n nextWordIndex++;\n }\n }\n return result === null ? null : join({ start: j, end: j + 1 }, result);\n }\n}\nfunction nextWord(word, start) {\n for (let i = start; i < word.length; i++) {\n if (isWordSeparator(word.charCodeAt(i)) ||\n (i > 0 && isWordSeparator(word.charCodeAt(i - 1)))) {\n return i;\n }\n }\n return word.length;\n}\n// Fuzzy\nconst fuzzyContiguousFilter = or(matchesPrefix, matchesCamelCase, matchesContiguousSubString);\nconst fuzzySeparateFilter = or(matchesPrefix, matchesCamelCase, matchesSubString);\nconst fuzzyRegExpCache = new LRUCache(10000); // bounded to 10000 elements\nexport function matchesFuzzy(word, wordToMatchAgainst, enableSeparateSubstringMatching = false) {\n if (typeof word !== 'string' || typeof wordToMatchAgainst !== 'string') {\n return null; // return early for invalid input\n }\n // Form RegExp for wildcard matches\n let regexp = fuzzyRegExpCache.get(word);\n if (!regexp) {\n regexp = new RegExp(strings.convertSimple2RegExpPattern(word), 'i');\n fuzzyRegExpCache.set(word, regexp);\n }\n // RegExp Filter\n const match = regexp.exec(wordToMatchAgainst);\n if (match) {\n return [{ start: match.index, end: match.index + match[0].length }];\n }\n // Default Filter\n return enableSeparateSubstringMatching ? fuzzySeparateFilter(word, wordToMatchAgainst) : fuzzyContiguousFilter(word, wordToMatchAgainst);\n}\nexport function anyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos) {\n const max = Math.min(13, pattern.length);\n for (; patternPos < max; patternPos++) {\n const result = fuzzyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos, false);\n if (result) {\n return result;\n }\n }\n return [0, wordPos];\n}\n//#region --- fuzzyScore ---\nexport function createMatches(score) {\n if (typeof score === 'undefined') {\n return [];\n }\n const res = [];\n const wordPos = score[1];\n for (let i = score.length - 1; i > 1; i--) {\n const pos = score[i] + wordPos;\n const last = res[res.length - 1];\n if (last && last.end === pos) {\n last.end = pos + 1;\n }\n else {\n res.push({ start: pos, end: pos + 1 });\n }\n }\n return res;\n}\nconst _maxLen = 128;\nfunction initTable() {\n const table = [];\n const row = [];\n for (let i = 0; i <= _maxLen; i++) {\n row[i] = 0;\n }\n for (let i = 0; i <= _maxLen; i++) {\n table.push(row.slice(0));\n }\n return table;\n}\nfunction initArr(maxLen) {\n const row = [];\n for (let i = 0; i <= maxLen; i++) {\n row[i] = 0;\n }\n return row;\n}\nconst _minWordMatchPos = initArr(2 * _maxLen); // min word position for a certain pattern position\nconst _maxWordMatchPos = initArr(2 * _maxLen); // max word position for a certain pattern position\nconst _diag = initTable(); // the length of a contiguous diagonal match\nconst _table = initTable();\nconst _arrows = initTable();\nconst _debug = false;\nfunction printTable(table, pattern, patternLen, word, wordLen) {\n function pad(s, n, pad = ' ') {\n while (s.length < n) {\n s = pad + s;\n }\n return s;\n }\n let ret = ` | |${word.split('').map(c => pad(c, 3)).join('|')}\\n`;\n for (let i = 0; i <= patternLen; i++) {\n if (i === 0) {\n ret += ' |';\n }\n else {\n ret += `${pattern[i - 1]}|`;\n }\n ret += table[i].slice(0, wordLen + 1).map(n => pad(n.toString(), 3)).join('|') + '\\n';\n }\n return ret;\n}\nfunction printTables(pattern, patternStart, word, wordStart) {\n pattern = pattern.substr(patternStart);\n word = word.substr(wordStart);\n console.log(printTable(_table, pattern, pattern.length, word, word.length));\n console.log(printTable(_arrows, pattern, pattern.length, word, word.length));\n console.log(printTable(_diag, pattern, pattern.length, word, word.length));\n}\nfunction isSeparatorAtPos(value, index) {\n if (index < 0 || index >= value.length) {\n return false;\n }\n const code = value.codePointAt(index);\n switch (code) {\n case 95 /* Underline */:\n case 45 /* Dash */:\n case 46 /* Period */:\n case 32 /* Space */:\n case 47 /* Slash */:\n case 92 /* Backslash */:\n case 39 /* SingleQuote */:\n case 34 /* DoubleQuote */:\n case 58 /* Colon */:\n case 36 /* DollarSign */:\n case 60 /* LessThan */:\n case 40 /* OpenParen */:\n case 91 /* OpenSquareBracket */:\n return true;\n case undefined:\n return false;\n default:\n if (strings.isEmojiImprecise(code)) {\n return true;\n }\n return false;\n }\n}\nfunction isWhitespaceAtPos(value, index) {\n if (index < 0 || index >= value.length) {\n return false;\n }\n const code = value.charCodeAt(index);\n switch (code) {\n case 32 /* Space */:\n case 9 /* Tab */:\n return true;\n default:\n return false;\n }\n}\nfunction isUpperCaseAtPos(pos, word, wordLow) {\n return word[pos] !== wordLow[pos];\n}\nexport function isPatternInWord(patternLow, patternPos, patternLen, wordLow, wordPos, wordLen, fillMinWordPosArr = false) {\n while (patternPos < patternLen && wordPos < wordLen) {\n if (patternLow[patternPos] === wordLow[wordPos]) {\n if (fillMinWordPosArr) {\n // Remember the min word position for each pattern position\n _minWordMatchPos[patternPos] = wordPos;\n }\n patternPos += 1;\n }\n wordPos += 1;\n }\n return patternPos === patternLen; // pattern must be exhausted\n}\nexport var FuzzyScore;\n(function (FuzzyScore) {\n /**\n * No matches and value `-100`\n */\n FuzzyScore.Default = ([-100, 0]);\n function isDefault(score) {\n return !score || (score.length === 2 && score[0] === -100 && score[1] === 0);\n }\n FuzzyScore.isDefault = isDefault;\n})(FuzzyScore || (FuzzyScore = {}));\nexport function fuzzyScore(pattern, patternLow, patternStart, word, wordLow, wordStart, firstMatchCanBeWeak) {\n const patternLen = pattern.length > _maxLen ? _maxLen : pattern.length;\n const wordLen = word.length > _maxLen ? _maxLen : word.length;\n if (patternStart >= patternLen || wordStart >= wordLen || (patternLen - patternStart) > (wordLen - wordStart)) {\n return undefined;\n }\n // Run a simple check if the characters of pattern occur\n // (in order) at all in word. If that isn't the case we\n // stop because no match will be possible\n if (!isPatternInWord(patternLow, patternStart, patternLen, wordLow, wordStart, wordLen, true)) {\n return undefined;\n }\n // Find the max matching word position for each pattern position\n // NOTE: the min matching word position was filled in above, in the `isPatternInWord` call\n _fillInMaxWordMatchPos(patternLen, wordLen, patternStart, wordStart, patternLow, wordLow);\n let row = 1;\n let column = 1;\n let patternPos = patternStart;\n let wordPos = wordStart;\n const hasStrongFirstMatch = [false];\n // There will be a match, fill in tables\n for (row = 1, patternPos = patternStart; patternPos < patternLen; row++, patternPos++) {\n // Reduce search space to possible matching word positions and to possible access from next row\n const minWordMatchPos = _minWordMatchPos[patternPos];\n const maxWordMatchPos = _maxWordMatchPos[patternPos];\n const nextMaxWordMatchPos = (patternPos + 1 < patternLen ? _maxWordMatchPos[patternPos + 1] : wordLen);\n for (column = minWordMatchPos - wordStart + 1, wordPos = minWordMatchPos; wordPos < nextMaxWordMatchPos; column++, wordPos++) {\n let score = Number.MIN_SAFE_INTEGER;\n let canComeDiag = false;\n if (wordPos <= maxWordMatchPos) {\n score = _doScore(pattern, patternLow, patternPos, patternStart, word, wordLow, wordPos, wordLen, wordStart, _diag[row - 1][column - 1] === 0, hasStrongFirstMatch);\n }\n let diagScore = 0;\n if (score !== Number.MAX_SAFE_INTEGER) {\n canComeDiag = true;\n diagScore = score + _table[row - 1][column - 1];\n }\n const canComeLeft = wordPos > minWordMatchPos;\n const leftScore = canComeLeft ? _table[row][column - 1] + (_diag[row][column - 1] > 0 ? -5 : 0) : 0; // penalty for a gap start\n const canComeLeftLeft = wordPos > minWordMatchPos + 1 && _diag[row][column - 1] > 0;\n const leftLeftScore = canComeLeftLeft ? _table[row][column - 2] + (_diag[row][column - 2] > 0 ? -5 : 0) : 0; // penalty for a gap start\n if (canComeLeftLeft && (!canComeLeft || leftLeftScore >= leftScore) && (!canComeDiag || leftLeftScore >= diagScore)) {\n // always prefer choosing left left to jump over a diagonal because that means a match is earlier in the word\n _table[row][column] = leftLeftScore;\n _arrows[row][column] = 3 /* LeftLeft */;\n _diag[row][column] = 0;\n }\n else if (canComeLeft && (!canComeDiag || leftScore >= diagScore)) {\n // always prefer choosing left since that means a match is earlier in the word\n _table[row][column] = leftScore;\n _arrows[row][column] = 2 /* Left */;\n _diag[row][column] = 0;\n }\n else if (canComeDiag) {\n _table[row][column] = diagScore;\n _arrows[row][column] = 1 /* Diag */;\n _diag[row][column] = _diag[row - 1][column - 1] + 1;\n }\n else {\n throw new Error(`not possible`);\n }\n }\n }\n if (_debug) {\n printTables(pattern, patternStart, word, wordStart);\n }\n if (!hasStrongFirstMatch[0] && !firstMatchCanBeWeak) {\n return undefined;\n }\n row--;\n column--;\n const result = [_table[row][column], wordStart];\n let backwardsDiagLength = 0;\n let maxMatchColumn = 0;\n while (row >= 1) {\n // Find the column where we go diagonally up\n let diagColumn = column;\n do {\n const arrow = _arrows[row][diagColumn];\n if (arrow === 3 /* LeftLeft */) {\n diagColumn = diagColumn - 2;\n }\n else if (arrow === 2 /* Left */) {\n diagColumn = diagColumn - 1;\n }\n else {\n // found the diagonal\n break;\n }\n } while (diagColumn >= 1);\n // Overturn the \"forwards\" decision if keeping the \"backwards\" diagonal would give a better match\n if (backwardsDiagLength > 1 // only if we would have a contiguous match of 3 characters\n && patternLow[patternStart + row - 1] === wordLow[wordStart + column - 1] // only if we can do a contiguous match diagonally\n && !isUpperCaseAtPos(diagColumn + wordStart - 1, word, wordLow) // only if the forwards chose diagonal is not an uppercase\n && backwardsDiagLength + 1 > _diag[row][diagColumn] // only if our contiguous match would be longer than the \"forwards\" contiguous match\n ) {\n diagColumn = column;\n }\n if (diagColumn === column) {\n // this is a contiguous match\n backwardsDiagLength++;\n }\n else {\n backwardsDiagLength = 1;\n }\n if (!maxMatchColumn) {\n // remember the last matched column\n maxMatchColumn = diagColumn;\n }\n row--;\n column = diagColumn - 1;\n result.push(column);\n }\n if (wordLen === patternLen) {\n // the word matches the pattern with all characters!\n // giving the score a total match boost (to come up ahead other words)\n result[0] += 2;\n }\n // Add 1 penalty for each skipped character in the word\n const skippedCharsCount = maxMatchColumn - patternLen;\n result[0] -= skippedCharsCount;\n return result;\n}\nfunction _fillInMaxWordMatchPos(patternLen, wordLen, patternStart, wordStart, patternLow, wordLow) {\n let patternPos = patternLen - 1;\n let wordPos = wordLen - 1;\n while (patternPos >= patternStart && wordPos >= wordStart) {\n if (patternLow[patternPos] === wordLow[wordPos]) {\n _maxWordMatchPos[patternPos] = wordPos;\n patternPos--;\n }\n wordPos--;\n }\n}\nfunction _doScore(pattern, patternLow, patternPos, patternStart, word, wordLow, wordPos, wordLen, wordStart, newMatchStart, outFirstMatchStrong) {\n if (patternLow[patternPos] !== wordLow[wordPos]) {\n return Number.MIN_SAFE_INTEGER;\n }\n let score = 1;\n let isGapLocation = false;\n if (wordPos === (patternPos - patternStart)) {\n // common prefix: `foobar <-> foobaz`\n // ^^^^^\n score = pattern[patternPos] === word[wordPos] ? 7 : 5;\n }\n else if (isUpperCaseAtPos(wordPos, word, wordLow) && (wordPos === 0 || !isUpperCaseAtPos(wordPos - 1, word, wordLow))) {\n // hitting upper-case: `foo <-> forOthers`\n // ^^ ^\n score = pattern[patternPos] === word[wordPos] ? 7 : 5;\n isGapLocation = true;\n }\n else if (isSeparatorAtPos(wordLow, wordPos) && (wordPos === 0 || !isSeparatorAtPos(wordLow, wordPos - 1))) {\n // hitting a separator: `. <-> foo.bar`\n // ^\n score = 5;\n }\n else if (isSeparatorAtPos(wordLow, wordPos - 1) || isWhitespaceAtPos(wordLow, wordPos - 1)) {\n // post separator: `foo <-> bar_foo`\n // ^^^\n score = 5;\n isGapLocation = true;\n }\n if (score > 1 && patternPos === patternStart) {\n outFirstMatchStrong[0] = true;\n }\n if (!isGapLocation) {\n isGapLocation = isUpperCaseAtPos(wordPos, word, wordLow) || isSeparatorAtPos(wordLow, wordPos - 1) || isWhitespaceAtPos(wordLow, wordPos - 1);\n }\n //\n if (patternPos === patternStart) { // first character in pattern\n if (wordPos > wordStart) {\n // the first pattern character would match a word character that is not at the word start\n // so introduce a penalty to account for the gap preceding this match\n score -= isGapLocation ? 3 : 5;\n }\n }\n else {\n if (newMatchStart) {\n // this would be the beginning of a new match (i.e. there would be a gap before this location)\n score += isGapLocation ? 2 : 0;\n }\n else {\n // this is part of a contiguous match, so give it a slight bonus, but do so only if it would not be a prefered gap location\n score += isGapLocation ? 0 : 1;\n }\n }\n if (wordPos + 1 === wordLen) {\n // we always penalize gaps, but this gives unfair advantages to a match that would match the last character in the word\n // so pretend there is a gap after the last character in the word to normalize things\n score -= isGapLocation ? 3 : 5;\n }\n return score;\n}\n//#endregion\n//#region --- graceful ---\nexport function fuzzyScoreGracefulAggressive(pattern, lowPattern, patternPos, word, lowWord, wordPos, firstMatchCanBeWeak) {\n return fuzzyScoreWithPermutations(pattern, lowPattern, patternPos, word, lowWord, wordPos, true, firstMatchCanBeWeak);\n}\nfunction fuzzyScoreWithPermutations(pattern, lowPattern, patternPos, word, lowWord, wordPos, aggressive, firstMatchCanBeWeak) {\n let top = fuzzyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos, firstMatchCanBeWeak);\n if (top && !aggressive) {\n // when using the original pattern yield a result we`\n // return it unless we are aggressive and try to find\n // a better alignment, e.g. `cno` -> `^co^ns^ole` or `^c^o^nsole`.\n return top;\n }\n if (pattern.length >= 3) {\n // When the pattern is long enough then try a few (max 7)\n // permutations of the pattern to find a better match. The\n // permutations only swap neighbouring characters, e.g\n // `cnoso` becomes `conso`, `cnsoo`, `cnoos`.\n const tries = Math.min(7, pattern.length - 1);\n for (let movingPatternPos = patternPos + 1; movingPatternPos < tries; movingPatternPos++) {\n const newPattern = nextTypoPermutation(pattern, movingPatternPos);\n if (newPattern) {\n const candidate = fuzzyScore(newPattern, newPattern.toLowerCase(), patternPos, word, lowWord, wordPos, firstMatchCanBeWeak);\n if (candidate) {\n candidate[0] -= 3; // permutation penalty\n if (!top || candidate[0] > top[0]) {\n top = candidate;\n }\n }\n }\n }\n }\n return top;\n}\nfunction nextTypoPermutation(pattern, patternPos) {\n if (patternPos + 1 >= pattern.length) {\n return undefined;\n }\n const swap1 = pattern[patternPos];\n const swap2 = pattern[patternPos + 1];\n if (swap1 === swap2) {\n return undefined;\n }\n return pattern.slice(0, patternPos)\n + swap2\n + swap1\n + pattern.slice(patternPos + 2);\n}\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\nexport function once(fn) {\n const _this = this;\n let didCall = false;\n let result;\n return function () {\n if (didCall) {\n return result;\n }\n didCall = true;\n result = fn.apply(_this, arguments);\n return result;\n };\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from './strings.js';\nimport * as extpath from './extpath.js';\nimport * as paths from './path.js';\nimport { LRUCache } from './map.js';\nimport { isThenable } from './async.js';\nconst GLOBSTAR = '**';\nconst GLOB_SPLIT = '/';\nconst PATH_REGEX = '[/\\\\\\\\]'; // any slash or backslash\nconst NO_PATH_REGEX = '[^/\\\\\\\\]'; // any non-slash and non-backslash\nconst ALL_FORWARD_SLASHES = /\\//g;\nfunction starsToRegExp(starCount) {\n switch (starCount) {\n case 0:\n return '';\n case 1:\n return `${NO_PATH_REGEX}*?`; // 1 star matches any number of characters except path separator (/ and \\) - non greedy (?)\n default:\n // Matches: (Path Sep OR Path Val followed by Path Sep OR Path Sep followed by Path Val) 0-many times\n // Group is non capturing because we don't need to capture at all (?:...)\n // Overall we use non-greedy matching because it could be that we match too much\n return `(?:${PATH_REGEX}|${NO_PATH_REGEX}+${PATH_REGEX}|${PATH_REGEX}${NO_PATH_REGEX}+)*?`;\n }\n}\nexport function splitGlobAware(pattern, splitChar) {\n if (!pattern) {\n return [];\n }\n const segments = [];\n let inBraces = false;\n let inBrackets = false;\n let curVal = '';\n for (const char of pattern) {\n switch (char) {\n case splitChar:\n if (!inBraces && !inBrackets) {\n segments.push(curVal);\n curVal = '';\n continue;\n }\n break;\n case '{':\n inBraces = true;\n break;\n case '}':\n inBraces = false;\n break;\n case '[':\n inBrackets = true;\n break;\n case ']':\n inBrackets = false;\n break;\n }\n curVal += char;\n }\n // Tail\n if (curVal) {\n segments.push(curVal);\n }\n return segments;\n}\nfunction parseRegExp(pattern) {\n if (!pattern) {\n return '';\n }\n let regEx = '';\n // Split up into segments for each slash found\n const segments = splitGlobAware(pattern, GLOB_SPLIT);\n // Special case where we only have globstars\n if (segments.every(s => s === GLOBSTAR)) {\n regEx = '.*';\n }\n // Build regex over segments\n else {\n let previousSegmentWasGlobStar = false;\n segments.forEach((segment, index) => {\n // Globstar is special\n if (segment === GLOBSTAR) {\n // if we have more than one globstar after another, just ignore it\n if (!previousSegmentWasGlobStar) {\n regEx += starsToRegExp(2);\n previousSegmentWasGlobStar = true;\n }\n return;\n }\n // States\n let inBraces = false;\n let braceVal = '';\n let inBrackets = false;\n let bracketVal = '';\n for (const char of segment) {\n // Support brace expansion\n if (char !== '}' && inBraces) {\n braceVal += char;\n continue;\n }\n // Support brackets\n if (inBrackets && (char !== ']' || !bracketVal) /* ] is literally only allowed as first character in brackets to match it */) {\n let res;\n // range operator\n if (char === '-') {\n res = char;\n }\n // negation operator (only valid on first index in bracket)\n else if ((char === '^' || char === '!') && !bracketVal) {\n res = '^';\n }\n // glob split matching is not allowed within character ranges\n // see http://man7.org/linux/man-pages/man7/glob.7.html\n else if (char === GLOB_SPLIT) {\n res = '';\n }\n // anything else gets escaped\n else {\n res = strings.escapeRegExpCharacters(char);\n }\n bracketVal += res;\n continue;\n }\n switch (char) {\n case '{':\n inBraces = true;\n continue;\n case '[':\n inBrackets = true;\n continue;\n case '}':\n const choices = splitGlobAware(braceVal, ',');\n // Converts {foo,bar} => [foo|bar]\n const braceRegExp = `(?:${choices.map(c => parseRegExp(c)).join('|')})`;\n regEx += braceRegExp;\n inBraces = false;\n braceVal = '';\n break;\n case ']':\n regEx += ('[' + bracketVal + ']');\n inBrackets = false;\n bracketVal = '';\n break;\n case '?':\n regEx += NO_PATH_REGEX; // 1 ? matches any single character except path separator (/ and \\)\n continue;\n case '*':\n regEx += starsToRegExp(1);\n continue;\n default:\n regEx += strings.escapeRegExpCharacters(char);\n }\n }\n // Tail: Add the slash we had split on if there is more to come and the remaining pattern is not a globstar\n // For example if pattern: some/**/*.js we want the \"/\" after some to be included in the RegEx to prevent\n // a folder called \"something\" to match as well.\n // However, if pattern: some/**, we tolerate that we also match on \"something\" because our globstar behaviour\n // is to match 0-N segments.\n if (index < segments.length - 1 && (segments[index + 1] !== GLOBSTAR || index + 2 < segments.length)) {\n regEx += PATH_REGEX;\n }\n // reset state\n previousSegmentWasGlobStar = false;\n });\n }\n return regEx;\n}\n// regexes to check for trival glob patterns that just check for String#endsWith\nconst T1 = /^\\*\\*\\/\\*\\.[\\w\\.-]+$/; // **/*.something\nconst T2 = /^\\*\\*\\/([\\w\\.-]+)\\/?$/; // **/something\nconst T3 = /^{\\*\\*\\/[\\*\\.]?[\\w\\.-]+\\/?(,\\*\\*\\/[\\*\\.]?[\\w\\.-]+\\/?)*}$/; // {**/*.something,**/*.else} or {**/package.json,**/project.json}\nconst T3_2 = /^{\\*\\*\\/[\\*\\.]?[\\w\\.-]+(\\/(\\*\\*)?)?(,\\*\\*\\/[\\*\\.]?[\\w\\.-]+(\\/(\\*\\*)?)?)*}$/; // Like T3, with optional trailing /**\nconst T4 = /^\\*\\*((\\/[\\w\\.-]+)+)\\/?$/; // **/something/else\nconst T5 = /^([\\w\\.-]+(\\/[\\w\\.-]+)*)\\/?$/; // something/else\nconst CACHE = new LRUCache(10000); // bounded to 10000 elements\nconst FALSE = function () {\n return false;\n};\nconst NULL = function () {\n return null;\n};\nfunction parsePattern(arg1, options) {\n if (!arg1) {\n return NULL;\n }\n // Handle IRelativePattern\n let pattern;\n if (typeof arg1 !== 'string') {\n pattern = arg1.pattern;\n }\n else {\n pattern = arg1;\n }\n // Whitespace trimming\n pattern = pattern.trim();\n // Check cache\n const patternKey = `${pattern}_${!!options.trimForExclusions}`;\n let parsedPattern = CACHE.get(patternKey);\n if (parsedPattern) {\n return wrapRelativePattern(parsedPattern, arg1);\n }\n // Check for Trivias\n let match;\n if (T1.test(pattern)) { // common pattern: **/*.txt just need endsWith check\n const base = pattern.substr(4); // '**/*'.length === 4\n parsedPattern = function (path, basename) {\n return typeof path === 'string' && path.endsWith(base) ? pattern : null;\n };\n }\n else if (match = T2.exec(trimForExclusions(pattern, options))) { // common pattern: **/some.txt just need basename check\n parsedPattern = trivia2(match[1], pattern);\n }\n else if ((options.trimForExclusions ? T3_2 : T3).test(pattern)) { // repetition of common patterns (see above) {**/*.txt,**/*.png}\n parsedPattern = trivia3(pattern, options);\n }\n else if (match = T4.exec(trimForExclusions(pattern, options))) { // common pattern: **/something/else just need endsWith check\n parsedPattern = trivia4and5(match[1].substr(1), pattern, true);\n }\n else if (match = T5.exec(trimForExclusions(pattern, options))) { // common pattern: something/else just need equals check\n parsedPattern = trivia4and5(match[1], pattern, false);\n }\n // Otherwise convert to pattern\n else {\n parsedPattern = toRegExp(pattern);\n }\n // Cache\n CACHE.set(patternKey, parsedPattern);\n return wrapRelativePattern(parsedPattern, arg1);\n}\nfunction wrapRelativePattern(parsedPattern, arg2) {\n if (typeof arg2 === 'string') {\n return parsedPattern;\n }\n return function (path, basename) {\n if (!extpath.isEqualOrParent(path, arg2.base)) {\n return null;\n }\n return parsedPattern(paths.relative(arg2.base, path), basename);\n };\n}\nfunction trimForExclusions(pattern, options) {\n return options.trimForExclusions && pattern.endsWith('/**') ? pattern.substr(0, pattern.length - 2) : pattern; // dropping **, tailing / is dropped later\n}\n// common pattern: **/some.txt just need basename check\nfunction trivia2(base, originalPattern) {\n const slashBase = `/${base}`;\n const backslashBase = `\\\\${base}`;\n const parsedPattern = function (path, basename) {\n if (typeof path !== 'string') {\n return null;\n }\n if (basename) {\n return basename === base ? originalPattern : null;\n }\n return path === base || path.endsWith(slashBase) || path.endsWith(backslashBase) ? originalPattern : null;\n };\n const basenames = [base];\n parsedPattern.basenames = basenames;\n parsedPattern.patterns = [originalPattern];\n parsedPattern.allBasenames = basenames;\n return parsedPattern;\n}\n// repetition of common patterns (see above) {**/*.txt,**/*.png}\nfunction trivia3(pattern, options) {\n const parsedPatterns = aggregateBasenameMatches(pattern.slice(1, -1).split(',')\n .map(pattern => parsePattern(pattern, options))\n .filter(pattern => pattern !== NULL), pattern);\n const n = parsedPatterns.length;\n if (!n) {\n return NULL;\n }\n if (n === 1) {\n return parsedPatterns[0];\n }\n const parsedPattern = function (path, basename) {\n for (let i = 0, n = parsedPatterns.length; i < n; i++) {\n if (parsedPatterns[i](path, basename)) {\n return pattern;\n }\n }\n return null;\n };\n const withBasenames = parsedPatterns.find(pattern => !!pattern.allBasenames);\n if (withBasenames) {\n parsedPattern.allBasenames = withBasenames.allBasenames;\n }\n const allPaths = parsedPatterns.reduce((all, current) => current.allPaths ? all.concat(current.allPaths) : all, []);\n if (allPaths.length) {\n parsedPattern.allPaths = allPaths;\n }\n return parsedPattern;\n}\n// common patterns: **/something/else just need endsWith check, something/else just needs and equals check\nfunction trivia4and5(targetPath, pattern, matchPathEnds) {\n const usingPosixSep = paths.sep === paths.posix.sep;\n const nativePath = usingPosixSep ? targetPath : targetPath.replace(ALL_FORWARD_SLASHES, paths.sep);\n const nativePathEnd = paths.sep + nativePath;\n const targetPathEnd = paths.posix.sep + targetPath;\n const parsedPattern = matchPathEnds ? function (testPath, basename) {\n return typeof testPath === 'string' &&\n ((testPath === nativePath || testPath.endsWith(nativePathEnd))\n || !usingPosixSep && (testPath === targetPath || testPath.endsWith(targetPathEnd)))\n ? pattern : null;\n } : function (testPath, basename) {\n return typeof testPath === 'string' &&\n (testPath === nativePath\n || (!usingPosixSep && testPath === targetPath))\n ? pattern : null;\n };\n parsedPattern.allPaths = [(matchPathEnds ? '*/' : './') + targetPath];\n return parsedPattern;\n}\nfunction toRegExp(pattern) {\n try {\n const regExp = new RegExp(`^${parseRegExp(pattern)}$`);\n return function (path) {\n regExp.lastIndex = 0; // reset RegExp to its initial state to reuse it!\n return typeof path === 'string' && regExp.test(path) ? pattern : null;\n };\n }\n catch (error) {\n return NULL;\n }\n}\nexport function match(arg1, path, hasSibling) {\n if (!arg1 || typeof path !== 'string') {\n return false;\n }\n return parse(arg1)(path, undefined, hasSibling);\n}\nexport function parse(arg1, options = {}) {\n if (!arg1) {\n return FALSE;\n }\n // Glob with String\n if (typeof arg1 === 'string' || isRelativePattern(arg1)) {\n const parsedPattern = parsePattern(arg1, options);\n if (parsedPattern === NULL) {\n return FALSE;\n }\n const resultPattern = function (path, basename) {\n return !!parsedPattern(path, basename);\n };\n if (parsedPattern.allBasenames) {\n resultPattern.allBasenames = parsedPattern.allBasenames;\n }\n if (parsedPattern.allPaths) {\n resultPattern.allPaths = parsedPattern.allPaths;\n }\n return resultPattern;\n }\n // Glob with Expression\n return parsedExpression(arg1, options);\n}\nexport function isRelativePattern(obj) {\n const rp = obj;\n return rp && typeof rp.base === 'string' && typeof rp.pattern === 'string';\n}\nfunction parsedExpression(expression, options) {\n const parsedPatterns = aggregateBasenameMatches(Object.getOwnPropertyNames(expression)\n .map(pattern => parseExpressionPattern(pattern, expression[pattern], options))\n .filter(pattern => pattern !== NULL));\n const n = parsedPatterns.length;\n if (!n) {\n return NULL;\n }\n if (!parsedPatterns.some(parsedPattern => !!parsedPattern.requiresSiblings)) {\n if (n === 1) {\n return parsedPatterns[0];\n }\n const resultExpression = function (path, basename) {\n for (let i = 0, n = parsedPatterns.length; i < n; i++) {\n // Pattern matches path\n const result = parsedPatterns[i](path, basename);\n if (result) {\n return result;\n }\n }\n return null;\n };\n const withBasenames = parsedPatterns.find(pattern => !!pattern.allBasenames);\n if (withBasenames) {\n resultExpression.allBasenames = withBasenames.allBasenames;\n }\n const allPaths = parsedPatterns.reduce((all, current) => current.allPaths ? all.concat(current.allPaths) : all, []);\n if (allPaths.length) {\n resultExpression.allPaths = allPaths;\n }\n return resultExpression;\n }\n const resultExpression = function (path, basename, hasSibling) {\n let name = undefined;\n for (let i = 0, n = parsedPatterns.length; i < n; i++) {\n // Pattern matches path\n const parsedPattern = parsedPatterns[i];\n if (parsedPattern.requiresSiblings && hasSibling) {\n if (!basename) {\n basename = paths.basename(path);\n }\n if (!name) {\n name = basename.substr(0, basename.length - paths.extname(path).length);\n }\n }\n const result = parsedPattern(path, basename, name, hasSibling);\n if (result) {\n return result;\n }\n }\n return null;\n };\n const withBasenames = parsedPatterns.find(pattern => !!pattern.allBasenames);\n if (withBasenames) {\n resultExpression.allBasenames = withBasenames.allBasenames;\n }\n const allPaths = parsedPatterns.reduce((all, current) => current.allPaths ? all.concat(current.allPaths) : all, []);\n if (allPaths.length) {\n resultExpression.allPaths = allPaths;\n }\n return resultExpression;\n}\nfunction parseExpressionPattern(pattern, value, options) {\n if (value === false) {\n return NULL; // pattern is disabled\n }\n const parsedPattern = parsePattern(pattern, options);\n if (parsedPattern === NULL) {\n return NULL;\n }\n // Expression Pattern is <boolean>\n if (typeof value === 'boolean') {\n return parsedPattern;\n }\n // Expression Pattern is <SiblingClause>\n if (value) {\n const when = value.when;\n if (typeof when === 'string') {\n const result = (path, basename, name, hasSibling) => {\n if (!hasSibling || !parsedPattern(path, basename)) {\n return null;\n }\n const clausePattern = when.replace('$(basename)', name);\n const matched = hasSibling(clausePattern);\n return isThenable(matched) ?\n matched.then(m => m ? pattern : null) :\n matched ? pattern : null;\n };\n result.requiresSiblings = true;\n return result;\n }\n }\n // Expression is Anything\n return parsedPattern;\n}\nfunction aggregateBasenameMatches(parsedPatterns, result) {\n const basenamePatterns = parsedPatterns.filter(parsedPattern => !!parsedPattern.basenames);\n if (basenamePatterns.length < 2) {\n return parsedPatterns;\n }\n const basenames = basenamePatterns.reduce((all, current) => {\n const basenames = current.basenames;\n return basenames ? all.concat(basenames) : all;\n }, []);\n let patterns;\n if (result) {\n patterns = [];\n for (let i = 0, n = basenames.length; i < n; i++) {\n patterns.push(result);\n }\n }\n else {\n patterns = basenamePatterns.reduce((all, current) => {\n const patterns = current.patterns;\n return patterns ? all.concat(patterns) : all;\n }, []);\n }\n const aggregate = function (path, basename) {\n if (typeof path !== 'string') {\n return null;\n }\n if (!basename) {\n let i;\n for (i = path.length; i > 0; i--) {\n const ch = path.charCodeAt(i - 1);\n if (ch === 47 /* Slash */ || ch === 92 /* Backslash */) {\n break;\n }\n }\n basename = path.substr(i);\n }\n const index = basenames.indexOf(basename);\n return index !== -1 ? patterns[index] : null;\n };\n aggregate.basenames = basenames;\n aggregate.patterns = patterns;\n aggregate.allBasenames = basenames;\n const aggregatedPatterns = parsedPatterns.filter(parsedPattern => !parsedPattern.basenames);\n aggregatedPatterns.push(aggregate);\n return aggregatedPatterns;\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from './strings.js';\n/**\n * Return a hash value for an object.\n */\nexport function hash(obj) {\n return doHash(obj, 0);\n}\nexport function doHash(obj, hashVal) {\n switch (typeof obj) {\n case 'object':\n if (obj === null) {\n return numberHash(349, hashVal);\n }\n else if (Array.isArray(obj)) {\n return arrayHash(obj, hashVal);\n }\n return objectHash(obj, hashVal);\n case 'string':\n return stringHash(obj, hashVal);\n case 'boolean':\n return booleanHash(obj, hashVal);\n case 'number':\n return numberHash(obj, hashVal);\n case 'undefined':\n return numberHash(937, hashVal);\n default:\n return numberHash(617, hashVal);\n }\n}\nfunction numberHash(val, initialHashVal) {\n return (((initialHashVal << 5) - initialHashVal) + val) | 0; // hashVal * 31 + ch, keep as int32\n}\nfunction booleanHash(b, initialHashVal) {\n return numberHash(b ? 433 : 863, initialHashVal);\n}\nexport function stringHash(s, hashVal) {\n hashVal = numberHash(149417, hashVal);\n for (let i = 0, length = s.length; i < length; i++) {\n hashVal = numberHash(s.charCodeAt(i), hashVal);\n }\n return hashVal;\n}\nfunction arrayHash(arr, initialHashVal) {\n initialHashVal = numberHash(104579, initialHashVal);\n return arr.reduce((hashVal, item) => doHash(item, hashVal), initialHashVal);\n}\nfunction objectHash(obj, initialHashVal) {\n initialHashVal = numberHash(181387, initialHashVal);\n return Object.keys(obj).sort().reduce((hashVal, key) => {\n hashVal = stringHash(key, hashVal);\n return doHash(obj[key], hashVal);\n }, initialHashVal);\n}\nfunction leftRotate(value, bits, totalBits = 32) {\n // delta + bits = totalBits\n const delta = totalBits - bits;\n // All ones, expect `delta` zeros aligned to the right\n const mask = ~((1 << delta) - 1);\n // Join (value left-shifted `bits` bits) with (masked value right-shifted `delta` bits)\n return ((value << bits) | ((mask & value) >>> delta)) >>> 0;\n}\nfunction fill(dest, index = 0, count = dest.byteLength, value = 0) {\n for (let i = 0; i < count; i++) {\n dest[index + i] = value;\n }\n}\nfunction leftPad(value, length, char = '0') {\n while (value.length < length) {\n value = char + value;\n }\n return value;\n}\nexport function toHexString(bufferOrValue, bitsize = 32) {\n if (bufferOrValue instanceof ArrayBuffer) {\n return Array.from(new Uint8Array(bufferOrValue)).map(b => b.toString(16).padStart(2, '0')).join('');\n }\n return leftPad((bufferOrValue >>> 0).toString(16), bitsize / 4);\n}\n/**\n * A SHA1 implementation that works with strings and does not allocate.\n */\nexport class StringSHA1 {\n constructor() {\n this._h0 = 0x67452301;\n this._h1 = 0xEFCDAB89;\n this._h2 = 0x98BADCFE;\n this._h3 = 0x10325476;\n this._h4 = 0xC3D2E1F0;\n this._buff = new Uint8Array(64 /* BLOCK_SIZE */ + 3 /* to fit any utf-8 */);\n this._buffDV = new DataView(this._buff.buffer);\n this._buffLen = 0;\n this._totalLen = 0;\n this._leftoverHighSurrogate = 0;\n this._finished = false;\n }\n update(str) {\n const strLen = str.length;\n if (strLen === 0) {\n return;\n }\n const buff = this._buff;\n let buffLen = this._buffLen;\n let leftoverHighSurrogate = this._leftoverHighSurrogate;\n let charCode;\n let offset;\n if (leftoverHighSurrogate !== 0) {\n charCode = leftoverHighSurrogate;\n offset = -1;\n leftoverHighSurrogate = 0;\n }\n else {\n charCode = str.charCodeAt(0);\n offset = 0;\n }\n while (true) {\n let codePoint = charCode;\n if (strings.isHighSurrogate(charCode)) {\n if (offset + 1 < strLen) {\n const nextCharCode = str.charCodeAt(offset + 1);\n if (strings.isLowSurrogate(nextCharCode)) {\n offset++;\n codePoint = strings.computeCodePoint(charCode, nextCharCode);\n }\n else {\n // illegal => unicode replacement character\n codePoint = 65533 /* UNICODE_REPLACEMENT */;\n }\n }\n else {\n // last character is a surrogate pair\n leftoverHighSurrogate = charCode;\n break;\n }\n }\n else if (strings.isLowSurrogate(charCode)) {\n // illegal => unicode replacement character\n codePoint = 65533 /* UNICODE_REPLACEMENT */;\n }\n buffLen = this._push(buff, buffLen, codePoint);\n offset++;\n if (offset < strLen) {\n charCode = str.charCodeAt(offset);\n }\n else {\n break;\n }\n }\n this._buffLen = buffLen;\n this._leftoverHighSurrogate = leftoverHighSurrogate;\n }\n _push(buff, buffLen, codePoint) {\n if (codePoint < 0x0080) {\n buff[buffLen++] = codePoint;\n }\n else if (codePoint < 0x0800) {\n buff[buffLen++] = 0b11000000 | ((codePoint & 0b00000000000000000000011111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n else if (codePoint < 0x10000) {\n buff[buffLen++] = 0b11100000 | ((codePoint & 0b00000000000000001111000000000000) >>> 12);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000111111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n else {\n buff[buffLen++] = 0b11110000 | ((codePoint & 0b00000000000111000000000000000000) >>> 18);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000111111000000000000) >>> 12);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000111111000000) >>> 6);\n buff[buffLen++] = 0b10000000 | ((codePoint & 0b00000000000000000000000000111111) >>> 0);\n }\n if (buffLen >= 64 /* BLOCK_SIZE */) {\n this._step();\n buffLen -= 64 /* BLOCK_SIZE */;\n this._totalLen += 64 /* BLOCK_SIZE */;\n // take last 3 in case of UTF8 overflow\n buff[0] = buff[64 /* BLOCK_SIZE */ + 0];\n buff[1] = buff[64 /* BLOCK_SIZE */ + 1];\n buff[2] = buff[64 /* BLOCK_SIZE */ + 2];\n }\n return buffLen;\n }\n digest() {\n if (!this._finished) {\n this._finished = true;\n if (this._leftoverHighSurrogate) {\n // illegal => unicode replacement character\n this._leftoverHighSurrogate = 0;\n this._buffLen = this._push(this._buff, this._buffLen, 65533 /* UNICODE_REPLACEMENT */);\n }\n this._totalLen += this._buffLen;\n this._wrapUp();\n }\n return toHexString(this._h0) + toHexString(this._h1) + toHexString(this._h2) + toHexString(this._h3) + toHexString(this._h4);\n }\n _wrapUp() {\n this._buff[this._buffLen++] = 0x80;\n fill(this._buff, this._buffLen);\n if (this._buffLen > 56) {\n this._step();\n fill(this._buff);\n }\n // this will fit because the mantissa can cover up to 52 bits\n const ml = 8 * this._totalLen;\n this._buffDV.setUint32(56, Math.floor(ml / 4294967296), false);\n this._buffDV.setUint32(60, ml % 4294967296, false);\n this._step();\n }\n _step() {\n const bigBlock32 = StringSHA1._bigBlock32;\n const data = this._buffDV;\n for (let j = 0; j < 64 /* 16*4 */; j += 4) {\n bigBlock32.setUint32(j, data.getUint32(j, false), false);\n }\n for (let j = 64; j < 320 /* 80*4 */; j += 4) {\n bigBlock32.setUint32(j, leftRotate((bigBlock32.getUint32(j - 12, false) ^ bigBlock32.getUint32(j - 32, false) ^ bigBlock32.getUint32(j - 56, false) ^ bigBlock32.getUint32(j - 64, false)), 1), false);\n }\n let a = this._h0;\n let b = this._h1;\n let c = this._h2;\n let d = this._h3;\n let e = this._h4;\n let f, k;\n let temp;\n for (let j = 0; j < 80; j++) {\n if (j < 20) {\n f = (b & c) | ((~b) & d);\n k = 0x5A827999;\n }\n else if (j < 40) {\n f = b ^ c ^ d;\n k = 0x6ED9EBA1;\n }\n else if (j < 60) {\n f = (b & c) | (b & d) | (c & d);\n k = 0x8F1BBCDC;\n }\n else {\n f = b ^ c ^ d;\n k = 0xCA62C1D6;\n }\n temp = (leftRotate(a, 5) + f + e + k + bigBlock32.getUint32(j * 4, false)) & 0xffffffff;\n e = d;\n d = c;\n c = leftRotate(b, 30);\n b = a;\n a = temp;\n }\n this._h0 = (this._h0 + a) & 0xffffffff;\n this._h1 = (this._h1 + b) & 0xffffffff;\n this._h2 = (this._h2 + c) & 0xffffffff;\n this._h3 = (this._h3 + d) & 0xffffffff;\n this._h4 = (this._h4 + e) & 0xffffffff;\n }\n}\nStringSHA1._bigBlock32 = new DataView(new ArrayBuffer(320)); // 80 * 4 = 320\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 *--------------------------------------------------------------------------------------------*/\nimport { CSSIcon } from './codicons.js';\nimport { matchesFuzzy } from './filters.js';\nimport { ltrim } from './strings.js';\nexport const iconStartMarker = '$(';\nconst iconsRegex = new RegExp(`\\\\$\\\\(${CSSIcon.iconNameExpression}(?:${CSSIcon.iconModifierExpression})?\\\\)`, 'g'); // no capturing groups\nconst escapeIconsRegex = new RegExp(`(\\\\\\\\)?${iconsRegex.source}`, 'g');\nexport function escapeIcons(text) {\n return text.replace(escapeIconsRegex, (match, escaped) => escaped ? match : `\\\\${match}`);\n}\nconst markdownEscapedIconsRegex = new RegExp(`\\\\\\\\${iconsRegex.source}`, 'g');\nexport function markdownEscapeEscapedIcons(text) {\n // Need to add an extra \\ for escaping in markdown\n return text.replace(markdownEscapedIconsRegex, match => `\\\\${match}`);\n}\nconst stripIconsRegex = new RegExp(`(\\\\s)?(\\\\\\\\)?${iconsRegex.source}(\\\\s)?`, 'g');\nexport function stripIcons(text) {\n if (text.indexOf(iconStartMarker) === -1) {\n return text;\n }\n return text.replace(stripIconsRegex, (match, preWhitespace, escaped, postWhitespace) => escaped ? match : preWhitespace || postWhitespace || '');\n}\nexport function parseLabelWithIcons(text) {\n const firstIconIndex = text.indexOf(iconStartMarker);\n if (firstIconIndex === -1) {\n return { text }; // return early if the word does not include an icon\n }\n return doParseLabelWithIcons(text, firstIconIndex);\n}\nfunction doParseLabelWithIcons(text, firstIconIndex) {\n const iconOffsets = [];\n let textWithoutIcons = '';\n function appendChars(chars) {\n if (chars) {\n textWithoutIcons += chars;\n for (const _ of chars) {\n iconOffsets.push(iconsOffset); // make sure to fill in icon offsets\n }\n }\n }\n let currentIconStart = -1;\n let currentIconValue = '';\n let iconsOffset = 0;\n let char;\n let nextChar;\n let offset = firstIconIndex;\n const length = text.length;\n // Append all characters until the first icon\n appendChars(text.substr(0, firstIconIndex));\n // example: $(file-symlink-file) my cool $(other-icon) entry\n while (offset < length) {\n char = text[offset];\n nextChar = text[offset + 1];\n // beginning of icon: some value $( <--\n if (char === iconStartMarker[0] && nextChar === iconStartMarker[1]) {\n currentIconStart = offset;\n // if we had a previous potential icon value without\n // the closing ')', it was actually not an icon and\n // so we have to add it to the actual value\n appendChars(currentIconValue);\n currentIconValue = iconStartMarker;\n offset++; // jump over '('\n }\n // end of icon: some value $(some-icon) <--\n else if (char === ')' && currentIconStart !== -1) {\n const currentIconLength = offset - currentIconStart + 1; // +1 to include the closing ')'\n iconsOffset += currentIconLength;\n currentIconStart = -1;\n currentIconValue = '';\n }\n // within icon\n else if (currentIconStart !== -1) {\n // Make sure this is a real icon name\n if (/^[a-z0-9\\-]$/i.test(char)) {\n currentIconValue += char;\n }\n else {\n // This is not a real icon, treat it as text\n appendChars(currentIconValue);\n currentIconStart = -1;\n currentIconValue = '';\n }\n }\n // any value outside of icon\n else {\n appendChars(char);\n }\n offset++;\n }\n // if we had a previous potential icon value without\n // the closing ')', it was actually not an icon and\n // so we have to add it to the actual value\n appendChars(currentIconValue);\n return { text: textWithoutIcons, iconOffsets };\n}\nexport function matchesFuzzyIconAware(query, target, enableSeparateSubstringMatching = false) {\n const { text, iconOffsets } = target;\n // Return early if there are no icon markers in the word to match against\n if (!iconOffsets || iconOffsets.length === 0) {\n return matchesFuzzy(query, text, enableSeparateSubstringMatching);\n }\n // Trim the word to match against because it could have leading\n // whitespace now if the word started with an icon\n const wordToMatchAgainstWithoutIconsTrimmed = ltrim(text, ' ');\n const leadingWhitespaceOffset = text.length - wordToMatchAgainstWithoutIconsTrimmed.length;\n // match on value without icon\n const matches = matchesFuzzy(query, wordToMatchAgainstWithoutIconsTrimmed, enableSeparateSubstringMatching);\n // Map matches back to offsets with icon and trimming\n if (matches) {\n for (const match of matches) {\n const iconOffset = iconOffsets[match.start + leadingWhitespaceOffset] /* icon offsets at index */ + leadingWhitespaceOffset /* overall leading whitespace offset */;\n match.start += iconOffset;\n match.end += iconOffset;\n }\n }\n return matches;\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 *--------------------------------------------------------------------------------------------*/\nexport class IdGenerator {\n constructor(prefix) {\n this._prefix = prefix;\n this._lastId = 0;\n }\n nextId() {\n return this._prefix + (++this._lastId);\n }\n}\nexport const defaultGenerator = new IdGenerator('id#');\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 *--------------------------------------------------------------------------------------------*/\nexport var Iterable;\n(function (Iterable) {\n function is(thing) {\n return thing && typeof thing === 'object' && typeof thing[Symbol.iterator] === 'function';\n }\n Iterable.is = is;\n const _empty = Object.freeze([]);\n function empty() {\n return _empty;\n }\n Iterable.empty = empty;\n function* single(element) {\n yield element;\n }\n Iterable.single = single;\n function from(iterable) {\n return iterable || _empty;\n }\n Iterable.from = from;\n function isEmpty(iterable) {\n return !iterable || iterable[Symbol.iterator]().next().done === true;\n }\n Iterable.isEmpty = isEmpty;\n function first(iterable) {\n return iterable[Symbol.iterator]().next().value;\n }\n Iterable.first = first;\n function some(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n return true;\n }\n }\n return false;\n }\n Iterable.some = some;\n function find(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n return element;\n }\n }\n return undefined;\n }\n Iterable.find = find;\n function* filter(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n yield element;\n }\n }\n }\n Iterable.filter = filter;\n function* map(iterable, fn) {\n for (const element of iterable) {\n yield fn(element);\n }\n }\n Iterable.map = map;\n function* concat(...iterables) {\n for (const iterable of iterables) {\n for (const element of iterable) {\n yield element;\n }\n }\n }\n Iterable.concat = concat;\n function* concatNested(iterables) {\n for (const iterable of iterables) {\n for (const element of iterable) {\n yield element;\n }\n }\n }\n Iterable.concatNested = concatNested;\n function reduce(iterable, reducer, initialValue) {\n let value = initialValue;\n for (const element of iterable) {\n value = reducer(value, element);\n }\n return value;\n }\n Iterable.reduce = reduce;\n /**\n * Returns an iterable slice of the array, with the same semantics as `array.slice()`.\n */\n function* slice(arr, from, to = arr.length) {\n if (from < 0) {\n from += arr.length;\n }\n if (to < 0) {\n to += arr.length;\n }\n else if (to > arr.length) {\n to = arr.length;\n }\n for (; from < to; from++) {\n yield arr[from];\n }\n }\n Iterable.slice = slice;\n /**\n * Consumes `atMost` elements from iterable and returns the consumed elements,\n * and an iterable for the rest of the elements.\n */\n function consume(iterable, atMost = Number.POSITIVE_INFINITY) {\n const consumed = [];\n if (atMost === 0) {\n return [consumed, iterable];\n }\n const iterator = iterable[Symbol.iterator]();\n for (let i = 0; i < atMost; i++) {\n const next = iterator.next();\n if (next.done) {\n return [consumed, Iterable.empty()];\n }\n consumed.push(next.value);\n }\n return [consumed, { [Symbol.iterator]() { return iterator; } }];\n }\n Iterable.consume = consume;\n /**\n * Returns whether the iterables are the same length and all items are\n * equal using the comparator function.\n */\n function equals(a, b, comparator = (at, bt) => at === bt) {\n const ai = a[Symbol.iterator]();\n const bi = b[Symbol.iterator]();\n while (true) {\n const an = ai.next();\n const bn = bi.next();\n if (an.done !== bn.done) {\n return false;\n }\n else if (an.done) {\n return true;\n }\n else if (!comparator(an.value, bn.value)) {\n return false;\n }\n }\n }\n Iterable.equals = equals;\n})(Iterable || (Iterable = {}));\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 *--------------------------------------------------------------------------------------------*/\nimport { illegalArgument } from './errors.js';\nclass KeyCodeStrMap {\n constructor() {\n this._keyCodeToStr = [];\n this._strToKeyCode = Object.create(null);\n }\n define(keyCode, str) {\n this._keyCodeToStr[keyCode] = str;\n this._strToKeyCode[str.toLowerCase()] = keyCode;\n }\n keyCodeToStr(keyCode) {\n return this._keyCodeToStr[keyCode];\n }\n strToKeyCode(str) {\n return this._strToKeyCode[str.toLowerCase()] || 0 /* Unknown */;\n }\n}\nconst uiMap = new KeyCodeStrMap();\nconst userSettingsUSMap = new KeyCodeStrMap();\nconst userSettingsGeneralMap = new KeyCodeStrMap();\n(function () {\n function define(keyCode, uiLabel, usUserSettingsLabel = uiLabel, generalUserSettingsLabel = usUserSettingsLabel) {\n uiMap.define(keyCode, uiLabel);\n userSettingsUSMap.define(keyCode, usUserSettingsLabel);\n userSettingsGeneralMap.define(keyCode, generalUserSettingsLabel);\n }\n define(0 /* Unknown */, 'unknown');\n define(1 /* Backspace */, 'Backspace');\n define(2 /* Tab */, 'Tab');\n define(3 /* Enter */, 'Enter');\n define(4 /* Shift */, 'Shift');\n define(5 /* Ctrl */, 'Ctrl');\n define(6 /* Alt */, 'Alt');\n define(7 /* PauseBreak */, 'PauseBreak');\n define(8 /* CapsLock */, 'CapsLock');\n define(9 /* Escape */, 'Escape');\n define(10 /* Space */, 'Space');\n define(11 /* PageUp */, 'PageUp');\n define(12 /* PageDown */, 'PageDown');\n define(13 /* End */, 'End');\n define(14 /* Home */, 'Home');\n define(15 /* LeftArrow */, 'LeftArrow', 'Left');\n define(16 /* UpArrow */, 'UpArrow', 'Up');\n define(17 /* RightArrow */, 'RightArrow', 'Right');\n define(18 /* DownArrow */, 'DownArrow', 'Down');\n define(19 /* Insert */, 'Insert');\n define(20 /* Delete */, 'Delete');\n define(21 /* KEY_0 */, '0');\n define(22 /* KEY_1 */, '1');\n define(23 /* KEY_2 */, '2');\n define(24 /* KEY_3 */, '3');\n define(25 /* KEY_4 */, '4');\n define(26 /* KEY_5 */, '5');\n define(27 /* KEY_6 */, '6');\n define(28 /* KEY_7 */, '7');\n define(29 /* KEY_8 */, '8');\n define(30 /* KEY_9 */, '9');\n define(31 /* KEY_A */, 'A');\n define(32 /* KEY_B */, 'B');\n define(33 /* KEY_C */, 'C');\n define(34 /* KEY_D */, 'D');\n define(35 /* KEY_E */, 'E');\n define(36 /* KEY_F */, 'F');\n define(37 /* KEY_G */, 'G');\n define(38 /* KEY_H */, 'H');\n define(39 /* KEY_I */, 'I');\n define(40 /* KEY_J */, 'J');\n define(41 /* KEY_K */, 'K');\n define(42 /* KEY_L */, 'L');\n define(43 /* KEY_M */, 'M');\n define(44 /* KEY_N */, 'N');\n define(45 /* KEY_O */, 'O');\n define(46 /* KEY_P */, 'P');\n define(47 /* KEY_Q */, 'Q');\n define(48 /* KEY_R */, 'R');\n define(49 /* KEY_S */, 'S');\n define(50 /* KEY_T */, 'T');\n define(51 /* KEY_U */, 'U');\n define(52 /* KEY_V */, 'V');\n define(53 /* KEY_W */, 'W');\n define(54 /* KEY_X */, 'X');\n define(55 /* KEY_Y */, 'Y');\n define(56 /* KEY_Z */, 'Z');\n define(57 /* Meta */, 'Meta');\n define(58 /* ContextMenu */, 'ContextMenu');\n define(59 /* F1 */, 'F1');\n define(60 /* F2 */, 'F2');\n define(61 /* F3 */, 'F3');\n define(62 /* F4 */, 'F4');\n define(63 /* F5 */, 'F5');\n define(64 /* F6 */, 'F6');\n define(65 /* F7 */, 'F7');\n define(66 /* F8 */, 'F8');\n define(67 /* F9 */, 'F9');\n define(68 /* F10 */, 'F10');\n define(69 /* F11 */, 'F11');\n define(70 /* F12 */, 'F12');\n define(71 /* F13 */, 'F13');\n define(72 /* F14 */, 'F14');\n define(73 /* F15 */, 'F15');\n define(74 /* F16 */, 'F16');\n define(75 /* F17 */, 'F17');\n define(76 /* F18 */, 'F18');\n define(77 /* F19 */, 'F19');\n define(78 /* NumLock */, 'NumLock');\n define(79 /* ScrollLock */, 'ScrollLock');\n define(80 /* US_SEMICOLON */, ';', ';', 'OEM_1');\n define(81 /* US_EQUAL */, '=', '=', 'OEM_PLUS');\n define(82 /* US_COMMA */, ',', ',', 'OEM_COMMA');\n define(83 /* US_MINUS */, '-', '-', 'OEM_MINUS');\n define(84 /* US_DOT */, '.', '.', 'OEM_PERIOD');\n define(85 /* US_SLASH */, '/', '/', 'OEM_2');\n define(86 /* US_BACKTICK */, '`', '`', 'OEM_3');\n define(110 /* ABNT_C1 */, 'ABNT_C1');\n define(111 /* ABNT_C2 */, 'ABNT_C2');\n define(87 /* US_OPEN_SQUARE_BRACKET */, '[', '[', 'OEM_4');\n define(88 /* US_BACKSLASH */, '\\\\', '\\\\', 'OEM_5');\n define(89 /* US_CLOSE_SQUARE_BRACKET */, ']', ']', 'OEM_6');\n define(90 /* US_QUOTE */, '\\'', '\\'', 'OEM_7');\n define(91 /* OEM_8 */, 'OEM_8');\n define(92 /* OEM_102 */, 'OEM_102');\n define(93 /* NUMPAD_0 */, 'NumPad0');\n define(94 /* NUMPAD_1 */, 'NumPad1');\n define(95 /* NUMPAD_2 */, 'NumPad2');\n define(96 /* NUMPAD_3 */, 'NumPad3');\n define(97 /* NUMPAD_4 */, 'NumPad4');\n define(98 /* NUMPAD_5 */, 'NumPad5');\n define(99 /* NUMPAD_6 */, 'NumPad6');\n define(100 /* NUMPAD_7 */, 'NumPad7');\n define(101 /* NUMPAD_8 */, 'NumPad8');\n define(102 /* NUMPAD_9 */, 'NumPad9');\n define(103 /* NUMPAD_MULTIPLY */, 'NumPad_Multiply');\n define(104 /* NUMPAD_ADD */, 'NumPad_Add');\n define(105 /* NUMPAD_SEPARATOR */, 'NumPad_Separator');\n define(106 /* NUMPAD_SUBTRACT */, 'NumPad_Subtract');\n define(107 /* NUMPAD_DECIMAL */, 'NumPad_Decimal');\n define(108 /* NUMPAD_DIVIDE */, 'NumPad_Divide');\n})();\nexport var KeyCodeUtils;\n(function (KeyCodeUtils) {\n function toString(keyCode) {\n return uiMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toString = toString;\n function fromString(key) {\n return uiMap.strToKeyCode(key);\n }\n KeyCodeUtils.fromString = fromString;\n function toUserSettingsUS(keyCode) {\n return userSettingsUSMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toUserSettingsUS = toUserSettingsUS;\n function toUserSettingsGeneral(keyCode) {\n return userSettingsGeneralMap.keyCodeToStr(keyCode);\n }\n KeyCodeUtils.toUserSettingsGeneral = toUserSettingsGeneral;\n function fromUserSettings(key) {\n return userSettingsUSMap.strToKeyCode(key) || userSettingsGeneralMap.strToKeyCode(key);\n }\n KeyCodeUtils.fromUserSettings = fromUserSettings;\n})(KeyCodeUtils || (KeyCodeUtils = {}));\nexport function KeyChord(firstPart, secondPart) {\n const chordPart = ((secondPart & 0x0000FFFF) << 16) >>> 0;\n return (firstPart | chordPart) >>> 0;\n}\nexport function createKeybinding(keybinding, OS) {\n if (keybinding === 0) {\n return null;\n }\n const firstPart = (keybinding & 0x0000FFFF) >>> 0;\n const chordPart = (keybinding & 0xFFFF0000) >>> 16;\n if (chordPart !== 0) {\n return new ChordKeybinding([\n createSimpleKeybinding(firstPart, OS),\n createSimpleKeybinding(chordPart, OS)\n ]);\n }\n return new ChordKeybinding([createSimpleKeybinding(firstPart, OS)]);\n}\nexport function createSimpleKeybinding(keybinding, OS) {\n const ctrlCmd = (keybinding & 2048 /* CtrlCmd */ ? true : false);\n const winCtrl = (keybinding & 256 /* WinCtrl */ ? true : false);\n const ctrlKey = (OS === 2 /* Macintosh */ ? winCtrl : ctrlCmd);\n const shiftKey = (keybinding & 1024 /* Shift */ ? true : false);\n const altKey = (keybinding & 512 /* Alt */ ? true : false);\n const metaKey = (OS === 2 /* Macintosh */ ? ctrlCmd : winCtrl);\n const keyCode = (keybinding & 255 /* KeyCode */);\n return new SimpleKeybinding(ctrlKey, shiftKey, altKey, metaKey, keyCode);\n}\nexport class SimpleKeybinding {\n constructor(ctrlKey, shiftKey, altKey, metaKey, keyCode) {\n this.ctrlKey = ctrlKey;\n this.shiftKey = shiftKey;\n this.altKey = altKey;\n this.metaKey = metaKey;\n this.keyCode = keyCode;\n }\n equals(other) {\n return (this.ctrlKey === other.ctrlKey\n && this.shiftKey === other.shiftKey\n && this.altKey === other.altKey\n && this.metaKey === other.metaKey\n && this.keyCode === other.keyCode);\n }\n isModifierKey() {\n return (this.keyCode === 0 /* Unknown */\n || this.keyCode === 5 /* Ctrl */\n || this.keyCode === 57 /* Meta */\n || this.keyCode === 6 /* Alt */\n || this.keyCode === 4 /* Shift */);\n }\n toChord() {\n return new ChordKeybinding([this]);\n }\n /**\n * Does this keybinding refer to the key code of a modifier and it also has the modifier flag?\n */\n isDuplicateModifierCase() {\n return ((this.ctrlKey && this.keyCode === 5 /* Ctrl */)\n || (this.shiftKey && this.keyCode === 4 /* Shift */)\n || (this.altKey && this.keyCode === 6 /* Alt */)\n || (this.metaKey && this.keyCode === 57 /* Meta */));\n }\n}\nexport class ChordKeybinding {\n constructor(parts) {\n if (parts.length === 0) {\n throw illegalArgument(`parts`);\n }\n this.parts = parts;\n }\n}\nexport class ResolvedKeybindingPart {\n constructor(ctrlKey, shiftKey, altKey, metaKey, kbLabel, kbAriaLabel) {\n this.ctrlKey = ctrlKey;\n this.shiftKey = shiftKey;\n this.altKey = altKey;\n this.metaKey = metaKey;\n this.keyLabel = kbLabel;\n this.keyAriaLabel = kbAriaLabel;\n }\n}\n/**\n * A resolved keybinding. Can be a simple keybinding or a chord keybinding.\n */\nexport class ResolvedKeybinding {\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../nls.js';\nexport class ModifierLabelProvider {\n constructor(mac, windows, linux = windows) {\n this.modifierLabels = [null]; // index 0 will never me accessed.\n this.modifierLabels[2 /* Macintosh */] = mac;\n this.modifierLabels[1 /* Windows */] = windows;\n this.modifierLabels[3 /* Linux */] = linux;\n }\n toLabel(OS, parts, keyLabelProvider) {\n if (parts.length === 0) {\n return null;\n }\n const result = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const part = parts[i];\n const keyLabel = keyLabelProvider(part);\n if (keyLabel === null) {\n // this keybinding cannot be expressed...\n return null;\n }\n result[i] = _simpleAsString(part, keyLabel, this.modifierLabels[OS]);\n }\n return result.join(' ');\n }\n}\n/**\n * A label provider that prints modifiers in a suitable format for displaying in the UI.\n */\nexport const UILabelProvider = new ModifierLabelProvider({\n ctrlKey: '⌃',\n shiftKey: '⇧',\n altKey: '⌥',\n metaKey: '⌘',\n separator: '',\n}, {\n ctrlKey: nls.localize({ key: 'ctrlKey', comment: ['This is the short form for the Control key on the keyboard'] }, \"Ctrl\"),\n shiftKey: nls.localize({ key: 'shiftKey', comment: ['This is the short form for the Shift key on the keyboard'] }, \"Shift\"),\n altKey: nls.localize({ key: 'altKey', comment: ['This is the short form for the Alt key on the keyboard'] }, \"Alt\"),\n metaKey: nls.localize({ key: 'windowsKey', comment: ['This is the short form for the Windows key on the keyboard'] }, \"Windows\"),\n separator: '+',\n}, {\n ctrlKey: nls.localize({ key: 'ctrlKey', comment: ['This is the short form for the Control key on the keyboard'] }, \"Ctrl\"),\n shiftKey: nls.localize({ key: 'shiftKey', comment: ['This is the short form for the Shift key on the keyboard'] }, \"Shift\"),\n altKey: nls.localize({ key: 'altKey', comment: ['This is the short form for the Alt key on the keyboard'] }, \"Alt\"),\n metaKey: nls.localize({ key: 'superKey', comment: ['This is the short form for the Super key on the keyboard'] }, \"Super\"),\n separator: '+',\n});\n/**\n * A label provider that prints modifiers in a suitable format for ARIA.\n */\nexport const AriaLabelProvider = new ModifierLabelProvider({\n ctrlKey: nls.localize({ key: 'ctrlKey.long', comment: ['This is the long form for the Control key on the keyboard'] }, \"Control\"),\n shiftKey: nls.localize({ key: 'shiftKey.long', comment: ['This is the long form for the Shift key on the keyboard'] }, \"Shift\"),\n altKey: nls.localize({ key: 'altKey.long', comment: ['This is the long form for the Alt key on the keyboard'] }, \"Alt\"),\n metaKey: nls.localize({ key: 'cmdKey.long', comment: ['This is the long form for the Command key on the keyboard'] }, \"Command\"),\n separator: '+',\n}, {\n ctrlKey: nls.localize({ key: 'ctrlKey.long', comment: ['This is the long form for the Control key on the keyboard'] }, \"Control\"),\n shiftKey: nls.localize({ key: 'shiftKey.long', comment: ['This is the long form for the Shift key on the keyboard'] }, \"Shift\"),\n altKey: nls.localize({ key: 'altKey.long', comment: ['This is the long form for the Alt key on the keyboard'] }, \"Alt\"),\n metaKey: nls.localize({ key: 'windowsKey.long', comment: ['This is the long form for the Windows key on the keyboard'] }, \"Windows\"),\n separator: '+',\n}, {\n ctrlKey: nls.localize({ key: 'ctrlKey.long', comment: ['This is the long form for the Control key on the keyboard'] }, \"Control\"),\n shiftKey: nls.localize({ key: 'shiftKey.long', comment: ['This is the long form for the Shift key on the keyboard'] }, \"Shift\"),\n altKey: nls.localize({ key: 'altKey.long', comment: ['This is the long form for the Alt key on the keyboard'] }, \"Alt\"),\n metaKey: nls.localize({ key: 'superKey.long', comment: ['This is the long form for the Super key on the keyboard'] }, \"Super\"),\n separator: '+',\n});\nfunction _simpleAsString(modifiers, key, labels) {\n if (key === null) {\n return '';\n }\n const result = [];\n // translate modifier keys: Ctrl-Shift-Alt-Meta\n if (modifiers.ctrlKey) {\n result.push(labels.ctrlKey);\n }\n if (modifiers.shiftKey) {\n result.push(labels.shiftKey);\n }\n if (modifiers.altKey) {\n result.push(labels.altKey);\n }\n if (modifiers.metaKey) {\n result.push(labels.metaKey);\n }\n // the actual key\n if (key !== '') {\n result.push(key);\n }\n return result.join(labels.separator);\n}\n","import { Iterable } from './iterator.js';\n/**\n * Enables logging of potentially leaked disposables.\n *\n * A disposable is considered leaked if it is not disposed or not registered as the child of\n * another disposable. This tracking is very simple an only works for classes that either\n * extend Disposable or use a DisposableStore. This means there are a lot of false positives.\n */\nconst TRACK_DISPOSABLES = false;\nlet disposableTracker = null;\nif (TRACK_DISPOSABLES) {\n const __is_disposable_tracked__ = '__is_disposable_tracked__';\n disposableTracker = new class {\n trackDisposable(x) {\n const stack = new Error('Potentially leaked disposable').stack;\n setTimeout(() => {\n if (!x[__is_disposable_tracked__]) {\n console.log(stack);\n }\n }, 3000);\n }\n markTracked(x) {\n if (x && x !== Disposable.None) {\n try {\n x[__is_disposable_tracked__] = true;\n }\n catch (_a) {\n // noop\n }\n }\n }\n };\n}\nfunction markTracked(x) {\n if (!disposableTracker) {\n return;\n }\n disposableTracker.markTracked(x);\n}\nexport function trackDisposable(x) {\n if (!disposableTracker) {\n return x;\n }\n disposableTracker.trackDisposable(x);\n return x;\n}\nexport class MultiDisposeError extends Error {\n constructor(errors) {\n super(`Encountered errors while disposing of store. Errors: [${errors.join(', ')}]`);\n this.errors = errors;\n }\n}\nexport function isDisposable(thing) {\n return typeof thing.dispose === 'function' && thing.dispose.length === 0;\n}\nexport function dispose(arg) {\n if (Iterable.is(arg)) {\n let errors = [];\n for (const d of arg) {\n if (d) {\n markTracked(d);\n try {\n d.dispose();\n }\n catch (e) {\n errors.push(e);\n }\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n else if (errors.length > 1) {\n throw new MultiDisposeError(errors);\n }\n return Array.isArray(arg) ? [] : arg;\n }\n else if (arg) {\n markTracked(arg);\n arg.dispose();\n return arg;\n }\n}\nexport function combinedDisposable(...disposables) {\n disposables.forEach(markTracked);\n return toDisposable(() => dispose(disposables));\n}\nexport function toDisposable(fn) {\n const self = trackDisposable({\n dispose: () => {\n markTracked(self);\n fn();\n }\n });\n return self;\n}\nexport class DisposableStore {\n constructor() {\n this._toDispose = new Set();\n this._isDisposed = false;\n }\n /**\n * Dispose of all registered disposables and mark this object as disposed.\n *\n * Any future disposables added to this object will be disposed of on `add`.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n markTracked(this);\n this._isDisposed = true;\n this.clear();\n }\n /**\n * Dispose of all registered disposables but do not mark this object as disposed.\n */\n clear() {\n try {\n dispose(this._toDispose.values());\n }\n finally {\n this._toDispose.clear();\n }\n }\n add(t) {\n if (!t) {\n return t;\n }\n if (t === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n markTracked(t);\n if (this._isDisposed) {\n if (!DisposableStore.DISABLE_DISPOSED_WARNING) {\n console.warn(new Error('Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!').stack);\n }\n }\n else {\n this._toDispose.add(t);\n }\n return t;\n }\n}\nDisposableStore.DISABLE_DISPOSED_WARNING = false;\nexport class Disposable {\n constructor() {\n this._store = new DisposableStore();\n trackDisposable(this);\n }\n dispose() {\n markTracked(this);\n this._store.dispose();\n }\n _register(t) {\n if (t === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n return this._store.add(t);\n }\n}\nDisposable.None = Object.freeze({ dispose() { } });\n/**\n * Manages the lifecycle of a disposable value that may be changed.\n *\n * This ensures that when the disposable value is changed, the previously held disposable is disposed of. You can\n * also register a `MutableDisposable` on a `Disposable` to ensure it is automatically cleaned up.\n */\nexport class MutableDisposable {\n constructor() {\n this._isDisposed = false;\n trackDisposable(this);\n }\n get value() {\n return this._isDisposed ? undefined : this._value;\n }\n set value(value) {\n var _a;\n if (this._isDisposed || value === this._value) {\n return;\n }\n (_a = this._value) === null || _a === void 0 ? void 0 : _a.dispose();\n if (value) {\n markTracked(value);\n }\n this._value = value;\n }\n clear() {\n this.value = undefined;\n }\n dispose() {\n var _a;\n this._isDisposed = true;\n markTracked(this);\n (_a = this._value) === null || _a === void 0 ? void 0 : _a.dispose();\n this._value = undefined;\n }\n}\nexport class ImmortalReference {\n constructor(object) {\n this.object = object;\n }\n dispose() { }\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 *--------------------------------------------------------------------------------------------*/\nclass Node {\n constructor(element) {\n this.element = element;\n this.next = Node.Undefined;\n this.prev = Node.Undefined;\n }\n}\nNode.Undefined = new Node(undefined);\nexport class LinkedList {\n constructor() {\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n get size() {\n return this._size;\n }\n isEmpty() {\n return this._first === Node.Undefined;\n }\n clear() {\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n this._size = 0;\n }\n unshift(element) {\n return this._insert(element, false);\n }\n push(element) {\n return this._insert(element, true);\n }\n _insert(element, atTheEnd) {\n const newNode = new Node(element);\n if (this._first === Node.Undefined) {\n this._first = newNode;\n this._last = newNode;\n }\n else if (atTheEnd) {\n // push\n const oldLast = this._last;\n this._last = newNode;\n newNode.prev = oldLast;\n oldLast.next = newNode;\n }\n else {\n // unshift\n const oldFirst = this._first;\n this._first = newNode;\n newNode.next = oldFirst;\n oldFirst.prev = newNode;\n }\n this._size += 1;\n let didRemove = false;\n return () => {\n if (!didRemove) {\n didRemove = true;\n this._remove(newNode);\n }\n };\n }\n shift() {\n if (this._first === Node.Undefined) {\n return undefined;\n }\n else {\n const res = this._first.element;\n this._remove(this._first);\n return res;\n }\n }\n pop() {\n if (this._last === Node.Undefined) {\n return undefined;\n }\n else {\n const res = this._last.element;\n this._remove(this._last);\n return res;\n }\n }\n _remove(node) {\n if (node.prev !== Node.Undefined && node.next !== Node.Undefined) {\n // middle\n const anchor = node.prev;\n anchor.next = node.next;\n node.next.prev = anchor;\n }\n else if (node.prev === Node.Undefined && node.next === Node.Undefined) {\n // only node\n this._first = Node.Undefined;\n this._last = Node.Undefined;\n }\n else if (node.next === Node.Undefined) {\n // last\n this._last = this._last.prev;\n this._last.next = Node.Undefined;\n }\n else if (node.prev === Node.Undefined) {\n // first\n this._first = this._first.next;\n this._first.prev = Node.Undefined;\n }\n // done\n this._size -= 1;\n }\n *[Symbol.iterator]() {\n let node = this._first;\n while (node !== Node.Undefined) {\n yield node.element;\n node = node.next;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nvar _a, _b;\nimport { URI } from './uri.js';\nimport { compareSubstringIgnoreCase, compare, compareSubstring, compareIgnoreCase } from './strings.js';\nexport class StringIterator {\n constructor() {\n this._value = '';\n this._pos = 0;\n }\n reset(key) {\n this._value = key;\n this._pos = 0;\n return this;\n }\n next() {\n this._pos += 1;\n return this;\n }\n hasNext() {\n return this._pos < this._value.length - 1;\n }\n cmp(a) {\n const aCode = a.charCodeAt(0);\n const thisCode = this._value.charCodeAt(this._pos);\n return aCode - thisCode;\n }\n value() {\n return this._value[this._pos];\n }\n}\nexport class ConfigKeysIterator {\n constructor(_caseSensitive = true) {\n this._caseSensitive = _caseSensitive;\n }\n reset(key) {\n this._value = key;\n this._from = 0;\n this._to = 0;\n return this.next();\n }\n hasNext() {\n return this._to < this._value.length;\n }\n next() {\n // this._data = key.split(/[\\\\/]/).filter(s => !!s);\n this._from = this._to;\n let justSeps = true;\n for (; this._to < this._value.length; this._to++) {\n const ch = this._value.charCodeAt(this._to);\n if (ch === 46 /* Period */) {\n if (justSeps) {\n this._from++;\n }\n else {\n break;\n }\n }\n else {\n justSeps = false;\n }\n }\n return this;\n }\n cmp(a) {\n return this._caseSensitive\n ? compareSubstring(a, this._value, 0, a.length, this._from, this._to)\n : compareSubstringIgnoreCase(a, this._value, 0, a.length, this._from, this._to);\n }\n value() {\n return this._value.substring(this._from, this._to);\n }\n}\nexport class PathIterator {\n constructor(_splitOnBackslash = true, _caseSensitive = true) {\n this._splitOnBackslash = _splitOnBackslash;\n this._caseSensitive = _caseSensitive;\n }\n reset(key) {\n this._value = key.replace(/\\\\$|\\/$/, '');\n this._from = 0;\n this._to = 0;\n return this.next();\n }\n hasNext() {\n return this._to < this._value.length;\n }\n next() {\n // this._data = key.split(/[\\\\/]/).filter(s => !!s);\n this._from = this._to;\n let justSeps = true;\n for (; this._to < this._value.length; this._to++) {\n const ch = this._value.charCodeAt(this._to);\n if (ch === 47 /* Slash */ || this._splitOnBackslash && ch === 92 /* Backslash */) {\n if (justSeps) {\n this._from++;\n }\n else {\n break;\n }\n }\n else {\n justSeps = false;\n }\n }\n return this;\n }\n cmp(a) {\n return this._caseSensitive\n ? compareSubstring(a, this._value, 0, a.length, this._from, this._to)\n : compareSubstringIgnoreCase(a, this._value, 0, a.length, this._from, this._to);\n }\n value() {\n return this._value.substring(this._from, this._to);\n }\n}\nexport class UriIterator {\n constructor(_ignorePathCasing) {\n this._ignorePathCasing = _ignorePathCasing;\n this._states = [];\n this._stateIdx = 0;\n }\n reset(key) {\n this._value = key;\n this._states = [];\n if (this._value.scheme) {\n this._states.push(1 /* Scheme */);\n }\n if (this._value.authority) {\n this._states.push(2 /* Authority */);\n }\n if (this._value.path) {\n this._pathIterator = new PathIterator(false, !this._ignorePathCasing(key));\n this._pathIterator.reset(key.path);\n if (this._pathIterator.value()) {\n this._states.push(3 /* Path */);\n }\n }\n if (this._value.query) {\n this._states.push(4 /* Query */);\n }\n if (this._value.fragment) {\n this._states.push(5 /* Fragment */);\n }\n this._stateIdx = 0;\n return this;\n }\n next() {\n if (this._states[this._stateIdx] === 3 /* Path */ && this._pathIterator.hasNext()) {\n this._pathIterator.next();\n }\n else {\n this._stateIdx += 1;\n }\n return this;\n }\n hasNext() {\n return (this._states[this._stateIdx] === 3 /* Path */ && this._pathIterator.hasNext())\n || this._stateIdx < this._states.length - 1;\n }\n cmp(a) {\n if (this._states[this._stateIdx] === 1 /* Scheme */) {\n return compareIgnoreCase(a, this._value.scheme);\n }\n else if (this._states[this._stateIdx] === 2 /* Authority */) {\n return compareIgnoreCase(a, this._value.authority);\n }\n else if (this._states[this._stateIdx] === 3 /* Path */) {\n return this._pathIterator.cmp(a);\n }\n else if (this._states[this._stateIdx] === 4 /* Query */) {\n return compare(a, this._value.query);\n }\n else if (this._states[this._stateIdx] === 5 /* Fragment */) {\n return compare(a, this._value.fragment);\n }\n throw new Error();\n }\n value() {\n if (this._states[this._stateIdx] === 1 /* Scheme */) {\n return this._value.scheme;\n }\n else if (this._states[this._stateIdx] === 2 /* Authority */) {\n return this._value.authority;\n }\n else if (this._states[this._stateIdx] === 3 /* Path */) {\n return this._pathIterator.value();\n }\n else if (this._states[this._stateIdx] === 4 /* Query */) {\n return this._value.query;\n }\n else if (this._states[this._stateIdx] === 5 /* Fragment */) {\n return this._value.fragment;\n }\n throw new Error();\n }\n}\nclass TernarySearchTreeNode {\n isEmpty() {\n return !this.left && !this.mid && !this.right && !this.value;\n }\n}\nexport class TernarySearchTree {\n constructor(segments) {\n this._iter = segments;\n }\n static forUris(ignorePathCasing = () => false) {\n return new TernarySearchTree(new UriIterator(ignorePathCasing));\n }\n static forStrings() {\n return new TernarySearchTree(new StringIterator());\n }\n static forConfigKeys() {\n return new TernarySearchTree(new ConfigKeysIterator());\n }\n clear() {\n this._root = undefined;\n }\n set(key, element) {\n const iter = this._iter.reset(key);\n let node;\n if (!this._root) {\n this._root = new TernarySearchTreeNode();\n this._root.segment = iter.value();\n }\n node = this._root;\n while (true) {\n const val = iter.cmp(node.segment);\n if (val > 0) {\n // left\n if (!node.left) {\n node.left = new TernarySearchTreeNode();\n node.left.segment = iter.value();\n }\n node = node.left;\n }\n else if (val < 0) {\n // right\n if (!node.right) {\n node.right = new TernarySearchTreeNode();\n node.right.segment = iter.value();\n }\n node = node.right;\n }\n else if (iter.hasNext()) {\n // mid\n iter.next();\n if (!node.mid) {\n node.mid = new TernarySearchTreeNode();\n node.mid.segment = iter.value();\n }\n node = node.mid;\n }\n else {\n break;\n }\n }\n const oldElement = node.value;\n node.value = element;\n node.key = key;\n return oldElement;\n }\n get(key) {\n var _c;\n return (_c = this._getNode(key)) === null || _c === void 0 ? void 0 : _c.value;\n }\n _getNode(key) {\n const iter = this._iter.reset(key);\n let node = this._root;\n while (node) {\n const val = iter.cmp(node.segment);\n if (val > 0) {\n // left\n node = node.left;\n }\n else if (val < 0) {\n // right\n node = node.right;\n }\n else if (iter.hasNext()) {\n // mid\n iter.next();\n node = node.mid;\n }\n else {\n break;\n }\n }\n return node;\n }\n has(key) {\n const node = this._getNode(key);\n return !((node === null || node === void 0 ? void 0 : node.value) === undefined && (node === null || node === void 0 ? void 0 : node.mid) === undefined);\n }\n delete(key) {\n return this._delete(key, false);\n }\n deleteSuperstr(key) {\n return this._delete(key, true);\n }\n _delete(key, superStr) {\n const iter = this._iter.reset(key);\n const stack = [];\n let node = this._root;\n // find and unset node\n while (node) {\n const val = iter.cmp(node.segment);\n if (val > 0) {\n // left\n stack.push([1, node]);\n node = node.left;\n }\n else if (val < 0) {\n // right\n stack.push([-1, node]);\n node = node.right;\n }\n else if (iter.hasNext()) {\n // mid\n iter.next();\n stack.push([0, node]);\n node = node.mid;\n }\n else {\n if (superStr) {\n // remove children\n node.left = undefined;\n node.mid = undefined;\n node.right = undefined;\n }\n else {\n // remove element\n node.value = undefined;\n }\n // clean up empty nodes\n while (stack.length > 0 && node.isEmpty()) {\n let [dir, parent] = stack.pop();\n switch (dir) {\n case 1:\n parent.left = undefined;\n break;\n case 0:\n parent.mid = undefined;\n break;\n case -1:\n parent.right = undefined;\n break;\n }\n node = parent;\n }\n break;\n }\n }\n }\n findSubstr(key) {\n const iter = this._iter.reset(key);\n let node = this._root;\n let candidate = undefined;\n while (node) {\n const val = iter.cmp(node.segment);\n if (val > 0) {\n // left\n node = node.left;\n }\n else if (val < 0) {\n // right\n node = node.right;\n }\n else if (iter.hasNext()) {\n // mid\n iter.next();\n candidate = node.value || candidate;\n node = node.mid;\n }\n else {\n break;\n }\n }\n return node && node.value || candidate;\n }\n findSuperstr(key) {\n const iter = this._iter.reset(key);\n let node = this._root;\n while (node) {\n const val = iter.cmp(node.segment);\n if (val > 0) {\n // left\n node = node.left;\n }\n else if (val < 0) {\n // right\n node = node.right;\n }\n else if (iter.hasNext()) {\n // mid\n iter.next();\n node = node.mid;\n }\n else {\n // collect\n if (!node.mid) {\n return undefined;\n }\n else {\n return this._entries(node.mid);\n }\n }\n }\n return undefined;\n }\n forEach(callback) {\n for (const [key, value] of this) {\n callback(value, key);\n }\n }\n *[Symbol.iterator]() {\n yield* this._entries(this._root);\n }\n *_entries(node) {\n if (node) {\n // left\n yield* this._entries(node.left);\n // node\n if (node.value) {\n // callback(node.value, this._iter.join(parts));\n yield [node.key, node.value];\n }\n // mid\n yield* this._entries(node.mid);\n // right\n yield* this._entries(node.right);\n }\n }\n}\nexport class ResourceMap {\n constructor(mapOrKeyFn, toKey) {\n this[_a] = 'ResourceMap';\n if (mapOrKeyFn instanceof ResourceMap) {\n this.map = new Map(mapOrKeyFn.map);\n this.toKey = toKey !== null && toKey !== void 0 ? toKey : ResourceMap.defaultToKey;\n }\n else {\n this.map = new Map();\n this.toKey = mapOrKeyFn !== null && mapOrKeyFn !== void 0 ? mapOrKeyFn : ResourceMap.defaultToKey;\n }\n }\n set(resource, value) {\n this.map.set(this.toKey(resource), value);\n return this;\n }\n get(resource) {\n return this.map.get(this.toKey(resource));\n }\n has(resource) {\n return this.map.has(this.toKey(resource));\n }\n get size() {\n return this.map.size;\n }\n clear() {\n this.map.clear();\n }\n delete(resource) {\n return this.map.delete(this.toKey(resource));\n }\n forEach(clb, thisArg) {\n if (typeof thisArg !== 'undefined') {\n clb = clb.bind(thisArg);\n }\n for (let [index, value] of this.map) {\n clb(value, URI.parse(index), this);\n }\n }\n values() {\n return this.map.values();\n }\n *keys() {\n for (let key of this.map.keys()) {\n yield URI.parse(key);\n }\n }\n *entries() {\n for (let tuple of this.map.entries()) {\n yield [URI.parse(tuple[0]), tuple[1]];\n }\n }\n *[(_a = Symbol.toStringTag, Symbol.iterator)]() {\n for (let item of this.map) {\n yield [URI.parse(item[0]), item[1]];\n }\n }\n}\nResourceMap.defaultToKey = (resource) => resource.toString();\nexport class LinkedMap {\n constructor() {\n this[_b] = 'LinkedMap';\n this._map = new Map();\n this._head = undefined;\n this._tail = undefined;\n this._size = 0;\n this._state = 0;\n }\n clear() {\n this._map.clear();\n this._head = undefined;\n this._tail = undefined;\n this._size = 0;\n this._state++;\n }\n isEmpty() {\n return !this._head && !this._tail;\n }\n get size() {\n return this._size;\n }\n get first() {\n var _c;\n return (_c = this._head) === null || _c === void 0 ? void 0 : _c.value;\n }\n get last() {\n var _c;\n return (_c = this._tail) === null || _c === void 0 ? void 0 : _c.value;\n }\n has(key) {\n return this._map.has(key);\n }\n get(key, touch = 0 /* None */) {\n const item = this._map.get(key);\n if (!item) {\n return undefined;\n }\n if (touch !== 0 /* None */) {\n this.touch(item, touch);\n }\n return item.value;\n }\n set(key, value, touch = 0 /* None */) {\n let item = this._map.get(key);\n if (item) {\n item.value = value;\n if (touch !== 0 /* None */) {\n this.touch(item, touch);\n }\n }\n else {\n item = { key, value, next: undefined, previous: undefined };\n switch (touch) {\n case 0 /* None */:\n this.addItemLast(item);\n break;\n case 1 /* AsOld */:\n this.addItemFirst(item);\n break;\n case 2 /* AsNew */:\n this.addItemLast(item);\n break;\n default:\n this.addItemLast(item);\n break;\n }\n this._map.set(key, item);\n this._size++;\n }\n return this;\n }\n delete(key) {\n return !!this.remove(key);\n }\n remove(key) {\n const item = this._map.get(key);\n if (!item) {\n return undefined;\n }\n this._map.delete(key);\n this.removeItem(item);\n this._size--;\n return item.value;\n }\n shift() {\n if (!this._head && !this._tail) {\n return undefined;\n }\n if (!this._head || !this._tail) {\n throw new Error('Invalid list');\n }\n const item = this._head;\n this._map.delete(item.key);\n this.removeItem(item);\n this._size--;\n return item.value;\n }\n forEach(callbackfn, thisArg) {\n const state = this._state;\n let current = this._head;\n while (current) {\n if (thisArg) {\n callbackfn.bind(thisArg)(current.value, current.key, this);\n }\n else {\n callbackfn(current.value, current.key, this);\n }\n if (this._state !== state) {\n throw new Error(`LinkedMap got modified during iteration.`);\n }\n current = current.next;\n }\n }\n keys() {\n const map = this;\n const state = this._state;\n let current = this._head;\n const iterator = {\n [Symbol.iterator]() {\n return iterator;\n },\n next() {\n if (map._state !== state) {\n throw new Error(`LinkedMap got modified during iteration.`);\n }\n if (current) {\n const result = { value: current.key, done: false };\n current = current.next;\n return result;\n }\n else {\n return { value: undefined, done: true };\n }\n }\n };\n return iterator;\n }\n values() {\n const map = this;\n const state = this._state;\n let current = this._head;\n const iterator = {\n [Symbol.iterator]() {\n return iterator;\n },\n next() {\n if (map._state !== state) {\n throw new Error(`LinkedMap got modified during iteration.`);\n }\n if (current) {\n const result = { value: current.value, done: false };\n current = current.next;\n return result;\n }\n else {\n return { value: undefined, done: true };\n }\n }\n };\n return iterator;\n }\n entries() {\n const map = this;\n const state = this._state;\n let current = this._head;\n const iterator = {\n [Symbol.iterator]() {\n return iterator;\n },\n next() {\n if (map._state !== state) {\n throw new Error(`LinkedMap got modified during iteration.`);\n }\n if (current) {\n const result = { value: [current.key, current.value], done: false };\n current = current.next;\n return result;\n }\n else {\n return { value: undefined, done: true };\n }\n }\n };\n return iterator;\n }\n [(_b = Symbol.toStringTag, Symbol.iterator)]() {\n return this.entries();\n }\n trimOld(newSize) {\n if (newSize >= this.size) {\n return;\n }\n if (newSize === 0) {\n this.clear();\n return;\n }\n let current = this._head;\n let currentSize = this.size;\n while (current && currentSize > newSize) {\n this._map.delete(current.key);\n current = current.next;\n currentSize--;\n }\n this._head = current;\n this._size = currentSize;\n if (current) {\n current.previous = undefined;\n }\n this._state++;\n }\n addItemFirst(item) {\n // First time Insert\n if (!this._head && !this._tail) {\n this._tail = item;\n }\n else if (!this._head) {\n throw new Error('Invalid list');\n }\n else {\n item.next = this._head;\n this._head.previous = item;\n }\n this._head = item;\n this._state++;\n }\n addItemLast(item) {\n // First time Insert\n if (!this._head && !this._tail) {\n this._head = item;\n }\n else if (!this._tail) {\n throw new Error('Invalid list');\n }\n else {\n item.previous = this._tail;\n this._tail.next = item;\n }\n this._tail = item;\n this._state++;\n }\n removeItem(item) {\n if (item === this._head && item === this._tail) {\n this._head = undefined;\n this._tail = undefined;\n }\n else if (item === this._head) {\n // This can only happen if size === 1 which is handled\n // by the case above.\n if (!item.next) {\n throw new Error('Invalid list');\n }\n item.next.previous = undefined;\n this._head = item.next;\n }\n else if (item === this._tail) {\n // This can only happen if size === 1 which is handled\n // by the case above.\n if (!item.previous) {\n throw new Error('Invalid list');\n }\n item.previous.next = undefined;\n this._tail = item.previous;\n }\n else {\n const next = item.next;\n const previous = item.previous;\n if (!next || !previous) {\n throw new Error('Invalid list');\n }\n next.previous = previous;\n previous.next = next;\n }\n item.next = undefined;\n item.previous = undefined;\n this._state++;\n }\n touch(item, touch) {\n if (!this._head || !this._tail) {\n throw new Error('Invalid list');\n }\n if ((touch !== 1 /* AsOld */ && touch !== 2 /* AsNew */)) {\n return;\n }\n if (touch === 1 /* AsOld */) {\n if (item === this._head) {\n return;\n }\n const next = item.next;\n const previous = item.previous;\n // Unlink the item\n if (item === this._tail) {\n // previous must be defined since item was not head but is tail\n // So there are more than on item in the map\n previous.next = undefined;\n this._tail = previous;\n }\n else {\n // Both next and previous are not undefined since item was neither head nor tail.\n next.previous = previous;\n previous.next = next;\n }\n // Insert the node at head\n item.previous = undefined;\n item.next = this._head;\n this._head.previous = item;\n this._head = item;\n this._state++;\n }\n else if (touch === 2 /* AsNew */) {\n if (item === this._tail) {\n return;\n }\n const next = item.next;\n const previous = item.previous;\n // Unlink the item.\n if (item === this._head) {\n // next must be defined since item was not tail but is head\n // So there are more than on item in the map\n next.previous = undefined;\n this._head = next;\n }\n else {\n // Both next and previous are not undefined since item was neither head nor tail.\n next.previous = previous;\n previous.next = next;\n }\n item.next = undefined;\n item.previous = this._tail;\n this._tail.next = item;\n this._tail = item;\n this._state++;\n }\n }\n toJSON() {\n const data = [];\n this.forEach((value, key) => {\n data.push([key, value]);\n });\n return data;\n }\n fromJSON(data) {\n this.clear();\n for (const [key, value] of data) {\n this.set(key, value);\n }\n }\n}\nexport class LRUCache extends LinkedMap {\n constructor(limit, ratio = 1) {\n super();\n this._limit = limit;\n this._ratio = Math.min(Math.max(0, ratio), 1);\n }\n get limit() {\n return this._limit;\n }\n set limit(limit) {\n this._limit = limit;\n this.checkTrim();\n }\n get(key, touch = 2 /* AsNew */) {\n return super.get(key, touch);\n }\n peek(key) {\n return super.get(key, 0 /* None */);\n }\n set(key, value) {\n super.set(key, value, 2 /* AsNew */);\n this.checkTrim();\n return this;\n }\n checkTrim() {\n if (this.size > this._limit) {\n this.trimOld(Math.round(this._limit * this._ratio));\n }\n }\n}\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2021, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.marked = factory());\n}(this, (function () { 'use strict';\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _createForOfIteratorHelperLoose(o, allowArrayLike) {\n var it;\n\n if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) {\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n it = o[Symbol.iterator]();\n return it.next.bind(it);\n }\n\n function createCommonjsModule(fn) {\n var module = { exports: {} };\n \treturn fn(module, module.exports), module.exports;\n }\n\n var defaults = createCommonjsModule(function (module) {\n function getDefaults() {\n return {\n baseUrl: null,\n breaks: false,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n }\n\n function changeDefaults(newDefaults) {\n module.exports.defaults = newDefaults;\n }\n\n module.exports = {\n defaults: getDefaults(),\n getDefaults: getDefaults,\n changeDefaults: changeDefaults\n };\n });\n\n /**\n * Helpers\n */\n var escapeTest = /[&<>\"']/;\n var escapeReplace = /[&<>\"']/g;\n var escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\n var escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\n var escapeReplacements = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n var getEscapeReplacement = function getEscapeReplacement(ch) {\n return escapeReplacements[ch];\n };\n\n function escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n }\n\n var unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\n function unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, function (_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));\n }\n\n return '';\n });\n }\n\n var caret = /(^|[^\\[])\\^/g;\n\n function edit(regex, opt) {\n regex = regex.source || regex;\n opt = opt || '';\n var obj = {\n replace: function replace(name, val) {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: function getRegex() {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n }\n\n var nonWordAndColonTest = /[^\\w:]/g;\n var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\n function cleanUrl(sanitize, base, href) {\n if (sanitize) {\n var prot;\n\n try {\n prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();\n } catch (e) {\n return null;\n }\n\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n\n return href;\n }\n\n var baseUrls = {};\n var justDomain = /^[^:]+:\\/*[^/]*$/;\n var protocol = /^([^:]+:)[\\s\\S]*$/;\n var domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\n function resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n\n base = baseUrls[' ' + base];\n var relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n }\n\n var noopTest = {\n exec: function noopTest() {}\n };\n\n function merge(obj) {\n var i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n }\n\n function splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n var row = tableRow.replace(/\\|/g, function (match, offset, str) {\n var escaped = false,\n curr = offset;\n\n while (--curr >= 0 && str[curr] === '\\\\') {\n escaped = !escaped;\n }\n\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n var i = 0;\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) {\n cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n\n return cells;\n } // Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n // /c*$/ is vulnerable to REDOS.\n // invert: Remove suffix of non-c chars instead. Default falsey.\n\n\n function rtrim(str, c, invert) {\n var l = str.length;\n\n if (l === 0) {\n return '';\n } // Length of suffix matching the invert condition.\n\n\n var suffLen = 0; // Step left until we fail to match the invert condition.\n\n while (suffLen < l) {\n var currChar = str.charAt(l - suffLen - 1);\n\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.substr(0, l - suffLen);\n }\n\n function findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n var l = str.length;\n var level = 0,\n i = 0;\n\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n\n if (level < 0) {\n return i;\n }\n }\n }\n\n return -1;\n }\n\n function checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n } // copied from https://stackoverflow.com/a/5450113/806777\n\n\n function repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n\n var result = '';\n\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n\n count >>= 1;\n pattern += pattern;\n }\n\n return result + pattern;\n }\n\n var helpers = {\n escape: escape,\n unescape: unescape,\n edit: edit,\n cleanUrl: cleanUrl,\n resolveUrl: resolveUrl,\n noopTest: noopTest,\n merge: merge,\n splitCells: splitCells,\n rtrim: rtrim,\n findClosingBracket: findClosingBracket,\n checkSanitizeDeprecation: checkSanitizeDeprecation,\n repeatString: repeatString\n };\n\n var defaults$1 = defaults.defaults;\n var rtrim$1 = helpers.rtrim,\n splitCells$1 = helpers.splitCells,\n _escape = helpers.escape,\n findClosingBracket$1 = helpers.findClosingBracket;\n\n function outputLink(cap, link, raw) {\n var href = link.href;\n var title = link.title ? _escape(link.title) : null;\n var text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n return {\n type: 'link',\n raw: raw,\n href: href,\n title: title,\n text: text\n };\n } else {\n return {\n type: 'image',\n raw: raw,\n href: href,\n title: title,\n text: _escape(text)\n };\n }\n }\n\n function indentCodeCompensation(raw, text) {\n var matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n var indentToCode = matchIndentToCode[1];\n return text.split('\\n').map(function (node) {\n var matchIndentInNode = node.match(/^\\s+/);\n\n if (matchIndentInNode === null) {\n return node;\n }\n\n var indentInNode = matchIndentInNode[0];\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n }).join('\\n');\n }\n /**\n * Tokenizer\n */\n\n\n var Tokenizer_1 = /*#__PURE__*/function () {\n function Tokenizer(options) {\n this.options = options || defaults$1;\n }\n\n var _proto = Tokenizer.prototype;\n\n _proto.space = function space(src) {\n var cap = this.rules.block.newline.exec(src);\n\n if (cap) {\n if (cap[0].length > 1) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n\n return {\n raw: '\\n'\n };\n }\n };\n\n _proto.code = function code(src) {\n var cap = this.rules.block.code.exec(src);\n\n if (cap) {\n var text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic ? rtrim$1(text, '\\n') : text\n };\n }\n };\n\n _proto.fences = function fences(src) {\n var cap = this.rules.block.fences.exec(src);\n\n if (cap) {\n var raw = cap[0];\n var text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw: raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text: text\n };\n }\n };\n\n _proto.heading = function heading(src) {\n var cap = this.rules.block.heading.exec(src);\n\n if (cap) {\n var text = cap[2].trim(); // remove trailing #s\n\n if (/#$/.test(text)) {\n var trimmed = rtrim$1(text, '#');\n\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text\n };\n }\n };\n\n _proto.nptable = function nptable(src) {\n var cap = this.rules.block.nptable.exec(src);\n\n if (cap) {\n var item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : [],\n raw: cap[0]\n };\n\n if (item.header.length === item.align.length) {\n var l = item.align.length;\n var i;\n\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i], item.header.length);\n }\n\n return item;\n }\n }\n };\n\n _proto.hr = function hr(src) {\n var cap = this.rules.block.hr.exec(src);\n\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n };\n\n _proto.blockquote = function blockquote(src) {\n var cap = this.rules.block.blockquote.exec(src);\n\n if (cap) {\n var text = cap[0].replace(/^ *> ?/gm, '');\n return {\n type: 'blockquote',\n raw: cap[0],\n text: text\n };\n }\n };\n\n _proto.list = function list(src) {\n var cap = this.rules.block.list.exec(src);\n\n if (cap) {\n var raw = cap[0];\n var bull = cap[2];\n var isordered = bull.length > 1;\n var list = {\n type: 'list',\n raw: raw,\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n }; // Get each top-level item.\n\n var itemMatch = cap[0].match(this.rules.block.item);\n var next = false,\n item,\n space,\n bcurr,\n bnext,\n addBack,\n loose,\n istask,\n ischecked;\n var l = itemMatch.length;\n bcurr = this.rules.block.listItemStart.exec(itemMatch[0]);\n\n for (var i = 0; i < l; i++) {\n item = itemMatch[i];\n raw = item; // Determine whether the next list item belongs here.\n // Backpedal if it does not belong in this list.\n\n if (i !== l - 1) {\n bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);\n\n if (!this.options.pedantic ? bnext[1].length > bcurr[0].length || bnext[1].length > 3 : bnext[1].length > bcurr[1].length) {\n // nested list\n itemMatch.splice(i, 2, itemMatch[i] + '\\n' + itemMatch[i + 1]);\n i--;\n l--;\n continue;\n } else {\n if ( // different bullet style\n !this.options.pedantic || this.options.smartLists ? bnext[2][bnext[2].length - 1] !== bull[bull.length - 1] : isordered === (bnext[2].length === 1)) {\n addBack = itemMatch.slice(i + 1).join('\\n');\n list.raw = list.raw.substring(0, list.raw.length - addBack.length);\n i = l - 1;\n }\n }\n\n bcurr = bnext;\n } // Remove the list item's bullet\n // so it is seen as the next token.\n\n\n space = item.length;\n item = item.replace(/^ *([*+-]|\\d+[.)]) ?/, ''); // Outdent whatever the\n // list item contains. Hacky.\n\n if (~item.indexOf('\\n ')) {\n space -= item.length;\n item = !this.options.pedantic ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') : item.replace(/^ {1,4}/gm, '');\n } // Determine whether item is loose or not.\n // Use: /(^|\\n)(?! )[^\\n]+\\n\\n(?!\\s*$)/\n // for discount behavior.\n\n\n loose = next || /\\n\\n(?!\\s*$)/.test(item);\n\n if (i !== l - 1) {\n next = item.charAt(item.length - 1) === '\\n';\n if (!loose) loose = next;\n }\n\n if (loose) {\n list.loose = true;\n } // Check for task list items\n\n\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.test(item);\n ischecked = undefined;\n\n if (istask) {\n ischecked = item[1] !== ' ';\n item = item.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw: raw,\n task: istask,\n checked: ischecked,\n loose: loose,\n text: item\n });\n }\n\n return list;\n }\n };\n\n _proto.html = function html(src) {\n var cap = this.rules.block.html.exec(src);\n\n if (cap) {\n return {\n type: this.options.sanitize ? 'paragraph' : 'html',\n raw: cap[0],\n pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : _escape(cap[0]) : cap[0]\n };\n }\n };\n\n _proto.def = function def(src) {\n var cap = this.rules.block.def.exec(src);\n\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n var tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n tag: tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n };\n\n _proto.table = function table(src) {\n var cap = this.rules.block.table.exec(src);\n\n if (cap) {\n var item = {\n type: 'table',\n header: splitCells$1(cap[1].replace(/^ *| *\\| *$/g, '')),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n cells: cap[3] ? cap[3].replace(/\\n$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n var l = item.align.length;\n var i;\n\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.cells.length;\n\n for (i = 0; i < l; i++) {\n item.cells[i] = splitCells$1(item.cells[i].replace(/^ *\\| *| *\\| *$/g, ''), item.header.length);\n }\n\n return item;\n }\n }\n };\n\n _proto.lheading = function lheading(src) {\n var cap = this.rules.block.lheading.exec(src);\n\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1]\n };\n }\n };\n\n _proto.paragraph = function paragraph(src) {\n var cap = this.rules.block.paragraph.exec(src);\n\n if (cap) {\n return {\n type: 'paragraph',\n raw: cap[0],\n text: cap[1].charAt(cap[1].length - 1) === '\\n' ? cap[1].slice(0, -1) : cap[1]\n };\n }\n };\n\n _proto.text = function text(src) {\n var cap = this.rules.block.text.exec(src);\n\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0]\n };\n }\n };\n\n _proto.escape = function escape(src) {\n var cap = this.rules.inline.escape.exec(src);\n\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: _escape(cap[1])\n };\n }\n };\n\n _proto.tag = function tag(src, inLink, inRawBlock) {\n var cap = this.rules.inline.tag.exec(src);\n\n if (cap) {\n if (!inLink && /^<a /i.test(cap[0])) {\n inLink = true;\n } else if (inLink && /^<\\/a>/i.test(cap[0])) {\n inLink = false;\n }\n\n if (!inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = true;\n } else if (inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize ? 'text' : 'html',\n raw: cap[0],\n inLink: inLink,\n inRawBlock: inRawBlock,\n text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : _escape(cap[0]) : cap[0]\n };\n }\n };\n\n _proto.link = function link(src) {\n var cap = this.rules.inline.link.exec(src);\n\n if (cap) {\n var trimmedUrl = cap[2].trim();\n\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!/>$/.test(trimmedUrl)) {\n return;\n } // ending angle bracket cannot be escaped\n\n\n var rtrimSlash = rtrim$1(trimmedUrl.slice(0, -1), '\\\\');\n\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n var lastParenIndex = findClosingBracket$1(cap[2], '()');\n\n if (lastParenIndex > -1) {\n var start = cap[0].indexOf('!') === 0 ? 5 : 4;\n var linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n\n var href = cap[2];\n var title = '';\n\n if (this.options.pedantic) {\n // split pedantic href and title\n var link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n\n if (/^</.test(href)) {\n if (this.options.pedantic && !/>$/.test(trimmedUrl)) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0]);\n }\n };\n\n _proto.reflink = function reflink(src, links) {\n var cap;\n\n if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n var link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n\n if (!link || !link.href) {\n var text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text: text\n };\n }\n\n return outputLink(cap, link, cap[0]);\n }\n };\n\n _proto.emStrong = function emStrong(src, maskedSrc, prevChar) {\n if (prevChar === void 0) {\n prevChar = '';\n }\n\n var match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n if (match[3] && prevChar.match(/(?:[0-9A-Za-z\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u08A0-\\u08B4\\u08B6-\\u08C7\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\u9FFC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7BF\\uA7C2-\\uA7CA\\uA7F5-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEC0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD1E\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDD\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF34\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/)) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n var nextChar = match[1] || match[2] || '';\n\n if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {\n var lLength = match[0].length - 1;\n var rDelim,\n rLength,\n delimTotal = lLength,\n midDelimTotal = 0;\n var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength); // Bump maskedSrc to same section of string as src (move to lexer?)\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim) continue; // matched the first alternative in rules.js (skip the * in __abc*abc__)\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) {\n // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) {\n // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n // If this is the last rDelimiter, remove extra characters. *a*** -> *a*\n\n if (delimTotal + midDelimTotal - rLength <= 0 && !maskedSrc.slice(endReg.lastIndex).match(endReg)) {\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n }\n\n if (Math.min(lLength, rLength) % 2) {\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(1, lLength + match.index + rLength)\n };\n }\n\n if (Math.min(lLength, rLength) % 2 === 0) {\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: src.slice(2, lLength + match.index + rLength - 1)\n };\n }\n }\n }\n };\n\n _proto.codespan = function codespan(src) {\n var cap = this.rules.inline.code.exec(src);\n\n if (cap) {\n var text = cap[2].replace(/\\n/g, ' ');\n var hasNonSpaceChars = /[^ ]/.test(text);\n var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n\n text = _escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text: text\n };\n }\n };\n\n _proto.br = function br(src) {\n var cap = this.rules.inline.br.exec(src);\n\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n };\n\n _proto.del = function del(src) {\n var cap = this.rules.inline.del.exec(src);\n\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2]\n };\n }\n };\n\n _proto.autolink = function autolink(src, mangle) {\n var cap = this.rules.inline.autolink.exec(src);\n\n if (cap) {\n var text, href;\n\n if (cap[2] === '@') {\n text = _escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = _escape(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text: text,\n href: href,\n tokens: [{\n type: 'text',\n raw: text,\n text: text\n }]\n };\n }\n };\n\n _proto.url = function url(src, mangle) {\n var cap;\n\n if (cap = this.rules.inline.url.exec(src)) {\n var text, href;\n\n if (cap[2] === '@') {\n text = _escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n var prevCapZero;\n\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n\n text = _escape(cap[0]);\n\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text: text,\n href: href,\n tokens: [{\n type: 'text',\n raw: text,\n text: text\n }]\n };\n }\n };\n\n _proto.inlineText = function inlineText(src, inRawBlock, smartypants) {\n var cap = this.rules.inline.text.exec(src);\n\n if (cap) {\n var text;\n\n if (inRawBlock) {\n text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : _escape(cap[0]) : cap[0];\n } else {\n text = _escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n\n return {\n type: 'text',\n raw: cap[0],\n text: text\n };\n }\n };\n\n return Tokenizer;\n }();\n\n var noopTest$1 = helpers.noopTest,\n edit$1 = helpers.edit,\n merge$1 = helpers.merge;\n /**\n * Block-Level Grammar\n */\n\n var block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?:\\n+|$)|$)/,\n hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3})(bull) [\\s\\S]+?(?:hr|def|\\n{2,}(?! )(?! {0,3}bull )\\n*|\\s*$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (6)\n + '|<(?!script|pre|style)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) open tag\n + '|</(?!script|pre|style)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:\\\\n{2,}|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *\\n? *<?([^\\s>]+)>?(?:(?: +\\n? *| *\\n *)(title))? *(?:\\n+|$)/,\n nptable: noopTest$1,\n table: noopTest$1,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n };\n block._label = /(?!\\s*\\])(?:\\\\[\\[\\]]|[^\\[\\]])+/;\n block._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\n block.def = edit$1(block.def).replace('label', block._label).replace('title', block._title).getRegex();\n block.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\n block.item = /^( *)(bull) ?[^\\n]*(?:\\n(?! *bull ?)[^\\n]*)*/;\n block.item = edit$1(block.item, 'gm').replace(/bull/g, block.bullet).getRegex();\n block.listItemStart = edit$1(/^( *)(bull)/).replace('bull', block.bullet).getRegex();\n block.list = edit$1(block.list).replace(/bull/g, block.bullet).replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))').replace('def', '\\\\n+(?=' + block.def.source + ')').getRegex();\n block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';\n block._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\n block.html = edit$1(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\n block.paragraph = edit$1(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n block.blockquote = edit$1(block.blockquote).replace('paragraph', block.paragraph).getRegex();\n /**\n * Normal Block Grammar\n */\n\n block.normal = merge$1({}, block);\n /**\n * GFM Block Grammar\n */\n\n block.gfm = merge$1({}, block.normal, {\n nptable: '^ *([^|\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}([-:]+ *\\\\|[-| :]*)' // Align\n + '(?:\\\\n((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)',\n // Cells\n table: '^ *\\\\|(.+)\\\\n' // Header\n + ' {0,3}\\\\|?( *[-:]+[-| :]*)' // Align\n + '(?:\\\\n *((?:(?!\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n\n });\n block.gfm.nptable = edit$1(block.gfm.nptable).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n block.gfm.table = edit$1(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n /**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\n block.pedantic = merge$1({}, block.normal, {\n html: edit$1('^ *(?:comment *(?:\\\\n|\\\\s*$)' + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b').getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest$1,\n // fences not supported\n paragraph: edit$1(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()\n });\n /**\n * Inline-Level Grammar\n */\n\n var inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest$1,\n tag: '^comment' + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>',\n // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(?!\\s*\\])((?:\\\\[\\[\\]]?|[^\\[\\]\\\\])+)\\]/,\n nolink: /^!?\\[(?!\\s*\\])((?:\\[[^\\[\\]]*\\]|\\\\[\\[\\]]|[^\\[\\]])*)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip other delimiter (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /\\_\\_[^_]*?\\*[^_]*?\\_\\_|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /\\*\\*[^*]*?\\_[^*]*?\\*\\*|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest$1,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n }; // list of punctuation marks from CommonMark spec\n // without * and _ to handle the different emphasis markers * and _\n\n inline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\n inline.punctuation = edit$1(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex(); // sequences em should skip over [title](link), `code`, <html>\n\n inline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\n inline.escapedEmSt = /\\\\\\*|\\\\_/g;\n inline._comment = edit$1(block._comment).replace('(?:-->|$)', '-->').getRegex();\n inline.emStrong.lDelim = edit$1(inline.emStrong.lDelim).replace(/punct/g, inline._punctuation).getRegex();\n inline.emStrong.rDelimAst = edit$1(inline.emStrong.rDelimAst, 'g').replace(/punct/g, inline._punctuation).getRegex();\n inline.emStrong.rDelimUnd = edit$1(inline.emStrong.rDelimUnd, 'g').replace(/punct/g, inline._punctuation).getRegex();\n inline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\n inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\n inline.autolink = edit$1(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex();\n inline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n inline.tag = edit$1(inline.tag).replace('comment', inline._comment).replace('attribute', inline._attribute).getRegex();\n inline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\n inline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\n inline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n inline.link = edit$1(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex();\n inline.reflink = edit$1(inline.reflink).replace('label', inline._label).getRegex();\n inline.reflinkSearch = edit$1(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();\n /**\n * Normal Inline Grammar\n */\n\n inline.normal = merge$1({}, inline);\n /**\n * Pedantic Inline Grammar\n */\n\n inline.pedantic = merge$1({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit$1(/^!?\\[(label)\\]\\((.*?)\\)/).replace('label', inline._label).getRegex(),\n reflink: edit$1(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace('label', inline._label).getRegex()\n });\n /**\n * GFM Inline Grammar\n */\n\n inline.gfm = merge$1({}, inline.normal, {\n escape: edit$1(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))/\n });\n inline.gfm.url = edit$1(inline.gfm.url, 'i').replace('email', inline.gfm._extended_email).getRegex();\n /**\n * GFM + Line Breaks Inline Grammar\n */\n\n inline.breaks = merge$1({}, inline.gfm, {\n br: edit$1(inline.br).replace('{2,}', '*').getRegex(),\n text: edit$1(inline.gfm.text).replace('\\\\b_', '\\\\b_| {2,}\\\\n').replace(/\\{2,\\}/g, '*').getRegex()\n });\n var rules = {\n block: block,\n inline: inline\n };\n\n var defaults$2 = defaults.defaults;\n var block$1 = rules.block,\n inline$1 = rules.inline;\n var repeatString$1 = helpers.repeatString;\n /**\n * smartypants text replacement\n */\n\n function smartypants(text) {\n return text // em-dashes\n .replace(/---/g, \"\\u2014\") // en-dashes\n .replace(/--/g, \"\\u2013\") // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, \"$1\\u2018\") // closing singles & apostrophes\n .replace(/'/g, \"\\u2019\") // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, \"$1\\u201C\") // closing doubles\n .replace(/\"/g, \"\\u201D\") // ellipses\n .replace(/\\.{3}/g, \"\\u2026\");\n }\n /**\n * mangle email addresses\n */\n\n\n function mangle(text) {\n var out = '',\n i,\n ch;\n var l = text.length;\n\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n\n out += '&#' + ch + ';';\n }\n\n return out;\n }\n /**\n * Block Lexer\n */\n\n\n var Lexer_1 = /*#__PURE__*/function () {\n function Lexer(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults$2;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer_1();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n var rules = {\n block: block$1.normal,\n inline: inline$1.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block$1.pedantic;\n rules.inline = inline$1.pedantic;\n } else if (this.options.gfm) {\n rules.block = block$1.gfm;\n\n if (this.options.breaks) {\n rules.inline = inline$1.breaks;\n } else {\n rules.inline = inline$1.gfm;\n }\n }\n\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n\n\n /**\n * Static Lex Method\n */\n Lexer.lex = function lex(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n ;\n\n Lexer.lexInline = function lexInline(src, options) {\n var lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n ;\n\n var _proto = Lexer.prototype;\n\n _proto.lex = function lex(src) {\n src = src.replace(/\\r\\n|\\r/g, '\\n').replace(/\\t/g, ' ');\n this.blockTokens(src, this.tokens, true);\n this.inline(this.tokens);\n return this.tokens;\n }\n /**\n * Lexing\n */\n ;\n\n _proto.blockTokens = function blockTokens(src, tokens, top) {\n if (tokens === void 0) {\n tokens = [];\n }\n\n if (top === void 0) {\n top = true;\n }\n\n if (this.options.pedantic) {\n src = src.replace(/^ +$/gm, '');\n }\n\n var token, i, l, lastToken;\n\n while (src) {\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n\n if (token.type) {\n tokens.push(token);\n }\n\n continue;\n } // code\n\n\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph.\n\n if (lastToken && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n\n continue;\n } // fences\n\n\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // heading\n\n\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // table no leading pipe (gfm)\n\n\n if (token = this.tokenizer.nptable(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // hr\n\n\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // blockquote\n\n\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.blockTokens(token.text, [], top);\n tokens.push(token);\n continue;\n } // list\n\n\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n l = token.items.length;\n\n for (i = 0; i < l; i++) {\n token.items[i].tokens = this.blockTokens(token.items[i].text, [], false);\n }\n\n tokens.push(token);\n continue;\n } // html\n\n\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // def\n\n\n if (top && (token = this.tokenizer.def(src))) {\n src = src.substring(token.raw.length);\n\n if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n\n continue;\n } // table (gfm)\n\n\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // lheading\n\n\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // top-level paragraph\n\n\n if (top && (token = this.tokenizer.paragraph(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // text\n\n\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n } else {\n tokens.push(token);\n }\n\n continue;\n }\n\n if (src) {\n var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n };\n\n _proto.inline = function inline(tokens) {\n var i, j, k, l2, row, token;\n var l = tokens.length;\n\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n switch (token.type) {\n case 'paragraph':\n case 'text':\n case 'heading':\n {\n token.tokens = [];\n this.inlineTokens(token.text, token.tokens);\n break;\n }\n\n case 'table':\n {\n token.tokens = {\n header: [],\n cells: []\n }; // header\n\n l2 = token.header.length;\n\n for (j = 0; j < l2; j++) {\n token.tokens.header[j] = [];\n this.inlineTokens(token.header[j], token.tokens.header[j]);\n } // cells\n\n\n l2 = token.cells.length;\n\n for (j = 0; j < l2; j++) {\n row = token.cells[j];\n token.tokens.cells[j] = [];\n\n for (k = 0; k < row.length; k++) {\n token.tokens.cells[j][k] = [];\n this.inlineTokens(row[k], token.tokens.cells[j][k]);\n }\n }\n\n break;\n }\n\n case 'blockquote':\n {\n this.inline(token.tokens);\n break;\n }\n\n case 'list':\n {\n l2 = token.items.length;\n\n for (j = 0; j < l2; j++) {\n this.inline(token.items[j].tokens);\n }\n\n break;\n }\n }\n }\n\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n ;\n\n _proto.inlineTokens = function inlineTokens(src, tokens, inLink, inRawBlock) {\n if (tokens === void 0) {\n tokens = [];\n }\n\n if (inLink === void 0) {\n inLink = false;\n }\n\n if (inRawBlock === void 0) {\n inRawBlock = false;\n }\n\n var token, lastToken; // String with links masked to avoid interference with em and strong\n\n var maskedSrc = src;\n var match;\n var keepPrevChar, prevChar; // Mask out reflinks\n\n if (this.tokens.links) {\n var links = Object.keys(this.tokens.links);\n\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n } // Mask out other blocks\n\n\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString$1('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n } // Mask out escaped em & strong delimiters\n\n\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n\n keepPrevChar = false; // escape\n\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // tag\n\n\n if (token = this.tokenizer.tag(src, inLink, inRawBlock)) {\n src = src.substring(token.raw.length);\n inLink = token.inLink;\n inRawBlock = token.inRawBlock;\n var _lastToken = tokens[tokens.length - 1];\n\n if (_lastToken && token.type === 'text' && _lastToken.type === 'text') {\n _lastToken.raw += token.raw;\n _lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n\n continue;\n } // link\n\n\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n }\n\n tokens.push(token);\n continue;\n } // reflink, nolink\n\n\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n var _lastToken2 = tokens[tokens.length - 1];\n\n if (token.type === 'link') {\n token.tokens = this.inlineTokens(token.text, [], true, inRawBlock);\n tokens.push(token);\n } else if (_lastToken2 && token.type === 'text' && _lastToken2.type === 'text') {\n _lastToken2.raw += token.raw;\n _lastToken2.text += token.text;\n } else {\n tokens.push(token);\n }\n\n continue;\n } // em & strong\n\n\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n } // code\n\n\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // br\n\n\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // del (gfm)\n\n\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n token.tokens = this.inlineTokens(token.text, [], inLink, inRawBlock);\n tokens.push(token);\n continue;\n } // autolink\n\n\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // url (gfm)\n\n\n if (!inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // text\n\n\n if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {\n src = src.substring(token.raw.length);\n\n if (token.raw.slice(-1) !== '_') {\n // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n\n continue;\n }\n\n if (src) {\n var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n };\n\n _createClass(Lexer, null, [{\n key: \"rules\",\n get: function get() {\n return {\n block: block$1,\n inline: inline$1\n };\n }\n }]);\n\n return Lexer;\n }();\n\n var defaults$3 = defaults.defaults;\n var cleanUrl$1 = helpers.cleanUrl,\n escape$1 = helpers.escape;\n /**\n * Renderer\n */\n\n var Renderer_1 = /*#__PURE__*/function () {\n function Renderer(options) {\n this.options = options || defaults$3;\n }\n\n var _proto = Renderer.prototype;\n\n _proto.code = function code(_code, infostring, escaped) {\n var lang = (infostring || '').match(/\\S*/)[0];\n\n if (this.options.highlight) {\n var out = this.options.highlight(_code, lang);\n\n if (out != null && out !== _code) {\n escaped = true;\n _code = out;\n }\n }\n\n _code = _code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>' + (escaped ? _code : escape$1(_code, true)) + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"' + this.options.langPrefix + escape$1(lang, true) + '\">' + (escaped ? _code : escape$1(_code, true)) + '</code></pre>\\n';\n };\n\n _proto.blockquote = function blockquote(quote) {\n return '<blockquote>\\n' + quote + '</blockquote>\\n';\n };\n\n _proto.html = function html(_html) {\n return _html;\n };\n\n _proto.heading = function heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n return '<h' + level + ' id=\"' + this.options.headerPrefix + slugger.slug(raw) + '\">' + text + '</h' + level + '>\\n';\n } // ignore IDs\n\n\n return '<h' + level + '>' + text + '</h' + level + '>\\n';\n };\n\n _proto.hr = function hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n };\n\n _proto.list = function list(body, ordered, start) {\n var type = ordered ? 'ol' : 'ul',\n startatt = ordered && start !== 1 ? ' start=\"' + start + '\"' : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n };\n\n _proto.listitem = function listitem(text) {\n return '<li>' + text + '</li>\\n';\n };\n\n _proto.checkbox = function checkbox(checked) {\n return '<input ' + (checked ? 'checked=\"\" ' : '') + 'disabled=\"\" type=\"checkbox\"' + (this.options.xhtml ? ' /' : '') + '> ';\n };\n\n _proto.paragraph = function paragraph(text) {\n return '<p>' + text + '</p>\\n';\n };\n\n _proto.table = function table(header, body) {\n if (body) body = '<tbody>' + body + '</tbody>';\n return '<table>\\n' + '<thead>\\n' + header + '</thead>\\n' + body + '</table>\\n';\n };\n\n _proto.tablerow = function tablerow(content) {\n return '<tr>\\n' + content + '</tr>\\n';\n };\n\n _proto.tablecell = function tablecell(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align ? '<' + type + ' align=\"' + flags.align + '\">' : '<' + type + '>';\n return tag + content + '</' + type + '>\\n';\n } // span level renderer\n ;\n\n _proto.strong = function strong(text) {\n return '<strong>' + text + '</strong>';\n };\n\n _proto.em = function em(text) {\n return '<em>' + text + '</em>';\n };\n\n _proto.codespan = function codespan(text) {\n return '<code>' + text + '</code>';\n };\n\n _proto.br = function br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n };\n\n _proto.del = function del(text) {\n return '<del>' + text + '</del>';\n };\n\n _proto.link = function link(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n\n if (href === null) {\n return text;\n }\n\n var out = '<a href=\"' + escape$1(href) + '\"';\n\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n\n out += '>' + text + '</a>';\n return out;\n };\n\n _proto.image = function image(href, title, text) {\n href = cleanUrl$1(this.options.sanitize, this.options.baseUrl, href);\n\n if (href === null) {\n return text;\n }\n\n var out = '<img src=\"' + href + '\" alt=\"' + text + '\"';\n\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n\n out += this.options.xhtml ? '/>' : '>';\n return out;\n };\n\n _proto.text = function text(_text) {\n return _text;\n };\n\n return Renderer;\n }();\n\n /**\n * TextRenderer\n * returns only the textual part of the token\n */\n var TextRenderer_1 = /*#__PURE__*/function () {\n function TextRenderer() {}\n\n var _proto = TextRenderer.prototype;\n\n // no need for block level renderers\n _proto.strong = function strong(text) {\n return text;\n };\n\n _proto.em = function em(text) {\n return text;\n };\n\n _proto.codespan = function codespan(text) {\n return text;\n };\n\n _proto.del = function del(text) {\n return text;\n };\n\n _proto.html = function html(text) {\n return text;\n };\n\n _proto.text = function text(_text) {\n return _text;\n };\n\n _proto.link = function link(href, title, text) {\n return '' + text;\n };\n\n _proto.image = function image(href, title, text) {\n return '' + text;\n };\n\n _proto.br = function br() {\n return '';\n };\n\n return TextRenderer;\n }();\n\n /**\n * Slugger generates header id\n */\n var Slugger_1 = /*#__PURE__*/function () {\n function Slugger() {\n this.seen = {};\n }\n\n var _proto = Slugger.prototype;\n\n _proto.serialize = function serialize(value) {\n return value.toLowerCase().trim() // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '') // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '').replace(/\\s/g, '-');\n }\n /**\n * Finds the next safe (unique) slug to use\n */\n ;\n\n _proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {\n var slug = originalSlug;\n var occurenceAccumulator = 0;\n\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n\n return slug;\n }\n /**\n * Convert string to unique id\n * @param {object} options\n * @param {boolean} options.dryrun Generates the next unique slug without updating the internal accumulator.\n */\n ;\n\n _proto.slug = function slug(value, options) {\n if (options === void 0) {\n options = {};\n }\n\n var slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n };\n\n return Slugger;\n }();\n\n var defaults$4 = defaults.defaults;\n var unescape$1 = helpers.unescape;\n /**\n * Parsing & Compiling\n */\n\n var Parser_1 = /*#__PURE__*/function () {\n function Parser(options) {\n this.options = options || defaults$4;\n this.options.renderer = this.options.renderer || new Renderer_1();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer_1();\n this.slugger = new Slugger_1();\n }\n /**\n * Static Parse Method\n */\n\n\n Parser.parse = function parse(tokens, options) {\n var parser = new Parser(options);\n return parser.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n ;\n\n Parser.parseInline = function parseInline(tokens, options) {\n var parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n ;\n\n var _proto = Parser.prototype;\n\n _proto.parse = function parse(tokens, top) {\n if (top === void 0) {\n top = true;\n }\n\n var out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox;\n var l = tokens.length;\n\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n switch (token.type) {\n case 'space':\n {\n continue;\n }\n\n case 'hr':\n {\n out += this.renderer.hr();\n continue;\n }\n\n case 'heading':\n {\n out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape$1(this.parseInline(token.tokens, this.textRenderer)), this.slugger);\n continue;\n }\n\n case 'code':\n {\n out += this.renderer.code(token.text, token.lang, token.escaped);\n continue;\n }\n\n case 'table':\n {\n header = ''; // header\n\n cell = '';\n l2 = token.header.length;\n\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(this.parseInline(token.tokens.header[j]), {\n header: true,\n align: token.align[j]\n });\n }\n\n header += this.renderer.tablerow(cell);\n body = '';\n l2 = token.cells.length;\n\n for (j = 0; j < l2; j++) {\n row = token.tokens.cells[j];\n cell = '';\n l3 = row.length;\n\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(this.parseInline(row[k]), {\n header: false,\n align: token.align[k]\n });\n }\n\n body += this.renderer.tablerow(cell);\n }\n\n out += this.renderer.table(header, body);\n continue;\n }\n\n case 'blockquote':\n {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n\n case 'list':\n {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n body = '';\n\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n itemBody = '';\n\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'text') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n\n case 'html':\n {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n\n case 'paragraph':\n {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n\n case 'text':\n {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n\n default:\n {\n var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n ;\n\n _proto.parseInline = function parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n var out = '',\n i,\n token;\n var l = tokens.length;\n\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n switch (token.type) {\n case 'escape':\n {\n out += renderer.text(token.text);\n break;\n }\n\n case 'html':\n {\n out += renderer.html(token.text);\n break;\n }\n\n case 'link':\n {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'image':\n {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n\n case 'strong':\n {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'em':\n {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'codespan':\n {\n out += renderer.codespan(token.text);\n break;\n }\n\n case 'br':\n {\n out += renderer.br();\n break;\n }\n\n case 'del':\n {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'text':\n {\n out += renderer.text(token.text);\n break;\n }\n\n default:\n {\n var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n };\n\n return Parser;\n }();\n\n var merge$2 = helpers.merge,\n checkSanitizeDeprecation$1 = helpers.checkSanitizeDeprecation,\n escape$2 = helpers.escape;\n var getDefaults = defaults.getDefaults,\n changeDefaults = defaults.changeDefaults,\n defaults$5 = defaults.defaults;\n /**\n * Marked\n */\n\n function marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n if (callback) {\n var highlight = opt.highlight;\n var tokens;\n\n try {\n tokens = Lexer_1.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n var done = function done(err) {\n var out;\n\n if (!err) {\n try {\n out = Parser_1.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n return err ? callback(err) : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n if (!tokens.length) return done();\n var pending = 0;\n marked.walkTokens(tokens, function (token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(function () {\n highlight(token.text, token.lang, function (err, code) {\n if (err) {\n return done(err);\n }\n\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n try {\n var _tokens = Lexer_1.lex(src, opt);\n\n if (opt.walkTokens) {\n marked.walkTokens(_tokens, opt.walkTokens);\n }\n\n return Parser_1.parse(_tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>' + escape$2(e.message + '', true) + '</pre>';\n }\n\n throw e;\n }\n }\n /**\n * Options\n */\n\n\n marked.options = marked.setOptions = function (opt) {\n merge$2(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n };\n\n marked.getDefaults = getDefaults;\n marked.defaults = defaults$5;\n /**\n * Use Extension\n */\n\n marked.use = function (extension) {\n var opts = merge$2({}, extension);\n\n if (extension.renderer) {\n (function () {\n var renderer = marked.defaults.renderer || new Renderer_1();\n\n var _loop = function _loop(prop) {\n var prevRenderer = renderer[prop];\n\n renderer[prop] = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var ret = extension.renderer[prop].apply(renderer, args);\n\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n\n return ret;\n };\n };\n\n for (var prop in extension.renderer) {\n _loop(prop);\n }\n\n opts.renderer = renderer;\n })();\n }\n\n if (extension.tokenizer) {\n (function () {\n var tokenizer = marked.defaults.tokenizer || new Tokenizer_1();\n\n var _loop2 = function _loop2(prop) {\n var prevTokenizer = tokenizer[prop];\n\n tokenizer[prop] = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var ret = extension.tokenizer[prop].apply(tokenizer, args);\n\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n\n return ret;\n };\n };\n\n for (var prop in extension.tokenizer) {\n _loop2(prop);\n }\n\n opts.tokenizer = tokenizer;\n })();\n }\n\n if (extension.walkTokens) {\n var walkTokens = marked.defaults.walkTokens;\n\n opts.walkTokens = function (token) {\n extension.walkTokens(token);\n\n if (walkTokens) {\n walkTokens(token);\n }\n };\n }\n\n marked.setOptions(opts);\n };\n /**\n * Run callback for every token\n */\n\n\n marked.walkTokens = function (tokens, callback) {\n for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {\n var token = _step.value;\n callback(token);\n\n switch (token.type) {\n case 'table':\n {\n for (var _iterator2 = _createForOfIteratorHelperLoose(token.tokens.header), _step2; !(_step2 = _iterator2()).done;) {\n var cell = _step2.value;\n marked.walkTokens(cell, callback);\n }\n\n for (var _iterator3 = _createForOfIteratorHelperLoose(token.tokens.cells), _step3; !(_step3 = _iterator3()).done;) {\n var row = _step3.value;\n\n for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {\n var _cell = _step4.value;\n marked.walkTokens(_cell, callback);\n }\n }\n\n break;\n }\n\n case 'list':\n {\n marked.walkTokens(token.items, callback);\n break;\n }\n\n default:\n {\n if (token.tokens) {\n marked.walkTokens(token.tokens, callback);\n }\n }\n }\n }\n };\n /**\n * Parse Inline\n */\n\n\n marked.parseInline = function (src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge$2({}, marked.defaults, opt || {});\n checkSanitizeDeprecation$1(opt);\n\n try {\n var tokens = Lexer_1.lexInline(src, opt);\n\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n\n return Parser_1.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>' + escape$2(e.message + '', true) + '</pre>';\n }\n\n throw e;\n }\n };\n /**\n * Expose\n */\n\n\n marked.Parser = Parser_1;\n marked.parser = Parser_1.parse;\n marked.Renderer = Renderer_1;\n marked.TextRenderer = TextRenderer_1;\n marked.Lexer = Lexer_1;\n marked.lexer = Lexer_1.lex;\n marked.Tokenizer = Tokenizer_1;\n marked.Slugger = Slugger_1;\n marked.parse = marked;\n var marked_1 = marked;\n\n return marked_1;\n\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 *--------------------------------------------------------------------------------------------*/\nimport { VSBuffer } from './buffer.js';\nimport { URI } from './uri.js';\nexport function parse(text) {\n let data = JSON.parse(text);\n data = revive(data);\n return data;\n}\nexport function revive(obj, depth = 0) {\n if (!obj || depth > 200) {\n return obj;\n }\n if (typeof obj === 'object') {\n switch (obj.$mid) {\n case 1: return URI.revive(obj);\n case 2: return new RegExp(obj.source, obj.flags);\n }\n if (obj instanceof VSBuffer\n || obj instanceof Uint8Array) {\n return obj;\n }\n if (Array.isArray(obj)) {\n for (let i = 0; i < obj.length; ++i) {\n obj[i] = revive(obj[i], depth + 1);\n }\n }\n else {\n // walk object\n for (const key in obj) {\n if (Object.hasOwnProperty.call(obj, key)) {\n obj[key] = revive(obj[key], depth + 1);\n }\n }\n }\n }\n return obj;\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 *--------------------------------------------------------------------------------------------*/\nimport { URI } from './uri.js';\nimport * as platform from './platform.js';\nexport var Schemas;\n(function (Schemas) {\n /**\n * A schema that is used for models that exist in memory\n * only and that have no correspondence on a server or such.\n */\n Schemas.inMemory = 'inmemory';\n /**\n * A schema that is used for setting files\n */\n Schemas.vscode = 'vscode';\n /**\n * A schema that is used for internal private files\n */\n Schemas.internal = 'private';\n /**\n * A walk-through document.\n */\n Schemas.walkThrough = 'walkThrough';\n /**\n * An embedded code snippet.\n */\n Schemas.walkThroughSnippet = 'walkThroughSnippet';\n Schemas.http = 'http';\n Schemas.https = 'https';\n Schemas.file = 'file';\n Schemas.mailto = 'mailto';\n Schemas.untitled = 'untitled';\n Schemas.data = 'data';\n Schemas.command = 'command';\n Schemas.vscodeRemote = 'vscode-remote';\n Schemas.vscodeRemoteResource = 'vscode-remote-resource';\n Schemas.userData = 'vscode-userdata';\n Schemas.vscodeCustomEditor = 'vscode-custom-editor';\n Schemas.vscodeNotebook = 'vscode-notebook';\n Schemas.vscodeNotebookCell = 'vscode-notebook-cell';\n Schemas.vscodeNotebookCellMetadata = 'vscode-notebook-cell-metadata';\n Schemas.vscodeSettings = 'vscode-settings';\n Schemas.vscodeWorkspaceTrust = 'vscode-workspace-trust';\n Schemas.vscodeTerminal = 'vscode-terminal';\n Schemas.webviewPanel = 'webview-panel';\n /**\n * Scheme used for loading the wrapper html and script in webviews.\n */\n Schemas.vscodeWebview = 'vscode-webview';\n /**\n * Scheme used for extension pages\n */\n Schemas.extension = 'extension';\n /**\n * Scheme used as a replacement of `file` scheme to load\n * files with our custom protocol handler (desktop only).\n */\n Schemas.vscodeFileResource = 'vscode-file';\n /**\n * Scheme used for temporary resources\n */\n Schemas.tmp = 'tmp';\n})(Schemas || (Schemas = {}));\nclass RemoteAuthoritiesImpl {\n constructor() {\n this._hosts = Object.create(null);\n this._ports = Object.create(null);\n this._connectionTokens = Object.create(null);\n this._preferredWebSchema = 'http';\n this._delegate = null;\n }\n setPreferredWebSchema(schema) {\n this._preferredWebSchema = schema;\n }\n rewrite(uri) {\n if (this._delegate) {\n return this._delegate(uri);\n }\n const authority = uri.authority;\n let host = this._hosts[authority];\n if (host && host.indexOf(':') !== -1) {\n host = `[${host}]`;\n }\n const port = this._ports[authority];\n const connectionToken = this._connectionTokens[authority];\n let query = `path=${encodeURIComponent(uri.path)}`;\n if (typeof connectionToken === 'string') {\n query += `&tkn=${encodeURIComponent(connectionToken)}`;\n }\n return URI.from({\n scheme: platform.isWeb ? this._preferredWebSchema : Schemas.vscodeRemoteResource,\n authority: `${host}:${port}`,\n path: `/vscode-remote-resource`,\n query\n });\n }\n}\nexport const RemoteAuthorities = new RemoteAuthoritiesImpl();\nclass FileAccessImpl {\n constructor() {\n this.FALLBACK_AUTHORITY = 'vscode-app';\n }\n asBrowserUri(uriOrModule, moduleIdToUrl, __forceCodeFileUri) {\n const uri = this.toUri(uriOrModule, moduleIdToUrl);\n // Handle remote URIs via `RemoteAuthorities`\n if (uri.scheme === Schemas.vscodeRemote) {\n return RemoteAuthorities.rewrite(uri);\n }\n // Only convert the URI if we are in a native context and it has `file:` scheme\n // and we have explicitly enabled the conversion (sandbox, or VSCODE_BROWSER_CODE_LOADING)\n if (platform.isNative && (__forceCodeFileUri || platform.isPreferringBrowserCodeLoad) && uri.scheme === Schemas.file) {\n return uri.with({\n scheme: Schemas.vscodeFileResource,\n // We need to provide an authority here so that it can serve\n // as origin for network and loading matters in chromium.\n // If the URI is not coming with an authority already, we\n // add our own\n authority: uri.authority || this.FALLBACK_AUTHORITY,\n query: null,\n fragment: null\n });\n }\n return uri;\n }\n toUri(uriOrModule, moduleIdToUrl) {\n if (URI.isUri(uriOrModule)) {\n return uriOrModule;\n }\n return URI.parse(moduleIdToUrl.toUrl(uriOrModule));\n }\n}\nexport const FileAccess = new FileAccessImpl();\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 *--------------------------------------------------------------------------------------------*/\nexport function clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\nexport class MovingAverage {\n constructor() {\n this._n = 1;\n this._val = 0;\n }\n update(value) {\n this._val = this._val + (value - this._val) / this._n;\n this._n += 1;\n return this;\n }\n get value() {\n return this._val;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { isObject, isUndefinedOrNull, isArray } from './types.js';\nexport function deepClone(obj) {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n if (obj instanceof RegExp) {\n // See https://github.com/microsoft/TypeScript/issues/10990\n return obj;\n }\n const result = Array.isArray(obj) ? [] : {};\n Object.keys(obj).forEach((key) => {\n if (obj[key] && typeof obj[key] === 'object') {\n result[key] = deepClone(obj[key]);\n }\n else {\n result[key] = obj[key];\n }\n });\n return result;\n}\nexport function deepFreeze(obj) {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n const stack = [obj];\n while (stack.length > 0) {\n const obj = stack.shift();\n Object.freeze(obj);\n for (const key in obj) {\n if (_hasOwnProperty.call(obj, key)) {\n const prop = obj[key];\n if (typeof prop === 'object' && !Object.isFrozen(prop)) {\n stack.push(prop);\n }\n }\n }\n }\n return obj;\n}\nconst _hasOwnProperty = Object.prototype.hasOwnProperty;\nexport function cloneAndChange(obj, changer) {\n return _cloneAndChange(obj, changer, new Set());\n}\nfunction _cloneAndChange(obj, changer, seen) {\n if (isUndefinedOrNull(obj)) {\n return obj;\n }\n const changed = changer(obj);\n if (typeof changed !== 'undefined') {\n return changed;\n }\n if (isArray(obj)) {\n const r1 = [];\n for (const e of obj) {\n r1.push(_cloneAndChange(e, changer, seen));\n }\n return r1;\n }\n if (isObject(obj)) {\n if (seen.has(obj)) {\n throw new Error('Cannot clone recursive data-structure');\n }\n seen.add(obj);\n const r2 = {};\n for (let i2 in obj) {\n if (_hasOwnProperty.call(obj, i2)) {\n r2[i2] = _cloneAndChange(obj[i2], changer, seen);\n }\n }\n seen.delete(obj);\n return r2;\n }\n return obj;\n}\n/**\n * Copies all properties of source into destination. The optional parameter \"overwrite\" allows to control\n * if existing properties on the destination should be overwritten or not. Defaults to true (overwrite).\n */\nexport function mixin(destination, source, overwrite = true) {\n if (!isObject(destination)) {\n return source;\n }\n if (isObject(source)) {\n Object.keys(source).forEach(key => {\n if (key in destination) {\n if (overwrite) {\n if (isObject(destination[key]) && isObject(source[key])) {\n mixin(destination[key], source[key], overwrite);\n }\n else {\n destination[key] = source[key];\n }\n }\n }\n else {\n destination[key] = source[key];\n }\n });\n }\n return destination;\n}\nexport function equals(one, other) {\n if (one === other) {\n return true;\n }\n if (one === null || one === undefined || other === null || other === undefined) {\n return false;\n }\n if (typeof one !== typeof other) {\n return false;\n }\n if (typeof one !== 'object') {\n return false;\n }\n if ((Array.isArray(one)) !== (Array.isArray(other))) {\n return false;\n }\n let i;\n let key;\n if (Array.isArray(one)) {\n if (one.length !== other.length) {\n return false;\n }\n for (i = 0; i < one.length; i++) {\n if (!equals(one[i], other[i])) {\n return false;\n }\n }\n }\n else {\n const oneKeys = [];\n for (key in one) {\n oneKeys.push(key);\n }\n oneKeys.sort();\n const otherKeys = [];\n for (key in other) {\n otherKeys.push(key);\n }\n otherKeys.sort();\n if (!equals(oneKeys, otherKeys)) {\n return false;\n }\n for (i = 0; i < oneKeys.length; i++) {\n if (!equals(one[oneKeys[i]], other[oneKeys[i]])) {\n return false;\n }\n }\n }\n return true;\n}\nexport function getOrDefault(obj, fn, defaultValue) {\n const result = fn(obj);\n return typeof result === 'undefined' ? defaultValue : result;\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 *--------------------------------------------------------------------------------------------*/\nimport { isWindows, isMacintosh, setImmediate, globals } from './platform.js';\nlet safeProcess;\n// Native sandbox environment\nif (typeof globals.vscode !== 'undefined' && typeof globals.vscode.process !== 'undefined') {\n const sandboxProcess = globals.vscode.process;\n safeProcess = {\n get platform() { return sandboxProcess.platform; },\n get env() { return sandboxProcess.env; },\n cwd() { return sandboxProcess.cwd(); },\n nextTick(callback) { return setImmediate(callback); }\n };\n}\n// Native node.js environment\nelse if (typeof process !== 'undefined') {\n safeProcess = {\n get platform() { return process.platform; },\n get env() { return process.env; },\n cwd() { return process.env['VSCODE_CWD'] || process.cwd(); },\n nextTick(callback) { return process.nextTick(callback); }\n };\n}\n// Web environment\nelse {\n safeProcess = {\n // Supported\n get platform() { return isWindows ? 'win32' : isMacintosh ? 'darwin' : 'linux'; },\n nextTick(callback) { return setImmediate(callback); },\n // Unsupported\n get env() { return Object.create(null); },\n cwd() { return '/'; }\n };\n}\n/**\n * Provides safe access to the `cwd` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `/`.\n */\nexport const cwd = safeProcess.cwd;\n/**\n * Provides safe access to the `env` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `{}`.\n */\nexport const env = safeProcess.env;\n/**\n * Provides safe access to the `platform` property in node.js, sandboxed or web\n * environments.\n */\nexport const platform = safeProcess.platform;\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// NOTE: VSCode's copy of nodejs path library to be usable in common (non-node) namespace\n// Copied from: https://github.com/nodejs/node/blob/v12.8.1/lib/path.js\n/**\n * Copyright Joyent, Inc. and other Node contributors.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a\n * copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to permit\n * persons to whom the Software is furnished to do so, subject to the\n * following conditions:\n *\n * The above copyright notice and this permission notice shall be included\n * in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n * NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n * USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\nimport * as process from './process.js';\nconst CHAR_UPPERCASE_A = 65; /* A */\nconst CHAR_LOWERCASE_A = 97; /* a */\nconst CHAR_UPPERCASE_Z = 90; /* Z */\nconst CHAR_LOWERCASE_Z = 122; /* z */\nconst CHAR_DOT = 46; /* . */\nconst CHAR_FORWARD_SLASH = 47; /* / */\nconst CHAR_BACKWARD_SLASH = 92; /* \\ */\nconst CHAR_COLON = 58; /* : */\nconst CHAR_QUESTION_MARK = 63; /* ? */\nclass ErrorInvalidArgType extends Error {\n constructor(name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n let determiner;\n if (typeof expected === 'string' && expected.indexOf('not ') === 0) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n }\n else {\n determiner = 'must be';\n }\n const type = name.indexOf('.') !== -1 ? 'property' : 'argument';\n let msg = `The \"${name}\" ${type} ${determiner} of type ${expected}`;\n msg += `. Received type ${typeof actual}`;\n super(msg);\n this.code = 'ERR_INVALID_ARG_TYPE';\n }\n}\nfunction validateString(value, name) {\n if (typeof value !== 'string') {\n throw new ErrorInvalidArgType(name, 'string', value);\n }\n}\nfunction isPathSeparator(code) {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n}\nfunction isPosixPathSeparator(code) {\n return code === CHAR_FORWARD_SLASH;\n}\nfunction isWindowsDeviceRoot(code) {\n return code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z ||\n code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z;\n}\n// Resolves . and .. elements in a path with directory names\nfunction normalizeString(path, allowAboveRoot, separator, isPathSeparator) {\n let res = '';\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let code = 0;\n for (let i = 0; i <= path.length; ++i) {\n if (i < path.length) {\n code = path.charCodeAt(i);\n }\n else if (isPathSeparator(code)) {\n break;\n }\n else {\n code = CHAR_FORWARD_SLASH;\n }\n if (isPathSeparator(code)) {\n if (lastSlash === i - 1 || dots === 1) {\n // NOOP\n }\n else if (dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 ||\n res.charCodeAt(res.length - 1) !== CHAR_DOT ||\n res.charCodeAt(res.length - 2) !== CHAR_DOT) {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf(separator);\n if (lastSlashIndex === -1) {\n res = '';\n lastSegmentLength = 0;\n }\n else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n else if (res.length !== 0) {\n res = '';\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n res += res.length > 0 ? `${separator}..` : '..';\n lastSegmentLength = 2;\n }\n }\n else {\n if (res.length > 0) {\n res += `${separator}${path.slice(lastSlash + 1, i)}`;\n }\n else {\n res = path.slice(lastSlash + 1, i);\n }\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n }\n else if (code === CHAR_DOT && dots !== -1) {\n ++dots;\n }\n else {\n dots = -1;\n }\n }\n return res;\n}\nfunction _format(sep, pathObject) {\n if (pathObject === null || typeof pathObject !== 'object') {\n throw new ErrorInvalidArgType('pathObject', 'Object', pathObject);\n }\n const dir = pathObject.dir || pathObject.root;\n const base = pathObject.base ||\n `${pathObject.name || ''}${pathObject.ext || ''}`;\n if (!dir) {\n return base;\n }\n return dir === pathObject.root ? `${dir}${base}` : `${dir}${sep}${base}`;\n}\nexport const win32 = {\n // path.resolve([from ...], to)\n resolve(...pathSegments) {\n let resolvedDevice = '';\n let resolvedTail = '';\n let resolvedAbsolute = false;\n for (let i = pathSegments.length - 1; i >= -1; i--) {\n let path;\n if (i >= 0) {\n path = pathSegments[i];\n validateString(path, 'path');\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n }\n else if (resolvedDevice.length === 0) {\n path = process.cwd();\n }\n else {\n // Windows has the concept of drive-specific current working\n // directories. If we've resolved a drive letter but not yet an\n // absolute path, get cwd for that drive, or the process cwd if\n // the drive cwd is not available. We're sure the device is not\n // a UNC path at this points, because UNC paths are always absolute.\n path = process.env[`=${resolvedDevice}`] || process.cwd();\n // Verify that a cwd was found and that it actually points\n // to our drive. If not, default to the drive's root.\n if (path === undefined ||\n path.slice(0, 2).toLowerCase() !== resolvedDevice.toLowerCase() &&\n path.charCodeAt(2) === CHAR_BACKWARD_SLASH) {\n path = `${resolvedDevice}\\\\`;\n }\n }\n const len = path.length;\n let rootEnd = 0;\n let device = '';\n let isAbsolute = false;\n const code = path.charCodeAt(0);\n // Try to match a root\n if (len === 1) {\n if (isPathSeparator(code)) {\n // `path` contains just a path separator\n rootEnd = 1;\n isAbsolute = true;\n }\n }\n else if (isPathSeparator(code)) {\n // Possible UNC root\n // If we started with a separator, we know we at least have an\n // absolute path of some kind (UNC or otherwise)\n isAbsolute = true;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n const firstPart = path.slice(last, j);\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len || j !== last) {\n // We matched a UNC root\n device = `\\\\\\\\${firstPart}\\\\${path.slice(last, j)}`;\n rootEnd = j;\n }\n }\n }\n }\n else {\n rootEnd = 1;\n }\n }\n else if (isWindowsDeviceRoot(code) &&\n path.charCodeAt(1) === CHAR_COLON) {\n // Possible device root\n device = path.slice(0, 2);\n rootEnd = 2;\n if (len > 2 && isPathSeparator(path.charCodeAt(2))) {\n // Treat separator following drive name as an absolute path\n // indicator\n isAbsolute = true;\n rootEnd = 3;\n }\n }\n if (device.length > 0) {\n if (resolvedDevice.length > 0) {\n if (device.toLowerCase() !== resolvedDevice.toLowerCase()) {\n // This path points to another device so it is not applicable\n continue;\n }\n }\n else {\n resolvedDevice = device;\n }\n }\n if (resolvedAbsolute) {\n if (resolvedDevice.length > 0) {\n break;\n }\n }\n else {\n resolvedTail = `${path.slice(rootEnd)}\\\\${resolvedTail}`;\n resolvedAbsolute = isAbsolute;\n if (isAbsolute && resolvedDevice.length > 0) {\n break;\n }\n }\n }\n // At this point the path should be resolved to a full absolute path,\n // but handle relative paths to be safe (might happen when process.cwd()\n // fails)\n // Normalize the tail path\n resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, '\\\\', isPathSeparator);\n return resolvedAbsolute ?\n `${resolvedDevice}\\\\${resolvedTail}` :\n `${resolvedDevice}${resolvedTail}` || '.';\n },\n normalize(path) {\n validateString(path, 'path');\n const len = path.length;\n if (len === 0) {\n return '.';\n }\n let rootEnd = 0;\n let device;\n let isAbsolute = false;\n const code = path.charCodeAt(0);\n // Try to match a root\n if (len === 1) {\n // `path` contains just a single char, exit early to avoid\n // unnecessary work\n return isPosixPathSeparator(code) ? '\\\\' : path;\n }\n if (isPathSeparator(code)) {\n // Possible UNC root\n // If we started with a separator, we know we at least have an absolute\n // path of some kind (UNC or otherwise)\n isAbsolute = true;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n const firstPart = path.slice(last, j);\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len) {\n // We matched a UNC root only\n // Return the normalized version of the UNC root since there\n // is nothing left to process\n return `\\\\\\\\${firstPart}\\\\${path.slice(last)}\\\\`;\n }\n if (j !== last) {\n // We matched a UNC root with leftovers\n device = `\\\\\\\\${firstPart}\\\\${path.slice(last, j)}`;\n rootEnd = j;\n }\n }\n }\n }\n else {\n rootEnd = 1;\n }\n }\n else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n // Possible device root\n device = path.slice(0, 2);\n rootEnd = 2;\n if (len > 2 && isPathSeparator(path.charCodeAt(2))) {\n // Treat separator following drive name as an absolute path\n // indicator\n isAbsolute = true;\n rootEnd = 3;\n }\n }\n let tail = rootEnd < len ?\n normalizeString(path.slice(rootEnd), !isAbsolute, '\\\\', isPathSeparator) :\n '';\n if (tail.length === 0 && !isAbsolute) {\n tail = '.';\n }\n if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) {\n tail += '\\\\';\n }\n if (device === undefined) {\n return isAbsolute ? `\\\\${tail}` : tail;\n }\n return isAbsolute ? `${device}\\\\${tail}` : `${device}${tail}`;\n },\n isAbsolute(path) {\n validateString(path, 'path');\n const len = path.length;\n if (len === 0) {\n return false;\n }\n const code = path.charCodeAt(0);\n return isPathSeparator(code) ||\n // Possible device root\n len > 2 &&\n isWindowsDeviceRoot(code) &&\n path.charCodeAt(1) === CHAR_COLON &&\n isPathSeparator(path.charCodeAt(2));\n },\n join(...paths) {\n if (paths.length === 0) {\n return '.';\n }\n let joined;\n let firstPart;\n for (let i = 0; i < paths.length; ++i) {\n const arg = paths[i];\n validateString(arg, 'path');\n if (arg.length > 0) {\n if (joined === undefined) {\n joined = firstPart = arg;\n }\n else {\n joined += `\\\\${arg}`;\n }\n }\n }\n if (joined === undefined) {\n return '.';\n }\n // Make sure that the joined path doesn't start with two slashes, because\n // normalize() will mistake it for an UNC path then.\n //\n // This step is skipped when it is very clear that the user actually\n // intended to point at an UNC path. This is assumed when the first\n // non-empty string arguments starts with exactly two slashes followed by\n // at least one more non-slash character.\n //\n // Note that for normalize() to treat a path as an UNC path it needs to\n // have at least 2 components, so we don't filter for that here.\n // This means that the user can use join to construct UNC paths from\n // a server name and a share name; for example:\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\\\')\n let needsReplace = true;\n let slashCount = 0;\n if (typeof firstPart === 'string' && isPathSeparator(firstPart.charCodeAt(0))) {\n ++slashCount;\n const firstLen = firstPart.length;\n if (firstLen > 1 && isPathSeparator(firstPart.charCodeAt(1))) {\n ++slashCount;\n if (firstLen > 2) {\n if (isPathSeparator(firstPart.charCodeAt(2))) {\n ++slashCount;\n }\n else {\n // We matched a UNC path in the first part\n needsReplace = false;\n }\n }\n }\n }\n if (needsReplace) {\n // Find any more consecutive slashes we need to replace\n while (slashCount < joined.length &&\n isPathSeparator(joined.charCodeAt(slashCount))) {\n slashCount++;\n }\n // Replace the slashes if needed\n if (slashCount >= 2) {\n joined = `\\\\${joined.slice(slashCount)}`;\n }\n }\n return win32.normalize(joined);\n },\n // It will solve the relative path from `from` to `to`, for instance:\n // from = 'C:\\\\orandea\\\\test\\\\aaa'\n // to = 'C:\\\\orandea\\\\impl\\\\bbb'\n // The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\n relative(from, to) {\n validateString(from, 'from');\n validateString(to, 'to');\n if (from === to) {\n return '';\n }\n const fromOrig = win32.resolve(from);\n const toOrig = win32.resolve(to);\n if (fromOrig === toOrig) {\n return '';\n }\n from = fromOrig.toLowerCase();\n to = toOrig.toLowerCase();\n if (from === to) {\n return '';\n }\n // Trim any leading backslashes\n let fromStart = 0;\n while (fromStart < from.length &&\n from.charCodeAt(fromStart) === CHAR_BACKWARD_SLASH) {\n fromStart++;\n }\n // Trim trailing backslashes (applicable to UNC paths only)\n let fromEnd = from.length;\n while (fromEnd - 1 > fromStart &&\n from.charCodeAt(fromEnd - 1) === CHAR_BACKWARD_SLASH) {\n fromEnd--;\n }\n const fromLen = fromEnd - fromStart;\n // Trim any leading backslashes\n let toStart = 0;\n while (toStart < to.length &&\n to.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) {\n toStart++;\n }\n // Trim trailing backslashes (applicable to UNC paths only)\n let toEnd = to.length;\n while (toEnd - 1 > toStart &&\n to.charCodeAt(toEnd - 1) === CHAR_BACKWARD_SLASH) {\n toEnd--;\n }\n const toLen = toEnd - toStart;\n // Compare paths to find the longest common path from root\n const length = fromLen < toLen ? fromLen : toLen;\n let lastCommonSep = -1;\n let i = 0;\n for (; i < length; i++) {\n const fromCode = from.charCodeAt(fromStart + i);\n if (fromCode !== to.charCodeAt(toStart + i)) {\n break;\n }\n else if (fromCode === CHAR_BACKWARD_SLASH) {\n lastCommonSep = i;\n }\n }\n // We found a mismatch before the first common path separator was seen, so\n // return the original `to`.\n if (i !== length) {\n if (lastCommonSep === -1) {\n return toOrig;\n }\n }\n else {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\foo\\\\bar\\\\baz'\n return toOrig.slice(toStart + i + 1);\n }\n if (i === 2) {\n // We get here if `from` is the device root.\n // For example: from='C:\\\\'; to='C:\\\\foo'\n return toOrig.slice(toStart + i);\n }\n }\n if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\foo'\n lastCommonSep = i;\n }\n else if (i === 2) {\n // We get here if `to` is the device root.\n // For example: from='C:\\\\foo\\\\bar'; to='C:\\\\'\n lastCommonSep = 3;\n }\n }\n if (lastCommonSep === -1) {\n lastCommonSep = 0;\n }\n }\n let out = '';\n // Generate the relative path based on the path difference between `to` and\n // `from`\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {\n out += out.length === 0 ? '..' : '\\\\..';\n }\n }\n toStart += lastCommonSep;\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts\n if (out.length > 0) {\n return `${out}${toOrig.slice(toStart, toEnd)}`;\n }\n if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) {\n ++toStart;\n }\n return toOrig.slice(toStart, toEnd);\n },\n toNamespacedPath(path) {\n // Note: this will *probably* throw somewhere.\n if (typeof path !== 'string') {\n return path;\n }\n if (path.length === 0) {\n return '';\n }\n const resolvedPath = win32.resolve(path);\n if (resolvedPath.length <= 2) {\n return path;\n }\n if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) {\n // Possible UNC root\n if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) {\n const code = resolvedPath.charCodeAt(2);\n if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) {\n // Matched non-long UNC root, convert the path to a long UNC path\n return `\\\\\\\\?\\\\UNC\\\\${resolvedPath.slice(2)}`;\n }\n }\n }\n else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0)) &&\n resolvedPath.charCodeAt(1) === CHAR_COLON &&\n resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH) {\n // Matched device root, convert the path to a long UNC path\n return `\\\\\\\\?\\\\${resolvedPath}`;\n }\n return path;\n },\n dirname(path) {\n validateString(path, 'path');\n const len = path.length;\n if (len === 0) {\n return '.';\n }\n let rootEnd = -1;\n let offset = 0;\n const code = path.charCodeAt(0);\n if (len === 1) {\n // `path` contains just a path separator, exit early to avoid\n // unnecessary work or a dot.\n return isPathSeparator(code) ? path : '.';\n }\n // Try to match a root\n if (isPathSeparator(code)) {\n // Possible UNC root\n rootEnd = offset = 1;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len) {\n // We matched a UNC root only\n return path;\n }\n if (j !== last) {\n // We matched a UNC root with leftovers\n // Offset by 1 to include the separator after the UNC root to\n // treat it as a \"normal root\" on top of a (UNC) root\n rootEnd = offset = j + 1;\n }\n }\n }\n }\n // Possible device root\n }\n else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n rootEnd = len > 2 && isPathSeparator(path.charCodeAt(2)) ? 3 : 2;\n offset = rootEnd;\n }\n let end = -1;\n let matchedSlash = true;\n for (let i = len - 1; i >= offset; --i) {\n if (isPathSeparator(path.charCodeAt(i))) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n }\n else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n if (end === -1) {\n if (rootEnd === -1) {\n return '.';\n }\n end = rootEnd;\n }\n return path.slice(0, end);\n },\n basename(path, ext) {\n if (ext !== undefined) {\n validateString(ext, 'ext');\n }\n validateString(path, 'path');\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n let i;\n // Check for a drive letter prefix so as not to mistake the following\n // path separator as an extra separator at the end of the path that can be\n // disregarded\n if (path.length >= 2 &&\n isWindowsDeviceRoot(path.charCodeAt(0)) &&\n path.charCodeAt(1) === CHAR_COLON) {\n start = 2;\n }\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext === path) {\n return '';\n }\n let extIdx = ext.length - 1;\n let firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n }\n else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n if (start === end) {\n end = firstNonSlashEnd;\n }\n else if (end === -1) {\n end = path.length;\n }\n return path.slice(start, end);\n }\n for (i = path.length - 1; i >= start; --i) {\n if (isPathSeparator(path.charCodeAt(i))) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n if (end === -1) {\n return '';\n }\n return path.slice(start, end);\n },\n extname(path) {\n validateString(path, 'path');\n let start = 0;\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n // Check for a drive letter prefix so as not to mistake the following\n // path separator as an extra separator at the end of the path that can be\n // disregarded\n if (path.length >= 2 &&\n path.charCodeAt(1) === CHAR_COLON &&\n isWindowsDeviceRoot(path.charCodeAt(0))) {\n start = startPart = 2;\n }\n for (let i = path.length - 1; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (startDot === -1 ||\n end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n return '';\n }\n return path.slice(startDot, end);\n },\n format: _format.bind(null, '\\\\'),\n parse(path) {\n validateString(path, 'path');\n const ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) {\n return ret;\n }\n const len = path.length;\n let rootEnd = 0;\n let code = path.charCodeAt(0);\n if (len === 1) {\n if (isPathSeparator(code)) {\n // `path` contains just a path separator, exit early to avoid\n // unnecessary work\n ret.root = ret.dir = path;\n return ret;\n }\n ret.base = ret.name = path;\n return ret;\n }\n // Try to match a root\n if (isPathSeparator(code)) {\n // Possible UNC root\n rootEnd = 1;\n if (isPathSeparator(path.charCodeAt(1))) {\n // Matched double path separator at beginning\n let j = 2;\n let last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more path separators\n while (j < len && isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j < len && j !== last) {\n // Matched!\n last = j;\n // Match 1 or more non-path separators\n while (j < len && !isPathSeparator(path.charCodeAt(j))) {\n j++;\n }\n if (j === len) {\n // We matched a UNC root only\n rootEnd = j;\n }\n else if (j !== last) {\n // We matched a UNC root with leftovers\n rootEnd = j + 1;\n }\n }\n }\n }\n }\n else if (isWindowsDeviceRoot(code) && path.charCodeAt(1) === CHAR_COLON) {\n // Possible device root\n if (len <= 2) {\n // `path` contains just a drive root, exit early to avoid\n // unnecessary work\n ret.root = ret.dir = path;\n return ret;\n }\n rootEnd = 2;\n if (isPathSeparator(path.charCodeAt(2))) {\n if (len === 3) {\n // `path` contains just a drive root, exit early to avoid\n // unnecessary work\n ret.root = ret.dir = path;\n return ret;\n }\n rootEnd = 3;\n }\n }\n if (rootEnd > 0) {\n ret.root = path.slice(0, rootEnd);\n }\n let startDot = -1;\n let startPart = rootEnd;\n let end = -1;\n let matchedSlash = true;\n let i = path.length - 1;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n // Get non-dir info\n for (; i >= rootEnd; --i) {\n code = path.charCodeAt(i);\n if (isPathSeparator(code)) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (end !== -1) {\n if (startDot === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n ret.base = ret.name = path.slice(startPart, end);\n }\n else {\n ret.name = path.slice(startPart, startDot);\n ret.base = path.slice(startPart, end);\n ret.ext = path.slice(startDot, end);\n }\n }\n // If the directory is the root, use the entire root as the `dir` including\n // the trailing slash if any (`C:\\abc` -> `C:\\`). Otherwise, strip out the\n // trailing slash (`C:\\abc\\def` -> `C:\\abc`).\n if (startPart > 0 && startPart !== rootEnd) {\n ret.dir = path.slice(0, startPart - 1);\n }\n else {\n ret.dir = ret.root;\n }\n return ret;\n },\n sep: '\\\\',\n delimiter: ';',\n win32: null,\n posix: null\n};\nexport const posix = {\n // path.resolve([from ...], to)\n resolve(...pathSegments) {\n let resolvedPath = '';\n let resolvedAbsolute = false;\n for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n const path = i >= 0 ? pathSegments[i] : process.cwd();\n validateString(path, 'path');\n // Skip empty entries\n if (path.length === 0) {\n continue;\n }\n resolvedPath = `${path}/${resolvedPath}`;\n resolvedAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n }\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n // Normalize the path\n resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, '/', isPosixPathSeparator);\n if (resolvedAbsolute) {\n return `/${resolvedPath}`;\n }\n return resolvedPath.length > 0 ? resolvedPath : '.';\n },\n normalize(path) {\n validateString(path, 'path');\n if (path.length === 0) {\n return '.';\n }\n const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n const trailingSeparator = path.charCodeAt(path.length - 1) === CHAR_FORWARD_SLASH;\n // Normalize the path\n path = normalizeString(path, !isAbsolute, '/', isPosixPathSeparator);\n if (path.length === 0) {\n if (isAbsolute) {\n return '/';\n }\n return trailingSeparator ? './' : '.';\n }\n if (trailingSeparator) {\n path += '/';\n }\n return isAbsolute ? `/${path}` : path;\n },\n isAbsolute(path) {\n validateString(path, 'path');\n return path.length > 0 && path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n },\n join(...paths) {\n if (paths.length === 0) {\n return '.';\n }\n let joined;\n for (let i = 0; i < paths.length; ++i) {\n const arg = paths[i];\n validateString(arg, 'path');\n if (arg.length > 0) {\n if (joined === undefined) {\n joined = arg;\n }\n else {\n joined += `/${arg}`;\n }\n }\n }\n if (joined === undefined) {\n return '.';\n }\n return posix.normalize(joined);\n },\n relative(from, to) {\n validateString(from, 'from');\n validateString(to, 'to');\n if (from === to) {\n return '';\n }\n // Trim leading forward slashes.\n from = posix.resolve(from);\n to = posix.resolve(to);\n if (from === to) {\n return '';\n }\n const fromStart = 1;\n const fromEnd = from.length;\n const fromLen = fromEnd - fromStart;\n const toStart = 1;\n const toLen = to.length - toStart;\n // Compare paths to find the longest common path from root\n const length = (fromLen < toLen ? fromLen : toLen);\n let lastCommonSep = -1;\n let i = 0;\n for (; i < length; i++) {\n const fromCode = from.charCodeAt(fromStart + i);\n if (fromCode !== to.charCodeAt(toStart + i)) {\n break;\n }\n else if (fromCode === CHAR_FORWARD_SLASH) {\n lastCommonSep = i;\n }\n }\n if (i === length) {\n if (toLen > length) {\n if (to.charCodeAt(toStart + i) === CHAR_FORWARD_SLASH) {\n // We get here if `from` is the exact base path for `to`.\n // For example: from='/foo/bar'; to='/foo/bar/baz'\n return to.slice(toStart + i + 1);\n }\n if (i === 0) {\n // We get here if `from` is the root\n // For example: from='/'; to='/foo'\n return to.slice(toStart + i);\n }\n }\n else if (fromLen > length) {\n if (from.charCodeAt(fromStart + i) === CHAR_FORWARD_SLASH) {\n // We get here if `to` is the exact base path for `from`.\n // For example: from='/foo/bar/baz'; to='/foo/bar'\n lastCommonSep = i;\n }\n else if (i === 0) {\n // We get here if `to` is the root.\n // For example: from='/foo/bar'; to='/'\n lastCommonSep = 0;\n }\n }\n }\n let out = '';\n // Generate the relative path based on the path difference between `to`\n // and `from`.\n for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n if (i === fromEnd || from.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n out += out.length === 0 ? '..' : '/..';\n }\n }\n // Lastly, append the rest of the destination (`to`) path that comes after\n // the common path parts.\n return `${out}${to.slice(toStart + lastCommonSep)}`;\n },\n toNamespacedPath(path) {\n // Non-op on posix systems\n return path;\n },\n dirname(path) {\n validateString(path, 'path');\n if (path.length === 0) {\n return '.';\n }\n const hasRoot = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n let end = -1;\n let matchedSlash = true;\n for (let i = path.length - 1; i >= 1; --i) {\n if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n }\n else {\n // We saw the first non-path separator\n matchedSlash = false;\n }\n }\n if (end === -1) {\n return hasRoot ? '/' : '.';\n }\n if (hasRoot && end === 1) {\n return '//';\n }\n return path.slice(0, end);\n },\n basename(path, ext) {\n if (ext !== undefined) {\n validateString(ext, 'ext');\n }\n validateString(path, 'path');\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n let i;\n if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n if (ext === path) {\n return '';\n }\n let extIdx = ext.length - 1;\n let firstNonSlashEnd = -1;\n for (i = path.length - 1; i >= 0; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else {\n if (firstNonSlashEnd === -1) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n // Try to match the explicit extension\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = i;\n }\n }\n else {\n // Extension does not match, so our result is the entire path\n // component\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n if (start === end) {\n end = firstNonSlashEnd;\n }\n else if (end === -1) {\n end = path.length;\n }\n return path.slice(start, end);\n }\n for (i = path.length - 1; i >= 0; --i) {\n if (path.charCodeAt(i) === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n }\n else if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // path component\n matchedSlash = false;\n end = i + 1;\n }\n }\n if (end === -1) {\n return '';\n }\n return path.slice(start, end);\n },\n extname(path) {\n validateString(path, 'path');\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n for (let i = path.length - 1; i >= 0; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (startDot === -1 ||\n end === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n return '';\n }\n return path.slice(startDot, end);\n },\n format: _format.bind(null, '/'),\n parse(path) {\n validateString(path, 'path');\n const ret = { root: '', dir: '', base: '', ext: '', name: '' };\n if (path.length === 0) {\n return ret;\n }\n const isAbsolute = path.charCodeAt(0) === CHAR_FORWARD_SLASH;\n let start;\n if (isAbsolute) {\n ret.root = '/';\n start = 1;\n }\n else {\n start = 0;\n }\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let i = path.length - 1;\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find\n let preDotState = 0;\n // Get non-dir info\n for (; i >= start; --i) {\n const code = path.charCodeAt(i);\n if (code === CHAR_FORWARD_SLASH) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n // We saw the first non-path separator, mark this as the end of our\n // extension\n matchedSlash = false;\n end = i + 1;\n }\n if (code === CHAR_DOT) {\n // If this is our first dot, mark it as the start of our extension\n if (startDot === -1) {\n startDot = i;\n }\n else if (preDotState !== 1) {\n preDotState = 1;\n }\n }\n else if (startDot !== -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension\n preDotState = -1;\n }\n }\n if (end !== -1) {\n const start = startPart === 0 && isAbsolute ? 1 : startPart;\n if (startDot === -1 ||\n // We saw a non-dot character immediately before the dot\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly '..'\n (preDotState === 1 &&\n startDot === end - 1 &&\n startDot === startPart + 1)) {\n ret.base = ret.name = path.slice(start, end);\n }\n else {\n ret.name = path.slice(start, startDot);\n ret.base = path.slice(start, end);\n ret.ext = path.slice(startDot, end);\n }\n }\n if (startPart > 0) {\n ret.dir = path.slice(0, startPart - 1);\n }\n else if (isAbsolute) {\n ret.dir = '/';\n }\n return ret;\n },\n sep: '/',\n delimiter: ':',\n win32: null,\n posix: null\n};\nposix.win32 = win32.win32 = win32;\nposix.posix = win32.posix = posix;\nexport const normalize = (process.platform === 'win32' ? win32.normalize : posix.normalize);\nexport const resolve = (process.platform === 'win32' ? win32.resolve : posix.resolve);\nexport const relative = (process.platform === 'win32' ? win32.relative : posix.relative);\nexport const dirname = (process.platform === 'win32' ? win32.dirname : posix.dirname);\nexport const basename = (process.platform === 'win32' ? win32.basename : posix.basename);\nexport const extname = (process.platform === 'win32' ? win32.extname : posix.extname);\nexport const sep = (process.platform === 'win32' ? win32.sep : posix.sep);\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 *--------------------------------------------------------------------------------------------*/\nvar _a;\nconst LANGUAGE_DEFAULT = 'en';\nlet _isWindows = false;\nlet _isMacintosh = false;\nlet _isLinux = false;\nlet _isLinuxSnap = false;\nlet _isNative = false;\nlet _isWeb = false;\nlet _isIOS = false;\nlet _locale = undefined;\nlet _language = LANGUAGE_DEFAULT;\nlet _translationsConfigFile = undefined;\nlet _userAgent = undefined;\nexport const globals = (typeof self === 'object' ? self : typeof global === 'object' ? global : {});\nlet nodeProcess = undefined;\nif (typeof globals.vscode !== 'undefined' && typeof globals.vscode.process !== 'undefined') {\n // Native environment (sandboxed)\n nodeProcess = globals.vscode.process;\n}\nelse if (typeof process !== 'undefined') {\n // Native environment (non-sandboxed)\n nodeProcess = process;\n}\nconst isElectronRenderer = typeof ((_a = nodeProcess === null || nodeProcess === void 0 ? void 0 : nodeProcess.versions) === null || _a === void 0 ? void 0 : _a.electron) === 'string' && nodeProcess.type === 'renderer';\nexport const isElectronSandboxed = isElectronRenderer && (nodeProcess === null || nodeProcess === void 0 ? void 0 : nodeProcess.sandboxed);\nexport const browserCodeLoadingCacheStrategy = (() => {\n // Always enabled when sandbox is enabled\n if (isElectronSandboxed) {\n return 'bypassHeatCheck';\n }\n // Otherwise, only enabled conditionally\n const env = nodeProcess === null || nodeProcess === void 0 ? void 0 : nodeProcess.env['VSCODE_BROWSER_CODE_LOADING'];\n if (typeof env === 'string') {\n if (env === 'none' || env === 'code' || env === 'bypassHeatCheck' || env === 'bypassHeatCheckAndEagerCompile') {\n return env;\n }\n return 'bypassHeatCheck';\n }\n return undefined;\n})();\nexport const isPreferringBrowserCodeLoad = typeof browserCodeLoadingCacheStrategy === 'string';\n// Web environment\nif (typeof navigator === 'object' && !isElectronRenderer) {\n _userAgent = navigator.userAgent;\n _isWindows = _userAgent.indexOf('Windows') >= 0;\n _isMacintosh = _userAgent.indexOf('Macintosh') >= 0;\n _isIOS = (_userAgent.indexOf('Macintosh') >= 0 || _userAgent.indexOf('iPad') >= 0 || _userAgent.indexOf('iPhone') >= 0) && !!navigator.maxTouchPoints && navigator.maxTouchPoints > 0;\n _isLinux = _userAgent.indexOf('Linux') >= 0;\n _isWeb = true;\n _locale = navigator.language;\n _language = _locale;\n}\n// Native environment\nelse if (typeof nodeProcess === 'object') {\n _isWindows = (nodeProcess.platform === 'win32');\n _isMacintosh = (nodeProcess.platform === 'darwin');\n _isLinux = (nodeProcess.platform === 'linux');\n _isLinuxSnap = _isLinux && !!nodeProcess.env['SNAP'] && !!nodeProcess.env['SNAP_REVISION'];\n _locale = LANGUAGE_DEFAULT;\n _language = LANGUAGE_DEFAULT;\n const rawNlsConfig = nodeProcess.env['VSCODE_NLS_CONFIG'];\n if (rawNlsConfig) {\n try {\n const nlsConfig = JSON.parse(rawNlsConfig);\n const resolved = nlsConfig.availableLanguages['*'];\n _locale = nlsConfig.locale;\n // VSCode's default language is 'en'\n _language = resolved ? resolved : LANGUAGE_DEFAULT;\n _translationsConfigFile = nlsConfig._translationsConfigFile;\n }\n catch (e) {\n }\n }\n _isNative = true;\n}\n// Unknown environment\nelse {\n console.error('Unable to resolve platform.');\n}\nlet _platform = 0 /* Web */;\nif (_isMacintosh) {\n _platform = 1 /* Mac */;\n}\nelse if (_isWindows) {\n _platform = 3 /* Windows */;\n}\nelse if (_isLinux) {\n _platform = 2 /* Linux */;\n}\nexport const isWindows = _isWindows;\nexport const isMacintosh = _isMacintosh;\nexport const isLinux = _isLinux;\nexport const isNative = _isNative;\nexport const isWeb = _isWeb;\nexport const isIOS = _isIOS;\nexport const userAgent = _userAgent;\nexport const setImmediate = (function defineSetImmediate() {\n if (globals.setImmediate) {\n return globals.setImmediate.bind(globals);\n }\n if (typeof globals.postMessage === 'function' && !globals.importScripts) {\n let pending = [];\n globals.addEventListener('message', (e) => {\n if (e.data && e.data.vscodeSetImmediateId) {\n for (let i = 0, len = pending.length; i < len; i++) {\n const candidate = pending[i];\n if (candidate.id === e.data.vscodeSetImmediateId) {\n pending.splice(i, 1);\n candidate.callback();\n return;\n }\n }\n }\n });\n let lastId = 0;\n return (callback) => {\n const myId = ++lastId;\n pending.push({\n id: myId,\n callback: callback\n });\n globals.postMessage({ vscodeSetImmediateId: myId }, '*');\n };\n }\n if (typeof (nodeProcess === null || nodeProcess === void 0 ? void 0 : nodeProcess.nextTick) === 'function') {\n return nodeProcess.nextTick.bind(nodeProcess);\n }\n const _promise = Promise.resolve();\n return (callback) => _promise.then(callback);\n})();\nexport const OS = (_isMacintosh || _isIOS ? 2 /* Macintosh */ : (_isWindows ? 1 /* Windows */ : 3 /* Linux */));\nlet _isLittleEndian = true;\nlet _isLittleEndianComputed = false;\nexport function isLittleEndian() {\n if (!_isLittleEndianComputed) {\n _isLittleEndianComputed = true;\n const test = new Uint8Array(2);\n test[0] = 1;\n test[1] = 2;\n const view = new Uint16Array(test.buffer);\n _isLittleEndian = (view[0] === (2 << 8) + 1);\n }\n return _isLittleEndian;\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 *--------------------------------------------------------------------------------------------*/\nexport var Range;\n(function (Range) {\n /**\n * Returns the intersection between two ranges as a range itself.\n * Returns `{ start: 0, end: 0 }` if the intersection is empty.\n */\n function intersect(one, other) {\n if (one.start >= other.end || other.start >= one.end) {\n return { start: 0, end: 0 };\n }\n const start = Math.max(one.start, other.start);\n const end = Math.min(one.end, other.end);\n if (end - start <= 0) {\n return { start: 0, end: 0 };\n }\n return { start, end };\n }\n Range.intersect = intersect;\n function isEmpty(range) {\n return range.end - range.start <= 0;\n }\n Range.isEmpty = isEmpty;\n function intersects(one, other) {\n return !isEmpty(intersect(one, other));\n }\n Range.intersects = intersects;\n function relativeComplement(one, other) {\n const result = [];\n const first = { start: one.start, end: Math.min(other.start, one.end) };\n const second = { start: Math.max(other.end, one.start), end: one.end };\n if (!isEmpty(first)) {\n result.push(first);\n }\n if (!isEmpty(second)) {\n result.push(second);\n }\n return result;\n }\n Range.relativeComplement = relativeComplement;\n})(Range || (Range = {}));\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 *--------------------------------------------------------------------------------------------*/\nimport * as extpath from './extpath.js';\nimport * as paths from './path.js';\nimport { URI, uriToFsPath } from './uri.js';\nimport { compare as strCompare } from './strings.js';\nimport { Schemas } from './network.js';\nexport function originalFSPath(uri) {\n return uriToFsPath(uri, true);\n}\nexport class ExtUri {\n constructor(_ignorePathCasing) {\n this._ignorePathCasing = _ignorePathCasing;\n }\n compare(uri1, uri2, ignoreFragment = false) {\n if (uri1 === uri2) {\n return 0;\n }\n return strCompare(this.getComparisonKey(uri1, ignoreFragment), this.getComparisonKey(uri2, ignoreFragment));\n }\n isEqual(uri1, uri2, ignoreFragment = false) {\n if (uri1 === uri2) {\n return true;\n }\n if (!uri1 || !uri2) {\n return false;\n }\n return this.getComparisonKey(uri1, ignoreFragment) === this.getComparisonKey(uri2, ignoreFragment);\n }\n getComparisonKey(uri, ignoreFragment = false) {\n return uri.with({\n path: this._ignorePathCasing(uri) ? uri.path.toLowerCase() : undefined,\n fragment: ignoreFragment ? null : undefined\n }).toString();\n }\n // --- path math\n joinPath(resource, ...pathFragment) {\n return URI.joinPath(resource, ...pathFragment);\n }\n basenameOrAuthority(resource) {\n return basename(resource) || resource.authority;\n }\n basename(resource) {\n return paths.posix.basename(resource.path);\n }\n dirname(resource) {\n if (resource.path.length === 0) {\n return resource;\n }\n let dirname;\n if (resource.scheme === Schemas.file) {\n dirname = URI.file(paths.dirname(originalFSPath(resource))).path;\n }\n else {\n dirname = paths.posix.dirname(resource.path);\n if (resource.authority && dirname.length && dirname.charCodeAt(0) !== 47 /* Slash */) {\n console.error(`dirname(\"${resource.toString})) resulted in a relative path`);\n dirname = '/'; // If a URI contains an authority component, then the path component must either be empty or begin with a CharCode.Slash (\"/\") character\n }\n }\n return resource.with({\n path: dirname\n });\n }\n normalizePath(resource) {\n if (!resource.path.length) {\n return resource;\n }\n let normalizedPath;\n if (resource.scheme === Schemas.file) {\n normalizedPath = URI.file(paths.normalize(originalFSPath(resource))).path;\n }\n else {\n normalizedPath = paths.posix.normalize(resource.path);\n }\n return resource.with({\n path: normalizedPath\n });\n }\n resolvePath(base, path) {\n if (base.scheme === Schemas.file) {\n const newURI = URI.file(paths.resolve(originalFSPath(base), path));\n return base.with({\n authority: newURI.authority,\n path: newURI.path\n });\n }\n if (path.indexOf('/') === -1) { // no slashes? it's likely a Windows path\n path = extpath.toSlashes(path);\n if (/^[a-zA-Z]:(\\/|$)/.test(path)) { // starts with a drive letter\n path = '/' + path;\n }\n }\n return base.with({\n path: paths.posix.resolve(base.path, path)\n });\n }\n}\n/**\n * Unbiased utility that takes uris \"as they are\". This means it can be interchanged with\n * uri#toString() usages. The following is true\n * ```\n * assertEqual(aUri.toString() === bUri.toString(), exturi.isEqual(aUri, bUri))\n * ```\n */\nexport const extUri = new ExtUri(() => false);\nexport const isEqual = extUri.isEqual.bind(extUri);\nexport const basenameOrAuthority = extUri.basenameOrAuthority.bind(extUri);\nexport const basename = extUri.basename.bind(extUri);\nexport const dirname = extUri.dirname.bind(extUri);\nexport const joinPath = extUri.joinPath.bind(extUri);\nexport const normalizePath = extUri.normalizePath.bind(extUri);\nexport const resolvePath = extUri.resolvePath.bind(extUri);\n/**\n * Data URI related helpers.\n */\nexport var DataUri;\n(function (DataUri) {\n DataUri.META_DATA_LABEL = 'label';\n DataUri.META_DATA_DESCRIPTION = 'description';\n DataUri.META_DATA_SIZE = 'size';\n DataUri.META_DATA_MIME = 'mime';\n function parseMetaData(dataUri) {\n const metadata = new Map();\n // Given a URI of: data:image/png;size:2313;label:SomeLabel;description:SomeDescription;base64,77+9UE5...\n // the metadata is: size:2313;label:SomeLabel;description:SomeDescription\n const meta = dataUri.path.substring(dataUri.path.indexOf(';') + 1, dataUri.path.lastIndexOf(';'));\n meta.split(';').forEach(property => {\n const [key, value] = property.split(':');\n if (key && value) {\n metadata.set(key, value);\n }\n });\n // Given a URI of: data:image/png;size:2313;label:SomeLabel;description:SomeDescription;base64,77+9UE5...\n // the mime is: image/png\n const mime = dataUri.path.substring(0, dataUri.path.indexOf(';'));\n if (mime) {\n metadata.set(DataUri.META_DATA_MIME, mime);\n }\n return metadata;\n }\n DataUri.parseMetaData = parseMetaData;\n})(DataUri || (DataUri = {}));\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from './event.js';\nimport { Disposable } from './lifecycle.js';\nexport class ScrollState {\n constructor(width, scrollWidth, scrollLeft, height, scrollHeight, scrollTop) {\n width = width | 0;\n scrollWidth = scrollWidth | 0;\n scrollLeft = scrollLeft | 0;\n height = height | 0;\n scrollHeight = scrollHeight | 0;\n scrollTop = scrollTop | 0;\n this.rawScrollLeft = scrollLeft; // before validation\n this.rawScrollTop = scrollTop; // before validation\n if (width < 0) {\n width = 0;\n }\n if (scrollLeft + width > scrollWidth) {\n scrollLeft = scrollWidth - width;\n }\n if (scrollLeft < 0) {\n scrollLeft = 0;\n }\n if (height < 0) {\n height = 0;\n }\n if (scrollTop + height > scrollHeight) {\n scrollTop = scrollHeight - height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n this.width = width;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.height = height;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n }\n equals(other) {\n return (this.rawScrollLeft === other.rawScrollLeft\n && this.rawScrollTop === other.rawScrollTop\n && this.width === other.width\n && this.scrollWidth === other.scrollWidth\n && this.scrollLeft === other.scrollLeft\n && this.height === other.height\n && this.scrollHeight === other.scrollHeight\n && this.scrollTop === other.scrollTop);\n }\n withScrollDimensions(update, useRawScrollPositions) {\n return new ScrollState((typeof update.width !== 'undefined' ? update.width : this.width), (typeof update.scrollWidth !== 'undefined' ? update.scrollWidth : this.scrollWidth), useRawScrollPositions ? this.rawScrollLeft : this.scrollLeft, (typeof update.height !== 'undefined' ? update.height : this.height), (typeof update.scrollHeight !== 'undefined' ? update.scrollHeight : this.scrollHeight), useRawScrollPositions ? this.rawScrollTop : this.scrollTop);\n }\n withScrollPosition(update) {\n return new ScrollState(this.width, this.scrollWidth, (typeof update.scrollLeft !== 'undefined' ? update.scrollLeft : this.rawScrollLeft), this.height, this.scrollHeight, (typeof update.scrollTop !== 'undefined' ? update.scrollTop : this.rawScrollTop));\n }\n createScrollEvent(previous, inSmoothScrolling) {\n const widthChanged = (this.width !== previous.width);\n const scrollWidthChanged = (this.scrollWidth !== previous.scrollWidth);\n const scrollLeftChanged = (this.scrollLeft !== previous.scrollLeft);\n const heightChanged = (this.height !== previous.height);\n const scrollHeightChanged = (this.scrollHeight !== previous.scrollHeight);\n const scrollTopChanged = (this.scrollTop !== previous.scrollTop);\n return {\n inSmoothScrolling: inSmoothScrolling,\n oldWidth: previous.width,\n oldScrollWidth: previous.scrollWidth,\n oldScrollLeft: previous.scrollLeft,\n width: this.width,\n scrollWidth: this.scrollWidth,\n scrollLeft: this.scrollLeft,\n oldHeight: previous.height,\n oldScrollHeight: previous.scrollHeight,\n oldScrollTop: previous.scrollTop,\n height: this.height,\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n widthChanged: widthChanged,\n scrollWidthChanged: scrollWidthChanged,\n scrollLeftChanged: scrollLeftChanged,\n heightChanged: heightChanged,\n scrollHeightChanged: scrollHeightChanged,\n scrollTopChanged: scrollTopChanged,\n };\n }\n}\nexport class Scrollable extends Disposable {\n constructor(smoothScrollDuration, scheduleAtNextAnimationFrame) {\n super();\n this._onScroll = this._register(new Emitter());\n this.onScroll = this._onScroll.event;\n this._smoothScrollDuration = smoothScrollDuration;\n this._scheduleAtNextAnimationFrame = scheduleAtNextAnimationFrame;\n this._state = new ScrollState(0, 0, 0, 0, 0, 0);\n this._smoothScrolling = null;\n }\n dispose() {\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n super.dispose();\n }\n setSmoothScrollDuration(smoothScrollDuration) {\n this._smoothScrollDuration = smoothScrollDuration;\n }\n validateScrollPosition(scrollPosition) {\n return this._state.withScrollPosition(scrollPosition);\n }\n getScrollDimensions() {\n return this._state;\n }\n setScrollDimensions(dimensions, useRawScrollPositions) {\n const newState = this._state.withScrollDimensions(dimensions, useRawScrollPositions);\n this._setState(newState, Boolean(this._smoothScrolling));\n // Validate outstanding animated scroll position target\n if (this._smoothScrolling) {\n this._smoothScrolling.acceptScrollDimensions(this._state);\n }\n }\n /**\n * Returns the final scroll position that the instance will have once the smooth scroll animation concludes.\n * If no scroll animation is occurring, it will return the current scroll position instead.\n */\n getFutureScrollPosition() {\n if (this._smoothScrolling) {\n return this._smoothScrolling.to;\n }\n return this._state;\n }\n /**\n * Returns the current scroll position.\n * Note: This result might be an intermediate scroll position, as there might be an ongoing smooth scroll animation.\n */\n getCurrentScrollPosition() {\n return this._state;\n }\n setScrollPositionNow(update) {\n // no smooth scrolling requested\n const newState = this._state.withScrollPosition(update);\n // Terminate any outstanding smooth scrolling\n if (this._smoothScrolling) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n }\n this._setState(newState, false);\n }\n setScrollPositionSmooth(update, reuseAnimation) {\n if (this._smoothScrollDuration === 0) {\n // Smooth scrolling not supported.\n return this.setScrollPositionNow(update);\n }\n if (this._smoothScrolling) {\n // Combine our pending scrollLeft/scrollTop with incoming scrollLeft/scrollTop\n update = {\n scrollLeft: (typeof update.scrollLeft === 'undefined' ? this._smoothScrolling.to.scrollLeft : update.scrollLeft),\n scrollTop: (typeof update.scrollTop === 'undefined' ? this._smoothScrolling.to.scrollTop : update.scrollTop)\n };\n // Validate `update`\n const validTarget = this._state.withScrollPosition(update);\n if (this._smoothScrolling.to.scrollLeft === validTarget.scrollLeft && this._smoothScrolling.to.scrollTop === validTarget.scrollTop) {\n // No need to interrupt or extend the current animation since we're going to the same place\n return;\n }\n let newSmoothScrolling;\n if (reuseAnimation) {\n newSmoothScrolling = new SmoothScrollingOperation(this._smoothScrolling.from, validTarget, this._smoothScrolling.startTime, this._smoothScrolling.duration);\n }\n else {\n newSmoothScrolling = this._smoothScrolling.combine(this._state, validTarget, this._smoothScrollDuration);\n }\n this._smoothScrolling.dispose();\n this._smoothScrolling = newSmoothScrolling;\n }\n else {\n // Validate `update`\n const validTarget = this._state.withScrollPosition(update);\n this._smoothScrolling = SmoothScrollingOperation.start(this._state, validTarget, this._smoothScrollDuration);\n }\n // Begin smooth scrolling animation\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n _performSmoothScrolling() {\n if (!this._smoothScrolling) {\n return;\n }\n const update = this._smoothScrolling.tick();\n const newState = this._state.withScrollPosition(update);\n this._setState(newState, true);\n if (!this._smoothScrolling) {\n // Looks like someone canceled the smooth scrolling\n // from the scroll event handler\n return;\n }\n if (update.isDone) {\n this._smoothScrolling.dispose();\n this._smoothScrolling = null;\n return;\n }\n // Continue smooth scrolling animation\n this._smoothScrolling.animationFrameDisposable = this._scheduleAtNextAnimationFrame(() => {\n if (!this._smoothScrolling) {\n return;\n }\n this._smoothScrolling.animationFrameDisposable = null;\n this._performSmoothScrolling();\n });\n }\n _setState(newState, inSmoothScrolling) {\n const oldState = this._state;\n if (oldState.equals(newState)) {\n // no change\n return;\n }\n this._state = newState;\n this._onScroll.fire(this._state.createScrollEvent(oldState, inSmoothScrolling));\n }\n}\nexport class SmoothScrollingUpdate {\n constructor(scrollLeft, scrollTop, isDone) {\n this.scrollLeft = scrollLeft;\n this.scrollTop = scrollTop;\n this.isDone = isDone;\n }\n}\nfunction createEaseOutCubic(from, to) {\n const delta = to - from;\n return function (completion) {\n return from + delta * easeOutCubic(completion);\n };\n}\nfunction createComposed(a, b, cut) {\n return function (completion) {\n if (completion < cut) {\n return a(completion / cut);\n }\n return b((completion - cut) / (1 - cut));\n };\n}\nexport class SmoothScrollingOperation {\n constructor(from, to, startTime, duration) {\n this.from = from;\n this.to = to;\n this.duration = duration;\n this.startTime = startTime;\n this.animationFrameDisposable = null;\n this._initAnimations();\n }\n _initAnimations() {\n this.scrollLeft = this._initAnimation(this.from.scrollLeft, this.to.scrollLeft, this.to.width);\n this.scrollTop = this._initAnimation(this.from.scrollTop, this.to.scrollTop, this.to.height);\n }\n _initAnimation(from, to, viewportSize) {\n const delta = Math.abs(from - to);\n if (delta > 2.5 * viewportSize) {\n let stop1, stop2;\n if (from < to) {\n // scroll to 75% of the viewportSize\n stop1 = from + 0.75 * viewportSize;\n stop2 = to - 0.75 * viewportSize;\n }\n else {\n stop1 = from - 0.75 * viewportSize;\n stop2 = to + 0.75 * viewportSize;\n }\n return createComposed(createEaseOutCubic(from, stop1), createEaseOutCubic(stop2, to), 0.33);\n }\n return createEaseOutCubic(from, to);\n }\n dispose() {\n if (this.animationFrameDisposable !== null) {\n this.animationFrameDisposable.dispose();\n this.animationFrameDisposable = null;\n }\n }\n acceptScrollDimensions(state) {\n this.to = state.withScrollPosition(this.to);\n this._initAnimations();\n }\n tick() {\n return this._tick(Date.now());\n }\n _tick(now) {\n const completion = (now - this.startTime) / this.duration;\n if (completion < 1) {\n const newScrollLeft = this.scrollLeft(completion);\n const newScrollTop = this.scrollTop(completion);\n return new SmoothScrollingUpdate(newScrollLeft, newScrollTop, false);\n }\n return new SmoothScrollingUpdate(this.to.scrollLeft, this.to.scrollTop, true);\n }\n combine(from, to, duration) {\n return SmoothScrollingOperation.start(from, to, duration);\n }\n static start(from, to, duration) {\n // +10 / -10 : pretend the animation already started for a quicker response to a scroll request\n duration = duration + 10;\n const startTime = Date.now() - 10;\n return new SmoothScrollingOperation(from, to, startTime, duration);\n }\n}\nfunction easeInCubic(t) {\n return Math.pow(t, 3);\n}\nfunction easeOutCubic(t) {\n return 1 - easeInCubic(1 - t);\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as strings from './strings.js';\nvar Severity;\n(function (Severity) {\n Severity[Severity[\"Ignore\"] = 0] = \"Ignore\";\n Severity[Severity[\"Info\"] = 1] = \"Info\";\n Severity[Severity[\"Warning\"] = 2] = \"Warning\";\n Severity[Severity[\"Error\"] = 3] = \"Error\";\n})(Severity || (Severity = {}));\n(function (Severity) {\n const _error = 'error';\n const _warning = 'warning';\n const _warn = 'warn';\n const _info = 'info';\n const _ignore = 'ignore';\n /**\n * Parses 'error', 'warning', 'warn', 'info' in call casings\n * and falls back to ignore.\n */\n function fromValue(value) {\n if (!value) {\n return Severity.Ignore;\n }\n if (strings.equalsIgnoreCase(_error, value)) {\n return Severity.Error;\n }\n if (strings.equalsIgnoreCase(_warning, value) || strings.equalsIgnoreCase(_warn, value)) {\n return Severity.Warning;\n }\n if (strings.equalsIgnoreCase(_info, value)) {\n return Severity.Info;\n }\n return Severity.Ignore;\n }\n Severity.fromValue = fromValue;\n function toString(severity) {\n switch (severity) {\n case Severity.Error: return _error;\n case Severity.Warning: return _warning;\n case Severity.Info: return _info;\n default: return _ignore;\n }\n }\n Severity.toString = toString;\n})(Severity || (Severity = {}));\nexport default Severity;\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 *--------------------------------------------------------------------------------------------*/\nimport { globals } from './platform.js';\nconst hasPerformanceNow = (globals.performance && typeof globals.performance.now === 'function');\nexport class StopWatch {\n constructor(highResolution) {\n this._highResolution = hasPerformanceNow && highResolution;\n this._startTime = this._now();\n this._stopTime = -1;\n }\n static create(highResolution = true) {\n return new StopWatch(highResolution);\n }\n stop() {\n this._stopTime = this._now();\n }\n elapsed() {\n if (this._stopTime !== -1) {\n return this._stopTime - this._startTime;\n }\n return this._now() - this._startTime;\n }\n _now() {\n return this._highResolution ? globals.performance.now() : Date.now();\n }\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 *--------------------------------------------------------------------------------------------*/\nexport function isFalsyOrWhitespace(str) {\n if (!str || typeof str !== 'string') {\n return true;\n }\n return str.trim().length === 0;\n}\nconst _formatRegexp = /{(\\d+)}/g;\n/**\n * Helper to produce a string with a variable number of arguments. Insert variable segments\n * into the string using the {n} notation where N is the index of the argument following the string.\n * @param value string to which formatting is applied\n * @param args replacements for {n}-entries\n */\nexport function format(value, ...args) {\n if (args.length === 0) {\n return value;\n }\n return value.replace(_formatRegexp, function (match, group) {\n const idx = parseInt(group, 10);\n return isNaN(idx) || idx < 0 || idx >= args.length ?\n match :\n args[idx];\n });\n}\n/**\n * Converts HTML characters inside the string to use entities instead. Makes the string safe from\n * being used e.g. in HTMLElement.innerHTML.\n */\nexport function escape(html) {\n return html.replace(/[<>&]/g, function (match) {\n switch (match) {\n case '<': return '&lt;';\n case '>': return '&gt;';\n case '&': return '&amp;';\n default: return match;\n }\n });\n}\n/**\n * Escapes regular expression characters in a given string\n */\nexport function escapeRegExpCharacters(value) {\n return value.replace(/[\\\\\\{\\}\\*\\+\\?\\|\\^\\$\\.\\[\\]\\(\\)]/g, '\\\\$&');\n}\n/**\n * Removes all occurrences of needle from the beginning and end of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim (default is a blank)\n */\nexport function trim(haystack, needle = ' ') {\n const trimmed = ltrim(haystack, needle);\n return rtrim(trimmed, needle);\n}\n/**\n * Removes all occurrences of needle from the beginning of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim\n */\nexport function ltrim(haystack, needle) {\n if (!haystack || !needle) {\n return haystack;\n }\n const needleLen = needle.length;\n if (needleLen === 0 || haystack.length === 0) {\n return haystack;\n }\n let offset = 0;\n while (haystack.indexOf(needle, offset) === offset) {\n offset = offset + needleLen;\n }\n return haystack.substring(offset);\n}\n/**\n * Removes all occurrences of needle from the end of haystack.\n * @param haystack string to trim\n * @param needle the thing to trim\n */\nexport function rtrim(haystack, needle) {\n if (!haystack || !needle) {\n return haystack;\n }\n const needleLen = needle.length, haystackLen = haystack.length;\n if (needleLen === 0 || haystackLen === 0) {\n return haystack;\n }\n let offset = haystackLen, idx = -1;\n while (true) {\n idx = haystack.lastIndexOf(needle, offset - 1);\n if (idx === -1 || idx + needleLen !== offset) {\n break;\n }\n if (idx === 0) {\n return '';\n }\n offset = idx;\n }\n return haystack.substring(0, offset);\n}\nexport function convertSimple2RegExpPattern(pattern) {\n return pattern.replace(/[\\-\\\\\\{\\}\\+\\?\\|\\^\\$\\.\\,\\[\\]\\(\\)\\#\\s]/g, '\\\\$&').replace(/[\\*]/g, '.*');\n}\nexport function stripWildcards(pattern) {\n return pattern.replace(/\\*/g, '');\n}\nexport function createRegExp(searchString, isRegex, options = {}) {\n if (!searchString) {\n throw new Error('Cannot create regex from empty string');\n }\n if (!isRegex) {\n searchString = escapeRegExpCharacters(searchString);\n }\n if (options.wholeWord) {\n if (!/\\B/.test(searchString.charAt(0))) {\n searchString = '\\\\b' + searchString;\n }\n if (!/\\B/.test(searchString.charAt(searchString.length - 1))) {\n searchString = searchString + '\\\\b';\n }\n }\n let modifiers = '';\n if (options.global) {\n modifiers += 'g';\n }\n if (!options.matchCase) {\n modifiers += 'i';\n }\n if (options.multiline) {\n modifiers += 'm';\n }\n if (options.unicode) {\n modifiers += 'u';\n }\n return new RegExp(searchString, modifiers);\n}\nexport function regExpLeadsToEndlessLoop(regexp) {\n // Exit early if it's one of these special cases which are meant to match\n // against an empty string\n if (regexp.source === '^' || regexp.source === '^$' || regexp.source === '$' || regexp.source === '^\\\\s*$') {\n return false;\n }\n // We check against an empty string. If the regular expression doesn't advance\n // (e.g. ends in an endless loop) it will match an empty string.\n const match = regexp.exec('');\n return !!(match && regexp.lastIndex === 0);\n}\nexport function regExpFlags(regexp) {\n return (regexp.global ? 'g' : '')\n + (regexp.ignoreCase ? 'i' : '')\n + (regexp.multiline ? 'm' : '')\n + (regexp /* standalone editor compilation */.unicode ? 'u' : '');\n}\nexport function splitLines(str) {\n return str.split(/\\r\\n|\\r|\\n/);\n}\n/**\n * Returns first index of the string that is not whitespace.\n * If string is empty or contains only whitespaces, returns -1\n */\nexport function firstNonWhitespaceIndex(str) {\n for (let i = 0, len = str.length; i < len; i++) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Returns the leading whitespace of the string.\n * If the string contains only whitespaces, returns entire string\n */\nexport function getLeadingWhitespace(str, start = 0, end = str.length) {\n for (let i = start; i < end; i++) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\n return str.substring(start, i);\n }\n }\n return str.substring(start, end);\n}\n/**\n * Returns last index of the string that is not whitespace.\n * If string is empty or contains only whitespaces, returns -1\n */\nexport function lastNonWhitespaceIndex(str, startIndex = str.length - 1) {\n for (let i = startIndex; i >= 0; i--) {\n const chCode = str.charCodeAt(i);\n if (chCode !== 32 /* Space */ && chCode !== 9 /* Tab */) {\n return i;\n }\n }\n return -1;\n}\nexport function compare(a, b) {\n if (a < b) {\n return -1;\n }\n else if (a > b) {\n return 1;\n }\n else {\n return 0;\n }\n}\nexport function compareSubstring(a, b, aStart = 0, aEnd = a.length, bStart = 0, bEnd = b.length) {\n for (; aStart < aEnd && bStart < bEnd; aStart++, bStart++) {\n let codeA = a.charCodeAt(aStart);\n let codeB = b.charCodeAt(bStart);\n if (codeA < codeB) {\n return -1;\n }\n else if (codeA > codeB) {\n return 1;\n }\n }\n const aLen = aEnd - aStart;\n const bLen = bEnd - bStart;\n if (aLen < bLen) {\n return -1;\n }\n else if (aLen > bLen) {\n return 1;\n }\n return 0;\n}\nexport function compareIgnoreCase(a, b) {\n return compareSubstringIgnoreCase(a, b, 0, a.length, 0, b.length);\n}\nexport function compareSubstringIgnoreCase(a, b, aStart = 0, aEnd = a.length, bStart = 0, bEnd = b.length) {\n for (; aStart < aEnd && bStart < bEnd; aStart++, bStart++) {\n let codeA = a.charCodeAt(aStart);\n let codeB = b.charCodeAt(bStart);\n if (codeA === codeB) {\n // equal\n continue;\n }\n const diff = codeA - codeB;\n if (diff === 32 && isUpperAsciiLetter(codeB)) { //codeB =[65-90] && codeA =[97-122]\n continue;\n }\n else if (diff === -32 && isUpperAsciiLetter(codeA)) { //codeB =[97-122] && codeA =[65-90]\n continue;\n }\n if (isLowerAsciiLetter(codeA) && isLowerAsciiLetter(codeB)) {\n //\n return diff;\n }\n else {\n return compareSubstring(a.toLowerCase(), b.toLowerCase(), aStart, aEnd, bStart, bEnd);\n }\n }\n const aLen = aEnd - aStart;\n const bLen = bEnd - bStart;\n if (aLen < bLen) {\n return -1;\n }\n else if (aLen > bLen) {\n return 1;\n }\n return 0;\n}\nexport function isLowerAsciiLetter(code) {\n return code >= 97 /* a */ && code <= 122 /* z */;\n}\nexport function isUpperAsciiLetter(code) {\n return code >= 65 /* A */ && code <= 90 /* Z */;\n}\nfunction isAsciiLetter(code) {\n return isLowerAsciiLetter(code) || isUpperAsciiLetter(code);\n}\nexport function equalsIgnoreCase(a, b) {\n return a.length === b.length && doEqualsIgnoreCase(a, b);\n}\nfunction doEqualsIgnoreCase(a, b, stopAt = a.length) {\n for (let i = 0; i < stopAt; i++) {\n const codeA = a.charCodeAt(i);\n const codeB = b.charCodeAt(i);\n if (codeA === codeB) {\n continue;\n }\n // a-z A-Z\n if (isAsciiLetter(codeA) && isAsciiLetter(codeB)) {\n const diff = Math.abs(codeA - codeB);\n if (diff !== 0 && diff !== 32) {\n return false;\n }\n }\n // Any other charcode\n else {\n if (String.fromCharCode(codeA).toLowerCase() !== String.fromCharCode(codeB).toLowerCase()) {\n return false;\n }\n }\n }\n return true;\n}\nexport function startsWithIgnoreCase(str, candidate) {\n const candidateLength = candidate.length;\n if (candidate.length > str.length) {\n return false;\n }\n return doEqualsIgnoreCase(str, candidate, candidateLength);\n}\n/**\n * @returns the length of the common prefix of the two strings.\n */\nexport function commonPrefixLength(a, b) {\n let i, len = Math.min(a.length, b.length);\n for (i = 0; i < len; i++) {\n if (a.charCodeAt(i) !== b.charCodeAt(i)) {\n return i;\n }\n }\n return len;\n}\n/**\n * @returns the length of the common suffix of the two strings.\n */\nexport function commonSuffixLength(a, b) {\n let i, len = Math.min(a.length, b.length);\n const aLastIndex = a.length - 1;\n const bLastIndex = b.length - 1;\n for (i = 0; i < len; i++) {\n if (a.charCodeAt(aLastIndex - i) !== b.charCodeAt(bLastIndex - i)) {\n return i;\n }\n }\n return len;\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nexport function isHighSurrogate(charCode) {\n return (0xD800 <= charCode && charCode <= 0xDBFF);\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nexport function isLowSurrogate(charCode) {\n return (0xDC00 <= charCode && charCode <= 0xDFFF);\n}\n/**\n * See http://en.wikipedia.org/wiki/Surrogate_pair\n */\nexport function computeCodePoint(highSurrogate, lowSurrogate) {\n return ((highSurrogate - 0xD800) << 10) + (lowSurrogate - 0xDC00) + 0x10000;\n}\n/**\n * get the code point that begins at offset `offset`\n */\nexport function getNextCodePoint(str, len, offset) {\n const charCode = str.charCodeAt(offset);\n if (isHighSurrogate(charCode) && offset + 1 < len) {\n const nextCharCode = str.charCodeAt(offset + 1);\n if (isLowSurrogate(nextCharCode)) {\n return computeCodePoint(charCode, nextCharCode);\n }\n }\n return charCode;\n}\n/**\n * get the code point that ends right before offset `offset`\n */\nfunction getPrevCodePoint(str, offset) {\n const charCode = str.charCodeAt(offset - 1);\n if (isLowSurrogate(charCode) && offset > 1) {\n const prevCharCode = str.charCodeAt(offset - 2);\n if (isHighSurrogate(prevCharCode)) {\n return computeCodePoint(prevCharCode, charCode);\n }\n }\n return charCode;\n}\nexport function nextCharLength(str, offset) {\n const graphemeBreakTree = GraphemeBreakTree.getInstance();\n const initialOffset = offset;\n const len = str.length;\n const initialCodePoint = getNextCodePoint(str, len, offset);\n offset += (initialCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n let graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(initialCodePoint);\n while (offset < len) {\n const nextCodePoint = getNextCodePoint(str, len, offset);\n const nextGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(nextCodePoint);\n if (breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\n break;\n }\n offset += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n graphemeBreakType = nextGraphemeBreakType;\n }\n return (offset - initialOffset);\n}\nexport function prevCharLength(str, offset) {\n const graphemeBreakTree = GraphemeBreakTree.getInstance();\n const initialOffset = offset;\n const initialCodePoint = getPrevCodePoint(str, offset);\n offset -= (initialCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n let graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(initialCodePoint);\n while (offset > 0) {\n const prevCodePoint = getPrevCodePoint(str, offset);\n const prevGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(prevCodePoint);\n if (breakBetweenGraphemeBreakType(prevGraphemeBreakType, graphemeBreakType)) {\n break;\n }\n offset -= (prevCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n graphemeBreakType = prevGraphemeBreakType;\n }\n return (initialOffset - offset);\n}\n/**\n * A manual decoding of a UTF8 string.\n * Use only in environments which do not offer native conversion methods!\n */\nexport function decodeUTF8(buffer) {\n // https://en.wikipedia.org/wiki/UTF-8\n const len = buffer.byteLength;\n const result = [];\n let offset = 0;\n while (offset < len) {\n const v0 = buffer[offset];\n let codePoint;\n if (v0 >= 0b11110000 && offset + 3 < len) {\n // 4 bytes\n codePoint = ((((buffer[offset++] & 0b00000111) << 18) >>> 0)\n | (((buffer[offset++] & 0b00111111) << 12) >>> 0)\n | (((buffer[offset++] & 0b00111111) << 6) >>> 0)\n | (((buffer[offset++] & 0b00111111) << 0) >>> 0));\n }\n else if (v0 >= 0b11100000 && offset + 2 < len) {\n // 3 bytes\n codePoint = ((((buffer[offset++] & 0b00001111) << 12) >>> 0)\n | (((buffer[offset++] & 0b00111111) << 6) >>> 0)\n | (((buffer[offset++] & 0b00111111) << 0) >>> 0));\n }\n else if (v0 >= 0b11000000 && offset + 1 < len) {\n // 2 bytes\n codePoint = ((((buffer[offset++] & 0b00011111) << 6) >>> 0)\n | (((buffer[offset++] & 0b00111111) << 0) >>> 0));\n }\n else {\n // 1 byte\n codePoint = buffer[offset++];\n }\n if ((codePoint >= 0 && codePoint <= 0xD7FF) || (codePoint >= 0xE000 && codePoint <= 0xFFFF)) {\n // Basic Multilingual Plane\n result.push(String.fromCharCode(codePoint));\n }\n else if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n // Supplementary Planes\n const uPrime = codePoint - 0x10000;\n const w1 = 0xD800 + ((uPrime & 0b11111111110000000000) >>> 10);\n const w2 = 0xDC00 + ((uPrime & 0b00000000001111111111) >>> 0);\n result.push(String.fromCharCode(w1));\n result.push(String.fromCharCode(w2));\n }\n else {\n // illegal code point\n result.push(String.fromCharCode(0xFFFD));\n }\n }\n return result.join('');\n}\n/**\n * Generated using https://github.com/alexdima/unicode-utils/blob/master/generate-rtl-test.js\n */\nconst CONTAINS_RTL = /(?:[\\u05BE\\u05C0\\u05C3\\u05C6\\u05D0-\\u05F4\\u0608\\u060B\\u060D\\u061B-\\u064A\\u066D-\\u066F\\u0671-\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1-\\u07EA\\u07F4\\u07F5\\u07FA-\\u0815\\u081A\\u0824\\u0828\\u0830-\\u0858\\u085E-\\u08BD\\u200F\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFD3D\\uFD50-\\uFDFC\\uFE70-\\uFEFC]|\\uD802[\\uDC00-\\uDD1B\\uDD20-\\uDE00\\uDE10-\\uDE33\\uDE40-\\uDEE4\\uDEEB-\\uDF35\\uDF40-\\uDFFF]|\\uD803[\\uDC00-\\uDCFF]|\\uD83A[\\uDC00-\\uDCCF\\uDD00-\\uDD43\\uDD50-\\uDFFF]|\\uD83B[\\uDC00-\\uDEBB])/;\n/**\n * Returns true if `str` contains any Unicode character that is classified as \"R\" or \"AL\".\n */\nexport function containsRTL(str) {\n return CONTAINS_RTL.test(str);\n}\n/**\n * Generated using https://github.com/alexdima/unicode-utils/blob/master/generate-emoji-test.js\n */\nconst CONTAINS_EMOJI = /(?:[\\u231A\\u231B\\u23F0\\u23F3\\u2600-\\u27BF\\u2B50\\u2B55]|\\uD83C[\\uDDE6-\\uDDFF\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDE4F\\uDE80-\\uDEFC\\uDFE0-\\uDFEB]|\\uD83E[\\uDD00-\\uDDFF\\uDE70-\\uDED6])/;\nexport function containsEmoji(str) {\n return CONTAINS_EMOJI.test(str);\n}\nconst IS_BASIC_ASCII = /^[\\t\\n\\r\\x20-\\x7E]*$/;\n/**\n * Returns true if `str` contains only basic ASCII characters in the range 32 - 126 (including 32 and 126) or \\n, \\r, \\t\n */\nexport function isBasicASCII(str) {\n return IS_BASIC_ASCII.test(str);\n}\nexport const UNUSUAL_LINE_TERMINATORS = /[\\u2028\\u2029]/; // LINE SEPARATOR (LS) or PARAGRAPH SEPARATOR (PS)\n/**\n * Returns true if `str` contains unusual line terminators, like LS or PS\n */\nexport function containsUnusualLineTerminators(str) {\n return UNUSUAL_LINE_TERMINATORS.test(str);\n}\nexport function containsFullWidthCharacter(str) {\n for (let i = 0, len = str.length; i < len; i++) {\n if (isFullWidthCharacter(str.charCodeAt(i))) {\n return true;\n }\n }\n return false;\n}\nexport function isFullWidthCharacter(charCode) {\n // Do a cheap trick to better support wrapping of wide characters, treat them as 2 columns\n // http://jrgraphix.net/research/unicode_blocks.php\n // 2E80 — 2EFF CJK Radicals Supplement\n // 2F00 — 2FDF Kangxi Radicals\n // 2FF0 — 2FFF Ideographic Description Characters\n // 3000 — 303F CJK Symbols and Punctuation\n // 3040 — 309F Hiragana\n // 30A0 — 30FF Katakana\n // 3100 — 312F Bopomofo\n // 3130 — 318F Hangul Compatibility Jamo\n // 3190 — 319F Kanbun\n // 31A0 — 31BF Bopomofo Extended\n // 31F0 — 31FF Katakana Phonetic Extensions\n // 3200 — 32FF Enclosed CJK Letters and Months\n // 3300 — 33FF CJK Compatibility\n // 3400 — 4DBF CJK Unified Ideographs Extension A\n // 4DC0 — 4DFF Yijing Hexagram Symbols\n // 4E00 — 9FFF CJK Unified Ideographs\n // A000 — A48F Yi Syllables\n // A490 — A4CF Yi Radicals\n // AC00 — D7AF Hangul Syllables\n // [IGNORE] D800 — DB7F High Surrogates\n // [IGNORE] DB80 — DBFF High Private Use Surrogates\n // [IGNORE] DC00 — DFFF Low Surrogates\n // [IGNORE] E000 — F8FF Private Use Area\n // F900 — FAFF CJK Compatibility Ideographs\n // [IGNORE] FB00 — FB4F Alphabetic Presentation Forms\n // [IGNORE] FB50 — FDFF Arabic Presentation Forms-A\n // [IGNORE] FE00 — FE0F Variation Selectors\n // [IGNORE] FE20 — FE2F Combining Half Marks\n // [IGNORE] FE30 — FE4F CJK Compatibility Forms\n // [IGNORE] FE50 — FE6F Small Form Variants\n // [IGNORE] FE70 — FEFF Arabic Presentation Forms-B\n // FF00 — FFEF Halfwidth and Fullwidth Forms\n // [https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms]\n // of which FF01 - FF5E fullwidth ASCII of 21 to 7E\n // [IGNORE] and FF65 - FFDC halfwidth of Katakana and Hangul\n // [IGNORE] FFF0 — FFFF Specials\n charCode = +charCode; // @perf\n return ((charCode >= 0x2E80 && charCode <= 0xD7AF)\n || (charCode >= 0xF900 && charCode <= 0xFAFF)\n || (charCode >= 0xFF01 && charCode <= 0xFF5E));\n}\n/**\n * A fast function (therefore imprecise) to check if code points are emojis.\n * Generated using https://github.com/alexdima/unicode-utils/blob/master/generate-emoji-test.js\n */\nexport function isEmojiImprecise(x) {\n return ((x >= 0x1F1E6 && x <= 0x1F1FF) || (x === 8986) || (x === 8987) || (x === 9200)\n || (x === 9203) || (x >= 9728 && x <= 10175) || (x === 11088) || (x === 11093)\n || (x >= 127744 && x <= 128591) || (x >= 128640 && x <= 128764)\n || (x >= 128992 && x <= 129003) || (x >= 129280 && x <= 129535)\n || (x >= 129648 && x <= 129750));\n}\n// -- UTF-8 BOM\nexport const UTF8_BOM_CHARACTER = String.fromCharCode(65279 /* UTF8_BOM */);\nexport function startsWithUTF8BOM(str) {\n return !!(str && str.length > 0 && str.charCodeAt(0) === 65279 /* UTF8_BOM */);\n}\nexport function containsUppercaseCharacter(target, ignoreEscapedChars = false) {\n if (!target) {\n return false;\n }\n if (ignoreEscapedChars) {\n target = target.replace(/\\\\./g, '');\n }\n return target.toLowerCase() !== target;\n}\n/**\n * Produces 'a'-'z', followed by 'A'-'Z'... followed by 'a'-'z', etc.\n */\nexport function singleLetterHash(n) {\n const LETTERS_CNT = (90 /* Z */ - 65 /* A */ + 1);\n n = n % (2 * LETTERS_CNT);\n if (n < LETTERS_CNT) {\n return String.fromCharCode(97 /* a */ + n);\n }\n return String.fromCharCode(65 /* A */ + n - LETTERS_CNT);\n}\n//#region Unicode Grapheme Break\nexport function getGraphemeBreakType(codePoint) {\n const graphemeBreakTree = GraphemeBreakTree.getInstance();\n return graphemeBreakTree.getGraphemeBreakType(codePoint);\n}\nexport function breakBetweenGraphemeBreakType(breakTypeA, breakTypeB) {\n // http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundary_Rules\n // !!! Let's make the common case a bit faster\n if (breakTypeA === 0 /* Other */) {\n // see https://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakTest-13.0.0d10.html#table\n return (breakTypeB !== 5 /* Extend */ && breakTypeB !== 7 /* SpacingMark */);\n }\n // Do not break between a CR and LF. Otherwise, break before and after controls.\n // GB3 CR × LF\n // GB4 (Control | CR | LF) ÷\n // GB5 ÷ (Control | CR | LF)\n if (breakTypeA === 2 /* CR */) {\n if (breakTypeB === 3 /* LF */) {\n return false; // GB3\n }\n }\n if (breakTypeA === 4 /* Control */ || breakTypeA === 2 /* CR */ || breakTypeA === 3 /* LF */) {\n return true; // GB4\n }\n if (breakTypeB === 4 /* Control */ || breakTypeB === 2 /* CR */ || breakTypeB === 3 /* LF */) {\n return true; // GB5\n }\n // Do not break Hangul syllable sequences.\n // GB6 L × (L | V | LV | LVT)\n // GB7 (LV | V) × (V | T)\n // GB8 (LVT | T) × T\n if (breakTypeA === 8 /* L */) {\n if (breakTypeB === 8 /* L */ || breakTypeB === 9 /* V */ || breakTypeB === 11 /* LV */ || breakTypeB === 12 /* LVT */) {\n return false; // GB6\n }\n }\n if (breakTypeA === 11 /* LV */ || breakTypeA === 9 /* V */) {\n if (breakTypeB === 9 /* V */ || breakTypeB === 10 /* T */) {\n return false; // GB7\n }\n }\n if (breakTypeA === 12 /* LVT */ || breakTypeA === 10 /* T */) {\n if (breakTypeB === 10 /* T */) {\n return false; // GB8\n }\n }\n // Do not break before extending characters or ZWJ.\n // GB9 × (Extend | ZWJ)\n if (breakTypeB === 5 /* Extend */ || breakTypeB === 13 /* ZWJ */) {\n return false; // GB9\n }\n // The GB9a and GB9b rules only apply to extended grapheme clusters:\n // Do not break before SpacingMarks, or after Prepend characters.\n // GB9a × SpacingMark\n // GB9b Prepend ×\n if (breakTypeB === 7 /* SpacingMark */) {\n return false; // GB9a\n }\n if (breakTypeA === 1 /* Prepend */) {\n return false; // GB9b\n }\n // Do not break within emoji modifier sequences or emoji zwj sequences.\n // GB11 \\p{Extended_Pictographic} Extend* ZWJ × \\p{Extended_Pictographic}\n if (breakTypeA === 13 /* ZWJ */ && breakTypeB === 14 /* Extended_Pictographic */) {\n // Note: we are not implementing the rule entirely here to avoid introducing states\n return false; // GB11\n }\n // GB12 sot (RI RI)* RI × RI\n // GB13 [^RI] (RI RI)* RI × RI\n if (breakTypeA === 6 /* Regional_Indicator */ && breakTypeB === 6 /* Regional_Indicator */) {\n // Note: we are not implementing the rule entirely here to avoid introducing states\n return false; // GB12 & GB13\n }\n // GB999 Any ÷ Any\n return true;\n}\nclass GraphemeBreakTree {\n constructor() {\n this._data = getGraphemeBreakRawData();\n }\n static getInstance() {\n if (!GraphemeBreakTree._INSTANCE) {\n GraphemeBreakTree._INSTANCE = new GraphemeBreakTree();\n }\n return GraphemeBreakTree._INSTANCE;\n }\n getGraphemeBreakType(codePoint) {\n // !!! Let's make 7bit ASCII a bit faster: 0..31\n if (codePoint < 32) {\n if (codePoint === 10 /* LineFeed */) {\n return 3 /* LF */;\n }\n if (codePoint === 13 /* CarriageReturn */) {\n return 2 /* CR */;\n }\n return 4 /* Control */;\n }\n // !!! Let's make 7bit ASCII a bit faster: 32..126\n if (codePoint < 127) {\n return 0 /* Other */;\n }\n const data = this._data;\n const nodeCount = data.length / 3;\n let nodeIndex = 1;\n while (nodeIndex <= nodeCount) {\n if (codePoint < data[3 * nodeIndex]) {\n // go left\n nodeIndex = 2 * nodeIndex;\n }\n else if (codePoint > data[3 * nodeIndex + 1]) {\n // go right\n nodeIndex = 2 * nodeIndex + 1;\n }\n else {\n // hit\n return data[3 * nodeIndex + 2];\n }\n }\n return 0 /* Other */;\n }\n}\nGraphemeBreakTree._INSTANCE = null;\nfunction getGraphemeBreakRawData() {\n // generated using https://github.com/alexdima/unicode-utils/blob/master/generate-grapheme-break.js\n return JSON.parse('[0,0,0,51592,51592,11,44424,44424,11,72251,72254,5,7150,7150,7,48008,48008,11,55176,55176,11,128420,128420,14,3276,3277,5,9979,9980,14,46216,46216,11,49800,49800,11,53384,53384,11,70726,70726,5,122915,122916,5,129320,129327,14,2558,2558,5,5906,5908,5,9762,9763,14,43360,43388,8,45320,45320,11,47112,47112,11,48904,48904,11,50696,50696,11,52488,52488,11,54280,54280,11,70082,70083,1,71350,71350,7,73111,73111,5,127892,127893,14,128726,128727,14,129473,129474,14,2027,2035,5,2901,2902,5,3784,3789,5,6754,6754,5,8418,8420,5,9877,9877,14,11088,11088,14,44008,44008,5,44872,44872,11,45768,45768,11,46664,46664,11,47560,47560,11,48456,48456,11,49352,49352,11,50248,50248,11,51144,51144,11,52040,52040,11,52936,52936,11,53832,53832,11,54728,54728,11,69811,69814,5,70459,70460,5,71096,71099,7,71998,71998,5,72874,72880,5,119149,119149,7,127374,127374,14,128335,128335,14,128482,128482,14,128765,128767,14,129399,129400,14,129680,129685,14,1476,1477,5,2377,2380,7,2759,2760,5,3137,3140,7,3458,3459,7,4153,4154,5,6432,6434,5,6978,6978,5,7675,7679,5,9723,9726,14,9823,9823,14,9919,9923,14,10035,10036,14,42736,42737,5,43596,43596,5,44200,44200,11,44648,44648,11,45096,45096,11,45544,45544,11,45992,45992,11,46440,46440,11,46888,46888,11,47336,47336,11,47784,47784,11,48232,48232,11,48680,48680,11,49128,49128,11,49576,49576,11,50024,50024,11,50472,50472,11,50920,50920,11,51368,51368,11,51816,51816,11,52264,52264,11,52712,52712,11,53160,53160,11,53608,53608,11,54056,54056,11,54504,54504,11,54952,54952,11,68108,68111,5,69933,69940,5,70197,70197,7,70498,70499,7,70845,70845,5,71229,71229,5,71727,71735,5,72154,72155,5,72344,72345,5,73023,73029,5,94095,94098,5,121403,121452,5,126981,127182,14,127538,127546,14,127990,127990,14,128391,128391,14,128445,128449,14,128500,128505,14,128752,128752,14,129160,129167,14,129356,129356,14,129432,129442,14,129648,129651,14,129751,131069,14,173,173,4,1757,1757,1,2274,2274,1,2494,2494,5,2641,2641,5,2876,2876,5,3014,3016,7,3262,3262,7,3393,3396,5,3570,3571,7,3968,3972,5,4228,4228,7,6086,6086,5,6679,6680,5,6912,6915,5,7080,7081,5,7380,7392,5,8252,8252,14,9096,9096,14,9748,9749,14,9784,9786,14,9833,9850,14,9890,9894,14,9938,9938,14,9999,9999,14,10085,10087,14,12349,12349,14,43136,43137,7,43454,43456,7,43755,43755,7,44088,44088,11,44312,44312,11,44536,44536,11,44760,44760,11,44984,44984,11,45208,45208,11,45432,45432,11,45656,45656,11,45880,45880,11,46104,46104,11,46328,46328,11,46552,46552,11,46776,46776,11,47000,47000,11,47224,47224,11,47448,47448,11,47672,47672,11,47896,47896,11,48120,48120,11,48344,48344,11,48568,48568,11,48792,48792,11,49016,49016,11,49240,49240,11,49464,49464,11,49688,49688,11,49912,49912,11,50136,50136,11,50360,50360,11,50584,50584,11,50808,50808,11,51032,51032,11,51256,51256,11,51480,51480,11,51704,51704,11,51928,51928,11,52152,52152,11,52376,52376,11,52600,52600,11,52824,52824,11,53048,53048,11,53272,53272,11,53496,53496,11,53720,53720,11,53944,53944,11,54168,54168,11,54392,54392,11,54616,54616,11,54840,54840,11,55064,55064,11,65438,65439,5,69633,69633,5,69837,69837,1,70018,70018,7,70188,70190,7,70368,70370,7,70465,70468,7,70712,70719,5,70835,70840,5,70850,70851,5,71132,71133,5,71340,71340,7,71458,71461,5,71985,71989,7,72002,72002,7,72193,72202,5,72281,72283,5,72766,72766,7,72885,72886,5,73104,73105,5,92912,92916,5,113824,113827,4,119173,119179,5,121505,121519,5,125136,125142,5,127279,127279,14,127489,127490,14,127570,127743,14,127900,127901,14,128254,128254,14,128369,128370,14,128400,128400,14,128425,128432,14,128468,128475,14,128489,128494,14,128715,128720,14,128745,128745,14,128759,128760,14,129004,129023,14,129296,129304,14,129340,129342,14,129388,129392,14,129404,129407,14,129454,129455,14,129485,129487,14,129659,129663,14,129719,129727,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2363,2363,7,2402,2403,5,2507,2508,7,2622,2624,7,2691,2691,7,2786,2787,5,2881,2884,5,3006,3006,5,3072,3072,5,3170,3171,5,3267,3268,7,3330,3331,7,3406,3406,1,3538,3540,5,3655,3662,5,3897,3897,5,4038,4038,5,4184,4185,5,4352,4447,8,6068,6069,5,6155,6157,5,6448,6449,7,6742,6742,5,6783,6783,5,6966,6970,5,7042,7042,7,7143,7143,7,7212,7219,5,7412,7412,5,8206,8207,4,8294,8303,4,8596,8601,14,9410,9410,14,9742,9742,14,9757,9757,14,9770,9770,14,9794,9794,14,9828,9828,14,9855,9855,14,9882,9882,14,9900,9903,14,9929,9933,14,9963,9967,14,9987,9988,14,10006,10006,14,10062,10062,14,10175,10175,14,11744,11775,5,42607,42607,5,43043,43044,7,43263,43263,5,43444,43445,7,43569,43570,5,43698,43700,5,43766,43766,5,44032,44032,11,44144,44144,11,44256,44256,11,44368,44368,11,44480,44480,11,44592,44592,11,44704,44704,11,44816,44816,11,44928,44928,11,45040,45040,11,45152,45152,11,45264,45264,11,45376,45376,11,45488,45488,11,45600,45600,11,45712,45712,11,45824,45824,11,45936,45936,11,46048,46048,11,46160,46160,11,46272,46272,11,46384,46384,11,46496,46496,11,46608,46608,11,46720,46720,11,46832,46832,11,46944,46944,11,47056,47056,11,47168,47168,11,47280,47280,11,47392,47392,11,47504,47504,11,47616,47616,11,47728,47728,11,47840,47840,11,47952,47952,11,48064,48064,11,48176,48176,11,48288,48288,11,48400,48400,11,48512,48512,11,48624,48624,11,48736,48736,11,48848,48848,11,48960,48960,11,49072,49072,11,49184,49184,11,49296,49296,11,49408,49408,11,49520,49520,11,49632,49632,11,49744,49744,11,49856,49856,11,49968,49968,11,50080,50080,11,50192,50192,11,50304,50304,11,50416,50416,11,50528,50528,11,50640,50640,11,50752,50752,11,50864,50864,11,50976,50976,11,51088,51088,11,51200,51200,11,51312,51312,11,51424,51424,11,51536,51536,11,51648,51648,11,51760,51760,11,51872,51872,11,51984,51984,11,52096,52096,11,52208,52208,11,52320,52320,11,52432,52432,11,52544,52544,11,52656,52656,11,52768,52768,11,52880,52880,11,52992,52992,11,53104,53104,11,53216,53216,11,53328,53328,11,53440,53440,11,53552,53552,11,53664,53664,11,53776,53776,11,53888,53888,11,54000,54000,11,54112,54112,11,54224,54224,11,54336,54336,11,54448,54448,11,54560,54560,11,54672,54672,11,54784,54784,11,54896,54896,11,55008,55008,11,55120,55120,11,64286,64286,5,66272,66272,5,68900,68903,5,69762,69762,7,69817,69818,5,69927,69931,5,70003,70003,5,70070,70078,5,70094,70094,7,70194,70195,7,70206,70206,5,70400,70401,5,70463,70463,7,70475,70477,7,70512,70516,5,70722,70724,5,70832,70832,5,70842,70842,5,70847,70848,5,71088,71089,7,71102,71102,7,71219,71226,5,71231,71232,5,71342,71343,7,71453,71455,5,71463,71467,5,71737,71738,5,71995,71996,5,72000,72000,7,72145,72147,7,72160,72160,5,72249,72249,7,72273,72278,5,72330,72342,5,72752,72758,5,72850,72871,5,72882,72883,5,73018,73018,5,73031,73031,5,73109,73109,5,73461,73462,7,94031,94031,5,94192,94193,7,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,126976,126979,14,127184,127231,14,127344,127345,14,127405,127461,14,127514,127514,14,127561,127567,14,127778,127779,14,127896,127896,14,127985,127986,14,127995,127999,5,128326,128328,14,128360,128366,14,128378,128378,14,128394,128397,14,128405,128406,14,128422,128423,14,128435,128443,14,128453,128464,14,128479,128480,14,128484,128487,14,128496,128498,14,128640,128709,14,128723,128724,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129096,129103,14,129292,129292,14,129311,129311,14,129329,129330,14,129344,129349,14,129360,129374,14,129394,129394,14,129402,129402,14,129413,129425,14,129445,129450,14,129466,129471,14,129483,129483,14,129511,129535,14,129653,129655,14,129667,129670,14,129705,129711,14,129731,129743,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2307,2307,7,2366,2368,7,2382,2383,7,2434,2435,7,2497,2500,5,2519,2519,5,2563,2563,7,2631,2632,5,2677,2677,5,2750,2752,7,2763,2764,7,2817,2817,5,2879,2879,5,2891,2892,7,2914,2915,5,3008,3008,5,3021,3021,5,3076,3076,5,3146,3149,5,3202,3203,7,3264,3265,7,3271,3272,7,3298,3299,5,3390,3390,5,3402,3404,7,3426,3427,5,3535,3535,5,3544,3550,7,3635,3635,7,3763,3763,7,3893,3893,5,3953,3966,5,3981,3991,5,4145,4145,7,4157,4158,5,4209,4212,5,4237,4237,5,4520,4607,10,5970,5971,5,6071,6077,5,6089,6099,5,6277,6278,5,6439,6440,5,6451,6456,7,6683,6683,5,6744,6750,5,6765,6770,7,6846,6846,5,6964,6964,5,6972,6972,5,7019,7027,5,7074,7077,5,7083,7085,5,7146,7148,7,7154,7155,7,7222,7223,5,7394,7400,5,7416,7417,5,8204,8204,5,8233,8233,4,8288,8292,4,8413,8416,5,8482,8482,14,8986,8987,14,9193,9203,14,9654,9654,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9775,14,9792,9792,14,9800,9811,14,9825,9826,14,9831,9831,14,9852,9853,14,9872,9873,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9936,9936,14,9941,9960,14,9974,9974,14,9982,9985,14,9992,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10145,10145,14,11013,11015,14,11503,11505,5,12334,12335,5,12951,12951,14,42612,42621,5,43014,43014,5,43047,43047,7,43204,43205,5,43335,43345,5,43395,43395,7,43450,43451,7,43561,43566,5,43573,43574,5,43644,43644,5,43710,43711,5,43758,43759,7,44005,44005,5,44012,44012,7,44060,44060,11,44116,44116,11,44172,44172,11,44228,44228,11,44284,44284,11,44340,44340,11,44396,44396,11,44452,44452,11,44508,44508,11,44564,44564,11,44620,44620,11,44676,44676,11,44732,44732,11,44788,44788,11,44844,44844,11,44900,44900,11,44956,44956,11,45012,45012,11,45068,45068,11,45124,45124,11,45180,45180,11,45236,45236,11,45292,45292,11,45348,45348,11,45404,45404,11,45460,45460,11,45516,45516,11,45572,45572,11,45628,45628,11,45684,45684,11,45740,45740,11,45796,45796,11,45852,45852,11,45908,45908,11,45964,45964,11,46020,46020,11,46076,46076,11,46132,46132,11,46188,46188,11,46244,46244,11,46300,46300,11,46356,46356,11,46412,46412,11,46468,46468,11,46524,46524,11,46580,46580,11,46636,46636,11,46692,46692,11,46748,46748,11,46804,46804,11,46860,46860,11,46916,46916,11,46972,46972,11,47028,47028,11,47084,47084,11,47140,47140,11,47196,47196,11,47252,47252,11,47308,47308,11,47364,47364,11,47420,47420,11,47476,47476,11,47532,47532,11,47588,47588,11,47644,47644,11,47700,47700,11,47756,47756,11,47812,47812,11,47868,47868,11,47924,47924,11,47980,47980,11,48036,48036,11,48092,48092,11,48148,48148,11,48204,48204,11,48260,48260,11,48316,48316,11,48372,48372,11,48428,48428,11,48484,48484,11,48540,48540,11,48596,48596,11,48652,48652,11,48708,48708,11,48764,48764,11,48820,48820,11,48876,48876,11,48932,48932,11,48988,48988,11,49044,49044,11,49100,49100,11,49156,49156,11,49212,49212,11,49268,49268,11,49324,49324,11,49380,49380,11,49436,49436,11,49492,49492,11,49548,49548,11,49604,49604,11,49660,49660,11,49716,49716,11,49772,49772,11,49828,49828,11,49884,49884,11,49940,49940,11,49996,49996,11,50052,50052,11,50108,50108,11,50164,50164,11,50220,50220,11,50276,50276,11,50332,50332,11,50388,50388,11,50444,50444,11,50500,50500,11,50556,50556,11,50612,50612,11,50668,50668,11,50724,50724,11,50780,50780,11,50836,50836,11,50892,50892,11,50948,50948,11,51004,51004,11,51060,51060,11,51116,51116,11,51172,51172,11,51228,51228,11,51284,51284,11,51340,51340,11,51396,51396,11,51452,51452,11,51508,51508,11,51564,51564,11,51620,51620,11,51676,51676,11,51732,51732,11,51788,51788,11,51844,51844,11,51900,51900,11,51956,51956,11,52012,52012,11,52068,52068,11,52124,52124,11,52180,52180,11,52236,52236,11,52292,52292,11,52348,52348,11,52404,52404,11,52460,52460,11,52516,52516,11,52572,52572,11,52628,52628,11,52684,52684,11,52740,52740,11,52796,52796,11,52852,52852,11,52908,52908,11,52964,52964,11,53020,53020,11,53076,53076,11,53132,53132,11,53188,53188,11,53244,53244,11,53300,53300,11,53356,53356,11,53412,53412,11,53468,53468,11,53524,53524,11,53580,53580,11,53636,53636,11,53692,53692,11,53748,53748,11,53804,53804,11,53860,53860,11,53916,53916,11,53972,53972,11,54028,54028,11,54084,54084,11,54140,54140,11,54196,54196,11,54252,54252,11,54308,54308,11,54364,54364,11,54420,54420,11,54476,54476,11,54532,54532,11,54588,54588,11,54644,54644,11,54700,54700,11,54756,54756,11,54812,54812,11,54868,54868,11,54924,54924,11,54980,54980,11,55036,55036,11,55092,55092,11,55148,55148,11,55216,55238,9,65056,65071,5,65529,65531,4,68097,68099,5,68159,68159,5,69446,69456,5,69688,69702,5,69808,69810,7,69815,69816,7,69821,69821,1,69888,69890,5,69932,69932,7,69957,69958,7,70016,70017,5,70067,70069,7,70079,70080,7,70089,70092,5,70095,70095,5,70191,70193,5,70196,70196,5,70198,70199,5,70367,70367,5,70371,70378,5,70402,70403,7,70462,70462,5,70464,70464,5,70471,70472,7,70487,70487,5,70502,70508,5,70709,70711,7,70720,70721,7,70725,70725,7,70750,70750,5,70833,70834,7,70841,70841,7,70843,70844,7,70846,70846,7,70849,70849,7,71087,71087,5,71090,71093,5,71100,71101,5,71103,71104,5,71216,71218,7,71227,71228,7,71230,71230,7,71339,71339,5,71341,71341,5,71344,71349,5,71351,71351,5,71456,71457,7,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123628,123631,5,125252,125258,5,126980,126980,14,127183,127183,14,127245,127247,14,127340,127343,14,127358,127359,14,127377,127386,14,127462,127487,6,127491,127503,14,127535,127535,14,127548,127551,14,127568,127569,14,127744,127777,14,127780,127891,14,127894,127895,14,127897,127899,14,127902,127984,14,127987,127989,14,127991,127994,14,128000,128253,14,128255,128317,14,128329,128334,14,128336,128359,14,128367,128368,14,128371,128377,14,128379,128390,14,128392,128393,14,128398,128399,14,128401,128404,14,128407,128419,14,128421,128421,14,128424,128424,14,128433,128434,14,128444,128444,14,128450,128452,14,128465,128467,14,128476,128478,14,128481,128481,14,128483,128483,14,128488,128488,14,128495,128495,14,128499,128499,14,128506,128591,14,128710,128714,14,128721,128722,14,128725,128725,14,128728,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129664,129666,14,129671,129679,14,129686,129704,14,129712,129718,14,129728,129730,14,129744,129750,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2259,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3134,3136,5,3142,3144,5,3157,3158,5,3201,3201,5,3260,3260,5,3263,3263,5,3266,3266,5,3270,3270,5,3274,3275,7,3285,3286,5,3328,3329,5,3387,3388,5,3391,3392,7,3398,3400,7,3405,3405,5,3415,3415,5,3457,3457,5,3530,3530,5,3536,3537,7,3542,3542,5,3551,3551,5,3633,3633,5,3636,3642,5,3761,3761,5,3764,3772,5,3864,3865,5,3895,3895,5,3902,3903,7,3967,3967,7,3974,3975,5,3993,4028,5,4141,4144,5,4146,4151,5,4155,4156,7,4182,4183,7,4190,4192,5,4226,4226,5,4229,4230,5,4253,4253,5,4448,4519,9,4957,4959,5,5938,5940,5,6002,6003,5,6070,6070,7,6078,6085,7,6087,6088,7,6109,6109,5,6158,6158,4,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6848,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7673,5,8203,8203,4,8205,8205,13,8232,8232,4,8234,8238,4,8265,8265,14,8293,8293,4,8400,8412,5,8417,8417,5,8421,8432,5,8505,8505,14,8617,8618,14,9000,9000,14,9167,9167,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9776,9783,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9935,14,9937,9937,14,9939,9940,14,9961,9962,14,9968,9973,14,9975,9978,14,9981,9981,14,9986,9986,14,9989,9989,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10084,14,10133,10135,14,10160,10160,14,10548,10549,14,11035,11036,14,11093,11093,14,11647,11647,5,12330,12333,5,12336,12336,14,12441,12442,5,12953,12953,14,42608,42610,5,42654,42655,5,43010,43010,5,43019,43019,5,43045,43046,5,43052,43052,5,43188,43203,7,43232,43249,5,43302,43309,5,43346,43347,7,43392,43394,5,43443,43443,5,43446,43449,5,43452,43453,5,43493,43493,5,43567,43568,7,43571,43572,7,43587,43587,5,43597,43597,7,43696,43696,5,43703,43704,5,43713,43713,5,43756,43757,5,43765,43765,7,44003,44004,7,44006,44007,7,44009,44010,7,44013,44013,5,44033,44059,12,44061,44087,12,44089,44115,12,44117,44143,12,44145,44171,12,44173,44199,12,44201,44227,12,44229,44255,12,44257,44283,12,44285,44311,12,44313,44339,12,44341,44367,12,44369,44395,12,44397,44423,12,44425,44451,12,44453,44479,12,44481,44507,12,44509,44535,12,44537,44563,12,44565,44591,12,44593,44619,12,44621,44647,12,44649,44675,12,44677,44703,12,44705,44731,12,44733,44759,12,44761,44787,12,44789,44815,12,44817,44843,12,44845,44871,12,44873,44899,12,44901,44927,12,44929,44955,12,44957,44983,12,44985,45011,12,45013,45039,12,45041,45067,12,45069,45095,12,45097,45123,12,45125,45151,12,45153,45179,12,45181,45207,12,45209,45235,12,45237,45263,12,45265,45291,12,45293,45319,12,45321,45347,12,45349,45375,12,45377,45403,12,45405,45431,12,45433,45459,12,45461,45487,12,45489,45515,12,45517,45543,12,45545,45571,12,45573,45599,12,45601,45627,12,45629,45655,12,45657,45683,12,45685,45711,12,45713,45739,12,45741,45767,12,45769,45795,12,45797,45823,12,45825,45851,12,45853,45879,12,45881,45907,12,45909,45935,12,45937,45963,12,45965,45991,12,45993,46019,12,46021,46047,12,46049,46075,12,46077,46103,12,46105,46131,12,46133,46159,12,46161,46187,12,46189,46215,12,46217,46243,12,46245,46271,12,46273,46299,12,46301,46327,12,46329,46355,12,46357,46383,12,46385,46411,12,46413,46439,12,46441,46467,12,46469,46495,12,46497,46523,12,46525,46551,12,46553,46579,12,46581,46607,12,46609,46635,12,46637,46663,12,46665,46691,12,46693,46719,12,46721,46747,12,46749,46775,12,46777,46803,12,46805,46831,12,46833,46859,12,46861,46887,12,46889,46915,12,46917,46943,12,46945,46971,12,46973,46999,12,47001,47027,12,47029,47055,12,47057,47083,12,47085,47111,12,47113,47139,12,47141,47167,12,47169,47195,12,47197,47223,12,47225,47251,12,47253,47279,12,47281,47307,12,47309,47335,12,47337,47363,12,47365,47391,12,47393,47419,12,47421,47447,12,47449,47475,12,47477,47503,12,47505,47531,12,47533,47559,12,47561,47587,12,47589,47615,12,47617,47643,12,47645,47671,12,47673,47699,12,47701,47727,12,47729,47755,12,47757,47783,12,47785,47811,12,47813,47839,12,47841,47867,12,47869,47895,12,47897,47923,12,47925,47951,12,47953,47979,12,47981,48007,12,48009,48035,12,48037,48063,12,48065,48091,12,48093,48119,12,48121,48147,12,48149,48175,12,48177,48203,12,48205,48231,12,48233,48259,12,48261,48287,12,48289,48315,12,48317,48343,12,48345,48371,12,48373,48399,12,48401,48427,12,48429,48455,12,48457,48483,12,48485,48511,12,48513,48539,12,48541,48567,12,48569,48595,12,48597,48623,12,48625,48651,12,48653,48679,12,48681,48707,12,48709,48735,12,48737,48763,12,48765,48791,12,48793,48819,12,48821,48847,12,48849,48875,12,48877,48903,12,48905,48931,12,48933,48959,12,48961,48987,12,48989,49015,12,49017,49043,12,49045,49071,12,49073,49099,12,49101,49127,12,49129,49155,12,49157,49183,12,49185,49211,12,49213,49239,12,49241,49267,12,49269,49295,12,49297,49323,12,49325,49351,12,49353,49379,12,49381,49407,12,49409,49435,12,49437,49463,12,49465,49491,12,49493,49519,12,49521,49547,12,49549,49575,12,49577,49603,12,49605,49631,12,49633,49659,12,49661,49687,12,49689,49715,12,49717,49743,12,49745,49771,12,49773,49799,12,49801,49827,12,49829,49855,12,49857,49883,12,49885,49911,12,49913,49939,12,49941,49967,12,49969,49995,12,49997,50023,12,50025,50051,12,50053,50079,12,50081,50107,12,50109,50135,12,50137,50163,12,50165,50191,12,50193,50219,12,50221,50247,12,50249,50275,12,50277,50303,12,50305,50331,12,50333,50359,12,50361,50387,12,50389,50415,12,50417,50443,12,50445,50471,12,50473,50499,12,50501,50527,12,50529,50555,12,50557,50583,12,50585,50611,12,50613,50639,12,50641,50667,12,50669,50695,12,50697,50723,12,50725,50751,12,50753,50779,12,50781,50807,12,50809,50835,12,50837,50863,12,50865,50891,12,50893,50919,12,50921,50947,12,50949,50975,12,50977,51003,12,51005,51031,12,51033,51059,12,51061,51087,12,51089,51115,12,51117,51143,12,51145,51171,12,51173,51199,12,51201,51227,12,51229,51255,12,51257,51283,12,51285,51311,12,51313,51339,12,51341,51367,12,51369,51395,12,51397,51423,12,51425,51451,12,51453,51479,12,51481,51507,12,51509,51535,12,51537,51563,12,51565,51591,12,51593,51619,12,51621,51647,12,51649,51675,12,51677,51703,12,51705,51731,12,51733,51759,12,51761,51787,12,51789,51815,12,51817,51843,12,51845,51871,12,51873,51899,12,51901,51927,12,51929,51955,12,51957,51983,12,51985,52011,12,52013,52039,12,52041,52067,12,52069,52095,12,52097,52123,12,52125,52151,12,52153,52179,12,52181,52207,12,52209,52235,12,52237,52263,12,52265,52291,12,52293,52319,12,52321,52347,12,52349,52375,12,52377,52403,12,52405,52431,12,52433,52459,12,52461,52487,12,52489,52515,12,52517,52543,12,52545,52571,12,52573,52599,12,52601,52627,12,52629,52655,12,52657,52683,12,52685,52711,12,52713,52739,12,52741,52767,12,52769,52795,12,52797,52823,12,52825,52851,12,52853,52879,12,52881,52907,12,52909,52935,12,52937,52963,12,52965,52991,12,52993,53019,12,53021,53047,12,53049,53075,12,53077,53103,12,53105,53131,12,53133,53159,12,53161,53187,12,53189,53215,12,53217,53243,12,53245,53271,12,53273,53299,12,53301,53327,12,53329,53355,12,53357,53383,12,53385,53411,12,53413,53439,12,53441,53467,12,53469,53495,12,53497,53523,12,53525,53551,12,53553,53579,12,53581,53607,12,53609,53635,12,53637,53663,12,53665,53691,12,53693,53719,12,53721,53747,12,53749,53775,12,53777,53803,12,53805,53831,12,53833,53859,12,53861,53887,12,53889,53915,12,53917,53943,12,53945,53971,12,53973,53999,12,54001,54027,12,54029,54055,12,54057,54083,12,54085,54111,12,54113,54139,12,54141,54167,12,54169,54195,12,54197,54223,12,54225,54251,12,54253,54279,12,54281,54307,12,54309,54335,12,54337,54363,12,54365,54391,12,54393,54419,12,54421,54447,12,54449,54475,12,54477,54503,12,54505,54531,12,54533,54559,12,54561,54587,12,54589,54615,12,54617,54643,12,54645,54671,12,54673,54699,12,54701,54727,12,54729,54755,12,54757,54783,12,54785,54811,12,54813,54839,12,54841,54867,12,54869,54895,12,54897,54923,12,54925,54951,12,54953,54979,12,54981,55007,12,55009,55035,12,55037,55063,12,55065,55091,12,55093,55119,12,55121,55147,12,55149,55175,12,55177,55203,12,55243,55291,10,65024,65039,5,65279,65279,4,65520,65528,4,66045,66045,5,66422,66426,5,68101,68102,5,68152,68154,5,68325,68326,5,69291,69292,5,69632,69632,7,69634,69634,7,69759,69761,5]');\n}\n//#endregion\n","/**\n * @returns whether the provided parameter is a JavaScript Array or not.\n */\nexport function isArray(array) {\n return Array.isArray(array);\n}\n/**\n * @returns whether the provided parameter is a JavaScript String or not.\n */\nexport function isString(str) {\n return (typeof str === 'string');\n}\n/**\n *\n * @returns whether the provided parameter is of type `object` but **not**\n *\t`null`, an `array`, a `regexp`, nor a `date`.\n */\nexport function isObject(obj) {\n // The method can't do a type cast since there are type (like strings) which\n // are subclasses of any put not positvely matched by the function. Hence type\n // narrowing results in wrong results.\n return typeof obj === 'object'\n && obj !== null\n && !Array.isArray(obj)\n && !(obj instanceof RegExp)\n && !(obj instanceof Date);\n}\n/**\n * In **contrast** to just checking `typeof` this will return `false` for `NaN`.\n * @returns whether the provided parameter is a JavaScript Number or not.\n */\nexport function isNumber(obj) {\n return (typeof obj === 'number' && !isNaN(obj));\n}\n/**\n * @returns whether the provided parameter is a JavaScript Boolean or not.\n */\nexport function isBoolean(obj) {\n return (obj === true || obj === false);\n}\n/**\n * @returns whether the provided parameter is undefined.\n */\nexport function isUndefined(obj) {\n return (typeof obj === 'undefined');\n}\n/**\n * @returns whether the provided parameter is undefined or null.\n */\nexport function isUndefinedOrNull(obj) {\n return (isUndefined(obj) || obj === null);\n}\nexport function assertType(condition, type) {\n if (!condition) {\n throw new Error(type ? `Unexpected type, expected '${type}'` : 'Unexpected type');\n }\n}\n/**\n * Asserts that the argument passed in is neither undefined nor null.\n */\nexport function assertIsDefined(arg) {\n if (isUndefinedOrNull(arg)) {\n throw new Error('Assertion Failed: argument is undefined or null');\n }\n return arg;\n}\n/**\n * @returns whether the provided parameter is a JavaScript Function or not.\n */\nexport function isFunction(obj) {\n return (typeof obj === 'function');\n}\nexport function validateConstraints(args, constraints) {\n const len = Math.min(args.length, constraints.length);\n for (let i = 0; i < len; i++) {\n validateConstraint(args[i], constraints[i]);\n }\n}\nexport function validateConstraint(arg, constraint) {\n if (isString(constraint)) {\n if (typeof arg !== constraint) {\n throw new Error(`argument does not match constraint: typeof ${constraint}`);\n }\n }\n else if (isFunction(constraint)) {\n try {\n if (arg instanceof constraint) {\n return;\n }\n }\n catch (_a) {\n // ignore\n }\n if (!isUndefinedOrNull(arg) && arg.constructor === constraint) {\n return;\n }\n if (constraint.length === 1 && constraint.call(undefined, arg) === true) {\n return;\n }\n throw new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`);\n }\n}\nexport function getAllPropertyNames(obj) {\n let res = [];\n let proto = Object.getPrototypeOf(obj);\n while (Object.prototype !== proto) {\n res = res.concat(Object.getOwnPropertyNames(proto));\n proto = Object.getPrototypeOf(proto);\n }\n return res;\n}\nexport function getAllMethodNames(obj) {\n const methods = [];\n for (const prop of getAllPropertyNames(obj)) {\n if (typeof obj[prop] === 'function') {\n methods.push(prop);\n }\n }\n return methods;\n}\nexport function createProxyObject(methodNames, invoke) {\n const createProxyMethod = (method) => {\n return function () {\n const args = Array.prototype.slice.call(arguments, 0);\n return invoke(method, args);\n };\n };\n let result = {};\n for (const methodName of methodNames) {\n result[methodName] = createProxyMethod(methodName);\n }\n return result;\n}\n/**\n * Converts null to undefined, passes all other values through.\n */\nexport function withNullAsUndefined(x) {\n return x === null ? undefined : x;\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 *--------------------------------------------------------------------------------------------*/\nexport function toUint8(v) {\n if (v < 0) {\n return 0;\n }\n if (v > 255 /* MAX_UINT_8 */) {\n return 255 /* MAX_UINT_8 */;\n }\n return v | 0;\n}\nexport function toUint32(v) {\n if (v < 0) {\n return 0;\n }\n if (v > 4294967295 /* MAX_UINT_32 */) {\n return 4294967295 /* MAX_UINT_32 */;\n }\n return v | 0;\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 *--------------------------------------------------------------------------------------------*/\nimport { isWindows } from './platform.js';\nimport * as paths from './path.js';\nconst _schemePattern = /^\\w[\\w\\d+.-]*$/;\nconst _singleSlashStart = /^\\//;\nconst _doubleSlashStart = /^\\/\\//;\nfunction _validateUri(ret, _strict) {\n // scheme, must be set\n if (!ret.scheme && _strict) {\n throw new Error(`[UriError]: Scheme is missing: {scheme: \"\", authority: \"${ret.authority}\", path: \"${ret.path}\", query: \"${ret.query}\", fragment: \"${ret.fragment}\"}`);\n }\n // scheme, https://tools.ietf.org/html/rfc3986#section-3.1\n // ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n if (ret.scheme && !_schemePattern.test(ret.scheme)) {\n throw new Error('[UriError]: Scheme contains illegal characters.');\n }\n // path, http://tools.ietf.org/html/rfc3986#section-3.3\n // If a URI contains an authority component, then the path component\n // must either be empty or begin with a slash (\"/\") character. If a URI\n // does not contain an authority component, then the path cannot begin\n // with two slash characters (\"//\").\n if (ret.path) {\n if (ret.authority) {\n if (!_singleSlashStart.test(ret.path)) {\n throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\"/\") character');\n }\n }\n else {\n if (_doubleSlashStart.test(ret.path)) {\n throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\"//\")');\n }\n }\n }\n}\n// for a while we allowed uris *without* schemes and this is the migration\n// for them, e.g. an uri without scheme and without strict-mode warns and falls\n// back to the file-scheme. that should cause the least carnage and still be a\n// clear warning\nfunction _schemeFix(scheme, _strict) {\n if (!scheme && !_strict) {\n return 'file';\n }\n return scheme;\n}\n// implements a bit of https://tools.ietf.org/html/rfc3986#section-5\nfunction _referenceResolution(scheme, path) {\n // the slash-character is our 'default base' as we don't\n // support constructing URIs relative to other URIs. This\n // also means that we alter and potentially break paths.\n // see https://tools.ietf.org/html/rfc3986#section-5.1.4\n switch (scheme) {\n case 'https':\n case 'http':\n case 'file':\n if (!path) {\n path = _slash;\n }\n else if (path[0] !== _slash) {\n path = _slash + path;\n }\n break;\n }\n return path;\n}\nconst _empty = '';\nconst _slash = '/';\nconst _regexp = /^(([^:/?#]+?):)?(\\/\\/([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n/**\n * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.\n * This class is a simple parser which creates the basic component parts\n * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation\n * and encoding.\n *\n * ```txt\n * foo://example.com:8042/over/there?name=ferret#nose\n * \\_/ \\______________/\\_________/ \\_________/ \\__/\n * | | | | |\n * scheme authority path query fragment\n * | _____________________|__\n * / \\ / \\\n * urn:example:animal:ferret:nose\n * ```\n */\nexport class URI {\n /**\n * @internal\n */\n constructor(schemeOrData, authority, path, query, fragment, _strict = false) {\n if (typeof schemeOrData === 'object') {\n this.scheme = schemeOrData.scheme || _empty;\n this.authority = schemeOrData.authority || _empty;\n this.path = schemeOrData.path || _empty;\n this.query = schemeOrData.query || _empty;\n this.fragment = schemeOrData.fragment || _empty;\n // no validation because it's this URI\n // that creates uri components.\n // _validateUri(this);\n }\n else {\n this.scheme = _schemeFix(schemeOrData, _strict);\n this.authority = authority || _empty;\n this.path = _referenceResolution(this.scheme, path || _empty);\n this.query = query || _empty;\n this.fragment = fragment || _empty;\n _validateUri(this, _strict);\n }\n }\n static isUri(thing) {\n if (thing instanceof URI) {\n return true;\n }\n if (!thing) {\n return false;\n }\n return typeof thing.authority === 'string'\n && typeof thing.fragment === 'string'\n && typeof thing.path === 'string'\n && typeof thing.query === 'string'\n && typeof thing.scheme === 'string'\n && typeof thing.fsPath === 'string'\n && typeof thing.with === 'function'\n && typeof thing.toString === 'function';\n }\n // ---- filesystem path -----------------------\n /**\n * Returns a string representing the corresponding file system path of this URI.\n * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the\n * platform specific path separator.\n *\n * * Will *not* validate the path for invalid characters and semantics.\n * * Will *not* look at the scheme of this URI.\n * * The result shall *not* be used for display purposes but for accessing a file on disk.\n *\n *\n * The *difference* to `URI#path` is the use of the platform specific separator and the handling\n * of UNC paths. See the below sample of a file-uri with an authority (UNC path).\n *\n * ```ts\n const u = URI.parse('file://server/c$/folder/file.txt')\n u.authority === 'server'\n u.path === '/shares/c$/file.txt'\n u.fsPath === '\\\\server\\c$\\folder\\file.txt'\n ```\n *\n * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,\n * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working\n * with URIs that represent files on disk (`file` scheme).\n */\n get fsPath() {\n // if (this.scheme !== 'file') {\n // \tconsole.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);\n // }\n return uriToFsPath(this, false);\n }\n // ---- modify to new -------------------------\n with(change) {\n if (!change) {\n return this;\n }\n let { scheme, authority, path, query, fragment } = change;\n if (scheme === undefined) {\n scheme = this.scheme;\n }\n else if (scheme === null) {\n scheme = _empty;\n }\n if (authority === undefined) {\n authority = this.authority;\n }\n else if (authority === null) {\n authority = _empty;\n }\n if (path === undefined) {\n path = this.path;\n }\n else if (path === null) {\n path = _empty;\n }\n if (query === undefined) {\n query = this.query;\n }\n else if (query === null) {\n query = _empty;\n }\n if (fragment === undefined) {\n fragment = this.fragment;\n }\n else if (fragment === null) {\n fragment = _empty;\n }\n if (scheme === this.scheme\n && authority === this.authority\n && path === this.path\n && query === this.query\n && fragment === this.fragment) {\n return this;\n }\n return new Uri(scheme, authority, path, query, fragment);\n }\n // ---- parse & validate ------------------------\n /**\n * Creates a new URI from a string, e.g. `http://www.msft.com/some/path`,\n * `file:///usr/home`, or `scheme:with/path`.\n *\n * @param value A string which represents an URI (see `URI#toString`).\n */\n static parse(value, _strict = false) {\n const match = _regexp.exec(value);\n if (!match) {\n return new Uri(_empty, _empty, _empty, _empty, _empty);\n }\n return new Uri(match[2] || _empty, percentDecode(match[4] || _empty), percentDecode(match[5] || _empty), percentDecode(match[7] || _empty), percentDecode(match[9] || _empty), _strict);\n }\n /**\n * Creates a new URI from a file system path, e.g. `c:\\my\\files`,\n * `/usr/home`, or `\\\\server\\share\\some\\path`.\n *\n * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument\n * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**\n * `URI.parse('file://' + path)` because the path might contain characters that are\n * interpreted (# and ?). See the following sample:\n * ```ts\n const good = URI.file('/coding/c#/project1');\n good.scheme === 'file';\n good.path === '/coding/c#/project1';\n good.fragment === '';\n const bad = URI.parse('file://' + '/coding/c#/project1');\n bad.scheme === 'file';\n bad.path === '/coding/c'; // path is now broken\n bad.fragment === '/project1';\n ```\n *\n * @param path A file system path (see `URI#fsPath`)\n */\n static file(path) {\n let authority = _empty;\n // normalize to fwd-slashes on windows,\n // on other systems bwd-slashes are valid\n // filename character, eg /f\\oo/ba\\r.txt\n if (isWindows) {\n path = path.replace(/\\\\/g, _slash);\n }\n // check for authority as used in UNC shares\n // or use the path as given\n if (path[0] === _slash && path[1] === _slash) {\n const idx = path.indexOf(_slash, 2);\n if (idx === -1) {\n authority = path.substring(2);\n path = _slash;\n }\n else {\n authority = path.substring(2, idx);\n path = path.substring(idx) || _slash;\n }\n }\n return new Uri('file', authority, path, _empty, _empty);\n }\n static from(components) {\n return new Uri(components.scheme, components.authority, components.path, components.query, components.fragment);\n }\n /**\n * Join a URI path with path fragments and normalizes the resulting path.\n *\n * @param uri The input URI.\n * @param pathFragment The path fragment to add to the URI path.\n * @returns The resulting URI.\n */\n static joinPath(uri, ...pathFragment) {\n if (!uri.path) {\n throw new Error(`[UriError]: cannot call joinPath on URI without path`);\n }\n let newPath;\n if (isWindows && uri.scheme === 'file') {\n newPath = URI.file(paths.win32.join(uriToFsPath(uri, true), ...pathFragment)).path;\n }\n else {\n newPath = paths.posix.join(uri.path, ...pathFragment);\n }\n return uri.with({ path: newPath });\n }\n // ---- printing/externalize ---------------------------\n /**\n * Creates a string representation for this URI. It's guaranteed that calling\n * `URI.parse` with the result of this function creates an URI which is equal\n * to this URI.\n *\n * * The result shall *not* be used for display purposes but for externalization or transport.\n * * The result will be encoded using the percentage encoding and encoding happens mostly\n * ignore the scheme-specific encoding rules.\n *\n * @param skipEncoding Do not encode the result, default is `false`\n */\n toString(skipEncoding = false) {\n return _asFormatted(this, skipEncoding);\n }\n toJSON() {\n return this;\n }\n static revive(data) {\n if (!data) {\n return data;\n }\n else if (data instanceof URI) {\n return data;\n }\n else {\n const result = new Uri(data);\n result._formatted = data.external;\n result._fsPath = data._sep === _pathSepMarker ? data.fsPath : null;\n return result;\n }\n }\n}\nconst _pathSepMarker = isWindows ? 1 : undefined;\n// This class exists so that URI is compatibile with vscode.Uri (API).\nclass Uri extends URI {\n constructor() {\n super(...arguments);\n this._formatted = null;\n this._fsPath = null;\n }\n get fsPath() {\n if (!this._fsPath) {\n this._fsPath = uriToFsPath(this, false);\n }\n return this._fsPath;\n }\n toString(skipEncoding = false) {\n if (!skipEncoding) {\n if (!this._formatted) {\n this._formatted = _asFormatted(this, false);\n }\n return this._formatted;\n }\n else {\n // we don't cache that\n return _asFormatted(this, true);\n }\n }\n toJSON() {\n const res = {\n $mid: 1\n };\n // cached state\n if (this._fsPath) {\n res.fsPath = this._fsPath;\n res._sep = _pathSepMarker;\n }\n if (this._formatted) {\n res.external = this._formatted;\n }\n // uri components\n if (this.path) {\n res.path = this.path;\n }\n if (this.scheme) {\n res.scheme = this.scheme;\n }\n if (this.authority) {\n res.authority = this.authority;\n }\n if (this.query) {\n res.query = this.query;\n }\n if (this.fragment) {\n res.fragment = this.fragment;\n }\n return res;\n }\n}\n// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2\nconst encodeTable = {\n [58 /* Colon */]: '%3A',\n [47 /* Slash */]: '%2F',\n [63 /* QuestionMark */]: '%3F',\n [35 /* Hash */]: '%23',\n [91 /* OpenSquareBracket */]: '%5B',\n [93 /* CloseSquareBracket */]: '%5D',\n [64 /* AtSign */]: '%40',\n [33 /* ExclamationMark */]: '%21',\n [36 /* DollarSign */]: '%24',\n [38 /* Ampersand */]: '%26',\n [39 /* SingleQuote */]: '%27',\n [40 /* OpenParen */]: '%28',\n [41 /* CloseParen */]: '%29',\n [42 /* Asterisk */]: '%2A',\n [43 /* Plus */]: '%2B',\n [44 /* Comma */]: '%2C',\n [59 /* Semicolon */]: '%3B',\n [61 /* Equals */]: '%3D',\n [32 /* Space */]: '%20',\n};\nfunction encodeURIComponentFast(uriComponent, allowSlash) {\n let res = undefined;\n let nativeEncodePos = -1;\n for (let pos = 0; pos < uriComponent.length; pos++) {\n const code = uriComponent.charCodeAt(pos);\n // unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3\n if ((code >= 97 /* a */ && code <= 122 /* z */)\n || (code >= 65 /* A */ && code <= 90 /* Z */)\n || (code >= 48 /* Digit0 */ && code <= 57 /* Digit9 */)\n || code === 45 /* Dash */\n || code === 46 /* Period */\n || code === 95 /* Underline */\n || code === 126 /* Tilde */\n || (allowSlash && code === 47 /* Slash */)) {\n // check if we are delaying native encode\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n nativeEncodePos = -1;\n }\n // check if we write into a new string (by default we try to return the param)\n if (res !== undefined) {\n res += uriComponent.charAt(pos);\n }\n }\n else {\n // encoding needed, we need to allocate a new string\n if (res === undefined) {\n res = uriComponent.substr(0, pos);\n }\n // check with default table first\n const escaped = encodeTable[code];\n if (escaped !== undefined) {\n // check if we are delaying native encode\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));\n nativeEncodePos = -1;\n }\n // append escaped variant to result\n res += escaped;\n }\n else if (nativeEncodePos === -1) {\n // use native encode only when needed\n nativeEncodePos = pos;\n }\n }\n }\n if (nativeEncodePos !== -1) {\n res += encodeURIComponent(uriComponent.substring(nativeEncodePos));\n }\n return res !== undefined ? res : uriComponent;\n}\nfunction encodeURIComponentMinimal(path) {\n let res = undefined;\n for (let pos = 0; pos < path.length; pos++) {\n const code = path.charCodeAt(pos);\n if (code === 35 /* Hash */ || code === 63 /* QuestionMark */) {\n if (res === undefined) {\n res = path.substr(0, pos);\n }\n res += encodeTable[code];\n }\n else {\n if (res !== undefined) {\n res += path[pos];\n }\n }\n }\n return res !== undefined ? res : path;\n}\n/**\n * Compute `fsPath` for the given uri\n */\nexport function uriToFsPath(uri, keepDriveLetterCasing) {\n let value;\n if (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {\n // unc path: file://shares/c$/far/boo\n value = `//${uri.authority}${uri.path}`;\n }\n else if (uri.path.charCodeAt(0) === 47 /* Slash */\n && (uri.path.charCodeAt(1) >= 65 /* A */ && uri.path.charCodeAt(1) <= 90 /* Z */ || uri.path.charCodeAt(1) >= 97 /* a */ && uri.path.charCodeAt(1) <= 122 /* z */)\n && uri.path.charCodeAt(2) === 58 /* Colon */) {\n if (!keepDriveLetterCasing) {\n // windows drive letter: file:///c:/far/boo\n value = uri.path[1].toLowerCase() + uri.path.substr(2);\n }\n else {\n value = uri.path.substr(1);\n }\n }\n else {\n // other path\n value = uri.path;\n }\n if (isWindows) {\n value = value.replace(/\\//g, '\\\\');\n }\n return value;\n}\n/**\n * Create the external version of a uri\n */\nfunction _asFormatted(uri, skipEncoding) {\n const encoder = !skipEncoding\n ? encodeURIComponentFast\n : encodeURIComponentMinimal;\n let res = '';\n let { scheme, authority, path, query, fragment } = uri;\n if (scheme) {\n res += scheme;\n res += ':';\n }\n if (authority || scheme === 'file') {\n res += _slash;\n res += _slash;\n }\n if (authority) {\n let idx = authority.indexOf('@');\n if (idx !== -1) {\n // <user>@<auth>\n const userinfo = authority.substr(0, idx);\n authority = authority.substr(idx + 1);\n idx = userinfo.indexOf(':');\n if (idx === -1) {\n res += encoder(userinfo, false);\n }\n else {\n // <user>:<pass>@<auth>\n res += encoder(userinfo.substr(0, idx), false);\n res += ':';\n res += encoder(userinfo.substr(idx + 1), false);\n }\n res += '@';\n }\n authority = authority.toLowerCase();\n idx = authority.indexOf(':');\n if (idx === -1) {\n res += encoder(authority, false);\n }\n else {\n // <auth>:<port>\n res += encoder(authority.substr(0, idx), false);\n res += authority.substr(idx);\n }\n }\n if (path) {\n // lower-case windows drive letters in /C:/fff or C:/fff\n if (path.length >= 3 && path.charCodeAt(0) === 47 /* Slash */ && path.charCodeAt(2) === 58 /* Colon */) {\n const code = path.charCodeAt(1);\n if (code >= 65 /* A */ && code <= 90 /* Z */) {\n path = `/${String.fromCharCode(code + 32)}:${path.substr(3)}`; // \"/c:\".length === 3\n }\n }\n else if (path.length >= 2 && path.charCodeAt(1) === 58 /* Colon */) {\n const code = path.charCodeAt(0);\n if (code >= 65 /* A */ && code <= 90 /* Z */) {\n path = `${String.fromCharCode(code + 32)}:${path.substr(2)}`; // \"/c:\".length === 3\n }\n }\n // encode the rest of the path\n res += encoder(path, true);\n }\n if (query) {\n res += '?';\n res += encoder(query, false);\n }\n if (fragment) {\n res += '#';\n res += !skipEncoding ? encodeURIComponentFast(fragment, false) : fragment;\n }\n return res;\n}\n// --- decode\nfunction decodeURIComponentGraceful(str) {\n try {\n return decodeURIComponent(str);\n }\n catch (_a) {\n if (str.length > 3) {\n return str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));\n }\n else {\n return str;\n }\n }\n}\nconst _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;\nfunction percentDecode(str) {\n if (!str.match(_rEncodedAsHex)) {\n return str;\n }\n return str.replace(_rEncodedAsHex, (match) => decodeURIComponentGraceful(match));\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 *--------------------------------------------------------------------------------------------*/\nexport const NO_KEY_MODS = { ctrlCmd: false, alt: false };\nexport var QuickInputHideReason;\n(function (QuickInputHideReason) {\n /**\n * Focus moved away from the quick input.\n */\n QuickInputHideReason[QuickInputHideReason[\"Blur\"] = 1] = \"Blur\";\n /**\n * An explicit user gesture, e.g. pressing Escape key.\n */\n QuickInputHideReason[QuickInputHideReason[\"Gesture\"] = 2] = \"Gesture\";\n /**\n * Anything else.\n */\n QuickInputHideReason[QuickInputHideReason[\"Other\"] = 3] = \"Other\";\n})(QuickInputHideReason || (QuickInputHideReason = {}));\nexport var ItemActivation;\n(function (ItemActivation) {\n ItemActivation[ItemActivation[\"NONE\"] = 0] = \"NONE\";\n ItemActivation[ItemActivation[\"FIRST\"] = 1] = \"FIRST\";\n ItemActivation[ItemActivation[\"SECOND\"] = 2] = \"SECOND\";\n ItemActivation[ItemActivation[\"LAST\"] = 3] = \"LAST\";\n})(ItemActivation || (ItemActivation = {}));\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\nexport class CharWidthRequest {\n constructor(chr, type) {\n this.chr = chr;\n this.type = type;\n this.width = 0;\n }\n fulfill(width) {\n this.width = width;\n }\n}\nclass DomCharWidthReader {\n constructor(bareFontInfo, requests) {\n this._bareFontInfo = bareFontInfo;\n this._requests = requests;\n this._container = null;\n this._testElements = null;\n }\n read() {\n // Create a test container with all these test elements\n this._createDomElements();\n // Add the container to the DOM\n document.body.appendChild(this._container);\n // Read character widths\n this._readFromDomElements();\n // Remove the container from the DOM\n document.body.removeChild(this._container);\n this._container = null;\n this._testElements = null;\n }\n _createDomElements() {\n const container = document.createElement('div');\n container.style.position = 'absolute';\n container.style.top = '-50000px';\n container.style.width = '50000px';\n const regularDomNode = document.createElement('div');\n regularDomNode.style.fontFamily = this._bareFontInfo.getMassagedFontFamily();\n regularDomNode.style.fontWeight = this._bareFontInfo.fontWeight;\n regularDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\n regularDomNode.style.fontFeatureSettings = this._bareFontInfo.fontFeatureSettings;\n regularDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\n regularDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\n container.appendChild(regularDomNode);\n const boldDomNode = document.createElement('div');\n boldDomNode.style.fontFamily = this._bareFontInfo.getMassagedFontFamily();\n boldDomNode.style.fontWeight = 'bold';\n boldDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\n boldDomNode.style.fontFeatureSettings = this._bareFontInfo.fontFeatureSettings;\n boldDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\n boldDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\n container.appendChild(boldDomNode);\n const italicDomNode = document.createElement('div');\n italicDomNode.style.fontFamily = this._bareFontInfo.getMassagedFontFamily();\n italicDomNode.style.fontWeight = this._bareFontInfo.fontWeight;\n italicDomNode.style.fontSize = this._bareFontInfo.fontSize + 'px';\n italicDomNode.style.fontFeatureSettings = this._bareFontInfo.fontFeatureSettings;\n italicDomNode.style.lineHeight = this._bareFontInfo.lineHeight + 'px';\n italicDomNode.style.letterSpacing = this._bareFontInfo.letterSpacing + 'px';\n italicDomNode.style.fontStyle = 'italic';\n container.appendChild(italicDomNode);\n const testElements = [];\n for (const request of this._requests) {\n let parent;\n if (request.type === 0 /* Regular */) {\n parent = regularDomNode;\n }\n if (request.type === 2 /* Bold */) {\n parent = boldDomNode;\n }\n if (request.type === 1 /* Italic */) {\n parent = italicDomNode;\n }\n parent.appendChild(document.createElement('br'));\n const testElement = document.createElement('span');\n DomCharWidthReader._render(testElement, request);\n parent.appendChild(testElement);\n testElements.push(testElement);\n }\n this._container = container;\n this._testElements = testElements;\n }\n static _render(testElement, request) {\n if (request.chr === ' ') {\n let htmlString = '\\u00a0';\n // Repeat character 256 (2^8) times\n for (let i = 0; i < 8; i++) {\n htmlString += htmlString;\n }\n testElement.innerText = htmlString;\n }\n else {\n let testString = request.chr;\n // Repeat character 256 (2^8) times\n for (let i = 0; i < 8; i++) {\n testString += testString;\n }\n testElement.textContent = testString;\n }\n }\n _readFromDomElements() {\n for (let i = 0, len = this._requests.length; i < len; i++) {\n const request = this._requests[i];\n const testElement = this._testElements[i];\n request.fulfill(testElement.offsetWidth / 256);\n }\n }\n}\nexport function readCharWidths(bareFontInfo, requests) {\n const reader = new DomCharWidthReader(bareFontInfo, requests);\n reader.read();\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 *--------------------------------------------------------------------------------------------*/\nimport * as browser from '../../../base/browser/browser.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { CharWidthRequest, readCharWidths } from './charWidthReader.js';\nimport { ElementSizeObserver } from './elementSizeObserver.js';\nimport { CommonEditorConfiguration } from '../../common/config/commonEditorConfig.js';\nimport { EditorFontLigatures } from '../../common/config/editorOptions.js';\nimport { FontInfo } from '../../common/config/fontInfo.js';\nclass CSSBasedConfigurationCache {\n constructor() {\n this._keys = Object.create(null);\n this._values = Object.create(null);\n }\n has(item) {\n const itemId = item.getId();\n return !!this._values[itemId];\n }\n get(item) {\n const itemId = item.getId();\n return this._values[itemId];\n }\n put(item, value) {\n const itemId = item.getId();\n this._keys[itemId] = item;\n this._values[itemId] = value;\n }\n remove(item) {\n const itemId = item.getId();\n delete this._keys[itemId];\n delete this._values[itemId];\n }\n getValues() {\n return Object.keys(this._keys).map(id => this._values[id]);\n }\n}\nexport function clearAllFontInfos() {\n CSSBasedConfiguration.INSTANCE.clearCache();\n}\nclass CSSBasedConfiguration extends Disposable {\n constructor() {\n super();\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._cache = new CSSBasedConfigurationCache();\n this._evictUntrustedReadingsTimeout = -1;\n }\n dispose() {\n if (this._evictUntrustedReadingsTimeout !== -1) {\n clearTimeout(this._evictUntrustedReadingsTimeout);\n this._evictUntrustedReadingsTimeout = -1;\n }\n super.dispose();\n }\n clearCache() {\n this._cache = new CSSBasedConfigurationCache();\n this._onDidChange.fire();\n }\n _writeToCache(item, value) {\n this._cache.put(item, value);\n if (!value.isTrusted && this._evictUntrustedReadingsTimeout === -1) {\n // Try reading again after some time\n this._evictUntrustedReadingsTimeout = setTimeout(() => {\n this._evictUntrustedReadingsTimeout = -1;\n this._evictUntrustedReadings();\n }, 5000);\n }\n }\n _evictUntrustedReadings() {\n const values = this._cache.getValues();\n let somethingRemoved = false;\n for (const item of values) {\n if (!item.isTrusted) {\n somethingRemoved = true;\n this._cache.remove(item);\n }\n }\n if (somethingRemoved) {\n this._onDidChange.fire();\n }\n }\n readConfiguration(bareFontInfo) {\n if (!this._cache.has(bareFontInfo)) {\n let readConfig = CSSBasedConfiguration._actualReadConfiguration(bareFontInfo);\n if (readConfig.typicalHalfwidthCharacterWidth <= 2 || readConfig.typicalFullwidthCharacterWidth <= 2 || readConfig.spaceWidth <= 2 || readConfig.maxDigitWidth <= 2) {\n // Hey, it's Bug 14341 ... we couldn't read\n readConfig = new FontInfo({\n zoomLevel: browser.getZoomLevel(),\n pixelRatio: browser.getPixelRatio(),\n fontFamily: readConfig.fontFamily,\n fontWeight: readConfig.fontWeight,\n fontSize: readConfig.fontSize,\n fontFeatureSettings: readConfig.fontFeatureSettings,\n lineHeight: readConfig.lineHeight,\n letterSpacing: readConfig.letterSpacing,\n isMonospace: readConfig.isMonospace,\n typicalHalfwidthCharacterWidth: Math.max(readConfig.typicalHalfwidthCharacterWidth, 5),\n typicalFullwidthCharacterWidth: Math.max(readConfig.typicalFullwidthCharacterWidth, 5),\n canUseHalfwidthRightwardsArrow: readConfig.canUseHalfwidthRightwardsArrow,\n spaceWidth: Math.max(readConfig.spaceWidth, 5),\n middotWidth: Math.max(readConfig.middotWidth, 5),\n wsmiddotWidth: Math.max(readConfig.wsmiddotWidth, 5),\n maxDigitWidth: Math.max(readConfig.maxDigitWidth, 5),\n }, false);\n }\n this._writeToCache(bareFontInfo, readConfig);\n }\n return this._cache.get(bareFontInfo);\n }\n static createRequest(chr, type, all, monospace) {\n const result = new CharWidthRequest(chr, type);\n all.push(result);\n if (monospace) {\n monospace.push(result);\n }\n return result;\n }\n static _actualReadConfiguration(bareFontInfo) {\n const all = [];\n const monospace = [];\n const typicalHalfwidthCharacter = this.createRequest('n', 0 /* Regular */, all, monospace);\n const typicalFullwidthCharacter = this.createRequest('\\uff4d', 0 /* Regular */, all, null);\n const space = this.createRequest(' ', 0 /* Regular */, all, monospace);\n const digit0 = this.createRequest('0', 0 /* Regular */, all, monospace);\n const digit1 = this.createRequest('1', 0 /* Regular */, all, monospace);\n const digit2 = this.createRequest('2', 0 /* Regular */, all, monospace);\n const digit3 = this.createRequest('3', 0 /* Regular */, all, monospace);\n const digit4 = this.createRequest('4', 0 /* Regular */, all, monospace);\n const digit5 = this.createRequest('5', 0 /* Regular */, all, monospace);\n const digit6 = this.createRequest('6', 0 /* Regular */, all, monospace);\n const digit7 = this.createRequest('7', 0 /* Regular */, all, monospace);\n const digit8 = this.createRequest('8', 0 /* Regular */, all, monospace);\n const digit9 = this.createRequest('9', 0 /* Regular */, all, monospace);\n // monospace test: used for whitespace rendering\n const rightwardsArrow = this.createRequest('→', 0 /* Regular */, all, monospace);\n const halfwidthRightwardsArrow = this.createRequest('→', 0 /* Regular */, all, null);\n // U+00B7 - MIDDLE DOT\n const middot = this.createRequest('·', 0 /* Regular */, all, monospace);\n // U+2E31 - WORD SEPARATOR MIDDLE DOT\n const wsmiddotWidth = this.createRequest(String.fromCharCode(0x2E31), 0 /* Regular */, all, null);\n // monospace test: some characters\n this.createRequest('|', 0 /* Regular */, all, monospace);\n this.createRequest('/', 0 /* Regular */, all, monospace);\n this.createRequest('-', 0 /* Regular */, all, monospace);\n this.createRequest('_', 0 /* Regular */, all, monospace);\n this.createRequest('i', 0 /* Regular */, all, monospace);\n this.createRequest('l', 0 /* Regular */, all, monospace);\n this.createRequest('m', 0 /* Regular */, all, monospace);\n // monospace italic test\n this.createRequest('|', 1 /* Italic */, all, monospace);\n this.createRequest('_', 1 /* Italic */, all, monospace);\n this.createRequest('i', 1 /* Italic */, all, monospace);\n this.createRequest('l', 1 /* Italic */, all, monospace);\n this.createRequest('m', 1 /* Italic */, all, monospace);\n this.createRequest('n', 1 /* Italic */, all, monospace);\n // monospace bold test\n this.createRequest('|', 2 /* Bold */, all, monospace);\n this.createRequest('_', 2 /* Bold */, all, monospace);\n this.createRequest('i', 2 /* Bold */, all, monospace);\n this.createRequest('l', 2 /* Bold */, all, monospace);\n this.createRequest('m', 2 /* Bold */, all, monospace);\n this.createRequest('n', 2 /* Bold */, all, monospace);\n readCharWidths(bareFontInfo, all);\n const maxDigitWidth = Math.max(digit0.width, digit1.width, digit2.width, digit3.width, digit4.width, digit5.width, digit6.width, digit7.width, digit8.width, digit9.width);\n let isMonospace = (bareFontInfo.fontFeatureSettings === EditorFontLigatures.OFF);\n const referenceWidth = monospace[0].width;\n for (let i = 1, len = monospace.length; isMonospace && i < len; i++) {\n const diff = referenceWidth - monospace[i].width;\n if (diff < -0.001 || diff > 0.001) {\n isMonospace = false;\n break;\n }\n }\n let canUseHalfwidthRightwardsArrow = true;\n if (isMonospace && halfwidthRightwardsArrow.width !== referenceWidth) {\n // using a halfwidth rightwards arrow would break monospace...\n canUseHalfwidthRightwardsArrow = false;\n }\n if (halfwidthRightwardsArrow.width > rightwardsArrow.width) {\n // using a halfwidth rightwards arrow would paint a larger arrow than a regular rightwards arrow\n canUseHalfwidthRightwardsArrow = false;\n }\n // let's trust the zoom level only 2s after it was changed.\n const canTrustBrowserZoomLevel = (browser.getTimeSinceLastZoomLevelChanged() > 2000);\n return new FontInfo({\n zoomLevel: browser.getZoomLevel(),\n pixelRatio: browser.getPixelRatio(),\n fontFamily: bareFontInfo.fontFamily,\n fontWeight: bareFontInfo.fontWeight,\n fontSize: bareFontInfo.fontSize,\n fontFeatureSettings: bareFontInfo.fontFeatureSettings,\n lineHeight: bareFontInfo.lineHeight,\n letterSpacing: bareFontInfo.letterSpacing,\n isMonospace: isMonospace,\n typicalHalfwidthCharacterWidth: typicalHalfwidthCharacter.width,\n typicalFullwidthCharacterWidth: typicalFullwidthCharacter.width,\n canUseHalfwidthRightwardsArrow: canUseHalfwidthRightwardsArrow,\n spaceWidth: space.width,\n middotWidth: middot.width,\n wsmiddotWidth: wsmiddotWidth.width,\n maxDigitWidth: maxDigitWidth\n }, canTrustBrowserZoomLevel);\n }\n}\nCSSBasedConfiguration.INSTANCE = new CSSBasedConfiguration();\nexport class Configuration extends CommonEditorConfiguration {\n constructor(isSimpleWidget, options, referenceDomElement = null, accessibilityService) {\n super(isSimpleWidget, options);\n this.accessibilityService = accessibilityService;\n this._elementSizeObserver = this._register(new ElementSizeObserver(referenceDomElement, options.dimension, () => this._recomputeOptions()));\n this._register(CSSBasedConfiguration.INSTANCE.onDidChange(() => this._recomputeOptions()));\n if (this._validatedOptions.get(10 /* automaticLayout */)) {\n this._elementSizeObserver.startObserving();\n }\n this._register(browser.onDidChangeZoomLevel(_ => this._recomputeOptions()));\n this._register(this.accessibilityService.onDidChangeScreenReaderOptimized(() => this._recomputeOptions()));\n this._recomputeOptions();\n }\n static applyFontInfoSlow(domNode, fontInfo) {\n domNode.style.fontFamily = fontInfo.getMassagedFontFamily();\n domNode.style.fontWeight = fontInfo.fontWeight;\n domNode.style.fontSize = fontInfo.fontSize + 'px';\n domNode.style.fontFeatureSettings = fontInfo.fontFeatureSettings;\n domNode.style.lineHeight = fontInfo.lineHeight + 'px';\n domNode.style.letterSpacing = fontInfo.letterSpacing + 'px';\n }\n static applyFontInfo(domNode, fontInfo) {\n domNode.setFontFamily(fontInfo.getMassagedFontFamily());\n domNode.setFontWeight(fontInfo.fontWeight);\n domNode.setFontSize(fontInfo.fontSize);\n domNode.setFontFeatureSettings(fontInfo.fontFeatureSettings);\n domNode.setLineHeight(fontInfo.lineHeight);\n domNode.setLetterSpacing(fontInfo.letterSpacing);\n }\n observeReferenceElement(dimension) {\n this._elementSizeObserver.observe(dimension);\n }\n updatePixelRatio() {\n this._recomputeOptions();\n }\n static _getExtraEditorClassName() {\n let extra = '';\n if (!browser.isSafari && !browser.isWebkitWebView) {\n // Use user-select: none in all browsers except Safari and native macOS WebView\n extra += 'no-user-select ';\n }\n if (browser.isSafari) {\n // See https://github.com/microsoft/vscode/issues/108822\n extra += 'no-minimap-shadow ';\n }\n if (platform.isMacintosh) {\n extra += 'mac ';\n }\n return extra;\n }\n _getEnvConfiguration() {\n return {\n extraEditorClassName: Configuration._getExtraEditorClassName(),\n outerWidth: this._elementSizeObserver.getWidth(),\n outerHeight: this._elementSizeObserver.getHeight(),\n emptySelectionClipboard: browser.isWebKit || browser.isFirefox,\n pixelRatio: browser.getPixelRatio(),\n zoomLevel: browser.getZoomLevel(),\n accessibilitySupport: (this.accessibilityService.isScreenReaderOptimized()\n ? 2 /* Enabled */\n : this.accessibilityService.getAccessibilitySupport())\n };\n }\n readConfiguration(bareFontInfo) {\n return CSSBasedConfiguration.INSTANCE.readConfiguration(bareFontInfo);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Disposable } from '../../../base/common/lifecycle.js';\nexport class ElementSizeObserver extends Disposable {\n constructor(referenceDomElement, dimension, changeCallback) {\n super();\n this.referenceDomElement = referenceDomElement;\n this.changeCallback = changeCallback;\n this.width = -1;\n this.height = -1;\n this.resizeObserver = null;\n this.measureReferenceDomElementToken = -1;\n this.measureReferenceDomElement(false, dimension);\n }\n dispose() {\n this.stopObserving();\n super.dispose();\n }\n getWidth() {\n return this.width;\n }\n getHeight() {\n return this.height;\n }\n startObserving() {\n if (typeof ResizeObserver !== 'undefined') {\n if (!this.resizeObserver && this.referenceDomElement) {\n this.resizeObserver = new ResizeObserver((entries) => {\n if (entries && entries[0] && entries[0].contentRect) {\n this.observe({ width: entries[0].contentRect.width, height: entries[0].contentRect.height });\n }\n else {\n this.observe();\n }\n });\n this.resizeObserver.observe(this.referenceDomElement);\n }\n }\n else {\n if (this.measureReferenceDomElementToken === -1) {\n // setInterval type defaults to NodeJS.Timeout instead of number, so specify it as a number\n this.measureReferenceDomElementToken = setInterval(() => this.observe(), 100);\n }\n }\n }\n stopObserving() {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n if (this.measureReferenceDomElementToken !== -1) {\n clearInterval(this.measureReferenceDomElementToken);\n this.measureReferenceDomElementToken = -1;\n }\n }\n observe(dimension) {\n this.measureReferenceDomElement(true, dimension);\n }\n measureReferenceDomElement(callChangeCallback, dimension) {\n let observedWidth = 0;\n let observedHeight = 0;\n if (dimension) {\n observedWidth = dimension.width;\n observedHeight = dimension.height;\n }\n else if (this.referenceDomElement) {\n observedWidth = this.referenceDomElement.clientWidth;\n observedHeight = this.referenceDomElement.clientHeight;\n }\n observedWidth = Math.max(5, observedWidth);\n observedHeight = Math.max(5, observedHeight);\n if (this.width !== observedWidth || this.height !== observedHeight) {\n this.width = observedWidth;\n this.height = observedHeight;\n if (callChangeCallback) {\n this.changeCallback();\n }\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { CursorColumns, SingleCursorState } from './cursorCommon.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nexport class ColumnSelection {\n static columnSelect(config, model, fromLineNumber, fromVisibleColumn, toLineNumber, toVisibleColumn) {\n let lineCount = Math.abs(toLineNumber - fromLineNumber) + 1;\n let reversed = (fromLineNumber > toLineNumber);\n let isRTL = (fromVisibleColumn > toVisibleColumn);\n let isLTR = (fromVisibleColumn < toVisibleColumn);\n let result = [];\n // console.log(`fromVisibleColumn: ${fromVisibleColumn}, toVisibleColumn: ${toVisibleColumn}`);\n for (let i = 0; i < lineCount; i++) {\n let lineNumber = fromLineNumber + (reversed ? -i : i);\n let startColumn = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, fromVisibleColumn);\n let endColumn = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, toVisibleColumn);\n let visibleStartColumn = CursorColumns.visibleColumnFromColumn2(config, model, new Position(lineNumber, startColumn));\n let visibleEndColumn = CursorColumns.visibleColumnFromColumn2(config, model, new Position(lineNumber, endColumn));\n // console.log(`lineNumber: ${lineNumber}: visibleStartColumn: ${visibleStartColumn}, visibleEndColumn: ${visibleEndColumn}`);\n if (isLTR) {\n if (visibleStartColumn > toVisibleColumn) {\n continue;\n }\n if (visibleEndColumn < fromVisibleColumn) {\n continue;\n }\n }\n if (isRTL) {\n if (visibleEndColumn > fromVisibleColumn) {\n continue;\n }\n if (visibleStartColumn < toVisibleColumn) {\n continue;\n }\n }\n result.push(new SingleCursorState(new Range(lineNumber, startColumn, lineNumber, startColumn), 0, new Position(lineNumber, endColumn), 0));\n }\n if (result.length === 0) {\n // We are after all the lines, so add cursor at the end of each line\n for (let i = 0; i < lineCount; i++) {\n const lineNumber = fromLineNumber + (reversed ? -i : i);\n const maxColumn = model.getLineMaxColumn(lineNumber);\n result.push(new SingleCursorState(new Range(lineNumber, maxColumn, lineNumber, maxColumn), 0, new Position(lineNumber, maxColumn), 0));\n }\n }\n return {\n viewStates: result,\n reversed: reversed,\n fromLineNumber: fromLineNumber,\n fromVisualColumn: fromVisibleColumn,\n toLineNumber: toLineNumber,\n toVisualColumn: toVisibleColumn\n };\n }\n static columnSelectLeft(config, model, prevColumnSelectData) {\n let toViewVisualColumn = prevColumnSelectData.toViewVisualColumn;\n if (toViewVisualColumn > 0) {\n toViewVisualColumn--;\n }\n return ColumnSelection.columnSelect(config, model, prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.fromViewVisualColumn, prevColumnSelectData.toViewLineNumber, toViewVisualColumn);\n }\n static columnSelectRight(config, model, prevColumnSelectData) {\n let maxVisualViewColumn = 0;\n const minViewLineNumber = Math.min(prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.toViewLineNumber);\n const maxViewLineNumber = Math.max(prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.toViewLineNumber);\n for (let lineNumber = minViewLineNumber; lineNumber <= maxViewLineNumber; lineNumber++) {\n const lineMaxViewColumn = model.getLineMaxColumn(lineNumber);\n const lineMaxVisualViewColumn = CursorColumns.visibleColumnFromColumn2(config, model, new Position(lineNumber, lineMaxViewColumn));\n maxVisualViewColumn = Math.max(maxVisualViewColumn, lineMaxVisualViewColumn);\n }\n let toViewVisualColumn = prevColumnSelectData.toViewVisualColumn;\n if (toViewVisualColumn < maxVisualViewColumn) {\n toViewVisualColumn++;\n }\n return this.columnSelect(config, model, prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.fromViewVisualColumn, prevColumnSelectData.toViewLineNumber, toViewVisualColumn);\n }\n static columnSelectUp(config, model, prevColumnSelectData, isPaged) {\n const linesCount = isPaged ? config.pageSize : 1;\n const toViewLineNumber = Math.max(1, prevColumnSelectData.toViewLineNumber - linesCount);\n return this.columnSelect(config, model, prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.fromViewVisualColumn, toViewLineNumber, prevColumnSelectData.toViewVisualColumn);\n }\n static columnSelectDown(config, model, prevColumnSelectData, isPaged) {\n const linesCount = isPaged ? config.pageSize : 1;\n const toViewLineNumber = Math.min(model.getLineCount(), prevColumnSelectData.toViewLineNumber + linesCount);\n return this.columnSelect(config, model, prevColumnSelectData.fromViewLineNumber, prevColumnSelectData.fromViewVisualColumn, toViewLineNumber, prevColumnSelectData.toViewVisualColumn);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { isFirefox } from '../../../base/browser/browser.js';\nimport * as types from '../../../base/common/types.js';\nimport { status } from '../../../base/browser/ui/aria/aria.js';\nimport { Command, EditorCommand, registerEditorCommand, UndoCommand, RedoCommand, SelectAllCommand } from '../editorExtensions.js';\nimport { ICodeEditorService } from '../services/codeEditorService.js';\nimport { ColumnSelection } from '../../common/controller/cursorColumnSelection.js';\nimport { CursorState } from '../../common/controller/cursorCommon.js';\nimport { DeleteOperations } from '../../common/controller/cursorDeleteOperations.js';\nimport { CursorMove as CursorMove_, CursorMoveCommands } from '../../common/controller/cursorMoveCommands.js';\nimport { TypeOperations } from '../../common/controller/cursorTypeOperations.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\nimport { KeybindingsRegistry } from '../../../platform/keybinding/common/keybindingsRegistry.js';\nconst CORE_WEIGHT = 0 /* EditorCore */;\nexport class CoreEditorCommand extends EditorCommand {\n runEditorCommand(accessor, editor, args) {\n const viewModel = editor._getViewModel();\n if (!viewModel) {\n // the editor has no view => has no cursors\n return;\n }\n this.runCoreEditorCommand(viewModel, args || {});\n }\n}\nexport var EditorScroll_;\n(function (EditorScroll_) {\n const isEditorScrollArgs = function (arg) {\n if (!types.isObject(arg)) {\n return false;\n }\n const scrollArg = arg;\n if (!types.isString(scrollArg.to)) {\n return false;\n }\n if (!types.isUndefined(scrollArg.by) && !types.isString(scrollArg.by)) {\n return false;\n }\n if (!types.isUndefined(scrollArg.value) && !types.isNumber(scrollArg.value)) {\n return false;\n }\n if (!types.isUndefined(scrollArg.revealCursor) && !types.isBoolean(scrollArg.revealCursor)) {\n return false;\n }\n return true;\n };\n EditorScroll_.description = {\n description: 'Scroll editor in the given direction',\n args: [\n {\n name: 'Editor scroll argument object',\n description: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t* 'to': A mandatory direction value.\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t\t'up', 'down'\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t* 'by': Unit to move. Default is computed based on 'to' value.\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t\t'line', 'wrappedLine', 'page', 'halfPage'\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t* 'value': Number of units to move. Default is '1'.\n\t\t\t\t\t* 'revealCursor': If 'true' reveals the cursor if it is outside view port.\n\t\t\t\t`,\n constraint: isEditorScrollArgs,\n schema: {\n 'type': 'object',\n 'required': ['to'],\n 'properties': {\n 'to': {\n 'type': 'string',\n 'enum': ['up', 'down']\n },\n 'by': {\n 'type': 'string',\n 'enum': ['line', 'wrappedLine', 'page', 'halfPage']\n },\n 'value': {\n 'type': 'number',\n 'default': 1\n },\n 'revealCursor': {\n 'type': 'boolean',\n }\n }\n }\n }\n ]\n };\n /**\n * Directions in the view for editor scroll command.\n */\n EditorScroll_.RawDirection = {\n Up: 'up',\n Down: 'down',\n };\n /**\n * Units for editor scroll 'by' argument\n */\n EditorScroll_.RawUnit = {\n Line: 'line',\n WrappedLine: 'wrappedLine',\n Page: 'page',\n HalfPage: 'halfPage'\n };\n function parse(args) {\n let direction;\n switch (args.to) {\n case EditorScroll_.RawDirection.Up:\n direction = 1 /* Up */;\n break;\n case EditorScroll_.RawDirection.Down:\n direction = 2 /* Down */;\n break;\n default:\n // Illegal arguments\n return null;\n }\n let unit;\n switch (args.by) {\n case EditorScroll_.RawUnit.Line:\n unit = 1 /* Line */;\n break;\n case EditorScroll_.RawUnit.WrappedLine:\n unit = 2 /* WrappedLine */;\n break;\n case EditorScroll_.RawUnit.Page:\n unit = 3 /* Page */;\n break;\n case EditorScroll_.RawUnit.HalfPage:\n unit = 4 /* HalfPage */;\n break;\n default:\n unit = 2 /* WrappedLine */;\n }\n const value = Math.floor(args.value || 1);\n const revealCursor = !!args.revealCursor;\n return {\n direction: direction,\n unit: unit,\n value: value,\n revealCursor: revealCursor,\n select: (!!args.select)\n };\n }\n EditorScroll_.parse = parse;\n})(EditorScroll_ || (EditorScroll_ = {}));\nexport var RevealLine_;\n(function (RevealLine_) {\n const isRevealLineArgs = function (arg) {\n if (!types.isObject(arg)) {\n return false;\n }\n const reveaLineArg = arg;\n if (!types.isNumber(reveaLineArg.lineNumber) && !types.isString(reveaLineArg.lineNumber)) {\n return false;\n }\n if (!types.isUndefined(reveaLineArg.at) && !types.isString(reveaLineArg.at)) {\n return false;\n }\n return true;\n };\n RevealLine_.description = {\n description: 'Reveal the given line at the given logical position',\n args: [\n {\n name: 'Reveal line argument object',\n description: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t* 'lineNumber': A mandatory line number value.\n\t\t\t\t\t* 'at': Logical position at which line has to be revealed.\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t\t'top', 'center', 'bottom'\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t`,\n constraint: isRevealLineArgs,\n schema: {\n 'type': 'object',\n 'required': ['lineNumber'],\n 'properties': {\n 'lineNumber': {\n 'type': ['number', 'string'],\n },\n 'at': {\n 'type': 'string',\n 'enum': ['top', 'center', 'bottom']\n }\n }\n }\n }\n ]\n };\n /**\n * Values for reveal line 'at' argument\n */\n RevealLine_.RawAtArgument = {\n Top: 'top',\n Center: 'center',\n Bottom: 'bottom'\n };\n})(RevealLine_ || (RevealLine_ = {}));\nclass EditorOrNativeTextInputCommand {\n constructor(target) {\n // 1. handle case when focus is in editor.\n target.addImplementation(10000, 'code-editor', (accessor, args) => {\n // Only if editor text focus (i.e. not if editor has widget focus).\n const focusedEditor = accessor.get(ICodeEditorService).getFocusedCodeEditor();\n if (focusedEditor && focusedEditor.hasTextFocus()) {\n return this._runEditorCommand(accessor, focusedEditor, args);\n }\n return false;\n });\n // 2. handle case when focus is in some other `input` / `textarea`.\n target.addImplementation(1000, 'generic-dom-input-textarea', (accessor, args) => {\n // Only if focused on an element that allows for entering text\n const activeElement = document.activeElement;\n if (activeElement && ['input', 'textarea'].indexOf(activeElement.tagName.toLowerCase()) >= 0) {\n this.runDOMCommand();\n return true;\n }\n return false;\n });\n // 3. (default) handle case when focus is somewhere else.\n target.addImplementation(0, 'generic-dom', (accessor, args) => {\n // Redirecting to active editor\n const activeEditor = accessor.get(ICodeEditorService).getActiveCodeEditor();\n if (activeEditor) {\n activeEditor.focus();\n return this._runEditorCommand(accessor, activeEditor, args);\n }\n return false;\n });\n }\n _runEditorCommand(accessor, editor, args) {\n const result = this.runEditorCommand(accessor, editor, args);\n if (result) {\n return result;\n }\n return true;\n }\n}\nexport var CoreNavigationCommands;\n(function (CoreNavigationCommands) {\n class BaseMoveToCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, [\n CursorMoveCommands.moveTo(viewModel, viewModel.getPrimaryCursorState(), this._inSelectionMode, args.position, args.viewPosition)\n ]);\n viewModel.revealPrimaryCursor(args.source, true);\n }\n }\n CoreNavigationCommands.MoveTo = registerEditorCommand(new BaseMoveToCommand({\n id: '_moveTo',\n inSelectionMode: false,\n precondition: undefined\n }));\n CoreNavigationCommands.MoveToSelect = registerEditorCommand(new BaseMoveToCommand({\n id: '_moveToSelect',\n inSelectionMode: true,\n precondition: undefined\n }));\n class ColumnSelectCommand extends CoreEditorCommand {\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n const result = this._getColumnSelectResult(viewModel, viewModel.getPrimaryCursorState(), viewModel.getCursorColumnSelectData(), args);\n viewModel.setCursorStates(args.source, 3 /* Explicit */, result.viewStates.map((viewState) => CursorState.fromViewState(viewState)));\n viewModel.setCursorColumnSelectData({\n isReal: true,\n fromViewLineNumber: result.fromLineNumber,\n fromViewVisualColumn: result.fromVisualColumn,\n toViewLineNumber: result.toLineNumber,\n toViewVisualColumn: result.toVisualColumn\n });\n if (result.reversed) {\n viewModel.revealTopMostCursor(args.source);\n }\n else {\n viewModel.revealBottomMostCursor(args.source);\n }\n }\n }\n CoreNavigationCommands.ColumnSelect = registerEditorCommand(new class extends ColumnSelectCommand {\n constructor() {\n super({\n id: 'columnSelect',\n precondition: undefined\n });\n }\n _getColumnSelectResult(viewModel, primary, prevColumnSelectData, args) {\n // validate `args`\n const validatedPosition = viewModel.model.validatePosition(args.position);\n const validatedViewPosition = viewModel.coordinatesConverter.validateViewPosition(new Position(args.viewPosition.lineNumber, args.viewPosition.column), validatedPosition);\n let fromViewLineNumber = args.doColumnSelect ? prevColumnSelectData.fromViewLineNumber : validatedViewPosition.lineNumber;\n let fromViewVisualColumn = args.doColumnSelect ? prevColumnSelectData.fromViewVisualColumn : args.mouseColumn - 1;\n return ColumnSelection.columnSelect(viewModel.cursorConfig, viewModel, fromViewLineNumber, fromViewVisualColumn, validatedViewPosition.lineNumber, args.mouseColumn - 1);\n }\n });\n CoreNavigationCommands.CursorColumnSelectLeft = registerEditorCommand(new class extends ColumnSelectCommand {\n constructor() {\n super({\n id: 'cursorColumnSelectLeft',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 15 /* LeftArrow */,\n linux: { primary: 0 }\n }\n });\n }\n _getColumnSelectResult(viewModel, primary, prevColumnSelectData, args) {\n return ColumnSelection.columnSelectLeft(viewModel.cursorConfig, viewModel, prevColumnSelectData);\n }\n });\n CoreNavigationCommands.CursorColumnSelectRight = registerEditorCommand(new class extends ColumnSelectCommand {\n constructor() {\n super({\n id: 'cursorColumnSelectRight',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 17 /* RightArrow */,\n linux: { primary: 0 }\n }\n });\n }\n _getColumnSelectResult(viewModel, primary, prevColumnSelectData, args) {\n return ColumnSelection.columnSelectRight(viewModel.cursorConfig, viewModel, prevColumnSelectData);\n }\n });\n class ColumnSelectUpCommand extends ColumnSelectCommand {\n constructor(opts) {\n super(opts);\n this._isPaged = opts.isPaged;\n }\n _getColumnSelectResult(viewModel, primary, prevColumnSelectData, args) {\n return ColumnSelection.columnSelectUp(viewModel.cursorConfig, viewModel, prevColumnSelectData, this._isPaged);\n }\n }\n CoreNavigationCommands.CursorColumnSelectUp = registerEditorCommand(new ColumnSelectUpCommand({\n isPaged: false,\n id: 'cursorColumnSelectUp',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 16 /* UpArrow */,\n linux: { primary: 0 }\n }\n }));\n CoreNavigationCommands.CursorColumnSelectPageUp = registerEditorCommand(new ColumnSelectUpCommand({\n isPaged: true,\n id: 'cursorColumnSelectPageUp',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 11 /* PageUp */,\n linux: { primary: 0 }\n }\n }));\n class ColumnSelectDownCommand extends ColumnSelectCommand {\n constructor(opts) {\n super(opts);\n this._isPaged = opts.isPaged;\n }\n _getColumnSelectResult(viewModel, primary, prevColumnSelectData, args) {\n return ColumnSelection.columnSelectDown(viewModel.cursorConfig, viewModel, prevColumnSelectData, this._isPaged);\n }\n }\n CoreNavigationCommands.CursorColumnSelectDown = registerEditorCommand(new ColumnSelectDownCommand({\n isPaged: false,\n id: 'cursorColumnSelectDown',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 18 /* DownArrow */,\n linux: { primary: 0 }\n }\n }));\n CoreNavigationCommands.CursorColumnSelectPageDown = registerEditorCommand(new ColumnSelectDownCommand({\n isPaged: true,\n id: 'cursorColumnSelectPageDown',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 512 /* Alt */ | 12 /* PageDown */,\n linux: { primary: 0 }\n }\n }));\n class CursorMoveImpl extends CoreEditorCommand {\n constructor() {\n super({\n id: 'cursorMove',\n precondition: undefined,\n description: CursorMove_.description\n });\n }\n runCoreEditorCommand(viewModel, args) {\n const parsed = CursorMove_.parse(args);\n if (!parsed) {\n // illegal arguments\n return;\n }\n this._runCursorMove(viewModel, args.source, parsed);\n }\n _runCursorMove(viewModel, source, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(source, 3 /* Explicit */, CursorMoveImpl._move(viewModel, viewModel.getCursorStates(), args));\n viewModel.revealPrimaryCursor(source, true);\n }\n static _move(viewModel, cursors, args) {\n const inSelectionMode = args.select;\n const value = args.value;\n switch (args.direction) {\n case 0 /* Left */:\n case 1 /* Right */:\n case 2 /* Up */:\n case 3 /* Down */:\n case 4 /* PrevBlankLine */:\n case 5 /* NextBlankLine */:\n case 6 /* WrappedLineStart */:\n case 7 /* WrappedLineFirstNonWhitespaceCharacter */:\n case 8 /* WrappedLineColumnCenter */:\n case 9 /* WrappedLineEnd */:\n case 10 /* WrappedLineLastNonWhitespaceCharacter */:\n return CursorMoveCommands.simpleMove(viewModel, cursors, args.direction, inSelectionMode, value, args.unit);\n case 11 /* ViewPortTop */:\n case 13 /* ViewPortBottom */:\n case 12 /* ViewPortCenter */:\n case 14 /* ViewPortIfOutside */:\n return CursorMoveCommands.viewportMove(viewModel, cursors, args.direction, inSelectionMode, value);\n default:\n return null;\n }\n }\n }\n CoreNavigationCommands.CursorMoveImpl = CursorMoveImpl;\n CoreNavigationCommands.CursorMove = registerEditorCommand(new CursorMoveImpl());\n class CursorMoveBasedCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._staticArgs = opts.args;\n }\n runCoreEditorCommand(viewModel, dynamicArgs) {\n let args = this._staticArgs;\n if (this._staticArgs.value === -1 /* PAGE_SIZE_MARKER */) {\n // -1 is a marker for page size\n args = {\n direction: this._staticArgs.direction,\n unit: this._staticArgs.unit,\n select: this._staticArgs.select,\n value: viewModel.cursorConfig.pageSize\n };\n }\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(dynamicArgs.source, 3 /* Explicit */, CursorMoveCommands.simpleMove(viewModel, viewModel.getCursorStates(), args.direction, args.select, args.value, args.unit));\n viewModel.revealPrimaryCursor(dynamicArgs.source, true);\n }\n }\n CoreNavigationCommands.CursorLeft = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 0 /* Left */,\n unit: 0 /* None */,\n select: false,\n value: 1\n },\n id: 'cursorLeft',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 15 /* LeftArrow */,\n mac: { primary: 15 /* LeftArrow */, secondary: [256 /* WinCtrl */ | 32 /* KEY_B */] }\n }\n }));\n CoreNavigationCommands.CursorLeftSelect = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 0 /* Left */,\n unit: 0 /* None */,\n select: true,\n value: 1\n },\n id: 'cursorLeftSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 15 /* LeftArrow */\n }\n }));\n CoreNavigationCommands.CursorRight = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 1 /* Right */,\n unit: 0 /* None */,\n select: false,\n value: 1\n },\n id: 'cursorRight',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 17 /* RightArrow */,\n mac: { primary: 17 /* RightArrow */, secondary: [256 /* WinCtrl */ | 36 /* KEY_F */] }\n }\n }));\n CoreNavigationCommands.CursorRightSelect = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 1 /* Right */,\n unit: 0 /* None */,\n select: true,\n value: 1\n },\n id: 'cursorRightSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 17 /* RightArrow */\n }\n }));\n CoreNavigationCommands.CursorUp = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 2 /* Up */,\n unit: 2 /* WrappedLine */,\n select: false,\n value: 1\n },\n id: 'cursorUp',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 16 /* UpArrow */,\n mac: { primary: 16 /* UpArrow */, secondary: [256 /* WinCtrl */ | 46 /* KEY_P */] }\n }\n }));\n CoreNavigationCommands.CursorUpSelect = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 2 /* Up */,\n unit: 2 /* WrappedLine */,\n select: true,\n value: 1\n },\n id: 'cursorUpSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 16 /* UpArrow */,\n secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 16 /* UpArrow */],\n mac: { primary: 1024 /* Shift */ | 16 /* UpArrow */ },\n linux: { primary: 1024 /* Shift */ | 16 /* UpArrow */ }\n }\n }));\n CoreNavigationCommands.CursorPageUp = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 2 /* Up */,\n unit: 2 /* WrappedLine */,\n select: false,\n value: -1 /* PAGE_SIZE_MARKER */\n },\n id: 'cursorPageUp',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 11 /* PageUp */\n }\n }));\n CoreNavigationCommands.CursorPageUpSelect = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 2 /* Up */,\n unit: 2 /* WrappedLine */,\n select: true,\n value: -1 /* PAGE_SIZE_MARKER */\n },\n id: 'cursorPageUpSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 11 /* PageUp */\n }\n }));\n CoreNavigationCommands.CursorDown = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 3 /* Down */,\n unit: 2 /* WrappedLine */,\n select: false,\n value: 1\n },\n id: 'cursorDown',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 18 /* DownArrow */,\n mac: { primary: 18 /* DownArrow */, secondary: [256 /* WinCtrl */ | 44 /* KEY_N */] }\n }\n }));\n CoreNavigationCommands.CursorDownSelect = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 3 /* Down */,\n unit: 2 /* WrappedLine */,\n select: true,\n value: 1\n },\n id: 'cursorDownSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 18 /* DownArrow */,\n secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 18 /* DownArrow */],\n mac: { primary: 1024 /* Shift */ | 18 /* DownArrow */ },\n linux: { primary: 1024 /* Shift */ | 18 /* DownArrow */ }\n }\n }));\n CoreNavigationCommands.CursorPageDown = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 3 /* Down */,\n unit: 2 /* WrappedLine */,\n select: false,\n value: -1 /* PAGE_SIZE_MARKER */\n },\n id: 'cursorPageDown',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 12 /* PageDown */\n }\n }));\n CoreNavigationCommands.CursorPageDownSelect = registerEditorCommand(new CursorMoveBasedCommand({\n args: {\n direction: 3 /* Down */,\n unit: 2 /* WrappedLine */,\n select: true,\n value: -1 /* PAGE_SIZE_MARKER */\n },\n id: 'cursorPageDownSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 12 /* PageDown */\n }\n }));\n CoreNavigationCommands.CreateCursor = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'createCursor',\n precondition: undefined\n });\n }\n runCoreEditorCommand(viewModel, args) {\n let newState;\n if (args.wholeLine) {\n newState = CursorMoveCommands.line(viewModel, viewModel.getPrimaryCursorState(), false, args.position, args.viewPosition);\n }\n else {\n newState = CursorMoveCommands.moveTo(viewModel, viewModel.getPrimaryCursorState(), false, args.position, args.viewPosition);\n }\n const states = viewModel.getCursorStates();\n // Check if we should remove a cursor (sort of like a toggle)\n if (states.length > 1) {\n const newModelPosition = (newState.modelState ? newState.modelState.position : null);\n const newViewPosition = (newState.viewState ? newState.viewState.position : null);\n for (let i = 0, len = states.length; i < len; i++) {\n const state = states[i];\n if (newModelPosition && !state.modelState.selection.containsPosition(newModelPosition)) {\n continue;\n }\n if (newViewPosition && !state.viewState.selection.containsPosition(newViewPosition)) {\n continue;\n }\n // => Remove the cursor\n states.splice(i, 1);\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, states);\n return;\n }\n }\n // => Add the new cursor\n states.push(newState);\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, states);\n }\n });\n CoreNavigationCommands.LastCursorMoveToSelect = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: '_lastCursorMoveToSelect',\n precondition: undefined\n });\n }\n runCoreEditorCommand(viewModel, args) {\n const lastAddedCursorIndex = viewModel.getLastAddedCursorIndex();\n const states = viewModel.getCursorStates();\n const newStates = states.slice(0);\n newStates[lastAddedCursorIndex] = CursorMoveCommands.moveTo(viewModel, states[lastAddedCursorIndex], true, args.position, args.viewPosition);\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, newStates);\n }\n });\n class HomeCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, CursorMoveCommands.moveToBeginningOfLine(viewModel, viewModel.getCursorStates(), this._inSelectionMode));\n viewModel.revealPrimaryCursor(args.source, true);\n }\n }\n CoreNavigationCommands.CursorHome = registerEditorCommand(new HomeCommand({\n inSelectionMode: false,\n id: 'cursorHome',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 14 /* Home */,\n mac: { primary: 14 /* Home */, secondary: [2048 /* CtrlCmd */ | 15 /* LeftArrow */] }\n }\n }));\n CoreNavigationCommands.CursorHomeSelect = registerEditorCommand(new HomeCommand({\n inSelectionMode: true,\n id: 'cursorHomeSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 14 /* Home */,\n mac: { primary: 1024 /* Shift */ | 14 /* Home */, secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 15 /* LeftArrow */] }\n }\n }));\n class LineStartCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, this._exec(viewModel.getCursorStates()));\n viewModel.revealPrimaryCursor(args.source, true);\n }\n _exec(cursors) {\n const result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const lineNumber = cursor.modelState.position.lineNumber;\n result[i] = CursorState.fromModelState(cursor.modelState.move(this._inSelectionMode, lineNumber, 1, 0));\n }\n return result;\n }\n }\n CoreNavigationCommands.CursorLineStart = registerEditorCommand(new LineStartCommand({\n inSelectionMode: false,\n id: 'cursorLineStart',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 31 /* KEY_A */ }\n }\n }));\n CoreNavigationCommands.CursorLineStartSelect = registerEditorCommand(new LineStartCommand({\n inSelectionMode: true,\n id: 'cursorLineStartSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 1024 /* Shift */ | 31 /* KEY_A */ }\n }\n }));\n class EndCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, CursorMoveCommands.moveToEndOfLine(viewModel, viewModel.getCursorStates(), this._inSelectionMode, args.sticky || false));\n viewModel.revealPrimaryCursor(args.source, true);\n }\n }\n CoreNavigationCommands.CursorEnd = registerEditorCommand(new EndCommand({\n inSelectionMode: false,\n id: 'cursorEnd',\n precondition: undefined,\n kbOpts: {\n args: { sticky: false },\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 13 /* End */,\n mac: { primary: 13 /* End */, secondary: [2048 /* CtrlCmd */ | 17 /* RightArrow */] }\n },\n description: {\n description: `Go to End`,\n args: [{\n name: 'args',\n schema: {\n type: 'object',\n properties: {\n 'sticky': {\n description: nls.localize('stickydesc', \"Stick to the end even when going to longer lines\"),\n type: 'boolean',\n default: false\n }\n }\n }\n }]\n }\n }));\n CoreNavigationCommands.CursorEndSelect = registerEditorCommand(new EndCommand({\n inSelectionMode: true,\n id: 'cursorEndSelect',\n precondition: undefined,\n kbOpts: {\n args: { sticky: false },\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 13 /* End */,\n mac: { primary: 1024 /* Shift */ | 13 /* End */, secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 17 /* RightArrow */] }\n },\n description: {\n description: `Select to End`,\n args: [{\n name: 'args',\n schema: {\n type: 'object',\n properties: {\n 'sticky': {\n description: nls.localize('stickydesc', \"Stick to the end even when going to longer lines\"),\n type: 'boolean',\n default: false\n }\n }\n }\n }]\n }\n }));\n class LineEndCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, this._exec(viewModel, viewModel.getCursorStates()));\n viewModel.revealPrimaryCursor(args.source, true);\n }\n _exec(viewModel, cursors) {\n const result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const lineNumber = cursor.modelState.position.lineNumber;\n const maxColumn = viewModel.model.getLineMaxColumn(lineNumber);\n result[i] = CursorState.fromModelState(cursor.modelState.move(this._inSelectionMode, lineNumber, maxColumn, 0));\n }\n return result;\n }\n }\n CoreNavigationCommands.CursorLineEnd = registerEditorCommand(new LineEndCommand({\n inSelectionMode: false,\n id: 'cursorLineEnd',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 35 /* KEY_E */ }\n }\n }));\n CoreNavigationCommands.CursorLineEndSelect = registerEditorCommand(new LineEndCommand({\n inSelectionMode: true,\n id: 'cursorLineEndSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 1024 /* Shift */ | 35 /* KEY_E */ }\n }\n }));\n class TopCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, CursorMoveCommands.moveToBeginningOfBuffer(viewModel, viewModel.getCursorStates(), this._inSelectionMode));\n viewModel.revealPrimaryCursor(args.source, true);\n }\n }\n CoreNavigationCommands.CursorTop = registerEditorCommand(new TopCommand({\n inSelectionMode: false,\n id: 'cursorTop',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 14 /* Home */,\n mac: { primary: 2048 /* CtrlCmd */ | 16 /* UpArrow */ }\n }\n }));\n CoreNavigationCommands.CursorTopSelect = registerEditorCommand(new TopCommand({\n inSelectionMode: true,\n id: 'cursorTopSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 14 /* Home */,\n mac: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 16 /* UpArrow */ }\n }\n }));\n class BottomCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, CursorMoveCommands.moveToEndOfBuffer(viewModel, viewModel.getCursorStates(), this._inSelectionMode));\n viewModel.revealPrimaryCursor(args.source, true);\n }\n }\n CoreNavigationCommands.CursorBottom = registerEditorCommand(new BottomCommand({\n inSelectionMode: false,\n id: 'cursorBottom',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 13 /* End */,\n mac: { primary: 2048 /* CtrlCmd */ | 18 /* DownArrow */ }\n }\n }));\n CoreNavigationCommands.CursorBottomSelect = registerEditorCommand(new BottomCommand({\n inSelectionMode: true,\n id: 'cursorBottomSelect',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 13 /* End */,\n mac: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 18 /* DownArrow */ }\n }\n }));\n class EditorScrollImpl extends CoreEditorCommand {\n constructor() {\n super({\n id: 'editorScroll',\n precondition: undefined,\n description: EditorScroll_.description\n });\n }\n runCoreEditorCommand(viewModel, args) {\n const parsed = EditorScroll_.parse(args);\n if (!parsed) {\n // illegal arguments\n return;\n }\n this._runEditorScroll(viewModel, args.source, parsed);\n }\n _runEditorScroll(viewModel, source, args) {\n const desiredScrollTop = this._computeDesiredScrollTop(viewModel, args);\n if (args.revealCursor) {\n // must ensure cursor is in new visible range\n const desiredVisibleViewRange = viewModel.getCompletelyVisibleViewRangeAtScrollTop(desiredScrollTop);\n viewModel.setCursorStates(source, 3 /* Explicit */, [\n CursorMoveCommands.findPositionInViewportIfOutside(viewModel, viewModel.getPrimaryCursorState(), desiredVisibleViewRange, args.select)\n ]);\n }\n viewModel.setScrollTop(desiredScrollTop, 0 /* Smooth */);\n }\n _computeDesiredScrollTop(viewModel, args) {\n if (args.unit === 1 /* Line */) {\n // scrolling by model lines\n const visibleViewRange = viewModel.getCompletelyVisibleViewRange();\n const visibleModelRange = viewModel.coordinatesConverter.convertViewRangeToModelRange(visibleViewRange);\n let desiredTopModelLineNumber;\n if (args.direction === 1 /* Up */) {\n // must go x model lines up\n desiredTopModelLineNumber = Math.max(1, visibleModelRange.startLineNumber - args.value);\n }\n else {\n // must go x model lines down\n desiredTopModelLineNumber = Math.min(viewModel.model.getLineCount(), visibleModelRange.startLineNumber + args.value);\n }\n const viewPosition = viewModel.coordinatesConverter.convertModelPositionToViewPosition(new Position(desiredTopModelLineNumber, 1));\n return viewModel.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\n }\n let noOfLines;\n if (args.unit === 3 /* Page */) {\n noOfLines = viewModel.cursorConfig.pageSize * args.value;\n }\n else if (args.unit === 4 /* HalfPage */) {\n noOfLines = Math.round(viewModel.cursorConfig.pageSize / 2) * args.value;\n }\n else {\n noOfLines = args.value;\n }\n const deltaLines = (args.direction === 1 /* Up */ ? -1 : 1) * noOfLines;\n return viewModel.getScrollTop() + deltaLines * viewModel.cursorConfig.lineHeight;\n }\n }\n CoreNavigationCommands.EditorScrollImpl = EditorScrollImpl;\n CoreNavigationCommands.EditorScroll = registerEditorCommand(new EditorScrollImpl());\n CoreNavigationCommands.ScrollLineUp = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'scrollLineUp',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 16 /* UpArrow */,\n mac: { primary: 256 /* WinCtrl */ | 11 /* PageUp */ }\n }\n });\n }\n runCoreEditorCommand(viewModel, args) {\n CoreNavigationCommands.EditorScroll._runEditorScroll(viewModel, args.source, {\n direction: 1 /* Up */,\n unit: 2 /* WrappedLine */,\n value: 1,\n revealCursor: false,\n select: false\n });\n }\n });\n CoreNavigationCommands.ScrollPageUp = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'scrollPageUp',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 11 /* PageUp */,\n win: { primary: 512 /* Alt */ | 11 /* PageUp */ },\n linux: { primary: 512 /* Alt */ | 11 /* PageUp */ }\n }\n });\n }\n runCoreEditorCommand(viewModel, args) {\n CoreNavigationCommands.EditorScroll._runEditorScroll(viewModel, args.source, {\n direction: 1 /* Up */,\n unit: 3 /* Page */,\n value: 1,\n revealCursor: false,\n select: false\n });\n }\n });\n CoreNavigationCommands.ScrollLineDown = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'scrollLineDown',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 18 /* DownArrow */,\n mac: { primary: 256 /* WinCtrl */ | 12 /* PageDown */ }\n }\n });\n }\n runCoreEditorCommand(viewModel, args) {\n CoreNavigationCommands.EditorScroll._runEditorScroll(viewModel, args.source, {\n direction: 2 /* Down */,\n unit: 2 /* WrappedLine */,\n value: 1,\n revealCursor: false,\n select: false\n });\n }\n });\n CoreNavigationCommands.ScrollPageDown = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'scrollPageDown',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 12 /* PageDown */,\n win: { primary: 512 /* Alt */ | 12 /* PageDown */ },\n linux: { primary: 512 /* Alt */ | 12 /* PageDown */ }\n }\n });\n }\n runCoreEditorCommand(viewModel, args) {\n CoreNavigationCommands.EditorScroll._runEditorScroll(viewModel, args.source, {\n direction: 2 /* Down */,\n unit: 3 /* Page */,\n value: 1,\n revealCursor: false,\n select: false\n });\n }\n });\n class WordCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, [\n CursorMoveCommands.word(viewModel, viewModel.getPrimaryCursorState(), this._inSelectionMode, args.position)\n ]);\n viewModel.revealPrimaryCursor(args.source, true);\n }\n }\n CoreNavigationCommands.WordSelect = registerEditorCommand(new WordCommand({\n inSelectionMode: false,\n id: '_wordSelect',\n precondition: undefined\n }));\n CoreNavigationCommands.WordSelectDrag = registerEditorCommand(new WordCommand({\n inSelectionMode: true,\n id: '_wordSelectDrag',\n precondition: undefined\n }));\n CoreNavigationCommands.LastCursorWordSelect = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'lastCursorWordSelect',\n precondition: undefined\n });\n }\n runCoreEditorCommand(viewModel, args) {\n const lastAddedCursorIndex = viewModel.getLastAddedCursorIndex();\n const states = viewModel.getCursorStates();\n const newStates = states.slice(0);\n const lastAddedState = states[lastAddedCursorIndex];\n newStates[lastAddedCursorIndex] = CursorMoveCommands.word(viewModel, lastAddedState, lastAddedState.modelState.hasSelection(), args.position);\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, newStates);\n }\n });\n class LineCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, [\n CursorMoveCommands.line(viewModel, viewModel.getPrimaryCursorState(), this._inSelectionMode, args.position, args.viewPosition)\n ]);\n viewModel.revealPrimaryCursor(args.source, false);\n }\n }\n CoreNavigationCommands.LineSelect = registerEditorCommand(new LineCommand({\n inSelectionMode: false,\n id: '_lineSelect',\n precondition: undefined\n }));\n CoreNavigationCommands.LineSelectDrag = registerEditorCommand(new LineCommand({\n inSelectionMode: true,\n id: '_lineSelectDrag',\n precondition: undefined\n }));\n class LastCursorLineCommand extends CoreEditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n }\n runCoreEditorCommand(viewModel, args) {\n const lastAddedCursorIndex = viewModel.getLastAddedCursorIndex();\n const states = viewModel.getCursorStates();\n const newStates = states.slice(0);\n newStates[lastAddedCursorIndex] = CursorMoveCommands.line(viewModel, states[lastAddedCursorIndex], this._inSelectionMode, args.position, args.viewPosition);\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, newStates);\n }\n }\n CoreNavigationCommands.LastCursorLineSelect = registerEditorCommand(new LastCursorLineCommand({\n inSelectionMode: false,\n id: 'lastCursorLineSelect',\n precondition: undefined\n }));\n CoreNavigationCommands.LastCursorLineSelectDrag = registerEditorCommand(new LastCursorLineCommand({\n inSelectionMode: true,\n id: 'lastCursorLineSelectDrag',\n precondition: undefined\n }));\n CoreNavigationCommands.ExpandLineSelection = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'expandLineSelection',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 42 /* KEY_L */\n }\n });\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, CursorMoveCommands.expandLineSelection(viewModel, viewModel.getCursorStates()));\n viewModel.revealPrimaryCursor(args.source, true);\n }\n });\n CoreNavigationCommands.CancelSelection = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'cancelSelection',\n precondition: EditorContextKeys.hasNonEmptySelection,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\n });\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, [\n CursorMoveCommands.cancelSelection(viewModel, viewModel.getPrimaryCursorState())\n ]);\n viewModel.revealPrimaryCursor(args.source, true);\n }\n });\n CoreNavigationCommands.RemoveSecondaryCursors = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'removeSecondaryCursors',\n precondition: EditorContextKeys.hasMultipleSelections,\n kbOpts: {\n weight: CORE_WEIGHT + 1,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\n });\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, [\n viewModel.getPrimaryCursorState()\n ]);\n viewModel.revealPrimaryCursor(args.source, true);\n status(nls.localize('removedCursor', \"Removed secondary cursors\"));\n }\n });\n CoreNavigationCommands.RevealLine = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'revealLine',\n precondition: undefined,\n description: RevealLine_.description\n });\n }\n runCoreEditorCommand(viewModel, args) {\n const revealLineArg = args;\n const lineNumberArg = revealLineArg.lineNumber || 0;\n let lineNumber = typeof lineNumberArg === 'number' ? (lineNumberArg + 1) : (parseInt(lineNumberArg) + 1);\n if (lineNumber < 1) {\n lineNumber = 1;\n }\n const lineCount = viewModel.model.getLineCount();\n if (lineNumber > lineCount) {\n lineNumber = lineCount;\n }\n const range = new Range(lineNumber, 1, lineNumber, viewModel.model.getLineMaxColumn(lineNumber));\n let revealAt = 0 /* Simple */;\n if (revealLineArg.at) {\n switch (revealLineArg.at) {\n case RevealLine_.RawAtArgument.Top:\n revealAt = 3 /* Top */;\n break;\n case RevealLine_.RawAtArgument.Center:\n revealAt = 1 /* Center */;\n break;\n case RevealLine_.RawAtArgument.Bottom:\n revealAt = 4 /* Bottom */;\n break;\n default:\n break;\n }\n }\n const viewRange = viewModel.coordinatesConverter.convertModelRangeToViewRange(range);\n viewModel.revealRange(args.source, false, viewRange, revealAt, 0 /* Smooth */);\n }\n });\n CoreNavigationCommands.SelectAll = new class extends EditorOrNativeTextInputCommand {\n constructor() {\n super(SelectAllCommand);\n }\n runDOMCommand() {\n if (isFirefox) {\n document.activeElement.focus();\n document.activeElement.select();\n }\n document.execCommand('selectAll');\n }\n runEditorCommand(accessor, editor, args) {\n const viewModel = editor._getViewModel();\n if (!viewModel) {\n // the editor has no view => has no cursors\n return;\n }\n this.runCoreEditorCommand(viewModel, args);\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates('keyboard', 3 /* Explicit */, [\n CursorMoveCommands.selectAll(viewModel, viewModel.getPrimaryCursorState())\n ]);\n }\n }();\n CoreNavigationCommands.SetSelection = registerEditorCommand(new class extends CoreEditorCommand {\n constructor() {\n super({\n id: 'setSelection',\n precondition: undefined\n });\n }\n runCoreEditorCommand(viewModel, args) {\n viewModel.model.pushStackElement();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, [\n CursorState.fromModelSelection(args.selection)\n ]);\n }\n });\n})(CoreNavigationCommands || (CoreNavigationCommands = {}));\nconst columnSelectionCondition = ContextKeyExpr.and(EditorContextKeys.textInputFocus, EditorContextKeys.columnSelection);\nfunction registerColumnSelection(id, keybinding) {\n KeybindingsRegistry.registerKeybindingRule({\n id: id,\n primary: keybinding,\n when: columnSelectionCondition,\n weight: CORE_WEIGHT + 1\n });\n}\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectLeft.id, 1024 /* Shift */ | 15 /* LeftArrow */);\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectRight.id, 1024 /* Shift */ | 17 /* RightArrow */);\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectUp.id, 1024 /* Shift */ | 16 /* UpArrow */);\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectPageUp.id, 1024 /* Shift */ | 11 /* PageUp */);\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectDown.id, 1024 /* Shift */ | 18 /* DownArrow */);\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectPageDown.id, 1024 /* Shift */ | 12 /* PageDown */);\nfunction registerCommand(command) {\n command.register();\n return command;\n}\nexport var CoreEditingCommands;\n(function (CoreEditingCommands) {\n class CoreEditingCommand extends EditorCommand {\n runEditorCommand(accessor, editor, args) {\n const viewModel = editor._getViewModel();\n if (!viewModel) {\n // the editor has no view => has no cursors\n return;\n }\n this.runCoreEditingCommand(editor, viewModel, args || {});\n }\n }\n CoreEditingCommands.CoreEditingCommand = CoreEditingCommand;\n CoreEditingCommands.LineBreakInsert = registerEditorCommand(new class extends CoreEditingCommand {\n constructor() {\n super({\n id: 'lineBreakInsert',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 45 /* KEY_O */ }\n }\n });\n }\n runCoreEditingCommand(editor, viewModel, args) {\n editor.pushUndoStop();\n editor.executeCommands(this.id, TypeOperations.lineBreakInsert(viewModel.cursorConfig, viewModel.model, viewModel.getCursorStates().map(s => s.modelState.selection)));\n }\n });\n CoreEditingCommands.Outdent = registerEditorCommand(new class extends CoreEditingCommand {\n constructor() {\n super({\n id: 'outdent',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: ContextKeyExpr.and(EditorContextKeys.editorTextFocus, EditorContextKeys.tabDoesNotMoveFocus),\n primary: 1024 /* Shift */ | 2 /* Tab */\n }\n });\n }\n runCoreEditingCommand(editor, viewModel, args) {\n editor.pushUndoStop();\n editor.executeCommands(this.id, TypeOperations.outdent(viewModel.cursorConfig, viewModel.model, viewModel.getCursorStates().map(s => s.modelState.selection)));\n editor.pushUndoStop();\n }\n });\n CoreEditingCommands.Tab = registerEditorCommand(new class extends CoreEditingCommand {\n constructor() {\n super({\n id: 'tab',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: ContextKeyExpr.and(EditorContextKeys.editorTextFocus, EditorContextKeys.tabDoesNotMoveFocus),\n primary: 2 /* Tab */\n }\n });\n }\n runCoreEditingCommand(editor, viewModel, args) {\n editor.pushUndoStop();\n editor.executeCommands(this.id, TypeOperations.tab(viewModel.cursorConfig, viewModel.model, viewModel.getCursorStates().map(s => s.modelState.selection)));\n editor.pushUndoStop();\n }\n });\n CoreEditingCommands.DeleteLeft = registerEditorCommand(new class extends CoreEditingCommand {\n constructor() {\n super({\n id: 'deleteLeft',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1 /* Backspace */,\n secondary: [1024 /* Shift */ | 1 /* Backspace */],\n mac: { primary: 1 /* Backspace */, secondary: [1024 /* Shift */ | 1 /* Backspace */, 256 /* WinCtrl */ | 38 /* KEY_H */, 256 /* WinCtrl */ | 1 /* Backspace */] }\n }\n });\n }\n runCoreEditingCommand(editor, viewModel, args) {\n const [shouldPushStackElementBefore, commands] = DeleteOperations.deleteLeft(viewModel.getPrevEditOperationType(), viewModel.cursorConfig, viewModel.model, viewModel.getCursorStates().map(s => s.modelState.selection), viewModel.getCursorAutoClosedCharacters());\n if (shouldPushStackElementBefore) {\n editor.pushUndoStop();\n }\n editor.executeCommands(this.id, commands);\n viewModel.setPrevEditOperationType(2 /* DeletingLeft */);\n }\n });\n CoreEditingCommands.DeleteRight = registerEditorCommand(new class extends CoreEditingCommand {\n constructor() {\n super({\n id: 'deleteRight',\n precondition: undefined,\n kbOpts: {\n weight: CORE_WEIGHT,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 20 /* Delete */,\n mac: { primary: 20 /* Delete */, secondary: [256 /* WinCtrl */ | 34 /* KEY_D */, 256 /* WinCtrl */ | 20 /* Delete */] }\n }\n });\n }\n runCoreEditingCommand(editor, viewModel, args) {\n const [shouldPushStackElementBefore, commands] = DeleteOperations.deleteRight(viewModel.getPrevEditOperationType(), viewModel.cursorConfig, viewModel.model, viewModel.getCursorStates().map(s => s.modelState.selection));\n if (shouldPushStackElementBefore) {\n editor.pushUndoStop();\n }\n editor.executeCommands(this.id, commands);\n viewModel.setPrevEditOperationType(3 /* DeletingRight */);\n }\n });\n CoreEditingCommands.Undo = new class extends EditorOrNativeTextInputCommand {\n constructor() {\n super(UndoCommand);\n }\n runDOMCommand() {\n document.execCommand('undo');\n }\n runEditorCommand(accessor, editor, args) {\n if (!editor.hasModel() || editor.getOption(77 /* readOnly */) === true) {\n return;\n }\n return editor.getModel().undo();\n }\n }();\n CoreEditingCommands.Redo = new class extends EditorOrNativeTextInputCommand {\n constructor() {\n super(RedoCommand);\n }\n runDOMCommand() {\n document.execCommand('redo');\n }\n runEditorCommand(accessor, editor, args) {\n if (!editor.hasModel() || editor.getOption(77 /* readOnly */) === true) {\n return;\n }\n return editor.getModel().redo();\n }\n }();\n})(CoreEditingCommands || (CoreEditingCommands = {}));\n/**\n * A command that will invoke a command on the focused editor.\n */\nclass EditorHandlerCommand extends Command {\n constructor(id, handlerId, description) {\n super({\n id: id,\n precondition: undefined,\n description: description\n });\n this._handlerId = handlerId;\n }\n runCommand(accessor, args) {\n const editor = accessor.get(ICodeEditorService).getFocusedCodeEditor();\n if (!editor) {\n return;\n }\n editor.trigger('keyboard', this._handlerId, args);\n }\n}\nfunction registerOverwritableCommand(handlerId, description) {\n registerCommand(new EditorHandlerCommand('default:' + handlerId, handlerId));\n registerCommand(new EditorHandlerCommand(handlerId, handlerId, description));\n}\nregisterOverwritableCommand(\"type\" /* Type */, {\n description: `Type`,\n args: [{\n name: 'args',\n schema: {\n 'type': 'object',\n 'required': ['text'],\n 'properties': {\n 'text': {\n 'type': 'string'\n }\n },\n }\n }]\n});\nregisterOverwritableCommand(\"replacePreviousChar\" /* ReplacePreviousChar */);\nregisterOverwritableCommand(\"compositionType\" /* CompositionType */);\nregisterOverwritableCommand(\"compositionStart\" /* CompositionStart */);\nregisterOverwritableCommand(\"compositionEnd\" /* CompositionEnd */);\nregisterOverwritableCommand(\"paste\" /* Paste */);\nregisterOverwritableCommand(\"cut\" /* Cut */);\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 *--------------------------------------------------------------------------------------------*/\nimport * as browser from '../../../base/browser/browser.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { TextAreaState, _debugComposition } from './textAreaState.js';\nimport { Position } from '../../common/core/position.js';\nimport { Selection } from '../../common/core/selection.js';\nexport var TextAreaSyntethicEvents;\n(function (TextAreaSyntethicEvents) {\n TextAreaSyntethicEvents.Tap = '-monaco-textarea-synthetic-tap';\n})(TextAreaSyntethicEvents || (TextAreaSyntethicEvents = {}));\nexport const CopyOptions = {\n forceCopyWithSyntaxHighlighting: false\n};\n/**\n * Every time we write to the clipboard, we record a bit of extra metadata here.\n * Every time we read from the cipboard, if the text matches our last written text,\n * we can fetch the previous metadata.\n */\nexport class InMemoryClipboardMetadataManager {\n constructor() {\n this._lastState = null;\n }\n set(lastCopiedValue, data) {\n this._lastState = { lastCopiedValue, data };\n }\n get(pastedText) {\n if (this._lastState && this._lastState.lastCopiedValue === pastedText) {\n // match!\n return this._lastState.data;\n }\n this._lastState = null;\n return null;\n }\n}\nInMemoryClipboardMetadataManager.INSTANCE = new InMemoryClipboardMetadataManager();\n/**\n * Writes screen reader content to the textarea and is able to analyze its input events to generate:\n * - onCut\n * - onPaste\n * - onType\n *\n * Composition events are generated for presentation purposes (composition input is reflected in onType).\n */\nexport class TextAreaInput extends Disposable {\n constructor(host, textArea) {\n super();\n this.textArea = textArea;\n this._onFocus = this._register(new Emitter());\n this.onFocus = this._onFocus.event;\n this._onBlur = this._register(new Emitter());\n this.onBlur = this._onBlur.event;\n this._onKeyDown = this._register(new Emitter());\n this.onKeyDown = this._onKeyDown.event;\n this._onKeyUp = this._register(new Emitter());\n this.onKeyUp = this._onKeyUp.event;\n this._onCut = this._register(new Emitter());\n this.onCut = this._onCut.event;\n this._onPaste = this._register(new Emitter());\n this.onPaste = this._onPaste.event;\n this._onType = this._register(new Emitter());\n this.onType = this._onType.event;\n this._onCompositionStart = this._register(new Emitter());\n this.onCompositionStart = this._onCompositionStart.event;\n this._onCompositionUpdate = this._register(new Emitter());\n this.onCompositionUpdate = this._onCompositionUpdate.event;\n this._onCompositionEnd = this._register(new Emitter());\n this.onCompositionEnd = this._onCompositionEnd.event;\n this._onSelectionChangeRequest = this._register(new Emitter());\n this.onSelectionChangeRequest = this._onSelectionChangeRequest.event;\n this._host = host;\n this._textArea = this._register(new TextAreaWrapper(textArea));\n this._asyncTriggerCut = this._register(new RunOnceScheduler(() => this._onCut.fire(), 0));\n this._asyncFocusGainWriteScreenReaderContent = this._register(new RunOnceScheduler(() => this.writeScreenReaderContent('asyncFocusGain'), 0));\n this._textAreaState = TextAreaState.EMPTY;\n this._selectionChangeListener = null;\n this.writeScreenReaderContent('ctor');\n this._hasFocus = false;\n this._isDoingComposition = false;\n this._nextCommand = 0 /* Type */;\n let lastKeyDown = null;\n this._register(dom.addStandardDisposableListener(textArea.domNode, 'keydown', (e) => {\n if (e.keyCode === 109 /* KEY_IN_COMPOSITION */\n || (this._isDoingComposition && e.keyCode === 1 /* Backspace */)) {\n // Stop propagation for keyDown events if the IME is processing key input\n e.stopPropagation();\n }\n if (e.equals(9 /* Escape */)) {\n // Prevent default always for `Esc`, otherwise it will generate a keypress\n // See https://msdn.microsoft.com/en-us/library/ie/ms536939(v=vs.85).aspx\n e.preventDefault();\n }\n lastKeyDown = e;\n this._onKeyDown.fire(e);\n }));\n this._register(dom.addStandardDisposableListener(textArea.domNode, 'keyup', (e) => {\n this._onKeyUp.fire(e);\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'compositionstart', (e) => {\n if (_debugComposition) {\n console.log(`[compositionstart]`, e);\n }\n if (this._isDoingComposition) {\n return;\n }\n this._isDoingComposition = true;\n if (platform.isMacintosh\n && this._textAreaState.selectionStart === this._textAreaState.selectionEnd\n && this._textAreaState.selectionStart > 0\n && this._textAreaState.value.substr(this._textAreaState.selectionStart - 1, 1) === e.data) {\n const isArrowKey = (lastKeyDown && lastKeyDown.equals(109 /* KEY_IN_COMPOSITION */)\n && (lastKeyDown.code === 'ArrowRight' || lastKeyDown.code === 'ArrowLeft'));\n if (isArrowKey || browser.isFirefox) {\n // Handling long press case on Chromium/Safari macOS + arrow key => pretend the character was selected\n // or long press case on Firefox on macOS\n if (_debugComposition) {\n console.log(`[compositionstart] Handling long press case on macOS + arrow key or Firefox`, e);\n }\n this._textAreaState = new TextAreaState(this._textAreaState.value, this._textAreaState.selectionStart - 1, this._textAreaState.selectionEnd, this._textAreaState.selectionStartPosition ? new Position(this._textAreaState.selectionStartPosition.lineNumber, this._textAreaState.selectionStartPosition.column - 1) : null, this._textAreaState.selectionEndPosition);\n this._onCompositionStart.fire({ revealDeltaColumns: -1 });\n return;\n }\n }\n if (browser.isAndroid) {\n // when tapping on the editor, Android enters composition mode to edit the current word\n // so we cannot clear the textarea on Android and we must pretend the current word was selected\n this._onCompositionStart.fire({ revealDeltaColumns: -this._textAreaState.selectionStart });\n return;\n }\n this._setAndWriteTextAreaState('compositionstart', TextAreaState.EMPTY);\n this._onCompositionStart.fire({ revealDeltaColumns: 0 });\n }));\n /**\n * Deduce the typed input from a text area's value and the last observed state.\n */\n const deduceInputFromTextAreaValue = (couldBeEmojiInput) => {\n const oldState = this._textAreaState;\n const newState = TextAreaState.readFromTextArea(this._textArea);\n return [newState, TextAreaState.deduceInput(oldState, newState, couldBeEmojiInput)];\n };\n const deduceAndroidCompositionInput = () => {\n const oldState = this._textAreaState;\n const newState = TextAreaState.readFromTextArea(this._textArea);\n return [newState, TextAreaState.deduceAndroidCompositionInput(oldState, newState)];\n };\n /**\n * Deduce the composition input from a string.\n */\n const deduceComposition = (text) => {\n const oldState = this._textAreaState;\n const newState = TextAreaState.selectedText(text);\n const typeInput = {\n text: newState.value,\n replacePrevCharCnt: oldState.selectionEnd - oldState.selectionStart,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n return [newState, typeInput];\n };\n this._register(dom.addDisposableListener(textArea.domNode, 'compositionupdate', (e) => {\n if (_debugComposition) {\n console.log(`[compositionupdate]`, e);\n }\n if (browser.isAndroid) {\n // On Android, the data sent with the composition update event is unusable.\n // For example, if the cursor is in the middle of a word like Mic|osoft\n // and Microsoft is chosen from the keyboard's suggestions, the e.data will contain \"Microsoft\".\n // This is not really usable because it doesn't tell us where the edit began and where it ended.\n const [newState, typeInput] = deduceAndroidCompositionInput();\n this._textAreaState = newState;\n this._onType.fire(typeInput);\n this._onCompositionUpdate.fire(e);\n return;\n }\n const [newState, typeInput] = deduceComposition(e.data || '');\n this._textAreaState = newState;\n this._onType.fire(typeInput);\n this._onCompositionUpdate.fire(e);\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'compositionend', (e) => {\n if (_debugComposition) {\n console.log(`[compositionend]`, e);\n }\n // https://github.com/microsoft/monaco-editor/issues/1663\n // On iOS 13.2, Chinese system IME randomly trigger an additional compositionend event with empty data\n if (!this._isDoingComposition) {\n return;\n }\n this._isDoingComposition = false;\n if (browser.isAndroid) {\n // On Android, the data sent with the composition update event is unusable.\n // For example, if the cursor is in the middle of a word like Mic|osoft\n // and Microsoft is chosen from the keyboard's suggestions, the e.data will contain \"Microsoft\".\n // This is not really usable because it doesn't tell us where the edit began and where it ended.\n const [newState, typeInput] = deduceAndroidCompositionInput();\n this._textAreaState = newState;\n this._onType.fire(typeInput);\n this._onCompositionEnd.fire();\n return;\n }\n const [newState, typeInput] = deduceComposition(e.data || '');\n this._textAreaState = newState;\n this._onType.fire(typeInput);\n // isChrome: the textarea is not updated correctly when composition ends\n // isFirefox: the textarea is not updated correctly after inserting emojis\n // => we cannot assume the text at the end consists only of the composited text\n if (browser.isChrome || browser.isFirefox) {\n this._textAreaState = TextAreaState.readFromTextArea(this._textArea);\n }\n this._onCompositionEnd.fire();\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'input', () => {\n // Pretend here we touched the text area, as the `input` event will most likely\n // result in a `selectionchange` event which we want to ignore\n this._textArea.setIgnoreSelectionChangeTime('received input event');\n if (this._isDoingComposition) {\n return;\n }\n const [newState, typeInput] = deduceInputFromTextAreaValue(/*couldBeEmojiInput*/ platform.isMacintosh);\n if (typeInput.replacePrevCharCnt === 0 && typeInput.text.length === 1 && strings.isHighSurrogate(typeInput.text.charCodeAt(0))) {\n // Ignore invalid input but keep it around for next time\n return;\n }\n this._textAreaState = newState;\n if (this._nextCommand === 0 /* Type */) {\n if (typeInput.text !== '' || typeInput.replacePrevCharCnt !== 0) {\n this._onType.fire(typeInput);\n }\n }\n else {\n if (typeInput.text !== '' || typeInput.replacePrevCharCnt !== 0) {\n this._firePaste(typeInput.text, null);\n }\n this._nextCommand = 0 /* Type */;\n }\n }));\n // --- Clipboard operations\n this._register(dom.addDisposableListener(textArea.domNode, 'cut', (e) => {\n // Pretend here we touched the text area, as the `cut` event will most likely\n // result in a `selectionchange` event which we want to ignore\n this._textArea.setIgnoreSelectionChangeTime('received cut event');\n this._ensureClipboardGetsEditorSelection(e);\n this._asyncTriggerCut.schedule();\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'copy', (e) => {\n this._ensureClipboardGetsEditorSelection(e);\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'paste', (e) => {\n // Pretend here we touched the text area, as the `paste` event will most likely\n // result in a `selectionchange` event which we want to ignore\n this._textArea.setIgnoreSelectionChangeTime('received paste event');\n if (ClipboardEventUtils.canUseTextData(e)) {\n const [pastePlainText, metadata] = ClipboardEventUtils.getTextData(e);\n if (pastePlainText !== '') {\n this._firePaste(pastePlainText, metadata);\n }\n }\n else {\n if (this._textArea.getSelectionStart() !== this._textArea.getSelectionEnd()) {\n // Clean up the textarea, to get a clean paste\n this._setAndWriteTextAreaState('paste', TextAreaState.EMPTY);\n }\n this._nextCommand = 1 /* Paste */;\n }\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'focus', () => {\n const hadFocus = this._hasFocus;\n this._setHasFocus(true);\n if (browser.isSafari && !hadFocus && this._hasFocus) {\n // When \"tabbing into\" the textarea, immediately after dispatching the 'focus' event,\n // Safari will always move the selection at offset 0 in the textarea\n this._asyncFocusGainWriteScreenReaderContent.schedule();\n }\n }));\n this._register(dom.addDisposableListener(textArea.domNode, 'blur', () => {\n if (this._isDoingComposition) {\n // See https://github.com/microsoft/vscode/issues/112621\n // where compositionend is not triggered when the editor\n // is taken off-dom during a composition\n // Clear the flag to be able to write to the textarea\n this._isDoingComposition = false;\n // Clear the textarea to avoid an unwanted cursor type\n this.writeScreenReaderContent('blurWithoutCompositionEnd');\n // Fire artificial composition end\n this._onCompositionEnd.fire();\n }\n this._setHasFocus(false);\n }));\n this._register(dom.addDisposableListener(textArea.domNode, TextAreaSyntethicEvents.Tap, () => {\n if (browser.isAndroid && this._isDoingComposition) {\n // on Android, tapping does not cancel the current composition, so the\n // textarea is stuck showing the old composition\n // Clear the flag to be able to write to the textarea\n this._isDoingComposition = false;\n // Clear the textarea to avoid an unwanted cursor type\n this.writeScreenReaderContent('tapWithoutCompositionEnd');\n // Fire artificial composition end\n this._onCompositionEnd.fire();\n }\n }));\n }\n _installSelectionChangeListener() {\n // See https://github.com/microsoft/vscode/issues/27216 and https://github.com/microsoft/vscode/issues/98256\n // When using a Braille display, it is possible for users to reposition the\n // system caret. This is reflected in Chrome as a `selectionchange` event.\n //\n // The `selectionchange` event appears to be emitted under numerous other circumstances,\n // so it is quite a challenge to distinguish a `selectionchange` coming in from a user\n // using a Braille display from all the other cases.\n //\n // The problems with the `selectionchange` event are:\n // * the event is emitted when the textarea is focused programmatically -- textarea.focus()\n // * the event is emitted when the selection is changed in the textarea programmatically -- textarea.setSelectionRange(...)\n // * the event is emitted when the value of the textarea is changed programmatically -- textarea.value = '...'\n // * the event is emitted when tabbing into the textarea\n // * the event is emitted asynchronously (sometimes with a delay as high as a few tens of ms)\n // * the event sometimes comes in bursts for a single logical textarea operation\n // `selectionchange` events often come multiple times for a single logical change\n // so throttle multiple `selectionchange` events that burst in a short period of time.\n let previousSelectionChangeEventTime = 0;\n return dom.addDisposableListener(document, 'selectionchange', (e) => {\n if (!this._hasFocus) {\n return;\n }\n if (this._isDoingComposition) {\n return;\n }\n if (!browser.isChrome) {\n // Support only for Chrome until testing happens on other browsers\n return;\n }\n const now = Date.now();\n const delta1 = now - previousSelectionChangeEventTime;\n previousSelectionChangeEventTime = now;\n if (delta1 < 5) {\n // received another `selectionchange` event within 5ms of the previous `selectionchange` event\n // => ignore it\n return;\n }\n const delta2 = now - this._textArea.getIgnoreSelectionChangeTime();\n this._textArea.resetSelectionChangeTime();\n if (delta2 < 100) {\n // received a `selectionchange` event within 100ms since we touched the textarea\n // => ignore it, since we caused it\n return;\n }\n if (!this._textAreaState.selectionStartPosition || !this._textAreaState.selectionEndPosition) {\n // Cannot correlate a position in the textarea with a position in the editor...\n return;\n }\n const newValue = this._textArea.getValue();\n if (this._textAreaState.value !== newValue) {\n // Cannot correlate a position in the textarea with a position in the editor...\n return;\n }\n const newSelectionStart = this._textArea.getSelectionStart();\n const newSelectionEnd = this._textArea.getSelectionEnd();\n if (this._textAreaState.selectionStart === newSelectionStart && this._textAreaState.selectionEnd === newSelectionEnd) {\n // Nothing to do...\n return;\n }\n const _newSelectionStartPosition = this._textAreaState.deduceEditorPosition(newSelectionStart);\n const newSelectionStartPosition = this._host.deduceModelPosition(_newSelectionStartPosition[0], _newSelectionStartPosition[1], _newSelectionStartPosition[2]);\n const _newSelectionEndPosition = this._textAreaState.deduceEditorPosition(newSelectionEnd);\n const newSelectionEndPosition = this._host.deduceModelPosition(_newSelectionEndPosition[0], _newSelectionEndPosition[1], _newSelectionEndPosition[2]);\n const newSelection = new Selection(newSelectionStartPosition.lineNumber, newSelectionStartPosition.column, newSelectionEndPosition.lineNumber, newSelectionEndPosition.column);\n this._onSelectionChangeRequest.fire(newSelection);\n });\n }\n dispose() {\n super.dispose();\n if (this._selectionChangeListener) {\n this._selectionChangeListener.dispose();\n this._selectionChangeListener = null;\n }\n }\n focusTextArea() {\n // Setting this._hasFocus and writing the screen reader content\n // will result in a focus() and setSelectionRange() in the textarea\n this._setHasFocus(true);\n // If the editor is off DOM, focus cannot be really set, so let's double check that we have managed to set the focus\n this.refreshFocusState();\n }\n isFocused() {\n return this._hasFocus;\n }\n refreshFocusState() {\n const shadowRoot = dom.getShadowRoot(this.textArea.domNode);\n if (shadowRoot) {\n this._setHasFocus(shadowRoot.activeElement === this.textArea.domNode);\n }\n else if (dom.isInDOM(this.textArea.domNode)) {\n this._setHasFocus(document.activeElement === this.textArea.domNode);\n }\n else {\n this._setHasFocus(false);\n }\n }\n _setHasFocus(newHasFocus) {\n if (this._hasFocus === newHasFocus) {\n // no change\n return;\n }\n this._hasFocus = newHasFocus;\n if (this._selectionChangeListener) {\n this._selectionChangeListener.dispose();\n this._selectionChangeListener = null;\n }\n if (this._hasFocus) {\n this._selectionChangeListener = this._installSelectionChangeListener();\n }\n if (this._hasFocus) {\n this.writeScreenReaderContent('focusgain');\n }\n if (this._hasFocus) {\n this._onFocus.fire();\n }\n else {\n this._onBlur.fire();\n }\n }\n _setAndWriteTextAreaState(reason, textAreaState) {\n if (!this._hasFocus) {\n textAreaState = textAreaState.collapseSelection();\n }\n textAreaState.writeToTextArea(reason, this._textArea, this._hasFocus);\n this._textAreaState = textAreaState;\n }\n writeScreenReaderContent(reason) {\n if (this._isDoingComposition) {\n // Do not write to the text area when doing composition\n return;\n }\n this._setAndWriteTextAreaState(reason, this._host.getScreenReaderContent(this._textAreaState));\n }\n _ensureClipboardGetsEditorSelection(e) {\n const dataToCopy = this._host.getDataToCopy(ClipboardEventUtils.canUseTextData(e));\n const storedMetadata = {\n version: 1,\n isFromEmptySelection: dataToCopy.isFromEmptySelection,\n multicursorText: dataToCopy.multicursorText,\n mode: dataToCopy.mode\n };\n InMemoryClipboardMetadataManager.INSTANCE.set(\n // When writing \"LINE\\r\\n\" to the clipboard and then pasting,\n // Firefox pastes \"LINE\\n\", so let's work around this quirk\n (browser.isFirefox ? dataToCopy.text.replace(/\\r\\n/g, '\\n') : dataToCopy.text), storedMetadata);\n if (!ClipboardEventUtils.canUseTextData(e)) {\n // Looks like an old browser. The strategy is to place the text\n // we'd like to be copied to the clipboard in the textarea and select it.\n this._setAndWriteTextAreaState('copy or cut', TextAreaState.selectedText(dataToCopy.text));\n return;\n }\n ClipboardEventUtils.setTextData(e, dataToCopy.text, dataToCopy.html, storedMetadata);\n }\n _firePaste(text, metadata) {\n if (!metadata) {\n // try the in-memory store\n metadata = InMemoryClipboardMetadataManager.INSTANCE.get(text);\n }\n this._onPaste.fire({\n text: text,\n metadata: metadata\n });\n }\n}\nclass ClipboardEventUtils {\n static canUseTextData(e) {\n if (e.clipboardData) {\n return true;\n }\n if (window.clipboardData) {\n return true;\n }\n return false;\n }\n static getTextData(e) {\n if (e.clipboardData) {\n e.preventDefault();\n const text = e.clipboardData.getData('text/plain');\n let metadata = null;\n const rawmetadata = e.clipboardData.getData('vscode-editor-data');\n if (typeof rawmetadata === 'string') {\n try {\n metadata = JSON.parse(rawmetadata);\n if (metadata.version !== 1) {\n metadata = null;\n }\n }\n catch (err) {\n // no problem!\n }\n }\n return [text, metadata];\n }\n if (window.clipboardData) {\n e.preventDefault();\n const text = window.clipboardData.getData('Text');\n return [text, null];\n }\n throw new Error('ClipboardEventUtils.getTextData: Cannot use text data!');\n }\n static setTextData(e, text, html, metadata) {\n if (e.clipboardData) {\n e.clipboardData.setData('text/plain', text);\n if (typeof html === 'string') {\n e.clipboardData.setData('text/html', html);\n }\n e.clipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n e.preventDefault();\n return;\n }\n if (window.clipboardData) {\n window.clipboardData.setData('Text', text);\n e.preventDefault();\n return;\n }\n throw new Error('ClipboardEventUtils.setTextData: Cannot use text data!');\n }\n}\nclass TextAreaWrapper extends Disposable {\n constructor(_textArea) {\n super();\n this._actual = _textArea;\n this._ignoreSelectionChangeTime = 0;\n }\n setIgnoreSelectionChangeTime(reason) {\n this._ignoreSelectionChangeTime = Date.now();\n }\n getIgnoreSelectionChangeTime() {\n return this._ignoreSelectionChangeTime;\n }\n resetSelectionChangeTime() {\n this._ignoreSelectionChangeTime = 0;\n }\n getValue() {\n // console.log('current value: ' + this._textArea.value);\n return this._actual.domNode.value;\n }\n setValue(reason, value) {\n const textArea = this._actual.domNode;\n if (textArea.value === value) {\n // No change\n return;\n }\n // console.log('reason: ' + reason + ', current value: ' + textArea.value + ' => new value: ' + value);\n this.setIgnoreSelectionChangeTime('setValue');\n textArea.value = value;\n }\n getSelectionStart() {\n return this._actual.domNode.selectionDirection === 'backward' ? this._actual.domNode.selectionEnd : this._actual.domNode.selectionStart;\n }\n getSelectionEnd() {\n return this._actual.domNode.selectionDirection === 'backward' ? this._actual.domNode.selectionStart : this._actual.domNode.selectionEnd;\n }\n setSelectionRange(reason, selectionStart, selectionEnd) {\n const textArea = this._actual.domNode;\n let activeElement = null;\n const shadowRoot = dom.getShadowRoot(textArea);\n if (shadowRoot) {\n activeElement = shadowRoot.activeElement;\n }\n else {\n activeElement = document.activeElement;\n }\n const currentIsFocused = (activeElement === textArea);\n const currentSelectionStart = textArea.selectionStart;\n const currentSelectionEnd = textArea.selectionEnd;\n if (currentIsFocused && currentSelectionStart === selectionStart && currentSelectionEnd === selectionEnd) {\n // No change\n // Firefox iframe bug https://github.com/microsoft/monaco-editor/issues/643#issuecomment-367871377\n if (browser.isFirefox && window.parent !== window) {\n textArea.focus();\n }\n return;\n }\n // console.log('reason: ' + reason + ', setSelectionRange: ' + selectionStart + ' -> ' + selectionEnd);\n if (currentIsFocused) {\n // No need to focus, only need to change the selection range\n this.setIgnoreSelectionChangeTime('setSelectionRange');\n textArea.setSelectionRange(selectionStart, selectionEnd);\n if (browser.isFirefox && window.parent !== window) {\n textArea.focus();\n }\n return;\n }\n // If the focus is outside the textarea, browsers will try really hard to reveal the textarea.\n // Here, we try to undo the browser's desperate reveal.\n try {\n const scrollState = dom.saveParentsScrollTop(textArea);\n this.setIgnoreSelectionChangeTime('setSelectionRange');\n textArea.focus();\n textArea.setSelectionRange(selectionStart, selectionEnd);\n dom.restoreParentsScrollTop(textArea, scrollState);\n }\n catch (e) {\n // Sometimes IE throws when setting selection (e.g. textarea is off-DOM)\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nexport const _debugComposition = false;\nexport class TextAreaState {\n constructor(value, selectionStart, selectionEnd, selectionStartPosition, selectionEndPosition) {\n this.value = value;\n this.selectionStart = selectionStart;\n this.selectionEnd = selectionEnd;\n this.selectionStartPosition = selectionStartPosition;\n this.selectionEndPosition = selectionEndPosition;\n }\n toString() {\n return '[ <' + this.value + '>, selectionStart: ' + this.selectionStart + ', selectionEnd: ' + this.selectionEnd + ']';\n }\n static readFromTextArea(textArea) {\n return new TextAreaState(textArea.getValue(), textArea.getSelectionStart(), textArea.getSelectionEnd(), null, null);\n }\n collapseSelection() {\n return new TextAreaState(this.value, this.value.length, this.value.length, null, null);\n }\n writeToTextArea(reason, textArea, select) {\n if (_debugComposition) {\n console.log('writeToTextArea ' + reason + ': ' + this.toString());\n }\n textArea.setValue(reason, this.value);\n if (select) {\n textArea.setSelectionRange(reason, this.selectionStart, this.selectionEnd);\n }\n }\n deduceEditorPosition(offset) {\n if (offset <= this.selectionStart) {\n const str = this.value.substring(offset, this.selectionStart);\n return this._finishDeduceEditorPosition(this.selectionStartPosition, str, -1);\n }\n if (offset >= this.selectionEnd) {\n const str = this.value.substring(this.selectionEnd, offset);\n return this._finishDeduceEditorPosition(this.selectionEndPosition, str, 1);\n }\n const str1 = this.value.substring(this.selectionStart, offset);\n if (str1.indexOf(String.fromCharCode(8230)) === -1) {\n return this._finishDeduceEditorPosition(this.selectionStartPosition, str1, 1);\n }\n const str2 = this.value.substring(offset, this.selectionEnd);\n return this._finishDeduceEditorPosition(this.selectionEndPosition, str2, -1);\n }\n _finishDeduceEditorPosition(anchor, deltaText, signum) {\n let lineFeedCnt = 0;\n let lastLineFeedIndex = -1;\n while ((lastLineFeedIndex = deltaText.indexOf('\\n', lastLineFeedIndex + 1)) !== -1) {\n lineFeedCnt++;\n }\n return [anchor, signum * deltaText.length, lineFeedCnt];\n }\n static selectedText(text) {\n return new TextAreaState(text, 0, text.length, null, null);\n }\n static deduceInput(previousState, currentState, couldBeEmojiInput) {\n if (!previousState) {\n // This is the EMPTY state\n return {\n text: '',\n replacePrevCharCnt: 0,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n if (_debugComposition) {\n console.log('------------------------deduceInput');\n console.log('PREVIOUS STATE: ' + previousState.toString());\n console.log('CURRENT STATE: ' + currentState.toString());\n }\n let previousValue = previousState.value;\n let previousSelectionStart = previousState.selectionStart;\n let previousSelectionEnd = previousState.selectionEnd;\n let currentValue = currentState.value;\n let currentSelectionStart = currentState.selectionStart;\n let currentSelectionEnd = currentState.selectionEnd;\n // Strip the previous suffix from the value (without interfering with the current selection)\n const previousSuffix = previousValue.substring(previousSelectionEnd);\n const currentSuffix = currentValue.substring(currentSelectionEnd);\n const suffixLength = strings.commonSuffixLength(previousSuffix, currentSuffix);\n currentValue = currentValue.substring(0, currentValue.length - suffixLength);\n previousValue = previousValue.substring(0, previousValue.length - suffixLength);\n const previousPrefix = previousValue.substring(0, previousSelectionStart);\n const currentPrefix = currentValue.substring(0, currentSelectionStart);\n const prefixLength = strings.commonPrefixLength(previousPrefix, currentPrefix);\n currentValue = currentValue.substring(prefixLength);\n previousValue = previousValue.substring(prefixLength);\n currentSelectionStart -= prefixLength;\n previousSelectionStart -= prefixLength;\n currentSelectionEnd -= prefixLength;\n previousSelectionEnd -= prefixLength;\n if (_debugComposition) {\n console.log('AFTER DIFFING PREVIOUS STATE: <' + previousValue + '>, selectionStart: ' + previousSelectionStart + ', selectionEnd: ' + previousSelectionEnd);\n console.log('AFTER DIFFING CURRENT STATE: <' + currentValue + '>, selectionStart: ' + currentSelectionStart + ', selectionEnd: ' + currentSelectionEnd);\n }\n if (couldBeEmojiInput && currentSelectionStart === currentSelectionEnd && previousValue.length > 0) {\n // on OSX, emojis from the emoji picker are inserted at random locations\n // the only hints we can use is that the selection is immediately after the inserted emoji\n // and that none of the old text has been deleted\n let potentialEmojiInput = null;\n if (currentSelectionStart === currentValue.length) {\n // emoji potentially inserted \"somewhere\" after the previous selection => it should appear at the end of `currentValue`\n if (currentValue.startsWith(previousValue)) {\n // only if all of the old text is accounted for\n potentialEmojiInput = currentValue.substring(previousValue.length);\n }\n }\n else {\n // emoji potentially inserted \"somewhere\" before the previous selection => it should appear at the start of `currentValue`\n if (currentValue.endsWith(previousValue)) {\n // only if all of the old text is accounted for\n potentialEmojiInput = currentValue.substring(0, currentValue.length - previousValue.length);\n }\n }\n if (potentialEmojiInput !== null && potentialEmojiInput.length > 0) {\n // now we check that this is indeed an emoji\n // emojis can grow quite long, so a length check is of no help\n // e.g. 1F3F4 E0067 E0062 E0065 E006E E0067 E007F ; fully-qualified # 🏴󠁧󠁢󠁥󠁮󠁧󠁿 England\n // Oftentimes, emojis use Variation Selector-16 (U+FE0F), so that is a good hint\n // http://emojipedia.org/variation-selector-16/\n // > An invisible codepoint which specifies that the preceding character\n // > should be displayed with emoji presentation. Only required if the\n // > preceding character defaults to text presentation.\n if (/\\uFE0F/.test(potentialEmojiInput) || strings.containsEmoji(potentialEmojiInput)) {\n return {\n text: potentialEmojiInput,\n replacePrevCharCnt: 0,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n }\n }\n if (currentSelectionStart === currentSelectionEnd) {\n // composition accept case (noticed in FF + Japanese)\n // [blahblah] => blahblah|\n if (previousValue === currentValue\n && previousSelectionStart === 0\n && previousSelectionEnd === previousValue.length\n && currentSelectionStart === currentValue.length\n && currentValue.indexOf('\\n') === -1) {\n if (strings.containsFullWidthCharacter(currentValue)) {\n return {\n text: '',\n replacePrevCharCnt: 0,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n }\n // no current selection\n const replacePreviousCharacters = (previousPrefix.length - prefixLength);\n if (_debugComposition) {\n console.log('REMOVE PREVIOUS: ' + (previousPrefix.length - prefixLength) + ' chars');\n }\n return {\n text: currentValue,\n replacePrevCharCnt: replacePreviousCharacters,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n // there is a current selection => composition case\n const replacePreviousCharacters = previousSelectionEnd - previousSelectionStart;\n return {\n text: currentValue,\n replacePrevCharCnt: replacePreviousCharacters,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n static deduceAndroidCompositionInput(previousState, currentState) {\n if (!previousState) {\n // This is the EMPTY state\n return {\n text: '',\n replacePrevCharCnt: 0,\n replaceNextCharCnt: 0,\n positionDelta: 0\n };\n }\n if (_debugComposition) {\n console.log('------------------------deduceAndroidCompositionInput');\n console.log('PREVIOUS STATE: ' + previousState.toString());\n console.log('CURRENT STATE: ' + currentState.toString());\n }\n if (previousState.value === currentState.value) {\n return {\n text: '',\n replacePrevCharCnt: 0,\n replaceNextCharCnt: 0,\n positionDelta: currentState.selectionEnd - previousState.selectionEnd\n };\n }\n const prefixLength = Math.min(strings.commonPrefixLength(previousState.value, currentState.value), previousState.selectionEnd);\n const suffixLength = Math.min(strings.commonSuffixLength(previousState.value, currentState.value), previousState.value.length - previousState.selectionEnd);\n const previousValue = previousState.value.substring(prefixLength, previousState.value.length - suffixLength);\n const currentValue = currentState.value.substring(prefixLength, currentState.value.length - suffixLength);\n const previousSelectionStart = previousState.selectionStart - prefixLength;\n const previousSelectionEnd = previousState.selectionEnd - prefixLength;\n const currentSelectionStart = currentState.selectionStart - prefixLength;\n const currentSelectionEnd = currentState.selectionEnd - prefixLength;\n if (_debugComposition) {\n console.log('AFTER DIFFING PREVIOUS STATE: <' + previousValue + '>, selectionStart: ' + previousSelectionStart + ', selectionEnd: ' + previousSelectionEnd);\n console.log('AFTER DIFFING CURRENT STATE: <' + currentValue + '>, selectionStart: ' + currentSelectionStart + ', selectionEnd: ' + currentSelectionEnd);\n }\n return {\n text: currentValue,\n replacePrevCharCnt: previousSelectionEnd,\n replaceNextCharCnt: previousValue.length - previousSelectionEnd,\n positionDelta: currentSelectionEnd - currentValue.length\n };\n }\n}\nTextAreaState.EMPTY = new TextAreaState('', 0, 0, null, null);\nexport class PagedScreenReaderStrategy {\n static _getPageOfLine(lineNumber, linesPerPage) {\n return Math.floor((lineNumber - 1) / linesPerPage);\n }\n static _getRangeForPage(page, linesPerPage) {\n const offset = page * linesPerPage;\n const startLineNumber = offset + 1;\n const endLineNumber = offset + linesPerPage;\n return new Range(startLineNumber, 1, endLineNumber + 1, 1);\n }\n static fromEditorSelection(previousState, model, selection, linesPerPage, trimLongText) {\n const selectionStartPage = PagedScreenReaderStrategy._getPageOfLine(selection.startLineNumber, linesPerPage);\n const selectionStartPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionStartPage, linesPerPage);\n const selectionEndPage = PagedScreenReaderStrategy._getPageOfLine(selection.endLineNumber, linesPerPage);\n const selectionEndPageRange = PagedScreenReaderStrategy._getRangeForPage(selectionEndPage, linesPerPage);\n const pretextRange = selectionStartPageRange.intersectRanges(new Range(1, 1, selection.startLineNumber, selection.startColumn));\n let pretext = model.getValueInRange(pretextRange, 1 /* LF */);\n const lastLine = model.getLineCount();\n const lastLineMaxColumn = model.getLineMaxColumn(lastLine);\n const posttextRange = selectionEndPageRange.intersectRanges(new Range(selection.endLineNumber, selection.endColumn, lastLine, lastLineMaxColumn));\n let posttext = model.getValueInRange(posttextRange, 1 /* LF */);\n let text;\n if (selectionStartPage === selectionEndPage || selectionStartPage + 1 === selectionEndPage) {\n // take full selection\n text = model.getValueInRange(selection, 1 /* LF */);\n }\n else {\n const selectionRange1 = selectionStartPageRange.intersectRanges(selection);\n const selectionRange2 = selectionEndPageRange.intersectRanges(selection);\n text = (model.getValueInRange(selectionRange1, 1 /* LF */)\n + String.fromCharCode(8230)\n + model.getValueInRange(selectionRange2, 1 /* LF */));\n }\n // Chromium handles very poorly text even of a few thousand chars\n // Cut text to avoid stalling the entire UI\n if (trimLongText) {\n const LIMIT_CHARS = 500;\n if (pretext.length > LIMIT_CHARS) {\n pretext = pretext.substring(pretext.length - LIMIT_CHARS, pretext.length);\n }\n if (posttext.length > LIMIT_CHARS) {\n posttext = posttext.substring(0, LIMIT_CHARS);\n }\n if (text.length > 2 * LIMIT_CHARS) {\n text = text.substring(0, LIMIT_CHARS) + String.fromCharCode(8230) + text.substring(text.length - LIMIT_CHARS, text.length);\n }\n }\n return new TextAreaState(pretext + text + posttext, pretext.length, pretext.length + text.length, new Position(selection.startLineNumber, selection.startColumn), new Position(selection.endLineNumber, selection.endColumn));\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { EditorCommand, registerEditorCommand } from '../editorExtensions.js';\nimport { IContextKeyService, RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { localize } from '../../../nls.js';\nconst IEditorCancellationTokens = createDecorator('IEditorCancelService');\nconst ctxCancellableOperation = new RawContextKey('cancellableOperation', false, localize('cancellableOperation', 'Whether the editor runs a cancellable operation, e.g. like \\'Peek References\\''));\nregisterSingleton(IEditorCancellationTokens, class {\n constructor() {\n this._tokens = new WeakMap();\n }\n add(editor, cts) {\n let data = this._tokens.get(editor);\n if (!data) {\n data = editor.invokeWithinContext(accessor => {\n const key = ctxCancellableOperation.bindTo(accessor.get(IContextKeyService));\n const tokens = new LinkedList();\n return { key, tokens };\n });\n this._tokens.set(editor, data);\n }\n let removeFn;\n data.key.set(true);\n removeFn = data.tokens.push(cts);\n return () => {\n // remove w/o cancellation\n if (removeFn) {\n removeFn();\n data.key.set(!data.tokens.isEmpty());\n removeFn = undefined;\n }\n };\n }\n cancel(editor) {\n const data = this._tokens.get(editor);\n if (!data) {\n return;\n }\n // remove with cancellation\n const cts = data.tokens.pop();\n if (cts) {\n cts.cancel();\n data.key.set(!data.tokens.isEmpty());\n }\n }\n}, true);\nexport class EditorKeybindingCancellationTokenSource extends CancellationTokenSource {\n constructor(editor, parent) {\n super(parent);\n this.editor = editor;\n this._unregister = editor.invokeWithinContext(accessor => accessor.get(IEditorCancellationTokens).add(editor, this));\n }\n dispose() {\n this._unregister();\n super.dispose();\n }\n}\nregisterEditorCommand(new class extends EditorCommand {\n constructor() {\n super({\n id: 'editor.cancelOperation',\n kbOpts: {\n weight: 100 /* EditorContrib */,\n primary: 9 /* Escape */\n },\n precondition: ctxCancellableOperation\n });\n }\n runEditorCommand(accessor, editor) {\n accessor.get(IEditorCancellationTokens).cancel(editor);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { Range } from '../../common/core/range.js';\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { EditorKeybindingCancellationTokenSource } from './keybindingCancellation.js';\nexport class EditorState {\n constructor(editor, flags) {\n this.flags = flags;\n if ((this.flags & 1 /* Value */) !== 0) {\n const model = editor.getModel();\n this.modelVersionId = model ? strings.format('{0}#{1}', model.uri.toString(), model.getVersionId()) : null;\n }\n else {\n this.modelVersionId = null;\n }\n if ((this.flags & 4 /* Position */) !== 0) {\n this.position = editor.getPosition();\n }\n else {\n this.position = null;\n }\n if ((this.flags & 2 /* Selection */) !== 0) {\n this.selection = editor.getSelection();\n }\n else {\n this.selection = null;\n }\n if ((this.flags & 8 /* Scroll */) !== 0) {\n this.scrollLeft = editor.getScrollLeft();\n this.scrollTop = editor.getScrollTop();\n }\n else {\n this.scrollLeft = -1;\n this.scrollTop = -1;\n }\n }\n _equals(other) {\n if (!(other instanceof EditorState)) {\n return false;\n }\n const state = other;\n if (this.modelVersionId !== state.modelVersionId) {\n return false;\n }\n if (this.scrollLeft !== state.scrollLeft || this.scrollTop !== state.scrollTop) {\n return false;\n }\n if (!this.position && state.position || this.position && !state.position || this.position && state.position && !this.position.equals(state.position)) {\n return false;\n }\n if (!this.selection && state.selection || this.selection && !state.selection || this.selection && state.selection && !this.selection.equalsRange(state.selection)) {\n return false;\n }\n return true;\n }\n validate(editor) {\n return this._equals(new EditorState(editor, this.flags));\n }\n}\n/**\n * A cancellation token source that cancels when the editor changes as expressed\n * by the provided flags\n * @param range If provided, changes in position and selection within this range will not trigger cancellation\n */\nexport class EditorStateCancellationTokenSource extends EditorKeybindingCancellationTokenSource {\n constructor(editor, flags, range, parent) {\n super(editor, parent);\n this._listener = new DisposableStore();\n if (flags & 4 /* Position */) {\n this._listener.add(editor.onDidChangeCursorPosition(e => {\n if (!range || !Range.containsPosition(range, e.position)) {\n this.cancel();\n }\n }));\n }\n if (flags & 2 /* Selection */) {\n this._listener.add(editor.onDidChangeCursorSelection(e => {\n if (!range || !Range.containsRange(range, e.selection)) {\n this.cancel();\n }\n }));\n }\n if (flags & 8 /* Scroll */) {\n this._listener.add(editor.onDidScrollChange(_ => this.cancel()));\n }\n if (flags & 1 /* Value */) {\n this._listener.add(editor.onDidChangeModel(_ => this.cancel()));\n this._listener.add(editor.onDidChangeModelContent(_ => this.cancel()));\n }\n }\n dispose() {\n this._listener.dispose();\n super.dispose();\n }\n}\n/**\n * A cancellation token source that cancels when the provided model changes\n */\nexport class TextModelCancellationTokenSource extends CancellationTokenSource {\n constructor(model, parent) {\n super(parent);\n this._listener = model.onDidChangeContent(() => this.cancel());\n }\n dispose() {\n this._listener.dispose();\n super.dispose();\n }\n}\nexport class StableEditorScrollState {\n constructor(_visiblePosition, _visiblePositionScrollDelta, _cursorPosition) {\n this._visiblePosition = _visiblePosition;\n this._visiblePositionScrollDelta = _visiblePositionScrollDelta;\n this._cursorPosition = _cursorPosition;\n }\n static capture(editor) {\n let visiblePosition = null;\n let visiblePositionScrollDelta = 0;\n if (editor.getScrollTop() !== 0) {\n const visibleRanges = editor.getVisibleRanges();\n if (visibleRanges.length > 0) {\n visiblePosition = visibleRanges[0].getStartPosition();\n const visiblePositionScrollTop = editor.getTopForPosition(visiblePosition.lineNumber, visiblePosition.column);\n visiblePositionScrollDelta = editor.getScrollTop() - visiblePositionScrollTop;\n }\n }\n return new StableEditorScrollState(visiblePosition, visiblePositionScrollDelta, editor.getPosition());\n }\n restore(editor) {\n if (this._visiblePosition) {\n const visiblePositionScrollTop = editor.getTopForPosition(this._visiblePosition.lineNumber, this._visiblePosition.column);\n editor.setScrollTop(visiblePositionScrollTop + this._visiblePositionScrollDelta);\n }\n }\n restoreRelativeVerticalPositionOfCursor(editor) {\n const currentCursorPosition = editor.getPosition();\n if (!this._cursorPosition || !currentCursorPosition) {\n return;\n }\n const offset = editor.getTopForLineNumber(currentCursorPosition.lineNumber) - editor.getTopForLineNumber(this._cursorPosition.lineNumber);\n editor.setScrollTop(editor.getScrollTop() + offset);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as editorCommon from '../common/editorCommon.js';\n/**\n *@internal\n */\nexport function isCodeEditor(thing) {\n if (thing && typeof thing.getEditorType === 'function') {\n return thing.getEditorType() === editorCommon.EditorType.ICodeEditor;\n }\n else {\n return false;\n }\n}\n/**\n *@internal\n */\nexport function isDiffEditor(thing) {\n if (thing && typeof thing.getEditorType === 'function') {\n return thing.getEditorType() === editorCommon.EditorType.IDiffEditor;\n }\n else {\n return false;\n }\n}\n/**\n *@internal\n */\nexport function getCodeEditor(thing) {\n if (isCodeEditor(thing)) {\n return thing;\n }\n if (isDiffEditor(thing)) {\n return thing.getModifiedEditor();\n }\n return null;\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../nls.js';\nimport { URI } from '../../base/common/uri.js';\nimport { ICodeEditorService } from './services/codeEditorService.js';\nimport { Position } from '../common/core/position.js';\nimport { IModelService } from '../common/services/modelService.js';\nimport { ITextModelService } from '../common/services/resolverService.js';\nimport { MenuId, MenuRegistry } from '../../platform/actions/common/actions.js';\nimport { CommandsRegistry } from '../../platform/commands/common/commands.js';\nimport { ContextKeyExpr, IContextKeyService } from '../../platform/contextkey/common/contextkey.js';\nimport { KeybindingsRegistry } from '../../platform/keybinding/common/keybindingsRegistry.js';\nimport { Registry } from '../../platform/registry/common/platform.js';\nimport { ITelemetryService } from '../../platform/telemetry/common/telemetry.js';\nimport { withNullAsUndefined, assertType } from '../../base/common/types.js';\nimport { ILogService } from '../../platform/log/common/log.js';\nexport class Command {\n constructor(opts) {\n this.id = opts.id;\n this.precondition = opts.precondition;\n this._kbOpts = opts.kbOpts;\n this._menuOpts = opts.menuOpts;\n this._description = opts.description;\n }\n register() {\n if (Array.isArray(this._menuOpts)) {\n this._menuOpts.forEach(this._registerMenuItem, this);\n }\n else if (this._menuOpts) {\n this._registerMenuItem(this._menuOpts);\n }\n if (this._kbOpts) {\n let kbWhen = this._kbOpts.kbExpr;\n if (this.precondition) {\n if (kbWhen) {\n kbWhen = ContextKeyExpr.and(kbWhen, this.precondition);\n }\n else {\n kbWhen = this.precondition;\n }\n }\n KeybindingsRegistry.registerCommandAndKeybindingRule({\n id: this.id,\n handler: (accessor, args) => this.runCommand(accessor, args),\n weight: this._kbOpts.weight,\n args: this._kbOpts.args,\n when: kbWhen,\n primary: this._kbOpts.primary,\n secondary: this._kbOpts.secondary,\n win: this._kbOpts.win,\n linux: this._kbOpts.linux,\n mac: this._kbOpts.mac,\n description: this._description\n });\n }\n else {\n CommandsRegistry.registerCommand({\n id: this.id,\n handler: (accessor, args) => this.runCommand(accessor, args),\n description: this._description\n });\n }\n }\n _registerMenuItem(item) {\n MenuRegistry.appendMenuItem(item.menuId, {\n group: item.group,\n command: {\n id: this.id,\n title: item.title,\n icon: item.icon,\n precondition: this.precondition\n },\n when: item.when,\n order: item.order\n });\n }\n}\nexport class MultiCommand extends Command {\n constructor() {\n super(...arguments);\n this._implementations = [];\n }\n /**\n * A higher priority gets to be looked at first\n */\n addImplementation(priority, name, implementation) {\n this._implementations.push({ priority, name, implementation });\n this._implementations.sort((a, b) => b.priority - a.priority);\n return {\n dispose: () => {\n for (let i = 0; i < this._implementations.length; i++) {\n if (this._implementations[i].implementation === implementation) {\n this._implementations.splice(i, 1);\n return;\n }\n }\n }\n };\n }\n runCommand(accessor, args) {\n const logService = accessor.get(ILogService);\n for (const impl of this._implementations) {\n const result = impl.implementation(accessor, args);\n if (result) {\n logService.trace(`Command '${this.id}' was handled by '${impl.name}'.`);\n if (typeof result === 'boolean') {\n return;\n }\n return result;\n }\n }\n }\n}\n//#endregion\n/**\n * A command that delegates to another command's implementation.\n *\n * This lets different commands be registered but share the same implementation\n */\nexport class ProxyCommand extends Command {\n constructor(command, opts) {\n super(opts);\n this.command = command;\n }\n runCommand(accessor, args) {\n return this.command.runCommand(accessor, args);\n }\n}\nexport class EditorCommand extends Command {\n /**\n * Create a command class that is bound to a certain editor contribution.\n */\n static bindToContribution(controllerGetter) {\n return class EditorControllerCommandImpl extends EditorCommand {\n constructor(opts) {\n super(opts);\n this._callback = opts.handler;\n }\n runEditorCommand(accessor, editor, args) {\n const controller = controllerGetter(editor);\n if (controller) {\n this._callback(controllerGetter(editor), args);\n }\n }\n };\n }\n runCommand(accessor, args) {\n const codeEditorService = accessor.get(ICodeEditorService);\n // Find the editor with text focus or active\n const editor = codeEditorService.getFocusedCodeEditor() || codeEditorService.getActiveCodeEditor();\n if (!editor) {\n // well, at least we tried...\n return;\n }\n return editor.invokeWithinContext((editorAccessor) => {\n const kbService = editorAccessor.get(IContextKeyService);\n if (!kbService.contextMatchesRules(withNullAsUndefined(this.precondition))) {\n // precondition does not hold\n return;\n }\n return this.runEditorCommand(editorAccessor, editor, args);\n });\n }\n}\nexport class EditorAction extends EditorCommand {\n constructor(opts) {\n super(EditorAction.convertOptions(opts));\n this.label = opts.label;\n this.alias = opts.alias;\n }\n static convertOptions(opts) {\n let menuOpts;\n if (Array.isArray(opts.menuOpts)) {\n menuOpts = opts.menuOpts;\n }\n else if (opts.menuOpts) {\n menuOpts = [opts.menuOpts];\n }\n else {\n menuOpts = [];\n }\n function withDefaults(item) {\n if (!item.menuId) {\n item.menuId = MenuId.EditorContext;\n }\n if (!item.title) {\n item.title = opts.label;\n }\n item.when = ContextKeyExpr.and(opts.precondition, item.when);\n return item;\n }\n if (Array.isArray(opts.contextMenuOpts)) {\n menuOpts.push(...opts.contextMenuOpts.map(withDefaults));\n }\n else if (opts.contextMenuOpts) {\n menuOpts.push(withDefaults(opts.contextMenuOpts));\n }\n opts.menuOpts = menuOpts;\n return opts;\n }\n runEditorCommand(accessor, editor, args) {\n this.reportTelemetry(accessor, editor);\n return this.run(accessor, editor, args || {});\n }\n reportTelemetry(accessor, editor) {\n accessor.get(ITelemetryService).publicLog2('editorActionInvoked', { name: this.label, id: this.id });\n }\n}\nexport class MultiEditorAction extends EditorAction {\n constructor() {\n super(...arguments);\n this._implementations = [];\n }\n /**\n * A higher priority gets to be looked at first\n */\n addImplementation(priority, implementation) {\n this._implementations.push([priority, implementation]);\n this._implementations.sort((a, b) => b[0] - a[0]);\n return {\n dispose: () => {\n for (let i = 0; i < this._implementations.length; i++) {\n if (this._implementations[i][1] === implementation) {\n this._implementations.splice(i, 1);\n return;\n }\n }\n }\n };\n }\n run(accessor, editor, args) {\n for (const impl of this._implementations) {\n const result = impl[1](accessor, editor, args);\n if (result) {\n if (typeof result === 'boolean') {\n return;\n }\n return result;\n }\n }\n }\n}\n//#endregion\n// --- Registration of commands and actions\nexport function registerModelAndPositionCommand(id, handler) {\n CommandsRegistry.registerCommand(id, function (accessor, ...args) {\n const [resource, position] = args;\n assertType(URI.isUri(resource));\n assertType(Position.isIPosition(position));\n const model = accessor.get(IModelService).getModel(resource);\n if (model) {\n const editorPosition = Position.lift(position);\n return handler(model, editorPosition, ...args.slice(2));\n }\n return accessor.get(ITextModelService).createModelReference(resource).then(reference => {\n return new Promise((resolve, reject) => {\n try {\n const result = handler(reference.object.textEditorModel, Position.lift(position), args.slice(2));\n resolve(result);\n }\n catch (err) {\n reject(err);\n }\n }).finally(() => {\n reference.dispose();\n });\n });\n });\n}\nexport function registerModelCommand(id, handler) {\n CommandsRegistry.registerCommand(id, function (accessor, ...args) {\n const [resource] = args;\n assertType(URI.isUri(resource));\n const model = accessor.get(IModelService).getModel(resource);\n if (model) {\n return handler(model, ...args.slice(1));\n }\n return accessor.get(ITextModelService).createModelReference(resource).then(reference => {\n return new Promise((resolve, reject) => {\n try {\n const result = handler(reference.object.textEditorModel, args.slice(1));\n resolve(result);\n }\n catch (err) {\n reject(err);\n }\n }).finally(() => {\n reference.dispose();\n });\n });\n });\n}\nexport function registerEditorCommand(editorCommand) {\n EditorContributionRegistry.INSTANCE.registerEditorCommand(editorCommand);\n return editorCommand;\n}\nexport function registerEditorAction(ctor) {\n const action = new ctor();\n EditorContributionRegistry.INSTANCE.registerEditorAction(action);\n return action;\n}\nexport function registerMultiEditorAction(action) {\n EditorContributionRegistry.INSTANCE.registerEditorAction(action);\n return action;\n}\nexport function registerInstantiatedEditorAction(editorAction) {\n EditorContributionRegistry.INSTANCE.registerEditorAction(editorAction);\n}\nexport function registerEditorContribution(id, ctor) {\n EditorContributionRegistry.INSTANCE.registerEditorContribution(id, ctor);\n}\nexport var EditorExtensionsRegistry;\n(function (EditorExtensionsRegistry) {\n function getEditorCommand(commandId) {\n return EditorContributionRegistry.INSTANCE.getEditorCommand(commandId);\n }\n EditorExtensionsRegistry.getEditorCommand = getEditorCommand;\n function getEditorActions() {\n return EditorContributionRegistry.INSTANCE.getEditorActions();\n }\n EditorExtensionsRegistry.getEditorActions = getEditorActions;\n function getEditorContributions() {\n return EditorContributionRegistry.INSTANCE.getEditorContributions();\n }\n EditorExtensionsRegistry.getEditorContributions = getEditorContributions;\n function getSomeEditorContributions(ids) {\n return EditorContributionRegistry.INSTANCE.getEditorContributions().filter(c => ids.indexOf(c.id) >= 0);\n }\n EditorExtensionsRegistry.getSomeEditorContributions = getSomeEditorContributions;\n function getDiffEditorContributions() {\n return EditorContributionRegistry.INSTANCE.getDiffEditorContributions();\n }\n EditorExtensionsRegistry.getDiffEditorContributions = getDiffEditorContributions;\n})(EditorExtensionsRegistry || (EditorExtensionsRegistry = {}));\n// Editor extension points\nconst Extensions = {\n EditorCommonContributions: 'editor.contributions'\n};\nclass EditorContributionRegistry {\n constructor() {\n this.editorContributions = [];\n this.diffEditorContributions = [];\n this.editorActions = [];\n this.editorCommands = Object.create(null);\n }\n registerEditorContribution(id, ctor) {\n this.editorContributions.push({ id, ctor: ctor });\n }\n getEditorContributions() {\n return this.editorContributions.slice(0);\n }\n getDiffEditorContributions() {\n return this.diffEditorContributions.slice(0);\n }\n registerEditorAction(action) {\n action.register();\n this.editorActions.push(action);\n }\n getEditorActions() {\n return this.editorActions.slice(0);\n }\n registerEditorCommand(editorCommand) {\n editorCommand.register();\n this.editorCommands[editorCommand.id] = editorCommand;\n }\n getEditorCommand(commandId) {\n return (this.editorCommands[commandId] || null);\n }\n}\nEditorContributionRegistry.INSTANCE = new EditorContributionRegistry();\nRegistry.add(Extensions.EditorCommonContributions, EditorContributionRegistry.INSTANCE);\nfunction registerCommand(command) {\n command.register();\n return command;\n}\nexport const UndoCommand = registerCommand(new MultiCommand({\n id: 'undo',\n precondition: undefined,\n kbOpts: {\n weight: 0 /* EditorCore */,\n primary: 2048 /* CtrlCmd */ | 56 /* KEY_Z */\n },\n menuOpts: [{\n menuId: MenuId.MenubarEditMenu,\n group: '1_do',\n title: nls.localize({ key: 'miUndo', comment: ['&& denotes a mnemonic'] }, \"&&Undo\"),\n order: 1\n }, {\n menuId: MenuId.CommandPalette,\n group: '',\n title: nls.localize('undo', \"Undo\"),\n order: 1\n }]\n}));\nregisterCommand(new ProxyCommand(UndoCommand, { id: 'default:undo', precondition: undefined }));\nexport const RedoCommand = registerCommand(new MultiCommand({\n id: 'redo',\n precondition: undefined,\n kbOpts: {\n weight: 0 /* EditorCore */,\n primary: 2048 /* CtrlCmd */ | 55 /* KEY_Y */,\n secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 56 /* KEY_Z */],\n mac: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 56 /* KEY_Z */ }\n },\n menuOpts: [{\n menuId: MenuId.MenubarEditMenu,\n group: '1_do',\n title: nls.localize({ key: 'miRedo', comment: ['&& denotes a mnemonic'] }, \"&&Redo\"),\n order: 2\n }, {\n menuId: MenuId.CommandPalette,\n group: '',\n title: nls.localize('redo', \"Redo\"),\n order: 1\n }]\n}));\nregisterCommand(new ProxyCommand(RedoCommand, { id: 'default:redo', precondition: undefined }));\nexport const SelectAllCommand = registerCommand(new MultiCommand({\n id: 'editor.action.selectAll',\n precondition: undefined,\n kbOpts: {\n weight: 0 /* EditorCore */,\n kbExpr: null,\n primary: 2048 /* CtrlCmd */ | 31 /* KEY_A */\n },\n menuOpts: [{\n menuId: MenuId.MenubarSelectionMenu,\n group: '1_basic',\n title: nls.localize({ key: 'miSelectAll', comment: ['&& denotes a mnemonic'] }, \"&&Select All\"),\n order: 1\n }, {\n menuId: MenuId.CommandPalette,\n group: '',\n title: nls.localize('selectAll', \"Select All\"),\n order: 1\n }]\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { isObject } from '../../../base/common/types.js';\nexport const IBulkEditService = createDecorator('IWorkspaceEditService');\nfunction isWorkspaceFileEdit(thing) {\n return isObject(thing) && (Boolean(thing.newUri) || Boolean(thing.oldUri));\n}\nfunction isWorkspaceTextEdit(thing) {\n return isObject(thing) && URI.isUri(thing.resource) && isObject(thing.edit);\n}\nexport class ResourceEdit {\n constructor(metadata) {\n this.metadata = metadata;\n }\n static convert(edit) {\n return edit.edits.map(edit => {\n if (isWorkspaceTextEdit(edit)) {\n return new ResourceTextEdit(edit.resource, edit.edit, edit.modelVersionId, edit.metadata);\n }\n if (isWorkspaceFileEdit(edit)) {\n return new ResourceFileEdit(edit.oldUri, edit.newUri, edit.options, edit.metadata);\n }\n throw new Error('Unsupported edit');\n });\n }\n}\nexport class ResourceTextEdit extends ResourceEdit {\n constructor(resource, textEdit, versionId, metadata) {\n super(metadata);\n this.resource = resource;\n this.textEdit = textEdit;\n this.versionId = versionId;\n }\n}\nexport class ResourceFileEdit extends ResourceEdit {\n constructor(oldResource, newResource, options, metadata) {\n super(metadata);\n this.oldResource = oldResource;\n this.newResource = newResource;\n this.options = options;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const ICodeEditorService = createDecorator('codeEditorService');\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { IMarkerDecorationsService } from '../../common/services/markersDecorationService.js';\nimport { registerEditorContribution } from '../editorExtensions.js';\nlet MarkerDecorationsContribution = class MarkerDecorationsContribution {\n constructor(_editor, _markerDecorationsService) {\n // Doesn't do anything, just requires `IMarkerDecorationsService` to make sure it gets instantiated\n }\n dispose() {\n }\n};\nMarkerDecorationsContribution.ID = 'editor.contrib.markerDecorations';\nMarkerDecorationsContribution = __decorate([\n __param(1, IMarkerDecorationsService)\n], MarkerDecorationsContribution);\nexport { MarkerDecorationsContribution };\nregisterEditorContribution(MarkerDecorationsContribution.ID, MarkerDecorationsContribution);\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../base/browser/dom.js';\nimport { GlobalMouseMoveMonitor } from '../../base/browser/globalMouseMoveMonitor.js';\nimport { StandardMouseEvent } from '../../base/browser/mouseEvent.js';\nimport { Disposable } from '../../base/common/lifecycle.js';\n/**\n * Coordinates relative to the whole document (e.g. mouse event's pageX and pageY)\n */\nexport class PageCoordinates {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n toClientCoordinates() {\n return new ClientCoordinates(this.x - dom.StandardWindow.scrollX, this.y - dom.StandardWindow.scrollY);\n }\n}\n/**\n * Coordinates within the application's client area (i.e. origin is document's scroll position).\n *\n * For example, clicking in the top-left corner of the client area will\n * always result in a mouse event with a client.x value of 0, regardless\n * of whether the page is scrolled horizontally.\n */\nexport class ClientCoordinates {\n constructor(clientX, clientY) {\n this.clientX = clientX;\n this.clientY = clientY;\n }\n toPageCoordinates() {\n return new PageCoordinates(this.clientX + dom.StandardWindow.scrollX, this.clientY + dom.StandardWindow.scrollY);\n }\n}\n/**\n * The position of the editor in the page.\n */\nexport class EditorPagePosition {\n constructor(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n}\nexport function createEditorPagePosition(editorViewDomNode) {\n const editorPos = dom.getDomNodePagePosition(editorViewDomNode);\n return new EditorPagePosition(editorPos.left, editorPos.top, editorPos.width, editorPos.height);\n}\nexport class EditorMouseEvent extends StandardMouseEvent {\n constructor(e, editorViewDomNode) {\n super(e);\n this.pos = new PageCoordinates(this.posx, this.posy);\n this.editorPos = createEditorPagePosition(editorViewDomNode);\n }\n}\nexport class EditorMouseEventFactory {\n constructor(editorViewDomNode) {\n this._editorViewDomNode = editorViewDomNode;\n }\n _create(e) {\n return new EditorMouseEvent(e, this._editorViewDomNode);\n }\n onContextMenu(target, callback) {\n return dom.addDisposableListener(target, 'contextmenu', (e) => {\n callback(this._create(e));\n });\n }\n onMouseUp(target, callback) {\n return dom.addDisposableListener(target, 'mouseup', (e) => {\n callback(this._create(e));\n });\n }\n onMouseDown(target, callback) {\n return dom.addDisposableListener(target, 'mousedown', (e) => {\n callback(this._create(e));\n });\n }\n onMouseLeave(target, callback) {\n return dom.addDisposableNonBubblingMouseOutListener(target, (e) => {\n callback(this._create(e));\n });\n }\n onMouseMoveThrottled(target, callback, merger, minimumTimeMs) {\n const myMerger = (lastEvent, currentEvent) => {\n return merger(lastEvent, this._create(currentEvent));\n };\n return dom.addDisposableThrottledListener(target, 'mousemove', callback, myMerger, minimumTimeMs);\n }\n}\nexport class EditorPointerEventFactory {\n constructor(editorViewDomNode) {\n this._editorViewDomNode = editorViewDomNode;\n }\n _create(e) {\n return new EditorMouseEvent(e, this._editorViewDomNode);\n }\n onPointerUp(target, callback) {\n return dom.addDisposableListener(target, 'pointerup', (e) => {\n callback(this._create(e));\n });\n }\n onPointerDown(target, callback) {\n return dom.addDisposableListener(target, 'pointerdown', (e) => {\n callback(this._create(e));\n });\n }\n onPointerLeave(target, callback) {\n return dom.addDisposableNonBubblingPointerOutListener(target, (e) => {\n callback(this._create(e));\n });\n }\n onPointerMoveThrottled(target, callback, merger, minimumTimeMs) {\n const myMerger = (lastEvent, currentEvent) => {\n return merger(lastEvent, this._create(currentEvent));\n };\n return dom.addDisposableThrottledListener(target, 'pointermove', callback, myMerger, minimumTimeMs);\n }\n}\nexport class GlobalEditorMouseMoveMonitor extends Disposable {\n constructor(editorViewDomNode) {\n super();\n this._editorViewDomNode = editorViewDomNode;\n this._globalMouseMoveMonitor = this._register(new GlobalMouseMoveMonitor());\n this._keydownListener = null;\n }\n startMonitoring(initialElement, initialButtons, merger, mouseMoveCallback, onStopCallback) {\n // Add a <<capture>> keydown event listener that will cancel the monitoring\n // if something other than a modifier key is pressed\n this._keydownListener = dom.addStandardDisposableListener(document, 'keydown', (e) => {\n const kb = e.toKeybinding();\n if (kb.isModifierKey()) {\n // Allow modifier keys\n return;\n }\n this._globalMouseMoveMonitor.stopMonitoring(true, e.browserEvent);\n }, true);\n const myMerger = (lastEvent, currentEvent) => {\n return merger(lastEvent, new EditorMouseEvent(currentEvent, this._editorViewDomNode));\n };\n this._globalMouseMoveMonitor.startMonitoring(initialElement, initialButtons, myMerger, mouseMoveCallback, (e) => {\n this._keydownListener.dispose();\n onStopCallback(e);\n });\n }\n stopMonitoring() {\n this._globalMouseMoveMonitor.stopMonitoring(true);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Disposable } from '../../../base/common/lifecycle.js';\nexport class ViewEventHandler extends Disposable {\n constructor() {\n super();\n this._shouldRender = true;\n }\n shouldRender() {\n return this._shouldRender;\n }\n forceShouldRender() {\n this._shouldRender = true;\n }\n setShouldRender() {\n this._shouldRender = true;\n }\n onDidRender() {\n this._shouldRender = false;\n }\n // --- begin event handlers\n onCompositionStart(e) {\n return false;\n }\n onCompositionEnd(e) {\n return false;\n }\n onConfigurationChanged(e) {\n return false;\n }\n onCursorStateChanged(e) {\n return false;\n }\n onDecorationsChanged(e) {\n return false;\n }\n onFlushed(e) {\n return false;\n }\n onFocusChanged(e) {\n return false;\n }\n onLanguageConfigurationChanged(e) {\n return false;\n }\n onLineMappingChanged(e) {\n return false;\n }\n onLinesChanged(e) {\n return false;\n }\n onLinesDeleted(e) {\n return false;\n }\n onLinesInserted(e) {\n return false;\n }\n onRevealRangeRequest(e) {\n return false;\n }\n onScrollChanged(e) {\n return false;\n }\n onThemeChanged(e) {\n return false;\n }\n onTokensChanged(e) {\n return false;\n }\n onTokensColorsChanged(e) {\n return false;\n }\n onZonesChanged(e) {\n return false;\n }\n // --- end event handlers\n handleEvents(events) {\n let shouldRender = false;\n for (let i = 0, len = events.length; i < len; i++) {\n let e = events[i];\n switch (e.type) {\n case 0 /* ViewCompositionStart */:\n if (this.onCompositionStart(e)) {\n shouldRender = true;\n }\n break;\n case 1 /* ViewCompositionEnd */:\n if (this.onCompositionEnd(e)) {\n shouldRender = true;\n }\n break;\n case 2 /* ViewConfigurationChanged */:\n if (this.onConfigurationChanged(e)) {\n shouldRender = true;\n }\n break;\n case 3 /* ViewCursorStateChanged */:\n if (this.onCursorStateChanged(e)) {\n shouldRender = true;\n }\n break;\n case 4 /* ViewDecorationsChanged */:\n if (this.onDecorationsChanged(e)) {\n shouldRender = true;\n }\n break;\n case 5 /* ViewFlushed */:\n if (this.onFlushed(e)) {\n shouldRender = true;\n }\n break;\n case 6 /* ViewFocusChanged */:\n if (this.onFocusChanged(e)) {\n shouldRender = true;\n }\n break;\n case 7 /* ViewLanguageConfigurationChanged */:\n if (this.onLanguageConfigurationChanged(e)) {\n shouldRender = true;\n }\n break;\n case 8 /* ViewLineMappingChanged */:\n if (this.onLineMappingChanged(e)) {\n shouldRender = true;\n }\n break;\n case 9 /* ViewLinesChanged */:\n if (this.onLinesChanged(e)) {\n shouldRender = true;\n }\n break;\n case 10 /* ViewLinesDeleted */:\n if (this.onLinesDeleted(e)) {\n shouldRender = true;\n }\n break;\n case 11 /* ViewLinesInserted */:\n if (this.onLinesInserted(e)) {\n shouldRender = true;\n }\n break;\n case 12 /* ViewRevealRangeRequest */:\n if (this.onRevealRangeRequest(e)) {\n shouldRender = true;\n }\n break;\n case 13 /* ViewScrollChanged */:\n if (this.onScrollChanged(e)) {\n shouldRender = true;\n }\n break;\n case 15 /* ViewTokensChanged */:\n if (this.onTokensChanged(e)) {\n shouldRender = true;\n }\n break;\n case 14 /* ViewThemeChanged */:\n if (this.onThemeChanged(e)) {\n shouldRender = true;\n }\n break;\n case 16 /* ViewTokensColorsChanged */:\n if (this.onTokensColorsChanged(e)) {\n shouldRender = true;\n }\n break;\n case 17 /* ViewZonesChanged */:\n if (this.onZonesChanged(e)) {\n shouldRender = true;\n }\n break;\n default:\n console.info('View received unknown event: ');\n console.info(e);\n }\n }\n if (shouldRender) {\n this._shouldRender = true;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { FastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { ViewEventHandler } from '../../common/viewModel/viewEventHandler.js';\nexport class ViewPart extends ViewEventHandler {\n constructor(context) {\n super();\n this._context = context;\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n super.dispose();\n }\n}\nexport class PartFingerprints {\n static write(target, partId) {\n if (target instanceof FastDomNode) {\n target.setAttribute('data-mprt', String(partId));\n }\n else {\n target.setAttribute('data-mprt', String(partId));\n }\n }\n static read(target) {\n const r = target.getAttribute('data-mprt');\n if (r === null) {\n return 0 /* None */;\n }\n return parseInt(r, 10);\n }\n static collect(child, stopAt) {\n let result = [], resultLen = 0;\n while (child && child !== document.body) {\n if (child === stopAt) {\n break;\n }\n if (child.nodeType === child.ELEMENT_NODE) {\n result[resultLen++] = this.read(child);\n }\n child = child.parentElement;\n }\n const r = new Uint8Array(resultLen);\n for (let i = 0; i < resultLen; i++) {\n r[i] = result[resultLen - i - 1];\n }\n return r;\n }\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 *--------------------------------------------------------------------------------------------*/\nexport class RestrictedRenderingContext {\n constructor(viewLayout, viewportData) {\n this._viewLayout = viewLayout;\n this.viewportData = viewportData;\n this.scrollWidth = this._viewLayout.getScrollWidth();\n this.scrollHeight = this._viewLayout.getScrollHeight();\n this.visibleRange = this.viewportData.visibleRange;\n this.bigNumbersDelta = this.viewportData.bigNumbersDelta;\n const vInfo = this._viewLayout.getCurrentViewport();\n this.scrollTop = vInfo.top;\n this.scrollLeft = vInfo.left;\n this.viewportWidth = vInfo.width;\n this.viewportHeight = vInfo.height;\n }\n getScrolledTopFromAbsoluteTop(absoluteTop) {\n return absoluteTop - this.scrollTop;\n }\n getVerticalOffsetForLineNumber(lineNumber) {\n return this._viewLayout.getVerticalOffsetForLineNumber(lineNumber);\n }\n getDecorationsInViewport() {\n return this.viewportData.getDecorationsInViewport();\n }\n}\nexport class RenderingContext extends RestrictedRenderingContext {\n constructor(viewLayout, viewportData, viewLines) {\n super(viewLayout, viewportData);\n this._viewLines = viewLines;\n }\n linesVisibleRangesForRange(range, includeNewLines) {\n return this._viewLines.linesVisibleRangesForRange(range, includeNewLines);\n }\n visibleRangeForPosition(position) {\n return this._viewLines.visibleRangeForPosition(position);\n }\n}\nexport class LineVisibleRanges {\n constructor(outsideRenderedLine, lineNumber, ranges) {\n this.outsideRenderedLine = outsideRenderedLine;\n this.lineNumber = lineNumber;\n this.ranges = ranges;\n }\n}\nexport class HorizontalRange {\n constructor(left, width) {\n this.left = Math.round(left);\n this.width = Math.round(width);\n }\n toString() {\n return `[${this.left},${this.width}]`;\n }\n}\nexport class HorizontalPosition {\n constructor(outsideRenderedLine, left) {\n this.outsideRenderedLine = outsideRenderedLine;\n this.left = Math.round(left);\n }\n}\nexport class VisibleRanges {\n constructor(outsideRenderedLine, ranges) {\n this.outsideRenderedLine = outsideRenderedLine;\n this.ranges = ranges;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { HorizontalRange } from '../../../common/view/renderingContext.js';\nclass FloatHorizontalRange {\n constructor(left, width) {\n this.left = left;\n this.width = width;\n }\n toString() {\n return `[${this.left},${this.width}]`;\n }\n static compare(a, b) {\n return a.left - b.left;\n }\n}\nexport class RangeUtil {\n static _createRange() {\n if (!this._handyReadyRange) {\n this._handyReadyRange = document.createRange();\n }\n return this._handyReadyRange;\n }\n static _detachRange(range, endNode) {\n // Move range out of the span node, IE doesn't like having many ranges in\n // the same spot and will act badly for lines containing dashes ('-')\n range.selectNodeContents(endNode);\n }\n static _readClientRects(startElement, startOffset, endElement, endOffset, endNode) {\n const range = this._createRange();\n try {\n range.setStart(startElement, startOffset);\n range.setEnd(endElement, endOffset);\n return range.getClientRects();\n }\n catch (e) {\n // This is life ...\n return null;\n }\n finally {\n this._detachRange(range, endNode);\n }\n }\n static _mergeAdjacentRanges(ranges) {\n if (ranges.length === 1) {\n // There is nothing to merge\n return [new HorizontalRange(ranges[0].left, ranges[0].width)];\n }\n ranges.sort(FloatHorizontalRange.compare);\n let result = [], resultLen = 0;\n let prevLeft = ranges[0].left;\n let prevWidth = ranges[0].width;\n for (let i = 1, len = ranges.length; i < len; i++) {\n const range = ranges[i];\n const myLeft = range.left;\n const myWidth = range.width;\n if (prevLeft + prevWidth + 0.9 /* account for browser's rounding errors*/ >= myLeft) {\n prevWidth = Math.max(prevWidth, myLeft + myWidth - prevLeft);\n }\n else {\n result[resultLen++] = new HorizontalRange(prevLeft, prevWidth);\n prevLeft = myLeft;\n prevWidth = myWidth;\n }\n }\n result[resultLen++] = new HorizontalRange(prevLeft, prevWidth);\n return result;\n }\n static _createHorizontalRangesFromClientRects(clientRects, clientRectDeltaLeft) {\n if (!clientRects || clientRects.length === 0) {\n return null;\n }\n // We go through FloatHorizontalRange because it has been observed in bi-di text\n // that the clientRects are not coming in sorted from the browser\n const result = [];\n for (let i = 0, len = clientRects.length; i < len; i++) {\n const clientRect = clientRects[i];\n result[i] = new FloatHorizontalRange(Math.max(0, clientRect.left - clientRectDeltaLeft), clientRect.width);\n }\n return this._mergeAdjacentRanges(result);\n }\n static readHorizontalRanges(domNode, startChildIndex, startOffset, endChildIndex, endOffset, clientRectDeltaLeft, endNode) {\n // Panic check\n const min = 0;\n const max = domNode.children.length - 1;\n if (min > max) {\n return null;\n }\n startChildIndex = Math.min(max, Math.max(min, startChildIndex));\n endChildIndex = Math.min(max, Math.max(min, endChildIndex));\n if (startChildIndex === endChildIndex && startOffset === endOffset && startOffset === 0 && !domNode.children[startChildIndex].firstChild) {\n // We must find the position at the beginning of a <span>\n // To cover cases of empty <span>s, avoid using a range and use the <span>'s bounding box\n const clientRects = domNode.children[startChildIndex].getClientRects();\n return this._createHorizontalRangesFromClientRects(clientRects, clientRectDeltaLeft);\n }\n // If crossing over to a span only to select offset 0, then use the previous span's maximum offset\n // Chrome is buggy and doesn't handle 0 offsets well sometimes.\n if (startChildIndex !== endChildIndex) {\n if (endChildIndex > 0 && endOffset === 0) {\n endChildIndex--;\n endOffset = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n }\n }\n let startElement = domNode.children[startChildIndex].firstChild;\n let endElement = domNode.children[endChildIndex].firstChild;\n if (!startElement || !endElement) {\n // When having an empty <span> (without any text content), try to move to the previous <span>\n if (!startElement && startOffset === 0 && startChildIndex > 0) {\n startElement = domNode.children[startChildIndex - 1].firstChild;\n startOffset = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n }\n if (!endElement && endOffset === 0 && endChildIndex > 0) {\n endElement = domNode.children[endChildIndex - 1].firstChild;\n endOffset = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n }\n }\n if (!startElement || !endElement) {\n return null;\n }\n startOffset = Math.min(startElement.textContent.length, Math.max(0, startOffset));\n endOffset = Math.min(endElement.textContent.length, Math.max(0, endOffset));\n const clientRects = this._readClientRects(startElement, startOffset, endElement, endOffset, endNode);\n return this._createHorizontalRangesFromClientRects(clientRects, clientRectDeltaLeft);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as browser from '../../../../base/browser/browser.js';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport { RangeUtil } from './rangeUtil.js';\nimport { HorizontalRange, VisibleRanges } from '../../../common/view/renderingContext.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { CharacterMapping, RenderLineInput, renderViewLine, LineRange } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { ColorScheme } from '../../../../platform/theme/common/theme.js';\nimport { EditorFontLigatures } from '../../../common/config/editorOptions.js';\nconst canUseFastRenderedViewLine = (function () {\n if (platform.isNative) {\n // In VSCode we know very well when the zoom level changes\n return true;\n }\n if (platform.isLinux || browser.isFirefox || browser.isSafari) {\n // On Linux, it appears that zooming affects char widths (in pixels), which is unexpected.\n // --\n // Even though we read character widths correctly, having read them at a specific zoom level\n // does not mean they are the same at the current zoom level.\n // --\n // This could be improved if we ever figure out how to get an event when browsers zoom,\n // but until then we have to stick with reading client rects.\n // --\n // The same has been observed with Firefox on Windows7\n // --\n // The same has been oversved with Safari\n return false;\n }\n return true;\n})();\nlet monospaceAssumptionsAreValid = true;\nexport class DomReadingContext {\n constructor(domNode, endNode) {\n this._domNode = domNode;\n this._clientRectDeltaLeft = 0;\n this._clientRectDeltaLeftRead = false;\n this.endNode = endNode;\n }\n get clientRectDeltaLeft() {\n if (!this._clientRectDeltaLeftRead) {\n this._clientRectDeltaLeftRead = true;\n this._clientRectDeltaLeft = this._domNode.getBoundingClientRect().left;\n }\n return this._clientRectDeltaLeft;\n }\n}\nexport class ViewLineOptions {\n constructor(config, themeType) {\n this.themeType = themeType;\n const options = config.options;\n const fontInfo = options.get(40 /* fontInfo */);\n this.renderWhitespace = options.get(85 /* renderWhitespace */);\n this.renderControlCharacters = options.get(79 /* renderControlCharacters */);\n this.spaceWidth = fontInfo.spaceWidth;\n this.middotWidth = fontInfo.middotWidth;\n this.wsmiddotWidth = fontInfo.wsmiddotWidth;\n this.useMonospaceOptimizations = (fontInfo.isMonospace\n && !options.get(27 /* disableMonospaceOptimizations */));\n this.canUseHalfwidthRightwardsArrow = fontInfo.canUseHalfwidthRightwardsArrow;\n this.lineHeight = options.get(55 /* lineHeight */);\n this.stopRenderingLineAfter = options.get(102 /* stopRenderingLineAfter */);\n this.fontLigatures = options.get(41 /* fontLigatures */);\n }\n equals(other) {\n return (this.themeType === other.themeType\n && this.renderWhitespace === other.renderWhitespace\n && this.renderControlCharacters === other.renderControlCharacters\n && this.spaceWidth === other.spaceWidth\n && this.middotWidth === other.middotWidth\n && this.wsmiddotWidth === other.wsmiddotWidth\n && this.useMonospaceOptimizations === other.useMonospaceOptimizations\n && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n && this.lineHeight === other.lineHeight\n && this.stopRenderingLineAfter === other.stopRenderingLineAfter\n && this.fontLigatures === other.fontLigatures);\n }\n}\nexport class ViewLine {\n constructor(options) {\n this._options = options;\n this._isMaybeInvalid = true;\n this._renderedViewLine = null;\n }\n // --- begin IVisibleLineData\n getDomNode() {\n if (this._renderedViewLine && this._renderedViewLine.domNode) {\n return this._renderedViewLine.domNode.domNode;\n }\n return null;\n }\n setDomNode(domNode) {\n if (this._renderedViewLine) {\n this._renderedViewLine.domNode = createFastDomNode(domNode);\n }\n else {\n throw new Error('I have no rendered view line to set the dom node to...');\n }\n }\n onContentChanged() {\n this._isMaybeInvalid = true;\n }\n onTokensChanged() {\n this._isMaybeInvalid = true;\n }\n onDecorationsChanged() {\n this._isMaybeInvalid = true;\n }\n onOptionsChanged(newOptions) {\n this._isMaybeInvalid = true;\n this._options = newOptions;\n }\n onSelectionChanged() {\n if (this._options.themeType === ColorScheme.HIGH_CONTRAST || this._options.renderWhitespace === 'selection') {\n this._isMaybeInvalid = true;\n return true;\n }\n return false;\n }\n renderLine(lineNumber, deltaTop, viewportData, sb) {\n if (this._isMaybeInvalid === false) {\n // it appears that nothing relevant has changed\n return false;\n }\n this._isMaybeInvalid = false;\n const lineData = viewportData.getViewLineRenderingData(lineNumber);\n const options = this._options;\n const actualInlineDecorations = LineDecoration.filter(lineData.inlineDecorations, lineNumber, lineData.minColumn, lineData.maxColumn);\n // Only send selection information when needed for rendering whitespace\n let selectionsOnLine = null;\n if (options.themeType === ColorScheme.HIGH_CONTRAST || this._options.renderWhitespace === 'selection') {\n const selections = viewportData.selections;\n for (const selection of selections) {\n if (selection.endLineNumber < lineNumber || selection.startLineNumber > lineNumber) {\n // Selection does not intersect line\n continue;\n }\n const startColumn = (selection.startLineNumber === lineNumber ? selection.startColumn : lineData.minColumn);\n const endColumn = (selection.endLineNumber === lineNumber ? selection.endColumn : lineData.maxColumn);\n if (startColumn < endColumn) {\n if (options.themeType === ColorScheme.HIGH_CONTRAST || this._options.renderWhitespace !== 'selection') {\n actualInlineDecorations.push(new LineDecoration(startColumn, endColumn, 'inline-selected-text', 0 /* Regular */));\n }\n else {\n if (!selectionsOnLine) {\n selectionsOnLine = [];\n }\n selectionsOnLine.push(new LineRange(startColumn - 1, endColumn - 1));\n }\n }\n }\n }\n const renderLineInput = new RenderLineInput(options.useMonospaceOptimizations, options.canUseHalfwidthRightwardsArrow, lineData.content, lineData.continuesWithWrappedLine, lineData.isBasicASCII, lineData.containsRTL, lineData.minColumn - 1, lineData.tokens, actualInlineDecorations, lineData.tabSize, lineData.startVisibleColumn, options.spaceWidth, options.middotWidth, options.wsmiddotWidth, options.stopRenderingLineAfter, options.renderWhitespace, options.renderControlCharacters, options.fontLigatures !== EditorFontLigatures.OFF, selectionsOnLine);\n if (this._renderedViewLine && this._renderedViewLine.input.equals(renderLineInput)) {\n // no need to do anything, we have the same render input\n return false;\n }\n sb.appendASCIIString('<div style=\"top:');\n sb.appendASCIIString(String(deltaTop));\n sb.appendASCIIString('px;height:');\n sb.appendASCIIString(String(this._options.lineHeight));\n sb.appendASCIIString('px;\" class=\"');\n sb.appendASCIIString(ViewLine.CLASS_NAME);\n sb.appendASCIIString('\">');\n const output = renderViewLine(renderLineInput, sb);\n sb.appendASCIIString('</div>');\n let renderedViewLine = null;\n if (monospaceAssumptionsAreValid && canUseFastRenderedViewLine && lineData.isBasicASCII && options.useMonospaceOptimizations && output.containsForeignElements === 0 /* None */) {\n if (lineData.content.length < 300 && renderLineInput.lineTokens.getCount() < 100) {\n // Browser rounding errors have been observed in Chrome and IE, so using the fast\n // view line only for short lines. Please test before removing the length check...\n // ---\n // Another rounding error has been observed on Linux in VSCode, where <span> width\n // rounding errors add up to an observable large number...\n // ---\n // Also see another example of rounding errors on Windows in\n // https://github.com/microsoft/vscode/issues/33178\n renderedViewLine = new FastRenderedViewLine(this._renderedViewLine ? this._renderedViewLine.domNode : null, renderLineInput, output.characterMapping);\n }\n }\n if (!renderedViewLine) {\n renderedViewLine = createRenderedLine(this._renderedViewLine ? this._renderedViewLine.domNode : null, renderLineInput, output.characterMapping, output.containsRTL, output.containsForeignElements);\n }\n this._renderedViewLine = renderedViewLine;\n return true;\n }\n layoutLine(lineNumber, deltaTop) {\n if (this._renderedViewLine && this._renderedViewLine.domNode) {\n this._renderedViewLine.domNode.setTop(deltaTop);\n this._renderedViewLine.domNode.setHeight(this._options.lineHeight);\n }\n }\n // --- end IVisibleLineData\n getWidth() {\n if (!this._renderedViewLine) {\n return 0;\n }\n return this._renderedViewLine.getWidth();\n }\n getWidthIsFast() {\n if (!this._renderedViewLine) {\n return true;\n }\n return this._renderedViewLine.getWidthIsFast();\n }\n needsMonospaceFontCheck() {\n if (!this._renderedViewLine) {\n return false;\n }\n return (this._renderedViewLine instanceof FastRenderedViewLine);\n }\n monospaceAssumptionsAreValid() {\n if (!this._renderedViewLine) {\n return monospaceAssumptionsAreValid;\n }\n if (this._renderedViewLine instanceof FastRenderedViewLine) {\n return this._renderedViewLine.monospaceAssumptionsAreValid();\n }\n return monospaceAssumptionsAreValid;\n }\n onMonospaceAssumptionsInvalidated() {\n if (this._renderedViewLine && this._renderedViewLine instanceof FastRenderedViewLine) {\n this._renderedViewLine = this._renderedViewLine.toSlowRenderedLine();\n }\n }\n getVisibleRangesForRange(startColumn, endColumn, context) {\n if (!this._renderedViewLine) {\n return null;\n }\n startColumn = startColumn | 0; // @perf\n endColumn = endColumn | 0; // @perf\n startColumn = Math.min(this._renderedViewLine.input.lineContent.length + 1, Math.max(1, startColumn));\n endColumn = Math.min(this._renderedViewLine.input.lineContent.length + 1, Math.max(1, endColumn));\n const stopRenderingLineAfter = this._renderedViewLine.input.stopRenderingLineAfter | 0; // @perf\n let outsideRenderedLine = false;\n if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter + 1 && endColumn > stopRenderingLineAfter + 1) {\n // This range is obviously not visible\n outsideRenderedLine = true;\n }\n if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter + 1) {\n startColumn = stopRenderingLineAfter + 1;\n }\n if (stopRenderingLineAfter !== -1 && endColumn > stopRenderingLineAfter + 1) {\n endColumn = stopRenderingLineAfter + 1;\n }\n const horizontalRanges = this._renderedViewLine.getVisibleRangesForRange(startColumn, endColumn, context);\n if (horizontalRanges && horizontalRanges.length > 0) {\n return new VisibleRanges(outsideRenderedLine, horizontalRanges);\n }\n return null;\n }\n getColumnOfNodeOffset(lineNumber, spanNode, offset) {\n if (!this._renderedViewLine) {\n return 1;\n }\n return this._renderedViewLine.getColumnOfNodeOffset(lineNumber, spanNode, offset);\n }\n}\nViewLine.CLASS_NAME = 'view-line';\n/**\n * A rendered line which is guaranteed to contain only regular ASCII and is rendered with a monospace font.\n */\nclass FastRenderedViewLine {\n constructor(domNode, renderLineInput, characterMapping) {\n this.domNode = domNode;\n this.input = renderLineInput;\n this._characterMapping = characterMapping;\n this._charWidth = renderLineInput.spaceWidth;\n }\n getWidth() {\n return this._getCharPosition(this._characterMapping.length);\n }\n getWidthIsFast() {\n return true;\n }\n monospaceAssumptionsAreValid() {\n if (!this.domNode) {\n return monospaceAssumptionsAreValid;\n }\n const expectedWidth = this.getWidth();\n const actualWidth = this.domNode.domNode.firstChild.offsetWidth;\n if (Math.abs(expectedWidth - actualWidth) >= 2) {\n // more than 2px off\n console.warn(`monospace assumptions have been violated, therefore disabling monospace optimizations!`);\n monospaceAssumptionsAreValid = false;\n }\n return monospaceAssumptionsAreValid;\n }\n toSlowRenderedLine() {\n return createRenderedLine(this.domNode, this.input, this._characterMapping, false, 0 /* None */);\n }\n getVisibleRangesForRange(startColumn, endColumn, context) {\n const startPosition = this._getCharPosition(startColumn);\n const endPosition = this._getCharPosition(endColumn);\n return [new HorizontalRange(startPosition, endPosition - startPosition)];\n }\n _getCharPosition(column) {\n const charOffset = this._characterMapping.getAbsoluteOffsets();\n if (charOffset.length === 0) {\n // No characters on this line\n return 0;\n }\n return Math.round(this._charWidth * charOffset[column - 1]);\n }\n getColumnOfNodeOffset(lineNumber, spanNode, offset) {\n const spanNodeTextContentLength = spanNode.textContent.length;\n let spanIndex = -1;\n while (spanNode) {\n spanNode = spanNode.previousSibling;\n spanIndex++;\n }\n const charOffset = this._characterMapping.partDataToCharOffset(spanIndex, spanNodeTextContentLength, offset);\n return charOffset + 1;\n }\n}\n/**\n * Every time we render a line, we save what we have rendered in an instance of this class.\n */\nclass RenderedViewLine {\n constructor(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements) {\n this.domNode = domNode;\n this.input = renderLineInput;\n this._characterMapping = characterMapping;\n this._isWhitespaceOnly = /^\\s*$/.test(renderLineInput.lineContent);\n this._containsForeignElements = containsForeignElements;\n this._cachedWidth = -1;\n this._pixelOffsetCache = null;\n if (!containsRTL || this._characterMapping.length === 0 /* the line is empty */) {\n this._pixelOffsetCache = new Int32Array(Math.max(2, this._characterMapping.length + 1));\n for (let column = 0, len = this._characterMapping.length; column <= len; column++) {\n this._pixelOffsetCache[column] = -1;\n }\n }\n }\n // --- Reading from the DOM methods\n _getReadingTarget(myDomNode) {\n return myDomNode.domNode.firstChild;\n }\n /**\n * Width of the line in pixels\n */\n getWidth() {\n if (!this.domNode) {\n return 0;\n }\n if (this._cachedWidth === -1) {\n this._cachedWidth = this._getReadingTarget(this.domNode).offsetWidth;\n }\n return this._cachedWidth;\n }\n getWidthIsFast() {\n if (this._cachedWidth === -1) {\n return false;\n }\n return true;\n }\n /**\n * Visible ranges for a model range\n */\n getVisibleRangesForRange(startColumn, endColumn, context) {\n if (!this.domNode) {\n return null;\n }\n if (this._pixelOffsetCache !== null) {\n // the text is LTR\n const startOffset = this._readPixelOffset(this.domNode, startColumn, context);\n if (startOffset === -1) {\n return null;\n }\n const endOffset = this._readPixelOffset(this.domNode, endColumn, context);\n if (endOffset === -1) {\n return null;\n }\n return [new HorizontalRange(startOffset, endOffset - startOffset)];\n }\n return this._readVisibleRangesForRange(this.domNode, startColumn, endColumn, context);\n }\n _readVisibleRangesForRange(domNode, startColumn, endColumn, context) {\n if (startColumn === endColumn) {\n const pixelOffset = this._readPixelOffset(domNode, startColumn, context);\n if (pixelOffset === -1) {\n return null;\n }\n else {\n return [new HorizontalRange(pixelOffset, 0)];\n }\n }\n else {\n return this._readRawVisibleRangesForRange(domNode, startColumn, endColumn, context);\n }\n }\n _readPixelOffset(domNode, column, context) {\n if (this._characterMapping.length === 0) {\n // This line has no content\n if (this._containsForeignElements === 0 /* None */) {\n // We can assume the line is really empty\n return 0;\n }\n if (this._containsForeignElements === 2 /* After */) {\n // We have foreign elements after the (empty) line\n return 0;\n }\n if (this._containsForeignElements === 1 /* Before */) {\n // We have foreign elements before the (empty) line\n return this.getWidth();\n }\n // We have foreign elements before & after the (empty) line\n const readingTarget = this._getReadingTarget(domNode);\n if (readingTarget.firstChild) {\n return readingTarget.firstChild.offsetWidth;\n }\n else {\n return 0;\n }\n }\n if (this._pixelOffsetCache !== null) {\n // the text is LTR\n const cachedPixelOffset = this._pixelOffsetCache[column];\n if (cachedPixelOffset !== -1) {\n return cachedPixelOffset;\n }\n const result = this._actualReadPixelOffset(domNode, column, context);\n this._pixelOffsetCache[column] = result;\n return result;\n }\n return this._actualReadPixelOffset(domNode, column, context);\n }\n _actualReadPixelOffset(domNode, column, context) {\n if (this._characterMapping.length === 0) {\n // This line has no content\n const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), 0, 0, 0, 0, context.clientRectDeltaLeft, context.endNode);\n if (!r || r.length === 0) {\n return -1;\n }\n return r[0].left;\n }\n if (column === this._characterMapping.length && this._isWhitespaceOnly && this._containsForeignElements === 0 /* None */) {\n // This branch helps in the case of whitespace only lines which have a width set\n return this.getWidth();\n }\n const partData = this._characterMapping.charOffsetToPartData(column - 1);\n const partIndex = CharacterMapping.getPartIndex(partData);\n const charOffsetInPart = CharacterMapping.getCharIndex(partData);\n const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), partIndex, charOffsetInPart, partIndex, charOffsetInPart, context.clientRectDeltaLeft, context.endNode);\n if (!r || r.length === 0) {\n return -1;\n }\n const result = r[0].left;\n if (this.input.isBasicASCII) {\n const charOffset = this._characterMapping.getAbsoluteOffsets();\n const expectedResult = Math.round(this.input.spaceWidth * charOffset[column - 1]);\n if (Math.abs(expectedResult - result) <= 1) {\n return expectedResult;\n }\n }\n return result;\n }\n _readRawVisibleRangesForRange(domNode, startColumn, endColumn, context) {\n if (startColumn === 1 && endColumn === this._characterMapping.length) {\n // This branch helps IE with bidi text & gives a performance boost to other browsers when reading visible ranges for an entire line\n return [new HorizontalRange(0, this.getWidth())];\n }\n const startPartData = this._characterMapping.charOffsetToPartData(startColumn - 1);\n const startPartIndex = CharacterMapping.getPartIndex(startPartData);\n const startCharOffsetInPart = CharacterMapping.getCharIndex(startPartData);\n const endPartData = this._characterMapping.charOffsetToPartData(endColumn - 1);\n const endPartIndex = CharacterMapping.getPartIndex(endPartData);\n const endCharOffsetInPart = CharacterMapping.getCharIndex(endPartData);\n return RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), startPartIndex, startCharOffsetInPart, endPartIndex, endCharOffsetInPart, context.clientRectDeltaLeft, context.endNode);\n }\n /**\n * Returns the column for the text found at a specific offset inside a rendered dom node\n */\n getColumnOfNodeOffset(lineNumber, spanNode, offset) {\n const spanNodeTextContentLength = spanNode.textContent.length;\n let spanIndex = -1;\n while (spanNode) {\n spanNode = spanNode.previousSibling;\n spanIndex++;\n }\n const charOffset = this._characterMapping.partDataToCharOffset(spanIndex, spanNodeTextContentLength, offset);\n return charOffset + 1;\n }\n}\nclass WebKitRenderedViewLine extends RenderedViewLine {\n _readVisibleRangesForRange(domNode, startColumn, endColumn, context) {\n const output = super._readVisibleRangesForRange(domNode, startColumn, endColumn, context);\n if (!output || output.length === 0 || startColumn === endColumn || (startColumn === 1 && endColumn === this._characterMapping.length)) {\n return output;\n }\n // WebKit is buggy and returns an expanded range (to contain words in some cases)\n // The last client rect is enlarged (I think)\n if (!this.input.containsRTL) {\n // This is an attempt to patch things up\n // Find position of last column\n const endPixelOffset = this._readPixelOffset(domNode, endColumn, context);\n if (endPixelOffset !== -1) {\n const lastRange = output[output.length - 1];\n if (lastRange.left < endPixelOffset) {\n // Trim down the width of the last visible range to not go after the last column's position\n lastRange.width = endPixelOffset - lastRange.left;\n }\n }\n }\n return output;\n }\n}\nconst createRenderedLine = (function () {\n if (browser.isWebKit) {\n return createWebKitRenderedLine;\n }\n return createNormalRenderedLine;\n})();\nfunction createWebKitRenderedLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements) {\n return new WebKitRenderedViewLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements);\n}\nfunction createNormalRenderedLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements) {\n return new RenderedViewLine(domNode, renderLineInput, characterMapping, containsRTL, containsForeignElements);\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 *--------------------------------------------------------------------------------------------*/\nimport { PageCoordinates } from '../editorDom.js';\nimport { PartFingerprints } from '../view/viewPart.js';\nimport { ViewLine } from '../viewParts/lines/viewLine.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range as EditorRange } from '../../common/core/range.js';\nimport { CursorColumns } from '../../common/controller/cursorCommon.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { AtomicTabMoveOperations } from '../../common/controller/cursorAtomicMoveOperations.js';\nexport class PointerHandlerLastRenderData {\n constructor(lastViewCursorsRenderData, lastTextareaPosition) {\n this.lastViewCursorsRenderData = lastViewCursorsRenderData;\n this.lastTextareaPosition = lastTextareaPosition;\n }\n}\nexport class MouseTarget {\n constructor(element, type, mouseColumn = 0, position = null, range = null, detail = null) {\n this.element = element;\n this.type = type;\n this.mouseColumn = mouseColumn;\n this.position = position;\n if (!range && position) {\n range = new EditorRange(position.lineNumber, position.column, position.lineNumber, position.column);\n }\n this.range = range;\n this.detail = detail;\n }\n static _typeToString(type) {\n if (type === 1 /* TEXTAREA */) {\n return 'TEXTAREA';\n }\n if (type === 2 /* GUTTER_GLYPH_MARGIN */) {\n return 'GUTTER_GLYPH_MARGIN';\n }\n if (type === 3 /* GUTTER_LINE_NUMBERS */) {\n return 'GUTTER_LINE_NUMBERS';\n }\n if (type === 4 /* GUTTER_LINE_DECORATIONS */) {\n return 'GUTTER_LINE_DECORATIONS';\n }\n if (type === 5 /* GUTTER_VIEW_ZONE */) {\n return 'GUTTER_VIEW_ZONE';\n }\n if (type === 6 /* CONTENT_TEXT */) {\n return 'CONTENT_TEXT';\n }\n if (type === 7 /* CONTENT_EMPTY */) {\n return 'CONTENT_EMPTY';\n }\n if (type === 8 /* CONTENT_VIEW_ZONE */) {\n return 'CONTENT_VIEW_ZONE';\n }\n if (type === 9 /* CONTENT_WIDGET */) {\n return 'CONTENT_WIDGET';\n }\n if (type === 10 /* OVERVIEW_RULER */) {\n return 'OVERVIEW_RULER';\n }\n if (type === 11 /* SCROLLBAR */) {\n return 'SCROLLBAR';\n }\n if (type === 12 /* OVERLAY_WIDGET */) {\n return 'OVERLAY_WIDGET';\n }\n return 'UNKNOWN';\n }\n static toString(target) {\n return this._typeToString(target.type) + ': ' + target.position + ' - ' + target.range + ' - ' + target.detail;\n }\n toString() {\n return MouseTarget.toString(this);\n }\n}\nclass ElementPath {\n static isTextArea(path) {\n return (path.length === 2\n && path[0] === 3 /* OverflowGuard */\n && path[1] === 6 /* TextArea */);\n }\n static isChildOfViewLines(path) {\n return (path.length >= 4\n && path[0] === 3 /* OverflowGuard */\n && path[3] === 7 /* ViewLines */);\n }\n static isStrictChildOfViewLines(path) {\n return (path.length > 4\n && path[0] === 3 /* OverflowGuard */\n && path[3] === 7 /* ViewLines */);\n }\n static isChildOfScrollableElement(path) {\n return (path.length >= 2\n && path[0] === 3 /* OverflowGuard */\n && path[1] === 5 /* ScrollableElement */);\n }\n static isChildOfMinimap(path) {\n return (path.length >= 2\n && path[0] === 3 /* OverflowGuard */\n && path[1] === 8 /* Minimap */);\n }\n static isChildOfContentWidgets(path) {\n return (path.length >= 4\n && path[0] === 3 /* OverflowGuard */\n && path[3] === 1 /* ContentWidgets */);\n }\n static isChildOfOverflowingContentWidgets(path) {\n return (path.length >= 1\n && path[0] === 2 /* OverflowingContentWidgets */);\n }\n static isChildOfOverlayWidgets(path) {\n return (path.length >= 2\n && path[0] === 3 /* OverflowGuard */\n && path[1] === 4 /* OverlayWidgets */);\n }\n}\nexport class HitTestContext {\n constructor(context, viewHelper, lastRenderData) {\n this.model = context.model;\n const options = context.configuration.options;\n this.layoutInfo = options.get(127 /* layoutInfo */);\n this.viewDomNode = viewHelper.viewDomNode;\n this.lineHeight = options.get(55 /* lineHeight */);\n this.stickyTabStops = options.get(101 /* stickyTabStops */);\n this.typicalHalfwidthCharacterWidth = options.get(40 /* fontInfo */).typicalHalfwidthCharacterWidth;\n this.lastRenderData = lastRenderData;\n this._context = context;\n this._viewHelper = viewHelper;\n }\n getZoneAtCoord(mouseVerticalOffset) {\n return HitTestContext.getZoneAtCoord(this._context, mouseVerticalOffset);\n }\n static getZoneAtCoord(context, mouseVerticalOffset) {\n // The target is either a view zone or the empty space after the last view-line\n const viewZoneWhitespace = context.viewLayout.getWhitespaceAtVerticalOffset(mouseVerticalOffset);\n if (viewZoneWhitespace) {\n const viewZoneMiddle = viewZoneWhitespace.verticalOffset + viewZoneWhitespace.height / 2;\n const lineCount = context.model.getLineCount();\n let positionBefore = null;\n let position;\n let positionAfter = null;\n if (viewZoneWhitespace.afterLineNumber !== lineCount) {\n // There are more lines after this view zone\n positionAfter = new Position(viewZoneWhitespace.afterLineNumber + 1, 1);\n }\n if (viewZoneWhitespace.afterLineNumber > 0) {\n // There are more lines above this view zone\n positionBefore = new Position(viewZoneWhitespace.afterLineNumber, context.model.getLineMaxColumn(viewZoneWhitespace.afterLineNumber));\n }\n if (positionAfter === null) {\n position = positionBefore;\n }\n else if (positionBefore === null) {\n position = positionAfter;\n }\n else if (mouseVerticalOffset < viewZoneMiddle) {\n position = positionBefore;\n }\n else {\n position = positionAfter;\n }\n return {\n viewZoneId: viewZoneWhitespace.id,\n afterLineNumber: viewZoneWhitespace.afterLineNumber,\n positionBefore: positionBefore,\n positionAfter: positionAfter,\n position: position\n };\n }\n return null;\n }\n getFullLineRangeAtCoord(mouseVerticalOffset) {\n if (this._context.viewLayout.isAfterLines(mouseVerticalOffset)) {\n // Below the last line\n const lineNumber = this._context.model.getLineCount();\n const maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);\n return {\n range: new EditorRange(lineNumber, maxLineColumn, lineNumber, maxLineColumn),\n isAfterLines: true\n };\n }\n const lineNumber = this._context.viewLayout.getLineNumberAtVerticalOffset(mouseVerticalOffset);\n const maxLineColumn = this._context.model.getLineMaxColumn(lineNumber);\n return {\n range: new EditorRange(lineNumber, 1, lineNumber, maxLineColumn),\n isAfterLines: false\n };\n }\n getLineNumberAtVerticalOffset(mouseVerticalOffset) {\n return this._context.viewLayout.getLineNumberAtVerticalOffset(mouseVerticalOffset);\n }\n isAfterLines(mouseVerticalOffset) {\n return this._context.viewLayout.isAfterLines(mouseVerticalOffset);\n }\n isInTopPadding(mouseVerticalOffset) {\n return this._context.viewLayout.isInTopPadding(mouseVerticalOffset);\n }\n isInBottomPadding(mouseVerticalOffset) {\n return this._context.viewLayout.isInBottomPadding(mouseVerticalOffset);\n }\n getVerticalOffsetForLineNumber(lineNumber) {\n return this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber);\n }\n findAttribute(element, attr) {\n return HitTestContext._findAttribute(element, attr, this._viewHelper.viewDomNode);\n }\n static _findAttribute(element, attr, stopAt) {\n while (element && element !== document.body) {\n if (element.hasAttribute && element.hasAttribute(attr)) {\n return element.getAttribute(attr);\n }\n if (element === stopAt) {\n return null;\n }\n element = element.parentNode;\n }\n return null;\n }\n getLineWidth(lineNumber) {\n return this._viewHelper.getLineWidth(lineNumber);\n }\n visibleRangeForPosition(lineNumber, column) {\n return this._viewHelper.visibleRangeForPosition(lineNumber, column);\n }\n getPositionFromDOMInfo(spanNode, offset) {\n return this._viewHelper.getPositionFromDOMInfo(spanNode, offset);\n }\n getCurrentScrollTop() {\n return this._context.viewLayout.getCurrentScrollTop();\n }\n getCurrentScrollLeft() {\n return this._context.viewLayout.getCurrentScrollLeft();\n }\n}\nclass BareHitTestRequest {\n constructor(ctx, editorPos, pos) {\n this.editorPos = editorPos;\n this.pos = pos;\n this.mouseVerticalOffset = Math.max(0, ctx.getCurrentScrollTop() + pos.y - editorPos.y);\n this.mouseContentHorizontalOffset = ctx.getCurrentScrollLeft() + pos.x - editorPos.x - ctx.layoutInfo.contentLeft;\n this.isInMarginArea = (pos.x - editorPos.x < ctx.layoutInfo.contentLeft && pos.x - editorPos.x >= ctx.layoutInfo.glyphMarginLeft);\n this.isInContentArea = !this.isInMarginArea;\n this.mouseColumn = Math.max(0, MouseTargetFactory._getMouseColumn(this.mouseContentHorizontalOffset, ctx.typicalHalfwidthCharacterWidth));\n }\n}\nclass HitTestRequest extends BareHitTestRequest {\n constructor(ctx, editorPos, pos, target) {\n super(ctx, editorPos, pos);\n this._ctx = ctx;\n if (target) {\n this.target = target;\n this.targetPath = PartFingerprints.collect(target, ctx.viewDomNode);\n }\n else {\n this.target = null;\n this.targetPath = new Uint8Array(0);\n }\n }\n toString() {\n return `pos(${this.pos.x},${this.pos.y}), editorPos(${this.editorPos.x},${this.editorPos.y}), mouseVerticalOffset: ${this.mouseVerticalOffset}, mouseContentHorizontalOffset: ${this.mouseContentHorizontalOffset}\\n\\ttarget: ${this.target ? this.target.outerHTML : null}`;\n }\n fulfill(type, position = null, range = null, detail = null) {\n let mouseColumn = this.mouseColumn;\n if (position && position.column < this._ctx.model.getLineMaxColumn(position.lineNumber)) {\n // Most likely, the line contains foreign decorations...\n mouseColumn = CursorColumns.visibleColumnFromColumn(this._ctx.model.getLineContent(position.lineNumber), position.column, this._ctx.model.getTextModelOptions().tabSize) + 1;\n }\n return new MouseTarget(this.target, type, mouseColumn, position, range, detail);\n }\n withTarget(target) {\n return new HitTestRequest(this._ctx, this.editorPos, this.pos, target);\n }\n}\nconst EMPTY_CONTENT_AFTER_LINES = { isAfterLines: true };\nfunction createEmptyContentDataInLines(horizontalDistanceToText) {\n return {\n isAfterLines: false,\n horizontalDistanceToText: horizontalDistanceToText\n };\n}\nexport class MouseTargetFactory {\n constructor(context, viewHelper) {\n this._context = context;\n this._viewHelper = viewHelper;\n }\n mouseTargetIsWidget(e) {\n const t = e.target;\n const path = PartFingerprints.collect(t, this._viewHelper.viewDomNode);\n // Is it a content widget?\n if (ElementPath.isChildOfContentWidgets(path) || ElementPath.isChildOfOverflowingContentWidgets(path)) {\n return true;\n }\n // Is it an overlay widget?\n if (ElementPath.isChildOfOverlayWidgets(path)) {\n return true;\n }\n return false;\n }\n createMouseTarget(lastRenderData, editorPos, pos, target) {\n const ctx = new HitTestContext(this._context, this._viewHelper, lastRenderData);\n const request = new HitTestRequest(ctx, editorPos, pos, target);\n try {\n const r = MouseTargetFactory._createMouseTarget(ctx, request, false);\n // console.log(r.toString());\n return r;\n }\n catch (err) {\n // console.log(err);\n return request.fulfill(0 /* UNKNOWN */);\n }\n }\n static _createMouseTarget(ctx, request, domHitTestExecuted) {\n // console.log(`${domHitTestExecuted ? '=>' : ''}CAME IN REQUEST: ${request}`);\n // First ensure the request has a target\n if (request.target === null) {\n if (domHitTestExecuted) {\n // Still no target... and we have already executed hit test...\n return request.fulfill(0 /* UNKNOWN */);\n }\n const hitTestResult = MouseTargetFactory._doHitTest(ctx, request);\n if (hitTestResult.position) {\n return MouseTargetFactory.createMouseTargetFromHitTestPosition(ctx, request, hitTestResult.position.lineNumber, hitTestResult.position.column);\n }\n return this._createMouseTarget(ctx, request.withTarget(hitTestResult.hitTarget), true);\n }\n // we know for a fact that request.target is not null\n const resolvedRequest = request;\n let result = null;\n result = result || MouseTargetFactory._hitTestContentWidget(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestOverlayWidget(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestMinimap(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestScrollbarSlider(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestViewZone(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestMargin(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestViewCursor(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestTextArea(ctx, resolvedRequest);\n result = result || MouseTargetFactory._hitTestViewLines(ctx, resolvedRequest, domHitTestExecuted);\n result = result || MouseTargetFactory._hitTestScrollbar(ctx, resolvedRequest);\n return (result || request.fulfill(0 /* UNKNOWN */));\n }\n static _hitTestContentWidget(ctx, request) {\n // Is it a content widget?\n if (ElementPath.isChildOfContentWidgets(request.targetPath) || ElementPath.isChildOfOverflowingContentWidgets(request.targetPath)) {\n const widgetId = ctx.findAttribute(request.target, 'widgetId');\n if (widgetId) {\n return request.fulfill(9 /* CONTENT_WIDGET */, null, null, widgetId);\n }\n else {\n return request.fulfill(0 /* UNKNOWN */);\n }\n }\n return null;\n }\n static _hitTestOverlayWidget(ctx, request) {\n // Is it an overlay widget?\n if (ElementPath.isChildOfOverlayWidgets(request.targetPath)) {\n const widgetId = ctx.findAttribute(request.target, 'widgetId');\n if (widgetId) {\n return request.fulfill(12 /* OVERLAY_WIDGET */, null, null, widgetId);\n }\n else {\n return request.fulfill(0 /* UNKNOWN */);\n }\n }\n return null;\n }\n static _hitTestViewCursor(ctx, request) {\n if (request.target) {\n // Check if we've hit a painted cursor\n const lastViewCursorsRenderData = ctx.lastRenderData.lastViewCursorsRenderData;\n for (const d of lastViewCursorsRenderData) {\n if (request.target === d.domNode) {\n return request.fulfill(6 /* CONTENT_TEXT */, d.position);\n }\n }\n }\n if (request.isInContentArea) {\n // Edge has a bug when hit-testing the exact position of a cursor,\n // instead of returning the correct dom node, it returns the\n // first or last rendered view line dom node, therefore help it out\n // and first check if we are on top of a cursor\n const lastViewCursorsRenderData = ctx.lastRenderData.lastViewCursorsRenderData;\n const mouseContentHorizontalOffset = request.mouseContentHorizontalOffset;\n const mouseVerticalOffset = request.mouseVerticalOffset;\n for (const d of lastViewCursorsRenderData) {\n if (mouseContentHorizontalOffset < d.contentLeft) {\n // mouse position is to the left of the cursor\n continue;\n }\n if (mouseContentHorizontalOffset > d.contentLeft + d.width) {\n // mouse position is to the right of the cursor\n continue;\n }\n const cursorVerticalOffset = ctx.getVerticalOffsetForLineNumber(d.position.lineNumber);\n if (cursorVerticalOffset <= mouseVerticalOffset\n && mouseVerticalOffset <= cursorVerticalOffset + d.height) {\n return request.fulfill(6 /* CONTENT_TEXT */, d.position);\n }\n }\n }\n return null;\n }\n static _hitTestViewZone(ctx, request) {\n const viewZoneData = ctx.getZoneAtCoord(request.mouseVerticalOffset);\n if (viewZoneData) {\n const mouseTargetType = (request.isInContentArea ? 8 /* CONTENT_VIEW_ZONE */ : 5 /* GUTTER_VIEW_ZONE */);\n return request.fulfill(mouseTargetType, viewZoneData.position, null, viewZoneData);\n }\n return null;\n }\n static _hitTestTextArea(ctx, request) {\n // Is it the textarea?\n if (ElementPath.isTextArea(request.targetPath)) {\n if (ctx.lastRenderData.lastTextareaPosition) {\n return request.fulfill(6 /* CONTENT_TEXT */, ctx.lastRenderData.lastTextareaPosition);\n }\n return request.fulfill(1 /* TEXTAREA */, ctx.lastRenderData.lastTextareaPosition);\n }\n return null;\n }\n static _hitTestMargin(ctx, request) {\n if (request.isInMarginArea) {\n const res = ctx.getFullLineRangeAtCoord(request.mouseVerticalOffset);\n const pos = res.range.getStartPosition();\n let offset = Math.abs(request.pos.x - request.editorPos.x);\n const detail = {\n isAfterLines: res.isAfterLines,\n glyphMarginLeft: ctx.layoutInfo.glyphMarginLeft,\n glyphMarginWidth: ctx.layoutInfo.glyphMarginWidth,\n lineNumbersWidth: ctx.layoutInfo.lineNumbersWidth,\n offsetX: offset\n };\n offset -= ctx.layoutInfo.glyphMarginLeft;\n if (offset <= ctx.layoutInfo.glyphMarginWidth) {\n // On the glyph margin\n return request.fulfill(2 /* GUTTER_GLYPH_MARGIN */, pos, res.range, detail);\n }\n offset -= ctx.layoutInfo.glyphMarginWidth;\n if (offset <= ctx.layoutInfo.lineNumbersWidth) {\n // On the line numbers\n return request.fulfill(3 /* GUTTER_LINE_NUMBERS */, pos, res.range, detail);\n }\n offset -= ctx.layoutInfo.lineNumbersWidth;\n // On the line decorations\n return request.fulfill(4 /* GUTTER_LINE_DECORATIONS */, pos, res.range, detail);\n }\n return null;\n }\n static _hitTestViewLines(ctx, request, domHitTestExecuted) {\n if (!ElementPath.isChildOfViewLines(request.targetPath)) {\n return null;\n }\n if (ctx.isInTopPadding(request.mouseVerticalOffset)) {\n return request.fulfill(7 /* CONTENT_EMPTY */, new Position(1, 1), undefined, EMPTY_CONTENT_AFTER_LINES);\n }\n // Check if it is below any lines and any view zones\n if (ctx.isAfterLines(request.mouseVerticalOffset) || ctx.isInBottomPadding(request.mouseVerticalOffset)) {\n // This most likely indicates it happened after the last view-line\n const lineCount = ctx.model.getLineCount();\n const maxLineColumn = ctx.model.getLineMaxColumn(lineCount);\n return request.fulfill(7 /* CONTENT_EMPTY */, new Position(lineCount, maxLineColumn), undefined, EMPTY_CONTENT_AFTER_LINES);\n }\n if (domHitTestExecuted) {\n // Check if we are hitting a view-line (can happen in the case of inline decorations on empty lines)\n // See https://github.com/microsoft/vscode/issues/46942\n if (ElementPath.isStrictChildOfViewLines(request.targetPath)) {\n const lineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n if (ctx.model.getLineLength(lineNumber) === 0) {\n const lineWidth = ctx.getLineWidth(lineNumber);\n const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\n return request.fulfill(7 /* CONTENT_EMPTY */, new Position(lineNumber, 1), undefined, detail);\n }\n const lineWidth = ctx.getLineWidth(lineNumber);\n if (request.mouseContentHorizontalOffset >= lineWidth) {\n const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\n const pos = new Position(lineNumber, ctx.model.getLineMaxColumn(lineNumber));\n return request.fulfill(7 /* CONTENT_EMPTY */, pos, undefined, detail);\n }\n }\n // We have already executed hit test...\n return request.fulfill(0 /* UNKNOWN */);\n }\n const hitTestResult = MouseTargetFactory._doHitTest(ctx, request);\n if (hitTestResult.position) {\n return MouseTargetFactory.createMouseTargetFromHitTestPosition(ctx, request, hitTestResult.position.lineNumber, hitTestResult.position.column);\n }\n return this._createMouseTarget(ctx, request.withTarget(hitTestResult.hitTarget), true);\n }\n static _hitTestMinimap(ctx, request) {\n if (ElementPath.isChildOfMinimap(request.targetPath)) {\n const possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n const maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\n return request.fulfill(11 /* SCROLLBAR */, new Position(possibleLineNumber, maxColumn));\n }\n return null;\n }\n static _hitTestScrollbarSlider(ctx, request) {\n if (ElementPath.isChildOfScrollableElement(request.targetPath)) {\n if (request.target && request.target.nodeType === 1) {\n const className = request.target.className;\n if (className && /\\b(slider|scrollbar)\\b/.test(className)) {\n const possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n const maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\n return request.fulfill(11 /* SCROLLBAR */, new Position(possibleLineNumber, maxColumn));\n }\n }\n }\n return null;\n }\n static _hitTestScrollbar(ctx, request) {\n // Is it the overview ruler?\n // Is it a child of the scrollable element?\n if (ElementPath.isChildOfScrollableElement(request.targetPath)) {\n const possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n const maxColumn = ctx.model.getLineMaxColumn(possibleLineNumber);\n return request.fulfill(11 /* SCROLLBAR */, new Position(possibleLineNumber, maxColumn));\n }\n return null;\n }\n getMouseColumn(editorPos, pos) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n const mouseContentHorizontalOffset = this._context.viewLayout.getCurrentScrollLeft() + pos.x - editorPos.x - layoutInfo.contentLeft;\n return MouseTargetFactory._getMouseColumn(mouseContentHorizontalOffset, options.get(40 /* fontInfo */).typicalHalfwidthCharacterWidth);\n }\n static _getMouseColumn(mouseContentHorizontalOffset, typicalHalfwidthCharacterWidth) {\n if (mouseContentHorizontalOffset < 0) {\n return 1;\n }\n const chars = Math.round(mouseContentHorizontalOffset / typicalHalfwidthCharacterWidth);\n return (chars + 1);\n }\n static createMouseTargetFromHitTestPosition(ctx, request, lineNumber, column) {\n const pos = new Position(lineNumber, column);\n const lineWidth = ctx.getLineWidth(lineNumber);\n if (request.mouseContentHorizontalOffset > lineWidth) {\n const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\n return request.fulfill(7 /* CONTENT_EMPTY */, pos, undefined, detail);\n }\n const visibleRange = ctx.visibleRangeForPosition(lineNumber, column);\n if (!visibleRange) {\n return request.fulfill(0 /* UNKNOWN */, pos);\n }\n const columnHorizontalOffset = visibleRange.left;\n if (request.mouseContentHorizontalOffset === columnHorizontalOffset) {\n return request.fulfill(6 /* CONTENT_TEXT */, pos);\n }\n const points = [];\n points.push({ offset: visibleRange.left, column: column });\n if (column > 1) {\n const visibleRange = ctx.visibleRangeForPosition(lineNumber, column - 1);\n if (visibleRange) {\n points.push({ offset: visibleRange.left, column: column - 1 });\n }\n }\n const lineMaxColumn = ctx.model.getLineMaxColumn(lineNumber);\n if (column < lineMaxColumn) {\n const visibleRange = ctx.visibleRangeForPosition(lineNumber, column + 1);\n if (visibleRange) {\n points.push({ offset: visibleRange.left, column: column + 1 });\n }\n }\n points.sort((a, b) => a.offset - b.offset);\n for (let i = 1; i < points.length; i++) {\n const prev = points[i - 1];\n const curr = points[i];\n if (prev.offset <= request.mouseContentHorizontalOffset && request.mouseContentHorizontalOffset <= curr.offset) {\n const rng = new EditorRange(lineNumber, prev.column, lineNumber, curr.column);\n return request.fulfill(6 /* CONTENT_TEXT */, pos, rng);\n }\n }\n return request.fulfill(6 /* CONTENT_TEXT */, pos);\n }\n /**\n * Most probably WebKit browsers and Edge\n */\n static _doHitTestWithCaretRangeFromPoint(ctx, request) {\n // In Chrome, especially on Linux it is possible to click between lines,\n // so try to adjust the `hity` below so that it lands in the center of a line\n const lineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n const lineVerticalOffset = ctx.getVerticalOffsetForLineNumber(lineNumber);\n const lineCenteredVerticalOffset = lineVerticalOffset + Math.floor(ctx.lineHeight / 2);\n let adjustedPageY = request.pos.y + (lineCenteredVerticalOffset - request.mouseVerticalOffset);\n if (adjustedPageY <= request.editorPos.y) {\n adjustedPageY = request.editorPos.y + 1;\n }\n if (adjustedPageY >= request.editorPos.y + ctx.layoutInfo.height) {\n adjustedPageY = request.editorPos.y + ctx.layoutInfo.height - 1;\n }\n const adjustedPage = new PageCoordinates(request.pos.x, adjustedPageY);\n const r = this._actualDoHitTestWithCaretRangeFromPoint(ctx, adjustedPage.toClientCoordinates());\n if (r.position) {\n return r;\n }\n // Also try to hit test without the adjustment (for the edge cases that we are near the top or bottom)\n return this._actualDoHitTestWithCaretRangeFromPoint(ctx, request.pos.toClientCoordinates());\n }\n static _actualDoHitTestWithCaretRangeFromPoint(ctx, coords) {\n const shadowRoot = dom.getShadowRoot(ctx.viewDomNode);\n let range;\n if (shadowRoot) {\n if (typeof shadowRoot.caretRangeFromPoint === 'undefined') {\n range = shadowCaretRangeFromPoint(shadowRoot, coords.clientX, coords.clientY);\n }\n else {\n range = shadowRoot.caretRangeFromPoint(coords.clientX, coords.clientY);\n }\n }\n else {\n range = document.caretRangeFromPoint(coords.clientX, coords.clientY);\n }\n if (!range || !range.startContainer) {\n return {\n position: null,\n hitTarget: null\n };\n }\n // Chrome always hits a TEXT_NODE, while Edge sometimes hits a token span\n const startContainer = range.startContainer;\n let hitTarget = null;\n if (startContainer.nodeType === startContainer.TEXT_NODE) {\n // startContainer is expected to be the token text\n const parent1 = startContainer.parentNode; // expected to be the token span\n const parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span\n const parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div\n const parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? parent3.className : null;\n if (parent3ClassName === ViewLine.CLASS_NAME) {\n const p = ctx.getPositionFromDOMInfo(parent1, range.startOffset);\n return {\n position: p,\n hitTarget: null\n };\n }\n else {\n hitTarget = startContainer.parentNode;\n }\n }\n else if (startContainer.nodeType === startContainer.ELEMENT_NODE) {\n // startContainer is expected to be the token span\n const parent1 = startContainer.parentNode; // expected to be the view line container span\n const parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line div\n const parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? parent2.className : null;\n if (parent2ClassName === ViewLine.CLASS_NAME) {\n const p = ctx.getPositionFromDOMInfo(startContainer, startContainer.textContent.length);\n return {\n position: p,\n hitTarget: null\n };\n }\n else {\n hitTarget = startContainer;\n }\n }\n return {\n position: null,\n hitTarget: hitTarget\n };\n }\n /**\n * Most probably Gecko\n */\n static _doHitTestWithCaretPositionFromPoint(ctx, coords) {\n const hitResult = document.caretPositionFromPoint(coords.clientX, coords.clientY);\n if (hitResult.offsetNode.nodeType === hitResult.offsetNode.TEXT_NODE) {\n // offsetNode is expected to be the token text\n const parent1 = hitResult.offsetNode.parentNode; // expected to be the token span\n const parent2 = parent1 ? parent1.parentNode : null; // expected to be the view line container span\n const parent3 = parent2 ? parent2.parentNode : null; // expected to be the view line div\n const parent3ClassName = parent3 && parent3.nodeType === parent3.ELEMENT_NODE ? parent3.className : null;\n if (parent3ClassName === ViewLine.CLASS_NAME) {\n const p = ctx.getPositionFromDOMInfo(hitResult.offsetNode.parentNode, hitResult.offset);\n return {\n position: p,\n hitTarget: null\n };\n }\n else {\n return {\n position: null,\n hitTarget: hitResult.offsetNode.parentNode\n };\n }\n }\n // For inline decorations, Gecko sometimes returns the `<span>` of the line and the offset is the `<span>` with the inline decoration\n // Some other times, it returns the `<span>` with the inline decoration\n if (hitResult.offsetNode.nodeType === hitResult.offsetNode.ELEMENT_NODE) {\n const parent1 = hitResult.offsetNode.parentNode;\n const parent1ClassName = parent1 && parent1.nodeType === parent1.ELEMENT_NODE ? parent1.className : null;\n const parent2 = parent1 ? parent1.parentNode : null;\n const parent2ClassName = parent2 && parent2.nodeType === parent2.ELEMENT_NODE ? parent2.className : null;\n if (parent1ClassName === ViewLine.CLASS_NAME) {\n // it returned the `<span>` of the line and the offset is the `<span>` with the inline decoration\n const tokenSpan = hitResult.offsetNode.childNodes[Math.min(hitResult.offset, hitResult.offsetNode.childNodes.length - 1)];\n if (tokenSpan) {\n const p = ctx.getPositionFromDOMInfo(tokenSpan, 0);\n return {\n position: p,\n hitTarget: null\n };\n }\n }\n else if (parent2ClassName === ViewLine.CLASS_NAME) {\n // it returned the `<span>` with the inline decoration\n const p = ctx.getPositionFromDOMInfo(hitResult.offsetNode, 0);\n return {\n position: p,\n hitTarget: null\n };\n }\n }\n return {\n position: null,\n hitTarget: hitResult.offsetNode\n };\n }\n static _snapToSoftTabBoundary(position, viewModel) {\n const lineContent = viewModel.getLineContent(position.lineNumber);\n const { tabSize } = viewModel.getTextModelOptions();\n const newPosition = AtomicTabMoveOperations.atomicPosition(lineContent, position.column - 1, tabSize, 2 /* Nearest */);\n if (newPosition !== -1) {\n return new Position(position.lineNumber, newPosition + 1);\n }\n return position;\n }\n static _doHitTest(ctx, request) {\n let result;\n if (typeof document.caretRangeFromPoint === 'function') {\n result = this._doHitTestWithCaretRangeFromPoint(ctx, request);\n }\n else if (document.caretPositionFromPoint) {\n result = this._doHitTestWithCaretPositionFromPoint(ctx, request.pos.toClientCoordinates());\n }\n else {\n result = {\n position: null,\n hitTarget: null\n };\n }\n // Snap to the nearest soft tab boundary if atomic soft tabs are enabled.\n if (result.position && ctx.stickyTabStops) {\n result.position = this._snapToSoftTabBoundary(result.position, ctx.model);\n }\n return result;\n }\n}\nexport function shadowCaretRangeFromPoint(shadowRoot, x, y) {\n const range = document.createRange();\n // Get the element under the point\n let el = shadowRoot.elementFromPoint(x, y);\n if (el !== null) {\n // Get the last child of the element until its firstChild is a text node\n // This assumes that the pointer is on the right of the line, out of the tokens\n // and that we want to get the offset of the last token of the line\n while (el && el.firstChild && el.firstChild.nodeType !== el.firstChild.TEXT_NODE && el.lastChild && el.lastChild.firstChild) {\n el = el.lastChild;\n }\n // Grab its rect\n const rect = el.getBoundingClientRect();\n // And its font\n const font = window.getComputedStyle(el, null).getPropertyValue('font');\n // And also its txt content\n const text = el.innerText;\n // Position the pixel cursor at the left of the element\n let pixelCursor = rect.left;\n let offset = 0;\n let step;\n // If the point is on the right of the box put the cursor after the last character\n if (x > rect.left + rect.width) {\n offset = text.length;\n }\n else {\n const charWidthReader = CharWidthReader.getInstance();\n // Goes through all the characters of the innerText, and checks if the x of the point\n // belongs to the character.\n for (let i = 0; i < text.length + 1; i++) {\n // The step is half the width of the character\n step = charWidthReader.getCharWidth(text.charAt(i), font) / 2;\n // Move to the center of the character\n pixelCursor += step;\n // If the x of the point is smaller that the position of the cursor, the point is over that character\n if (x < pixelCursor) {\n offset = i;\n break;\n }\n // Move between the current character and the next\n pixelCursor += step;\n }\n }\n // Creates a range with the text node of the element and set the offset found\n range.setStart(el.firstChild, offset);\n range.setEnd(el.firstChild, offset);\n }\n return range;\n}\nclass CharWidthReader {\n constructor() {\n this._cache = {};\n this._canvas = document.createElement('canvas');\n }\n static getInstance() {\n if (!CharWidthReader._INSTANCE) {\n CharWidthReader._INSTANCE = new CharWidthReader();\n }\n return CharWidthReader._INSTANCE;\n }\n getCharWidth(char, font) {\n const cacheKey = char + font;\n if (this._cache[cacheKey]) {\n return this._cache[cacheKey];\n }\n const context = this._canvas.getContext('2d');\n context.font = font;\n const metrics = context.measureText(char);\n const width = metrics.width;\n this._cache[cacheKey] = width;\n return width;\n }\n}\nCharWidthReader._INSTANCE = null;\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../base/browser/dom.js';\nimport { StandardWheelEvent } from '../../../base/browser/mouseEvent.js';\nimport { TimeoutTimer } from '../../../base/common/async.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { HitTestContext, MouseTarget, MouseTargetFactory } from './mouseTarget.js';\nimport { ClientCoordinates, EditorMouseEventFactory, GlobalEditorMouseMoveMonitor, createEditorPagePosition } from '../editorDom.js';\nimport { EditorZoom } from '../../common/config/editorZoom.js';\nimport { Position } from '../../common/core/position.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { ViewEventHandler } from '../../common/viewModel/viewEventHandler.js';\n/**\n * Merges mouse events when mouse move events are throttled\n */\nexport function createMouseMoveEventMerger(mouseTargetFactory) {\n return function (lastEvent, currentEvent) {\n let targetIsWidget = false;\n if (mouseTargetFactory) {\n targetIsWidget = mouseTargetFactory.mouseTargetIsWidget(currentEvent);\n }\n if (!targetIsWidget) {\n currentEvent.preventDefault();\n }\n return currentEvent;\n };\n}\nexport class MouseHandler extends ViewEventHandler {\n constructor(context, viewController, viewHelper) {\n super();\n this._context = context;\n this.viewController = viewController;\n this.viewHelper = viewHelper;\n this.mouseTargetFactory = new MouseTargetFactory(this._context, viewHelper);\n this._mouseDownOperation = this._register(new MouseDownOperation(this._context, this.viewController, this.viewHelper, (e, testEventTarget) => this._createMouseTarget(e, testEventTarget), (e) => this._getMouseColumn(e)));\n this.lastMouseLeaveTime = -1;\n this._height = this._context.configuration.options.get(127 /* layoutInfo */).height;\n const mouseEvents = new EditorMouseEventFactory(this.viewHelper.viewDomNode);\n this._register(mouseEvents.onContextMenu(this.viewHelper.viewDomNode, (e) => this._onContextMenu(e, true)));\n this._register(mouseEvents.onMouseMoveThrottled(this.viewHelper.viewDomNode, (e) => this._onMouseMove(e), createMouseMoveEventMerger(this.mouseTargetFactory), MouseHandler.MOUSE_MOVE_MINIMUM_TIME));\n this._register(mouseEvents.onMouseUp(this.viewHelper.viewDomNode, (e) => this._onMouseUp(e)));\n this._register(mouseEvents.onMouseLeave(this.viewHelper.viewDomNode, (e) => this._onMouseLeave(e)));\n this._register(mouseEvents.onMouseDown(this.viewHelper.viewDomNode, (e) => this._onMouseDown(e)));\n const onMouseWheel = (browserEvent) => {\n this.viewController.emitMouseWheel(browserEvent);\n if (!this._context.configuration.options.get(64 /* mouseWheelZoom */)) {\n return;\n }\n const e = new StandardWheelEvent(browserEvent);\n const doMouseWheelZoom = (platform.isMacintosh\n // on macOS we support cmd + two fingers scroll (`metaKey` set)\n // and also the two fingers pinch gesture (`ctrKey` set)\n ? ((browserEvent.metaKey || browserEvent.ctrlKey) && !browserEvent.shiftKey && !browserEvent.altKey)\n : (browserEvent.ctrlKey && !browserEvent.metaKey && !browserEvent.shiftKey && !browserEvent.altKey));\n if (doMouseWheelZoom) {\n const zoomLevel = EditorZoom.getZoomLevel();\n const delta = e.deltaY > 0 ? 1 : -1;\n EditorZoom.setZoomLevel(zoomLevel + delta);\n e.preventDefault();\n e.stopPropagation();\n }\n };\n this._register(dom.addDisposableListener(this.viewHelper.viewDomNode, dom.EventType.MOUSE_WHEEL, onMouseWheel, { capture: true, passive: false }));\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n if (e.hasChanged(127 /* layoutInfo */)) {\n // layout change\n const height = this._context.configuration.options.get(127 /* layoutInfo */).height;\n if (this._height !== height) {\n this._height = height;\n this._mouseDownOperation.onHeightChanged();\n }\n }\n return false;\n }\n onCursorStateChanged(e) {\n this._mouseDownOperation.onCursorStateChanged(e);\n return false;\n }\n onFocusChanged(e) {\n return false;\n }\n onScrollChanged(e) {\n this._mouseDownOperation.onScrollChanged();\n return false;\n }\n // --- end event handlers\n getTargetAtClientPoint(clientX, clientY) {\n const clientPos = new ClientCoordinates(clientX, clientY);\n const pos = clientPos.toPageCoordinates();\n const editorPos = createEditorPagePosition(this.viewHelper.viewDomNode);\n if (pos.y < editorPos.y || pos.y > editorPos.y + editorPos.height || pos.x < editorPos.x || pos.x > editorPos.x + editorPos.width) {\n return null;\n }\n return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(), editorPos, pos, null);\n }\n _createMouseTarget(e, testEventTarget) {\n return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(), e.editorPos, e.pos, testEventTarget ? e.target : null);\n }\n _getMouseColumn(e) {\n return this.mouseTargetFactory.getMouseColumn(e.editorPos, e.pos);\n }\n _onContextMenu(e, testEventTarget) {\n this.viewController.emitContextMenu({\n event: e,\n target: this._createMouseTarget(e, testEventTarget)\n });\n }\n _onMouseMove(e) {\n if (this._mouseDownOperation.isActive()) {\n // In selection/drag operation\n return;\n }\n const actualMouseMoveTime = e.timestamp;\n if (actualMouseMoveTime < this.lastMouseLeaveTime) {\n // Due to throttling, this event occurred before the mouse left the editor, therefore ignore it.\n return;\n }\n this.viewController.emitMouseMove({\n event: e,\n target: this._createMouseTarget(e, true)\n });\n }\n _onMouseLeave(e) {\n this.lastMouseLeaveTime = (new Date()).getTime();\n this.viewController.emitMouseLeave({\n event: e,\n target: null\n });\n }\n _onMouseUp(e) {\n this.viewController.emitMouseUp({\n event: e,\n target: this._createMouseTarget(e, true)\n });\n }\n _onMouseDown(e) {\n const t = this._createMouseTarget(e, true);\n const targetIsContent = (t.type === 6 /* CONTENT_TEXT */ || t.type === 7 /* CONTENT_EMPTY */);\n const targetIsGutter = (t.type === 2 /* GUTTER_GLYPH_MARGIN */ || t.type === 3 /* GUTTER_LINE_NUMBERS */ || t.type === 4 /* GUTTER_LINE_DECORATIONS */);\n const targetIsLineNumbers = (t.type === 3 /* GUTTER_LINE_NUMBERS */);\n const selectOnLineNumbers = this._context.configuration.options.get(95 /* selectOnLineNumbers */);\n const targetIsViewZone = (t.type === 8 /* CONTENT_VIEW_ZONE */ || t.type === 5 /* GUTTER_VIEW_ZONE */);\n const targetIsWidget = (t.type === 9 /* CONTENT_WIDGET */);\n let shouldHandle = e.leftButton || e.middleButton;\n if (platform.isMacintosh && e.leftButton && e.ctrlKey) {\n shouldHandle = false;\n }\n const focus = () => {\n e.preventDefault();\n this.viewHelper.focusTextArea();\n };\n if (shouldHandle && (targetIsContent || (targetIsLineNumbers && selectOnLineNumbers))) {\n focus();\n this._mouseDownOperation.start(t.type, e);\n }\n else if (targetIsGutter) {\n // Do not steal focus\n e.preventDefault();\n }\n else if (targetIsViewZone) {\n const viewZoneData = t.detail;\n if (this.viewHelper.shouldSuppressMouseDownOnViewZone(viewZoneData.viewZoneId)) {\n focus();\n this._mouseDownOperation.start(t.type, e);\n e.preventDefault();\n }\n }\n else if (targetIsWidget && this.viewHelper.shouldSuppressMouseDownOnWidget(t.detail)) {\n focus();\n e.preventDefault();\n }\n this.viewController.emitMouseDown({\n event: e,\n target: t\n });\n }\n}\nMouseHandler.MOUSE_MOVE_MINIMUM_TIME = 100; // ms\nclass MouseDownOperation extends Disposable {\n constructor(context, viewController, viewHelper, createMouseTarget, getMouseColumn) {\n super();\n this._context = context;\n this._viewController = viewController;\n this._viewHelper = viewHelper;\n this._createMouseTarget = createMouseTarget;\n this._getMouseColumn = getMouseColumn;\n this._mouseMoveMonitor = this._register(new GlobalEditorMouseMoveMonitor(this._viewHelper.viewDomNode));\n this._onScrollTimeout = this._register(new TimeoutTimer());\n this._mouseState = new MouseDownState();\n this._currentSelection = new Selection(1, 1, 1, 1);\n this._isActive = false;\n this._lastMouseEvent = null;\n }\n dispose() {\n super.dispose();\n }\n isActive() {\n return this._isActive;\n }\n _onMouseDownThenMove(e) {\n this._lastMouseEvent = e;\n this._mouseState.setModifiers(e);\n const position = this._findMousePosition(e, true);\n if (!position) {\n // Ignoring because position is unknown\n return;\n }\n if (this._mouseState.isDragAndDrop) {\n this._viewController.emitMouseDrag({\n event: e,\n target: position\n });\n }\n else {\n this._dispatchMouse(position, true);\n }\n }\n start(targetType, e) {\n this._lastMouseEvent = e;\n this._mouseState.setStartedOnLineNumbers(targetType === 3 /* GUTTER_LINE_NUMBERS */);\n this._mouseState.setStartButtons(e);\n this._mouseState.setModifiers(e);\n const position = this._findMousePosition(e, true);\n if (!position || !position.position) {\n // Ignoring because position is unknown\n return;\n }\n this._mouseState.trySetCount(e.detail, position.position);\n // Overwrite the detail of the MouseEvent, as it will be sent out in an event and contributions might rely on it.\n e.detail = this._mouseState.count;\n const options = this._context.configuration.options;\n if (!options.get(77 /* readOnly */)\n && options.get(29 /* dragAndDrop */)\n && !options.get(16 /* columnSelection */)\n && !this._mouseState.altKey // we don't support multiple mouse\n && e.detail < 2 // only single click on a selection can work\n && !this._isActive // the mouse is not down yet\n && !this._currentSelection.isEmpty() // we don't drag single cursor\n && (position.type === 6 /* CONTENT_TEXT */) // single click on text\n && position.position && this._currentSelection.containsPosition(position.position) // single click on a selection\n ) {\n this._mouseState.isDragAndDrop = true;\n this._isActive = true;\n this._mouseMoveMonitor.startMonitoring(e.target, e.buttons, createMouseMoveEventMerger(null), (e) => this._onMouseDownThenMove(e), (browserEvent) => {\n const position = this._findMousePosition(this._lastMouseEvent, true);\n if (browserEvent && browserEvent instanceof KeyboardEvent) {\n // cancel\n this._viewController.emitMouseDropCanceled();\n }\n else {\n this._viewController.emitMouseDrop({\n event: this._lastMouseEvent,\n target: (position ? this._createMouseTarget(this._lastMouseEvent, true) : null) // Ignoring because position is unknown, e.g., Content View Zone\n });\n }\n this._stop();\n });\n return;\n }\n this._mouseState.isDragAndDrop = false;\n this._dispatchMouse(position, e.shiftKey);\n if (!this._isActive) {\n this._isActive = true;\n this._mouseMoveMonitor.startMonitoring(e.target, e.buttons, createMouseMoveEventMerger(null), (e) => this._onMouseDownThenMove(e), () => this._stop());\n }\n }\n _stop() {\n this._isActive = false;\n this._onScrollTimeout.cancel();\n }\n onHeightChanged() {\n this._mouseMoveMonitor.stopMonitoring();\n }\n onScrollChanged() {\n if (!this._isActive) {\n return;\n }\n this._onScrollTimeout.setIfNotSet(() => {\n if (!this._lastMouseEvent) {\n return;\n }\n const position = this._findMousePosition(this._lastMouseEvent, false);\n if (!position) {\n // Ignoring because position is unknown\n return;\n }\n if (this._mouseState.isDragAndDrop) {\n // Ignoring because users are dragging the text\n return;\n }\n this._dispatchMouse(position, true);\n }, 10);\n }\n onCursorStateChanged(e) {\n this._currentSelection = e.selections[0];\n }\n _getPositionOutsideEditor(e) {\n const editorContent = e.editorPos;\n const model = this._context.model;\n const viewLayout = this._context.viewLayout;\n const mouseColumn = this._getMouseColumn(e);\n if (e.posy < editorContent.y) {\n const verticalOffset = Math.max(viewLayout.getCurrentScrollTop() - (editorContent.y - e.posy), 0);\n const viewZoneData = HitTestContext.getZoneAtCoord(this._context, verticalOffset);\n if (viewZoneData) {\n const newPosition = this._helpPositionJumpOverViewZone(viewZoneData);\n if (newPosition) {\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, newPosition);\n }\n }\n const aboveLineNumber = viewLayout.getLineNumberAtVerticalOffset(verticalOffset);\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(aboveLineNumber, 1));\n }\n if (e.posy > editorContent.y + editorContent.height) {\n const verticalOffset = viewLayout.getCurrentScrollTop() + (e.posy - editorContent.y);\n const viewZoneData = HitTestContext.getZoneAtCoord(this._context, verticalOffset);\n if (viewZoneData) {\n const newPosition = this._helpPositionJumpOverViewZone(viewZoneData);\n if (newPosition) {\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, newPosition);\n }\n }\n const belowLineNumber = viewLayout.getLineNumberAtVerticalOffset(verticalOffset);\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(belowLineNumber, model.getLineMaxColumn(belowLineNumber)));\n }\n const possibleLineNumber = viewLayout.getLineNumberAtVerticalOffset(viewLayout.getCurrentScrollTop() + (e.posy - editorContent.y));\n if (e.posx < editorContent.x) {\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(possibleLineNumber, 1));\n }\n if (e.posx > editorContent.x + editorContent.width) {\n return new MouseTarget(null, 13 /* OUTSIDE_EDITOR */, mouseColumn, new Position(possibleLineNumber, model.getLineMaxColumn(possibleLineNumber)));\n }\n return null;\n }\n _findMousePosition(e, testEventTarget) {\n const positionOutsideEditor = this._getPositionOutsideEditor(e);\n if (positionOutsideEditor) {\n return positionOutsideEditor;\n }\n const t = this._createMouseTarget(e, testEventTarget);\n const hintedPosition = t.position;\n if (!hintedPosition) {\n return null;\n }\n if (t.type === 8 /* CONTENT_VIEW_ZONE */ || t.type === 5 /* GUTTER_VIEW_ZONE */) {\n const newPosition = this._helpPositionJumpOverViewZone(t.detail);\n if (newPosition) {\n return new MouseTarget(t.element, t.type, t.mouseColumn, newPosition, null, t.detail);\n }\n }\n return t;\n }\n _helpPositionJumpOverViewZone(viewZoneData) {\n // Force position on view zones to go above or below depending on where selection started from\n const selectionStart = new Position(this._currentSelection.selectionStartLineNumber, this._currentSelection.selectionStartColumn);\n const positionBefore = viewZoneData.positionBefore;\n const positionAfter = viewZoneData.positionAfter;\n if (positionBefore && positionAfter) {\n if (positionBefore.isBefore(selectionStart)) {\n return positionBefore;\n }\n else {\n return positionAfter;\n }\n }\n return null;\n }\n _dispatchMouse(position, inSelectionMode) {\n if (!position.position) {\n return;\n }\n this._viewController.dispatchMouse({\n position: position.position,\n mouseColumn: position.mouseColumn,\n startedOnLineNumbers: this._mouseState.startedOnLineNumbers,\n inSelectionMode: inSelectionMode,\n mouseDownCount: this._mouseState.count,\n altKey: this._mouseState.altKey,\n ctrlKey: this._mouseState.ctrlKey,\n metaKey: this._mouseState.metaKey,\n shiftKey: this._mouseState.shiftKey,\n leftButton: this._mouseState.leftButton,\n middleButton: this._mouseState.middleButton,\n });\n }\n}\nclass MouseDownState {\n constructor() {\n this._altKey = false;\n this._ctrlKey = false;\n this._metaKey = false;\n this._shiftKey = false;\n this._leftButton = false;\n this._middleButton = false;\n this._startedOnLineNumbers = false;\n this._lastMouseDownPosition = null;\n this._lastMouseDownPositionEqualCount = 0;\n this._lastMouseDownCount = 0;\n this._lastSetMouseDownCountTime = 0;\n this.isDragAndDrop = false;\n }\n get altKey() { return this._altKey; }\n get ctrlKey() { return this._ctrlKey; }\n get metaKey() { return this._metaKey; }\n get shiftKey() { return this._shiftKey; }\n get leftButton() { return this._leftButton; }\n get middleButton() { return this._middleButton; }\n get startedOnLineNumbers() { return this._startedOnLineNumbers; }\n get count() {\n return this._lastMouseDownCount;\n }\n setModifiers(source) {\n this._altKey = source.altKey;\n this._ctrlKey = source.ctrlKey;\n this._metaKey = source.metaKey;\n this._shiftKey = source.shiftKey;\n }\n setStartButtons(source) {\n this._leftButton = source.leftButton;\n this._middleButton = source.middleButton;\n }\n setStartedOnLineNumbers(startedOnLineNumbers) {\n this._startedOnLineNumbers = startedOnLineNumbers;\n }\n trySetCount(setMouseDownCount, newMouseDownPosition) {\n // a. Invalidate multiple clicking if too much time has passed (will be hit by IE because the detail field of mouse events contains garbage in IE10)\n const currentTime = (new Date()).getTime();\n if (currentTime - this._lastSetMouseDownCountTime > MouseDownState.CLEAR_MOUSE_DOWN_COUNT_TIME) {\n setMouseDownCount = 1;\n }\n this._lastSetMouseDownCountTime = currentTime;\n // b. Ensure that we don't jump from single click to triple click in one go (will be hit by IE because the detail field of mouse events contains garbage in IE10)\n if (setMouseDownCount > this._lastMouseDownCount + 1) {\n setMouseDownCount = this._lastMouseDownCount + 1;\n }\n // c. Invalidate multiple clicking if the logical position is different\n if (this._lastMouseDownPosition && this._lastMouseDownPosition.equals(newMouseDownPosition)) {\n this._lastMouseDownPositionEqualCount++;\n }\n else {\n this._lastMouseDownPositionEqualCount = 1;\n }\n this._lastMouseDownPosition = newMouseDownPosition;\n // Finally set the lastMouseDownCount\n this._lastMouseDownCount = Math.min(setMouseDownCount, this._lastMouseDownPositionEqualCount);\n }\n}\nMouseDownState.CLEAR_MOUSE_DOWN_COUNT_TIME = 400; // ms\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../base/browser/dom.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { EventType, Gesture } from '../../../base/browser/touch.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { MouseHandler, createMouseMoveEventMerger } from './mouseHandler.js';\nimport { EditorMouseEvent, EditorPointerEventFactory } from '../editorDom.js';\nimport { BrowserFeatures } from '../../../base/browser/canIUse.js';\nimport { TextAreaSyntethicEvents } from './textAreaInput.js';\n/**\n * Currently only tested on iOS 13/ iPadOS.\n */\nexport class PointerEventHandler extends MouseHandler {\n constructor(context, viewController, viewHelper) {\n super(context, viewController, viewHelper);\n this._register(Gesture.addTarget(this.viewHelper.linesContentDomNode));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Tap, (e) => this.onTap(e)));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Change, (e) => this.onChange(e)));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Contextmenu, (e) => this._onContextMenu(new EditorMouseEvent(e, this.viewHelper.viewDomNode), false)));\n this._lastPointerType = 'mouse';\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, 'pointerdown', (e) => {\n const pointerType = e.pointerType;\n if (pointerType === 'mouse') {\n this._lastPointerType = 'mouse';\n return;\n }\n else if (pointerType === 'touch') {\n this._lastPointerType = 'touch';\n }\n else {\n this._lastPointerType = 'pen';\n }\n }));\n // PonterEvents\n const pointerEvents = new EditorPointerEventFactory(this.viewHelper.viewDomNode);\n this._register(pointerEvents.onPointerMoveThrottled(this.viewHelper.viewDomNode, (e) => this._onMouseMove(e), createMouseMoveEventMerger(this.mouseTargetFactory), MouseHandler.MOUSE_MOVE_MINIMUM_TIME));\n this._register(pointerEvents.onPointerUp(this.viewHelper.viewDomNode, (e) => this._onMouseUp(e)));\n this._register(pointerEvents.onPointerLeave(this.viewHelper.viewDomNode, (e) => this._onMouseLeave(e)));\n this._register(pointerEvents.onPointerDown(this.viewHelper.viewDomNode, (e) => this._onMouseDown(e)));\n }\n onTap(event) {\n if (!event.initialTarget || !this.viewHelper.linesContentDomNode.contains(event.initialTarget)) {\n return;\n }\n event.preventDefault();\n this.viewHelper.focusTextArea();\n const target = this._createMouseTarget(new EditorMouseEvent(event, this.viewHelper.viewDomNode), false);\n if (target.position) {\n // this.viewController.moveTo(target.position);\n this.viewController.dispatchMouse({\n position: target.position,\n mouseColumn: target.position.column,\n startedOnLineNumbers: false,\n mouseDownCount: event.tapCount,\n inSelectionMode: false,\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n leftButton: false,\n middleButton: false,\n });\n }\n }\n onChange(e) {\n if (this._lastPointerType === 'touch') {\n this._context.model.deltaScrollNow(-e.translationX, -e.translationY);\n }\n }\n _onMouseDown(e) {\n if (e.browserEvent.pointerType === 'touch') {\n return;\n }\n super._onMouseDown(e);\n }\n}\nclass TouchHandler extends MouseHandler {\n constructor(context, viewController, viewHelper) {\n super(context, viewController, viewHelper);\n this._register(Gesture.addTarget(this.viewHelper.linesContentDomNode));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Tap, (e) => this.onTap(e)));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Change, (e) => this.onChange(e)));\n this._register(dom.addDisposableListener(this.viewHelper.linesContentDomNode, EventType.Contextmenu, (e) => this._onContextMenu(new EditorMouseEvent(e, this.viewHelper.viewDomNode), false)));\n }\n onTap(event) {\n event.preventDefault();\n this.viewHelper.focusTextArea();\n const target = this._createMouseTarget(new EditorMouseEvent(event, this.viewHelper.viewDomNode), false);\n if (target.position) {\n // Send the tap event also to the <textarea> (for input purposes)\n const event = document.createEvent('CustomEvent');\n event.initEvent(TextAreaSyntethicEvents.Tap, false, true);\n this.viewHelper.dispatchTextAreaEvent(event);\n this.viewController.moveTo(target.position);\n }\n }\n onChange(e) {\n this._context.model.deltaScrollNow(-e.translationX, -e.translationY);\n }\n}\nexport class PointerHandler extends Disposable {\n constructor(context, viewController, viewHelper) {\n super();\n if ((platform.isIOS && BrowserFeatures.pointerEvents)) {\n this.handler = this._register(new PointerEventHandler(context, viewController, viewHelper));\n }\n else if (window.TouchEvent) {\n this.handler = this._register(new TouchHandler(context, viewController, viewHelper));\n }\n else {\n this.handler = this._register(new MouseHandler(context, viewController, viewHelper));\n }\n }\n getTargetAtClientPoint(clientX, clientY) {\n return this.handler.getTargetAtClientPoint(clientX, clientY);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { ViewEventHandler } from '../../common/viewModel/viewEventHandler.js';\nexport class DynamicViewOverlay extends ViewEventHandler {\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 *--------------------------------------------------------------------------------------------*/\nimport './lineNumbers.css';\nimport * as platform from '../../../../base/common/platform.js';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { Position } from '../../../common/core/position.js';\nimport { editorActiveLineNumber, editorLineNumbers } from '../../../common/view/editorColorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nexport class LineNumbersOverlay extends DynamicViewOverlay {\n constructor(context) {\n super();\n this._context = context;\n this._readConfig();\n this._lastCursorModelPosition = new Position(1, 1);\n this._renderResult = null;\n this._activeLineNumber = 1;\n this._context.addEventHandler(this);\n }\n _readConfig() {\n const options = this._context.configuration.options;\n this._lineHeight = options.get(55 /* lineHeight */);\n const lineNumbers = options.get(56 /* lineNumbers */);\n this._renderLineNumbers = lineNumbers.renderType;\n this._renderCustomLineNumbers = lineNumbers.renderFn;\n this._renderFinalNewline = options.get(81 /* renderFinalNewline */);\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._lineNumbersLeft = layoutInfo.lineNumbersLeft;\n this._lineNumbersWidth = layoutInfo.lineNumbersWidth;\n }\n dispose() {\n this._context.removeEventHandler(this);\n this._renderResult = null;\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n this._readConfig();\n return true;\n }\n onCursorStateChanged(e) {\n const primaryViewPosition = e.selections[0].getPosition();\n this._lastCursorModelPosition = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(primaryViewPosition);\n let shouldRender = false;\n if (this._activeLineNumber !== primaryViewPosition.lineNumber) {\n this._activeLineNumber = primaryViewPosition.lineNumber;\n shouldRender = true;\n }\n if (this._renderLineNumbers === 2 /* Relative */ || this._renderLineNumbers === 3 /* Interval */) {\n shouldRender = true;\n }\n return shouldRender;\n }\n onFlushed(e) {\n return true;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n // --- end event handlers\n _getLineRenderLineNumber(viewLineNumber) {\n const modelPosition = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(viewLineNumber, 1));\n if (modelPosition.column !== 1) {\n return '';\n }\n const modelLineNumber = modelPosition.lineNumber;\n if (this._renderCustomLineNumbers) {\n return this._renderCustomLineNumbers(modelLineNumber);\n }\n if (this._renderLineNumbers === 2 /* Relative */) {\n const diff = Math.abs(this._lastCursorModelPosition.lineNumber - modelLineNumber);\n if (diff === 0) {\n return '<span class=\"relative-current-line-number\">' + modelLineNumber + '</span>';\n }\n return String(diff);\n }\n if (this._renderLineNumbers === 3 /* Interval */) {\n if (this._lastCursorModelPosition.lineNumber === modelLineNumber) {\n return String(modelLineNumber);\n }\n if (modelLineNumber % 10 === 0) {\n return String(modelLineNumber);\n }\n return '';\n }\n return String(modelLineNumber);\n }\n prepareRender(ctx) {\n if (this._renderLineNumbers === 0 /* Off */) {\n this._renderResult = null;\n return;\n }\n const lineHeightClassName = (platform.isLinux ? (this._lineHeight % 2 === 0 ? ' lh-even' : ' lh-odd') : '');\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n const common = '<div class=\"' + LineNumbersOverlay.CLASS_NAME + lineHeightClassName + '\" style=\"left:' + this._lineNumbersLeft + 'px;width:' + this._lineNumbersWidth + 'px;\">';\n const lineCount = this._context.model.getLineCount();\n const output = [];\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - visibleStartLineNumber;\n if (!this._renderFinalNewline) {\n if (lineNumber === lineCount && this._context.model.getLineLength(lineNumber) === 0) {\n // Do not render last (empty) line\n output[lineIndex] = '';\n continue;\n }\n }\n const renderLineNumber = this._getLineRenderLineNumber(lineNumber);\n if (renderLineNumber) {\n if (lineNumber === this._activeLineNumber) {\n output[lineIndex] = ('<div class=\"active-line-number ' + LineNumbersOverlay.CLASS_NAME + lineHeightClassName + '\" style=\"left:' + this._lineNumbersLeft + 'px;width:' + this._lineNumbersWidth + 'px;\">'\n + renderLineNumber\n + '</div>');\n }\n else {\n output[lineIndex] = (common\n + renderLineNumber\n + '</div>');\n }\n }\n else {\n output[lineIndex] = '';\n }\n }\n this._renderResult = output;\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderResult) {\n return '';\n }\n const lineIndex = lineNumber - startLineNumber;\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n return '';\n }\n return this._renderResult[lineIndex];\n }\n}\nLineNumbersOverlay.CLASS_NAME = 'line-numbers';\n// theming\nregisterThemingParticipant((theme, collector) => {\n const lineNumbers = theme.getColor(editorLineNumbers);\n if (lineNumbers) {\n collector.addRule(`.monaco-editor .line-numbers { color: ${lineNumbers}; }`);\n }\n const activeLineNumber = theme.getColor(editorActiveLineNumber);\n if (activeLineNumber) {\n collector.addRule(`.monaco-editor .line-numbers.active-line-number { color: ${activeLineNumber}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { ViewPart } from '../../view/viewPart.js';\nexport class Margin extends ViewPart {\n constructor(context) {\n super(context);\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._canUseLayerHinting = !options.get(26 /* disableLayerHinting */);\n this._contentLeft = layoutInfo.contentLeft;\n this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\n this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\n this._domNode = createFastDomNode(document.createElement('div'));\n this._domNode.setClassName(Margin.OUTER_CLASS_NAME);\n this._domNode.setPosition('absolute');\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._glyphMarginBackgroundDomNode = createFastDomNode(document.createElement('div'));\n this._glyphMarginBackgroundDomNode.setClassName(Margin.CLASS_NAME);\n this._domNode.appendChild(this._glyphMarginBackgroundDomNode);\n }\n dispose() {\n super.dispose();\n }\n getDomNode() {\n return this._domNode;\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._canUseLayerHinting = !options.get(26 /* disableLayerHinting */);\n this._contentLeft = layoutInfo.contentLeft;\n this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\n this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\n return true;\n }\n onScrollChanged(e) {\n return super.onScrollChanged(e) || e.scrollTopChanged;\n }\n // --- end event handlers\n prepareRender(ctx) {\n // Nothing to read\n }\n render(ctx) {\n this._domNode.setLayerHinting(this._canUseLayerHinting);\n this._domNode.setContain('strict');\n const adjustedScrollTop = ctx.scrollTop - ctx.bigNumbersDelta;\n this._domNode.setTop(-adjustedScrollTop);\n const height = Math.min(ctx.scrollHeight, 1000000);\n this._domNode.setHeight(height);\n this._domNode.setWidth(this._contentLeft);\n this._glyphMarginBackgroundDomNode.setLeft(this._glyphMarginLeft);\n this._glyphMarginBackgroundDomNode.setWidth(this._glyphMarginWidth);\n this._glyphMarginBackgroundDomNode.setHeight(height);\n }\n}\nMargin.CLASS_NAME = 'glyph-margin';\nMargin.OUTER_CLASS_NAME = 'margin';\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 *--------------------------------------------------------------------------------------------*/\nimport './textAreaHandler.css';\nimport * as nls from '../../../nls.js';\nimport * as browser from '../../../base/browser/browser.js';\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport * as platform from '../../../base/common/platform.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { Configuration } from '../config/configuration.js';\nimport { CopyOptions, TextAreaInput } from './textAreaInput.js';\nimport { PagedScreenReaderStrategy, TextAreaState, _debugComposition } from './textAreaState.js';\nimport { PartFingerprints, ViewPart } from '../view/viewPart.js';\nimport { LineNumbersOverlay } from '../viewParts/lineNumbers/lineNumbers.js';\nimport { Margin } from '../viewParts/margin/margin.js';\nimport { EditorOptions } from '../../common/config/editorOptions.js';\nimport { getMapForWordSeparators } from '../../common/controller/wordCharacterClassifier.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../base/browser/ui/mouseCursor/mouseCursor.js';\nclass VisibleTextAreaData {\n constructor(top, left, width) {\n this.top = top;\n this.left = left;\n this.width = width;\n }\n setWidth(width) {\n return new VisibleTextAreaData(this.top, this.left, width);\n }\n}\nconst canUseZeroSizeTextarea = (browser.isFirefox);\nexport class TextAreaHandler extends ViewPart {\n constructor(context, viewController, viewHelper) {\n super(context);\n // --- end view API\n this._primaryCursorPosition = new Position(1, 1);\n this._primaryCursorVisibleRange = null;\n this._viewController = viewController;\n this._viewHelper = viewHelper;\n this._scrollLeft = 0;\n this._scrollTop = 0;\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._setAccessibilityOptions(options);\n this._contentLeft = layoutInfo.contentLeft;\n this._contentWidth = layoutInfo.contentWidth;\n this._contentHeight = layoutInfo.height;\n this._fontInfo = options.get(40 /* fontInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._emptySelectionClipboard = options.get(30 /* emptySelectionClipboard */);\n this._copyWithSyntaxHighlighting = options.get(19 /* copyWithSyntaxHighlighting */);\n this._visibleTextArea = null;\n this._selections = [new Selection(1, 1, 1, 1)];\n this._modelSelections = [new Selection(1, 1, 1, 1)];\n this._lastRenderPosition = null;\n // Text Area (The focus will always be in the textarea when the cursor is blinking)\n this.textArea = createFastDomNode(document.createElement('textarea'));\n PartFingerprints.write(this.textArea, 6 /* TextArea */);\n this.textArea.setClassName(`inputarea ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n this.textArea.setAttribute('wrap', 'off');\n this.textArea.setAttribute('autocorrect', 'off');\n this.textArea.setAttribute('autocapitalize', 'off');\n this.textArea.setAttribute('autocomplete', 'off');\n this.textArea.setAttribute('spellcheck', 'false');\n this.textArea.setAttribute('aria-label', this._getAriaLabel(options));\n this.textArea.setAttribute('tabindex', String(options.get(109 /* tabIndex */)));\n this.textArea.setAttribute('role', 'textbox');\n this.textArea.setAttribute('aria-roledescription', nls.localize('editor', \"editor\"));\n this.textArea.setAttribute('aria-multiline', 'true');\n this.textArea.setAttribute('aria-haspopup', 'false');\n this.textArea.setAttribute('aria-autocomplete', 'both');\n if (options.get(28 /* domReadOnly */) && options.get(77 /* readOnly */)) {\n this.textArea.setAttribute('readonly', 'true');\n }\n this.textAreaCover = createFastDomNode(document.createElement('div'));\n this.textAreaCover.setPosition('absolute');\n const simpleModel = {\n getLineCount: () => {\n return this._context.model.getLineCount();\n },\n getLineMaxColumn: (lineNumber) => {\n return this._context.model.getLineMaxColumn(lineNumber);\n },\n getValueInRange: (range, eol) => {\n return this._context.model.getValueInRange(range, eol);\n }\n };\n const textAreaInputHost = {\n getDataToCopy: (generateHTML) => {\n const rawTextToCopy = this._context.model.getPlainTextToCopy(this._modelSelections, this._emptySelectionClipboard, platform.isWindows);\n const newLineCharacter = this._context.model.getEOL();\n const isFromEmptySelection = (this._emptySelectionClipboard && this._modelSelections.length === 1 && this._modelSelections[0].isEmpty());\n const multicursorText = (Array.isArray(rawTextToCopy) ? rawTextToCopy : null);\n const text = (Array.isArray(rawTextToCopy) ? rawTextToCopy.join(newLineCharacter) : rawTextToCopy);\n let html = undefined;\n let mode = null;\n if (generateHTML) {\n if (CopyOptions.forceCopyWithSyntaxHighlighting || (this._copyWithSyntaxHighlighting && text.length < 65536)) {\n const richText = this._context.model.getRichTextToCopy(this._modelSelections, this._emptySelectionClipboard);\n if (richText) {\n html = richText.html;\n mode = richText.mode;\n }\n }\n }\n return {\n isFromEmptySelection,\n multicursorText,\n text,\n html,\n mode\n };\n },\n getScreenReaderContent: (currentState) => {\n if (this._accessibilitySupport === 1 /* Disabled */) {\n // We know for a fact that a screen reader is not attached\n // On OSX, we write the character before the cursor to allow for \"long-press\" composition\n // Also on OSX, we write the word before the cursor to allow for the Accessibility Keyboard to give good hints\n if (platform.isMacintosh) {\n const selection = this._selections[0];\n if (selection.isEmpty()) {\n const position = selection.getStartPosition();\n let textBefore = this._getWordBeforePosition(position);\n if (textBefore.length === 0) {\n textBefore = this._getCharacterBeforePosition(position);\n }\n if (textBefore.length > 0) {\n return new TextAreaState(textBefore, textBefore.length, textBefore.length, position, position);\n }\n }\n }\n return TextAreaState.EMPTY;\n }\n if (browser.isAndroid) {\n // when tapping in the editor on a word, Android enters composition mode.\n // in the `compositionstart` event we cannot clear the textarea, because\n // it then forgets to ever send a `compositionend`.\n // we therefore only write the current word in the textarea\n const selection = this._selections[0];\n if (selection.isEmpty()) {\n const position = selection.getStartPosition();\n const [wordAtPosition, positionOffsetInWord] = this._getAndroidWordAtPosition(position);\n if (wordAtPosition.length > 0) {\n return new TextAreaState(wordAtPosition, positionOffsetInWord, positionOffsetInWord, position, position);\n }\n }\n return TextAreaState.EMPTY;\n }\n return PagedScreenReaderStrategy.fromEditorSelection(currentState, simpleModel, this._selections[0], this._accessibilityPageSize, this._accessibilitySupport === 0 /* Unknown */);\n },\n deduceModelPosition: (viewAnchorPosition, deltaOffset, lineFeedCnt) => {\n return this._context.model.deduceModelPositionRelativeToViewPosition(viewAnchorPosition, deltaOffset, lineFeedCnt);\n }\n };\n this._textAreaInput = this._register(new TextAreaInput(textAreaInputHost, this.textArea));\n this._register(this._textAreaInput.onKeyDown((e) => {\n this._viewController.emitKeyDown(e);\n }));\n this._register(this._textAreaInput.onKeyUp((e) => {\n this._viewController.emitKeyUp(e);\n }));\n this._register(this._textAreaInput.onPaste((e) => {\n let pasteOnNewLine = false;\n let multicursorText = null;\n let mode = null;\n if (e.metadata) {\n pasteOnNewLine = (this._emptySelectionClipboard && !!e.metadata.isFromEmptySelection);\n multicursorText = (typeof e.metadata.multicursorText !== 'undefined' ? e.metadata.multicursorText : null);\n mode = e.metadata.mode;\n }\n this._viewController.paste(e.text, pasteOnNewLine, multicursorText, mode);\n }));\n this._register(this._textAreaInput.onCut(() => {\n this._viewController.cut();\n }));\n this._register(this._textAreaInput.onType((e) => {\n if (e.replacePrevCharCnt || e.replaceNextCharCnt || e.positionDelta) {\n // must be handled through the new command\n if (_debugComposition) {\n console.log(` => compositionType: <<${e.text}>>, ${e.replacePrevCharCnt}, ${e.replaceNextCharCnt}, ${e.positionDelta}`);\n }\n this._viewController.compositionType(e.text, e.replacePrevCharCnt, e.replaceNextCharCnt, e.positionDelta);\n }\n else {\n if (_debugComposition) {\n console.log(` => type: <<${e.text}>>`);\n }\n this._viewController.type(e.text);\n }\n }));\n this._register(this._textAreaInput.onSelectionChangeRequest((modelSelection) => {\n this._viewController.setSelection(modelSelection);\n }));\n this._register(this._textAreaInput.onCompositionStart((e) => {\n const lineNumber = this._selections[0].startLineNumber;\n const column = this._selections[0].startColumn + e.revealDeltaColumns;\n this._context.model.revealRange('keyboard', true, new Range(lineNumber, column, lineNumber, column), 0 /* Simple */, 1 /* Immediate */);\n // Find range pixel position\n const visibleRange = this._viewHelper.visibleRangeForPositionRelativeToEditor(lineNumber, column);\n if (visibleRange) {\n this._visibleTextArea = new VisibleTextAreaData(this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber), visibleRange.left, canUseZeroSizeTextarea ? 0 : 1);\n this._render();\n }\n // Show the textarea\n this.textArea.setClassName(`inputarea ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME} ime-input`);\n this._viewController.compositionStart();\n this._context.model.onCompositionStart();\n }));\n this._register(this._textAreaInput.onCompositionUpdate((e) => {\n if (!this._visibleTextArea) {\n return;\n }\n // adjust width by its size\n this._visibleTextArea = this._visibleTextArea.setWidth(measureText(e.data, this._fontInfo));\n this._render();\n }));\n this._register(this._textAreaInput.onCompositionEnd(() => {\n this._visibleTextArea = null;\n this._render();\n this.textArea.setClassName(`inputarea ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n this._viewController.compositionEnd();\n this._context.model.onCompositionEnd();\n }));\n this._register(this._textAreaInput.onFocus(() => {\n this._context.model.setHasFocus(true);\n }));\n this._register(this._textAreaInput.onBlur(() => {\n this._context.model.setHasFocus(false);\n }));\n }\n dispose() {\n super.dispose();\n }\n _getAndroidWordAtPosition(position) {\n const ANDROID_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\\\|;:\",.<>/?';\n const lineContent = this._context.model.getLineContent(position.lineNumber);\n const wordSeparators = getMapForWordSeparators(ANDROID_WORD_SEPARATORS);\n let goingLeft = true;\n let startColumn = position.column;\n let goingRight = true;\n let endColumn = position.column;\n let distance = 0;\n while (distance < 50 && (goingLeft || goingRight)) {\n if (goingLeft && startColumn <= 1) {\n goingLeft = false;\n }\n if (goingLeft) {\n const charCode = lineContent.charCodeAt(startColumn - 2);\n const charClass = wordSeparators.get(charCode);\n if (charClass !== 0 /* Regular */) {\n goingLeft = false;\n }\n else {\n startColumn--;\n }\n }\n if (goingRight && endColumn > lineContent.length) {\n goingRight = false;\n }\n if (goingRight) {\n const charCode = lineContent.charCodeAt(endColumn - 1);\n const charClass = wordSeparators.get(charCode);\n if (charClass !== 0 /* Regular */) {\n goingRight = false;\n }\n else {\n endColumn++;\n }\n }\n distance++;\n }\n return [lineContent.substring(startColumn - 1, endColumn - 1), position.column - startColumn];\n }\n _getWordBeforePosition(position) {\n const lineContent = this._context.model.getLineContent(position.lineNumber);\n const wordSeparators = getMapForWordSeparators(this._context.configuration.options.get(113 /* wordSeparators */));\n let column = position.column;\n let distance = 0;\n while (column > 1) {\n const charCode = lineContent.charCodeAt(column - 2);\n const charClass = wordSeparators.get(charCode);\n if (charClass !== 0 /* Regular */ || distance > 50) {\n return lineContent.substring(column - 1, position.column - 1);\n }\n distance++;\n column--;\n }\n return lineContent.substring(0, position.column - 1);\n }\n _getCharacterBeforePosition(position) {\n if (position.column > 1) {\n const lineContent = this._context.model.getLineContent(position.lineNumber);\n const charBefore = lineContent.charAt(position.column - 2);\n if (!strings.isHighSurrogate(charBefore.charCodeAt(0))) {\n return charBefore;\n }\n }\n return '';\n }\n _getAriaLabel(options) {\n const accessibilitySupport = options.get(2 /* accessibilitySupport */);\n if (accessibilitySupport === 1 /* Disabled */) {\n return nls.localize('accessibilityOffAriaLabel', \"The editor is not accessible at this time. Press {0} for options.\", platform.isLinux ? 'Shift+Alt+F1' : 'Alt+F1');\n }\n return options.get(4 /* ariaLabel */);\n }\n _setAccessibilityOptions(options) {\n this._accessibilitySupport = options.get(2 /* accessibilitySupport */);\n const accessibilityPageSize = options.get(3 /* accessibilityPageSize */);\n if (this._accessibilitySupport === 2 /* Enabled */ && accessibilityPageSize === EditorOptions.accessibilityPageSize.defaultValue) {\n // If a screen reader is attached and the default value is not set we shuold automatically increase the page size to 500 for a better experience\n this._accessibilityPageSize = 500;\n }\n else {\n this._accessibilityPageSize = accessibilityPageSize;\n }\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._setAccessibilityOptions(options);\n this._contentLeft = layoutInfo.contentLeft;\n this._contentWidth = layoutInfo.contentWidth;\n this._contentHeight = layoutInfo.height;\n this._fontInfo = options.get(40 /* fontInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._emptySelectionClipboard = options.get(30 /* emptySelectionClipboard */);\n this._copyWithSyntaxHighlighting = options.get(19 /* copyWithSyntaxHighlighting */);\n this.textArea.setAttribute('aria-label', this._getAriaLabel(options));\n this.textArea.setAttribute('tabindex', String(options.get(109 /* tabIndex */)));\n if (e.hasChanged(28 /* domReadOnly */) || e.hasChanged(77 /* readOnly */)) {\n if (options.get(28 /* domReadOnly */) && options.get(77 /* readOnly */)) {\n this.textArea.setAttribute('readonly', 'true');\n }\n else {\n this.textArea.removeAttribute('readonly');\n }\n }\n if (e.hasChanged(2 /* accessibilitySupport */)) {\n this._textAreaInput.writeScreenReaderContent('strategy changed');\n }\n return true;\n }\n onCursorStateChanged(e) {\n this._selections = e.selections.slice(0);\n this._modelSelections = e.modelSelections.slice(0);\n this._textAreaInput.writeScreenReaderContent('selection changed');\n return true;\n }\n onDecorationsChanged(e) {\n // true for inline decorations that can end up relayouting text\n return true;\n }\n onFlushed(e) {\n return true;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n this._scrollLeft = e.scrollLeft;\n this._scrollTop = e.scrollTop;\n return true;\n }\n onZonesChanged(e) {\n return true;\n }\n // --- end event handlers\n // --- begin view API\n isFocused() {\n return this._textAreaInput.isFocused();\n }\n focusTextArea() {\n this._textAreaInput.focusTextArea();\n }\n getLastRenderData() {\n return this._lastRenderPosition;\n }\n setAriaOptions(options) {\n if (options.activeDescendant) {\n this.textArea.setAttribute('aria-haspopup', 'true');\n this.textArea.setAttribute('aria-autocomplete', 'list');\n this.textArea.setAttribute('aria-activedescendant', options.activeDescendant);\n }\n else {\n this.textArea.setAttribute('aria-haspopup', 'false');\n this.textArea.setAttribute('aria-autocomplete', 'both');\n this.textArea.removeAttribute('aria-activedescendant');\n }\n if (options.role) {\n this.textArea.setAttribute('role', options.role);\n }\n }\n prepareRender(ctx) {\n this._primaryCursorPosition = new Position(this._selections[0].positionLineNumber, this._selections[0].positionColumn);\n this._primaryCursorVisibleRange = ctx.visibleRangeForPosition(this._primaryCursorPosition);\n }\n render(ctx) {\n this._textAreaInput.writeScreenReaderContent('render');\n this._render();\n }\n _render() {\n if (this._visibleTextArea) {\n // The text area is visible for composition reasons\n this._renderInsideEditor(null, this._visibleTextArea.top - this._scrollTop, this._contentLeft + this._visibleTextArea.left - this._scrollLeft, this._visibleTextArea.width, this._lineHeight);\n return;\n }\n if (!this._primaryCursorVisibleRange) {\n // The primary cursor is outside the viewport => place textarea to the top left\n this._renderAtTopLeft();\n return;\n }\n const left = this._contentLeft + this._primaryCursorVisibleRange.left - this._scrollLeft;\n if (left < this._contentLeft || left > this._contentLeft + this._contentWidth) {\n // cursor is outside the viewport\n this._renderAtTopLeft();\n return;\n }\n const top = this._context.viewLayout.getVerticalOffsetForLineNumber(this._selections[0].positionLineNumber) - this._scrollTop;\n if (top < 0 || top > this._contentHeight) {\n // cursor is outside the viewport\n this._renderAtTopLeft();\n return;\n }\n // The primary cursor is in the viewport (at least vertically) => place textarea on the cursor\n if (platform.isMacintosh) {\n // For the popup emoji input, we will make the text area as high as the line height\n // We will also make the fontSize and lineHeight the correct dimensions to help with the placement of these pickers\n this._renderInsideEditor(this._primaryCursorPosition, top, left, canUseZeroSizeTextarea ? 0 : 1, this._lineHeight);\n return;\n }\n this._renderInsideEditor(this._primaryCursorPosition, top, left, canUseZeroSizeTextarea ? 0 : 1, canUseZeroSizeTextarea ? 0 : 1);\n }\n _renderInsideEditor(renderedPosition, top, left, width, height) {\n this._lastRenderPosition = renderedPosition;\n const ta = this.textArea;\n const tac = this.textAreaCover;\n Configuration.applyFontInfo(ta, this._fontInfo);\n ta.setTop(top);\n ta.setLeft(left);\n ta.setWidth(width);\n ta.setHeight(height);\n tac.setTop(0);\n tac.setLeft(0);\n tac.setWidth(0);\n tac.setHeight(0);\n }\n _renderAtTopLeft() {\n this._lastRenderPosition = null;\n const ta = this.textArea;\n const tac = this.textAreaCover;\n Configuration.applyFontInfo(ta, this._fontInfo);\n ta.setTop(0);\n ta.setLeft(0);\n tac.setTop(0);\n tac.setLeft(0);\n if (canUseZeroSizeTextarea) {\n ta.setWidth(0);\n ta.setHeight(0);\n tac.setWidth(0);\n tac.setHeight(0);\n return;\n }\n // (in WebKit the textarea is 1px by 1px because it cannot handle input to a 0x0 textarea)\n // specifically, when doing Korean IME, setting the textarea to 0x0 breaks IME badly.\n ta.setWidth(1);\n ta.setHeight(1);\n tac.setWidth(1);\n tac.setHeight(1);\n const options = this._context.configuration.options;\n if (options.get(46 /* glyphMargin */)) {\n tac.setClassName('monaco-editor-background textAreaCover ' + Margin.OUTER_CLASS_NAME);\n }\n else {\n if (options.get(56 /* lineNumbers */).renderType !== 0 /* Off */) {\n tac.setClassName('monaco-editor-background textAreaCover ' + LineNumbersOverlay.CLASS_NAME);\n }\n else {\n tac.setClassName('monaco-editor-background textAreaCover');\n }\n }\n }\n}\nfunction measureText(text, fontInfo) {\n // adjust width by its size\n const canvasElem = document.createElement('canvas');\n const context = canvasElem.getContext('2d');\n context.font = createFontString(fontInfo);\n const metrics = context.measureText(text);\n if (browser.isFirefox) {\n return metrics.width + 2; // +2 for Japanese...\n }\n else {\n return metrics.width;\n }\n}\nfunction createFontString(bareFontInfo) {\n return doCreateFontString('normal', bareFontInfo.fontWeight, bareFontInfo.fontSize, bareFontInfo.lineHeight, bareFontInfo.fontFamily);\n}\nfunction doCreateFontString(fontStyle, fontWeight, fontSize, lineHeight, fontFamily) {\n // The full font syntax is:\n // style | variant | weight | stretch | size/line-height | fontFamily\n // (https://developer.mozilla.org/en-US/docs/Web/CSS/font)\n // But it appears Edge and IE11 cannot properly parse `stretch`.\n return `${fontStyle} normal ${fontWeight} ${fontSize}px / ${lineHeight}px ${fontFamily}`;\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 *--------------------------------------------------------------------------------------------*/\nimport { CoreNavigationCommands } from '../controller/coreCommands.js';\nimport { Position } from '../../common/core/position.js';\nimport * as platform from '../../../base/common/platform.js';\nexport class ViewController {\n constructor(configuration, viewModel, userInputEvents, commandDelegate) {\n this.configuration = configuration;\n this.viewModel = viewModel;\n this.userInputEvents = userInputEvents;\n this.commandDelegate = commandDelegate;\n }\n paste(text, pasteOnNewLine, multicursorText, mode) {\n this.commandDelegate.paste(text, pasteOnNewLine, multicursorText, mode);\n }\n type(text) {\n this.commandDelegate.type(text);\n }\n compositionType(text, replacePrevCharCnt, replaceNextCharCnt, positionDelta) {\n this.commandDelegate.compositionType(text, replacePrevCharCnt, replaceNextCharCnt, positionDelta);\n }\n compositionStart() {\n this.commandDelegate.startComposition();\n }\n compositionEnd() {\n this.commandDelegate.endComposition();\n }\n cut() {\n this.commandDelegate.cut();\n }\n setSelection(modelSelection) {\n CoreNavigationCommands.SetSelection.runCoreEditorCommand(this.viewModel, {\n source: 'keyboard',\n selection: modelSelection\n });\n }\n _validateViewColumn(viewPosition) {\n const minColumn = this.viewModel.getLineMinColumn(viewPosition.lineNumber);\n if (viewPosition.column < minColumn) {\n return new Position(viewPosition.lineNumber, minColumn);\n }\n return viewPosition;\n }\n _hasMulticursorModifier(data) {\n switch (this.configuration.options.get(66 /* multiCursorModifier */)) {\n case 'altKey':\n return data.altKey;\n case 'ctrlKey':\n return data.ctrlKey;\n case 'metaKey':\n return data.metaKey;\n default:\n return false;\n }\n }\n _hasNonMulticursorModifier(data) {\n switch (this.configuration.options.get(66 /* multiCursorModifier */)) {\n case 'altKey':\n return data.ctrlKey || data.metaKey;\n case 'ctrlKey':\n return data.altKey || data.metaKey;\n case 'metaKey':\n return data.ctrlKey || data.altKey;\n default:\n return false;\n }\n }\n dispatchMouse(data) {\n const options = this.configuration.options;\n const selectionClipboardIsOn = (platform.isLinux && options.get(93 /* selectionClipboard */));\n const columnSelection = options.get(16 /* columnSelection */);\n if (data.middleButton && !selectionClipboardIsOn) {\n this._columnSelect(data.position, data.mouseColumn, data.inSelectionMode);\n }\n else if (data.startedOnLineNumbers) {\n // If the dragging started on the gutter, then have operations work on the entire line\n if (this._hasMulticursorModifier(data)) {\n if (data.inSelectionMode) {\n this._lastCursorLineSelect(data.position);\n }\n else {\n this._createCursor(data.position, true);\n }\n }\n else {\n if (data.inSelectionMode) {\n this._lineSelectDrag(data.position);\n }\n else {\n this._lineSelect(data.position);\n }\n }\n }\n else if (data.mouseDownCount >= 4) {\n this._selectAll();\n }\n else if (data.mouseDownCount === 3) {\n if (this._hasMulticursorModifier(data)) {\n if (data.inSelectionMode) {\n this._lastCursorLineSelectDrag(data.position);\n }\n else {\n this._lastCursorLineSelect(data.position);\n }\n }\n else {\n if (data.inSelectionMode) {\n this._lineSelectDrag(data.position);\n }\n else {\n this._lineSelect(data.position);\n }\n }\n }\n else if (data.mouseDownCount === 2) {\n if (this._hasMulticursorModifier(data)) {\n this._lastCursorWordSelect(data.position);\n }\n else {\n if (data.inSelectionMode) {\n this._wordSelectDrag(data.position);\n }\n else {\n this._wordSelect(data.position);\n }\n }\n }\n else {\n if (this._hasMulticursorModifier(data)) {\n if (!this._hasNonMulticursorModifier(data)) {\n if (data.shiftKey) {\n this._columnSelect(data.position, data.mouseColumn, true);\n }\n else {\n // Do multi-cursor operations only when purely alt is pressed\n if (data.inSelectionMode) {\n this._lastCursorMoveToSelect(data.position);\n }\n else {\n this._createCursor(data.position, false);\n }\n }\n }\n }\n else {\n if (data.inSelectionMode) {\n if (data.altKey) {\n this._columnSelect(data.position, data.mouseColumn, true);\n }\n else {\n if (columnSelection) {\n this._columnSelect(data.position, data.mouseColumn, true);\n }\n else {\n this._moveToSelect(data.position);\n }\n }\n }\n else {\n this.moveTo(data.position);\n }\n }\n }\n }\n _usualArgs(viewPosition) {\n viewPosition = this._validateViewColumn(viewPosition);\n return {\n source: 'mouse',\n position: this._convertViewToModelPosition(viewPosition),\n viewPosition: viewPosition\n };\n }\n moveTo(viewPosition) {\n CoreNavigationCommands.MoveTo.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));\n }\n _moveToSelect(viewPosition) {\n CoreNavigationCommands.MoveToSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));\n }\n _columnSelect(viewPosition, mouseColumn, doColumnSelect) {\n viewPosition = this._validateViewColumn(viewPosition);\n CoreNavigationCommands.ColumnSelect.runCoreEditorCommand(this.viewModel, {\n source: 'mouse',\n position: this._convertViewToModelPosition(viewPosition),\n viewPosition: viewPosition,\n mouseColumn: mouseColumn,\n doColumnSelect: doColumnSelect\n });\n }\n _createCursor(viewPosition, wholeLine) {\n viewPosition = this._validateViewColumn(viewPosition);\n CoreNavigationCommands.CreateCursor.runCoreEditorCommand(this.viewModel, {\n source: 'mouse',\n position: this._convertViewToModelPosition(viewPosition),\n viewPosition: viewPosition,\n wholeLine: wholeLine\n });\n }\n _lastCursorMoveToSelect(viewPosition) {\n CoreNavigationCommands.LastCursorMoveToSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));\n }\n _wordSelect(viewPosition) {\n CoreNavigationCommands.WordSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));\n }\n _wordSelectDrag(viewPosition) {\n CoreNavigationCommands.WordSelectDrag.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));\n }\n _lastCursorWordSelect(viewPosition) {\n CoreNavigationCommands.LastCursorWordSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));\n }\n _lineSelect(viewPosition) {\n CoreNavigationCommands.LineSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));\n }\n _lineSelectDrag(viewPosition) {\n CoreNavigationCommands.LineSelectDrag.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));\n }\n _lastCursorLineSelect(viewPosition) {\n CoreNavigationCommands.LastCursorLineSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));\n }\n _lastCursorLineSelectDrag(viewPosition) {\n CoreNavigationCommands.LastCursorLineSelectDrag.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition));\n }\n _selectAll() {\n CoreNavigationCommands.SelectAll.runCoreEditorCommand(this.viewModel, { source: 'mouse' });\n }\n // ----------------------\n _convertViewToModelPosition(viewPosition) {\n return this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(viewPosition);\n }\n emitKeyDown(e) {\n this.userInputEvents.emitKeyDown(e);\n }\n emitKeyUp(e) {\n this.userInputEvents.emitKeyUp(e);\n }\n emitContextMenu(e) {\n this.userInputEvents.emitContextMenu(e);\n }\n emitMouseMove(e) {\n this.userInputEvents.emitMouseMove(e);\n }\n emitMouseLeave(e) {\n this.userInputEvents.emitMouseLeave(e);\n }\n emitMouseUp(e) {\n this.userInputEvents.emitMouseUp(e);\n }\n emitMouseDown(e) {\n this.userInputEvents.emitMouseDown(e);\n }\n emitMouseDrag(e) {\n this.userInputEvents.emitMouseDrag(e);\n }\n emitMouseDrop(e) {\n this.userInputEvents.emitMouseDrop(e);\n }\n emitMouseDropCanceled() {\n this.userInputEvents.emitMouseDropCanceled();\n }\n emitMouseWheel(e) {\n this.userInputEvents.emitMouseWheel(e);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { MouseTarget } from '../controller/mouseTarget.js';\nexport class ViewUserInputEvents {\n constructor(coordinatesConverter) {\n this.onKeyDown = null;\n this.onKeyUp = null;\n this.onContextMenu = null;\n this.onMouseMove = null;\n this.onMouseLeave = null;\n this.onMouseDown = null;\n this.onMouseUp = null;\n this.onMouseDrag = null;\n this.onMouseDrop = null;\n this.onMouseDropCanceled = null;\n this.onMouseWheel = null;\n this._coordinatesConverter = coordinatesConverter;\n }\n emitKeyDown(e) {\n if (this.onKeyDown) {\n this.onKeyDown(e);\n }\n }\n emitKeyUp(e) {\n if (this.onKeyUp) {\n this.onKeyUp(e);\n }\n }\n emitContextMenu(e) {\n if (this.onContextMenu) {\n this.onContextMenu(this._convertViewToModelMouseEvent(e));\n }\n }\n emitMouseMove(e) {\n if (this.onMouseMove) {\n this.onMouseMove(this._convertViewToModelMouseEvent(e));\n }\n }\n emitMouseLeave(e) {\n if (this.onMouseLeave) {\n this.onMouseLeave(this._convertViewToModelMouseEvent(e));\n }\n }\n emitMouseDown(e) {\n if (this.onMouseDown) {\n this.onMouseDown(this._convertViewToModelMouseEvent(e));\n }\n }\n emitMouseUp(e) {\n if (this.onMouseUp) {\n this.onMouseUp(this._convertViewToModelMouseEvent(e));\n }\n }\n emitMouseDrag(e) {\n if (this.onMouseDrag) {\n this.onMouseDrag(this._convertViewToModelMouseEvent(e));\n }\n }\n emitMouseDrop(e) {\n if (this.onMouseDrop) {\n this.onMouseDrop(this._convertViewToModelMouseEvent(e));\n }\n }\n emitMouseDropCanceled() {\n if (this.onMouseDropCanceled) {\n this.onMouseDropCanceled();\n }\n }\n emitMouseWheel(e) {\n if (this.onMouseWheel) {\n this.onMouseWheel(e);\n }\n }\n _convertViewToModelMouseEvent(e) {\n if (e.target) {\n return {\n event: e.event,\n target: this._convertViewToModelMouseTarget(e.target)\n };\n }\n return e;\n }\n _convertViewToModelMouseTarget(target) {\n return ViewUserInputEvents.convertViewToModelMouseTarget(target, this._coordinatesConverter);\n }\n static convertViewToModelMouseTarget(target, coordinatesConverter) {\n return new ExternalMouseTarget(target.element, target.type, target.mouseColumn, target.position ? coordinatesConverter.convertViewPositionToModelPosition(target.position) : null, target.range ? coordinatesConverter.convertViewRangeToModelRange(target.range) : null, target.detail);\n }\n}\nclass ExternalMouseTarget {\n constructor(element, type, mouseColumn, position, range, detail) {\n this.element = element;\n this.type = type;\n this.mouseColumn = mouseColumn;\n this.position = position;\n this.range = range;\n this.detail = detail;\n }\n toString() {\n return MouseTarget.toString(this);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar _a;\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { createStringBuilder } from '../../common/core/stringBuilder.js';\nexport class RenderedLinesCollection {\n constructor(createLine) {\n this._createLine = createLine;\n this._set(1, []);\n }\n flush() {\n this._set(1, []);\n }\n _set(rendLineNumberStart, lines) {\n this._lines = lines;\n this._rendLineNumberStart = rendLineNumberStart;\n }\n _get() {\n return {\n rendLineNumberStart: this._rendLineNumberStart,\n lines: this._lines\n };\n }\n /**\n * @returns Inclusive line number that is inside this collection\n */\n getStartLineNumber() {\n return this._rendLineNumberStart;\n }\n /**\n * @returns Inclusive line number that is inside this collection\n */\n getEndLineNumber() {\n return this._rendLineNumberStart + this._lines.length - 1;\n }\n getCount() {\n return this._lines.length;\n }\n getLine(lineNumber) {\n const lineIndex = lineNumber - this._rendLineNumberStart;\n if (lineIndex < 0 || lineIndex >= this._lines.length) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._lines[lineIndex];\n }\n /**\n * @returns Lines that were removed from this collection\n */\n onLinesDeleted(deleteFromLineNumber, deleteToLineNumber) {\n if (this.getCount() === 0) {\n // no lines\n return null;\n }\n const startLineNumber = this.getStartLineNumber();\n const endLineNumber = this.getEndLineNumber();\n if (deleteToLineNumber < startLineNumber) {\n // deleting above the viewport\n const deleteCnt = deleteToLineNumber - deleteFromLineNumber + 1;\n this._rendLineNumberStart -= deleteCnt;\n return null;\n }\n if (deleteFromLineNumber > endLineNumber) {\n // deleted below the viewport\n return null;\n }\n // Record what needs to be deleted\n let deleteStartIndex = 0;\n let deleteCount = 0;\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n const lineIndex = lineNumber - this._rendLineNumberStart;\n if (deleteFromLineNumber <= lineNumber && lineNumber <= deleteToLineNumber) {\n // this is a line to be deleted\n if (deleteCount === 0) {\n // this is the first line to be deleted\n deleteStartIndex = lineIndex;\n deleteCount = 1;\n }\n else {\n deleteCount++;\n }\n }\n }\n // Adjust this._rendLineNumberStart for lines deleted above\n if (deleteFromLineNumber < startLineNumber) {\n // Something was deleted above\n let deleteAboveCount = 0;\n if (deleteToLineNumber < startLineNumber) {\n // the entire deleted lines are above\n deleteAboveCount = deleteToLineNumber - deleteFromLineNumber + 1;\n }\n else {\n deleteAboveCount = startLineNumber - deleteFromLineNumber;\n }\n this._rendLineNumberStart -= deleteAboveCount;\n }\n const deleted = this._lines.splice(deleteStartIndex, deleteCount);\n return deleted;\n }\n onLinesChanged(changeFromLineNumber, changeToLineNumber) {\n if (this.getCount() === 0) {\n // no lines\n return false;\n }\n const startLineNumber = this.getStartLineNumber();\n const endLineNumber = this.getEndLineNumber();\n let someoneNotified = false;\n for (let changedLineNumber = changeFromLineNumber; changedLineNumber <= changeToLineNumber; changedLineNumber++) {\n if (changedLineNumber >= startLineNumber && changedLineNumber <= endLineNumber) {\n // Notify the line\n this._lines[changedLineNumber - this._rendLineNumberStart].onContentChanged();\n someoneNotified = true;\n }\n }\n return someoneNotified;\n }\n onLinesInserted(insertFromLineNumber, insertToLineNumber) {\n if (this.getCount() === 0) {\n // no lines\n return null;\n }\n const insertCnt = insertToLineNumber - insertFromLineNumber + 1;\n const startLineNumber = this.getStartLineNumber();\n const endLineNumber = this.getEndLineNumber();\n if (insertFromLineNumber <= startLineNumber) {\n // inserting above the viewport\n this._rendLineNumberStart += insertCnt;\n return null;\n }\n if (insertFromLineNumber > endLineNumber) {\n // inserting below the viewport\n return null;\n }\n if (insertCnt + insertFromLineNumber > endLineNumber) {\n // insert inside the viewport in such a way that all remaining lines are pushed outside\n const deleted = this._lines.splice(insertFromLineNumber - this._rendLineNumberStart, endLineNumber - insertFromLineNumber + 1);\n return deleted;\n }\n // insert inside the viewport, push out some lines, but not all remaining lines\n const newLines = [];\n for (let i = 0; i < insertCnt; i++) {\n newLines[i] = this._createLine();\n }\n const insertIndex = insertFromLineNumber - this._rendLineNumberStart;\n const beforeLines = this._lines.slice(0, insertIndex);\n const afterLines = this._lines.slice(insertIndex, this._lines.length - insertCnt);\n const deletedLines = this._lines.slice(this._lines.length - insertCnt, this._lines.length);\n this._lines = beforeLines.concat(newLines).concat(afterLines);\n return deletedLines;\n }\n onTokensChanged(ranges) {\n if (this.getCount() === 0) {\n // no lines\n return false;\n }\n const startLineNumber = this.getStartLineNumber();\n const endLineNumber = this.getEndLineNumber();\n let notifiedSomeone = false;\n for (let i = 0, len = ranges.length; i < len; i++) {\n const rng = ranges[i];\n if (rng.toLineNumber < startLineNumber || rng.fromLineNumber > endLineNumber) {\n // range outside viewport\n continue;\n }\n const from = Math.max(startLineNumber, rng.fromLineNumber);\n const to = Math.min(endLineNumber, rng.toLineNumber);\n for (let lineNumber = from; lineNumber <= to; lineNumber++) {\n const lineIndex = lineNumber - this._rendLineNumberStart;\n this._lines[lineIndex].onTokensChanged();\n notifiedSomeone = true;\n }\n }\n return notifiedSomeone;\n }\n}\nexport class VisibleLinesCollection {\n constructor(host) {\n this._host = host;\n this.domNode = this._createDomNode();\n this._linesCollection = new RenderedLinesCollection(() => this._host.createVisibleLine());\n }\n _createDomNode() {\n const domNode = createFastDomNode(document.createElement('div'));\n domNode.setClassName('view-layer');\n domNode.setPosition('absolute');\n domNode.domNode.setAttribute('role', 'presentation');\n domNode.domNode.setAttribute('aria-hidden', 'true');\n return domNode;\n }\n // ---- begin view event handlers\n onConfigurationChanged(e) {\n if (e.hasChanged(127 /* layoutInfo */)) {\n return true;\n }\n return false;\n }\n onFlushed(e) {\n this._linesCollection.flush();\n // No need to clear the dom node because a full .innerHTML will occur in ViewLayerRenderer._render\n return true;\n }\n onLinesChanged(e) {\n return this._linesCollection.onLinesChanged(e.fromLineNumber, e.toLineNumber);\n }\n onLinesDeleted(e) {\n const deleted = this._linesCollection.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\n if (deleted) {\n // Remove from DOM\n for (let i = 0, len = deleted.length; i < len; i++) {\n const lineDomNode = deleted[i].getDomNode();\n if (lineDomNode) {\n this.domNode.domNode.removeChild(lineDomNode);\n }\n }\n }\n return true;\n }\n onLinesInserted(e) {\n const deleted = this._linesCollection.onLinesInserted(e.fromLineNumber, e.toLineNumber);\n if (deleted) {\n // Remove from DOM\n for (let i = 0, len = deleted.length; i < len; i++) {\n const lineDomNode = deleted[i].getDomNode();\n if (lineDomNode) {\n this.domNode.domNode.removeChild(lineDomNode);\n }\n }\n }\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged;\n }\n onTokensChanged(e) {\n return this._linesCollection.onTokensChanged(e.ranges);\n }\n onZonesChanged(e) {\n return true;\n }\n // ---- end view event handlers\n getStartLineNumber() {\n return this._linesCollection.getStartLineNumber();\n }\n getEndLineNumber() {\n return this._linesCollection.getEndLineNumber();\n }\n getVisibleLine(lineNumber) {\n return this._linesCollection.getLine(lineNumber);\n }\n renderLines(viewportData) {\n const inp = this._linesCollection._get();\n const renderer = new ViewLayerRenderer(this.domNode.domNode, this._host, viewportData);\n const ctx = {\n rendLineNumberStart: inp.rendLineNumberStart,\n lines: inp.lines,\n linesLength: inp.lines.length\n };\n // Decide if this render will do a single update (single large .innerHTML) or many updates (inserting/removing dom nodes)\n const resCtx = renderer.render(ctx, viewportData.startLineNumber, viewportData.endLineNumber, viewportData.relativeVerticalOffset);\n this._linesCollection._set(resCtx.rendLineNumberStart, resCtx.lines);\n }\n}\nclass ViewLayerRenderer {\n constructor(domNode, host, viewportData) {\n this.domNode = domNode;\n this.host = host;\n this.viewportData = viewportData;\n }\n render(inContext, startLineNumber, stopLineNumber, deltaTop) {\n const ctx = {\n rendLineNumberStart: inContext.rendLineNumberStart,\n lines: inContext.lines.slice(0),\n linesLength: inContext.linesLength\n };\n if ((ctx.rendLineNumberStart + ctx.linesLength - 1 < startLineNumber) || (stopLineNumber < ctx.rendLineNumberStart)) {\n // There is no overlap whatsoever\n ctx.rendLineNumberStart = startLineNumber;\n ctx.linesLength = stopLineNumber - startLineNumber + 1;\n ctx.lines = [];\n for (let x = startLineNumber; x <= stopLineNumber; x++) {\n ctx.lines[x - startLineNumber] = this.host.createVisibleLine();\n }\n this._finishRendering(ctx, true, deltaTop);\n return ctx;\n }\n // Update lines which will remain untouched\n this._renderUntouchedLines(ctx, Math.max(startLineNumber - ctx.rendLineNumberStart, 0), Math.min(stopLineNumber - ctx.rendLineNumberStart, ctx.linesLength - 1), deltaTop, startLineNumber);\n if (ctx.rendLineNumberStart > startLineNumber) {\n // Insert lines before\n const fromLineNumber = startLineNumber;\n const toLineNumber = Math.min(stopLineNumber, ctx.rendLineNumberStart - 1);\n if (fromLineNumber <= toLineNumber) {\n this._insertLinesBefore(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n ctx.linesLength += toLineNumber - fromLineNumber + 1;\n }\n }\n else if (ctx.rendLineNumberStart < startLineNumber) {\n // Remove lines before\n const removeCnt = Math.min(ctx.linesLength, startLineNumber - ctx.rendLineNumberStart);\n if (removeCnt > 0) {\n this._removeLinesBefore(ctx, removeCnt);\n ctx.linesLength -= removeCnt;\n }\n }\n ctx.rendLineNumberStart = startLineNumber;\n if (ctx.rendLineNumberStart + ctx.linesLength - 1 < stopLineNumber) {\n // Insert lines after\n const fromLineNumber = ctx.rendLineNumberStart + ctx.linesLength;\n const toLineNumber = stopLineNumber;\n if (fromLineNumber <= toLineNumber) {\n this._insertLinesAfter(ctx, fromLineNumber, toLineNumber, deltaTop, startLineNumber);\n ctx.linesLength += toLineNumber - fromLineNumber + 1;\n }\n }\n else if (ctx.rendLineNumberStart + ctx.linesLength - 1 > stopLineNumber) {\n // Remove lines after\n const fromLineNumber = Math.max(0, stopLineNumber - ctx.rendLineNumberStart + 1);\n const toLineNumber = ctx.linesLength - 1;\n const removeCnt = toLineNumber - fromLineNumber + 1;\n if (removeCnt > 0) {\n this._removeLinesAfter(ctx, removeCnt);\n ctx.linesLength -= removeCnt;\n }\n }\n this._finishRendering(ctx, false, deltaTop);\n return ctx;\n }\n _renderUntouchedLines(ctx, startIndex, endIndex, deltaTop, deltaLN) {\n const rendLineNumberStart = ctx.rendLineNumberStart;\n const lines = ctx.lines;\n for (let i = startIndex; i <= endIndex; i++) {\n const lineNumber = rendLineNumberStart + i;\n lines[i].layoutLine(lineNumber, deltaTop[lineNumber - deltaLN]);\n }\n }\n _insertLinesBefore(ctx, fromLineNumber, toLineNumber, deltaTop, deltaLN) {\n const newLines = [];\n let newLinesLen = 0;\n for (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n newLines[newLinesLen++] = this.host.createVisibleLine();\n }\n ctx.lines = newLines.concat(ctx.lines);\n }\n _removeLinesBefore(ctx, removeCount) {\n for (let i = 0; i < removeCount; i++) {\n const lineDomNode = ctx.lines[i].getDomNode();\n if (lineDomNode) {\n this.domNode.removeChild(lineDomNode);\n }\n }\n ctx.lines.splice(0, removeCount);\n }\n _insertLinesAfter(ctx, fromLineNumber, toLineNumber, deltaTop, deltaLN) {\n const newLines = [];\n let newLinesLen = 0;\n for (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n newLines[newLinesLen++] = this.host.createVisibleLine();\n }\n ctx.lines = ctx.lines.concat(newLines);\n }\n _removeLinesAfter(ctx, removeCount) {\n const removeIndex = ctx.linesLength - removeCount;\n for (let i = 0; i < removeCount; i++) {\n const lineDomNode = ctx.lines[removeIndex + i].getDomNode();\n if (lineDomNode) {\n this.domNode.removeChild(lineDomNode);\n }\n }\n ctx.lines.splice(removeIndex, removeCount);\n }\n _finishRenderingNewLines(ctx, domNodeIsEmpty, newLinesHTML, wasNew) {\n if (ViewLayerRenderer._ttPolicy) {\n newLinesHTML = ViewLayerRenderer._ttPolicy.createHTML(newLinesHTML);\n }\n const lastChild = this.domNode.lastChild;\n if (domNodeIsEmpty || !lastChild) {\n this.domNode.innerHTML = newLinesHTML; // explains the ugly casts -> https://github.com/microsoft/vscode/issues/106396#issuecomment-692625393;\n }\n else {\n lastChild.insertAdjacentHTML('afterend', newLinesHTML);\n }\n let currChild = this.domNode.lastChild;\n for (let i = ctx.linesLength - 1; i >= 0; i--) {\n const line = ctx.lines[i];\n if (wasNew[i]) {\n line.setDomNode(currChild);\n currChild = currChild.previousSibling;\n }\n }\n }\n _finishRenderingInvalidLines(ctx, invalidLinesHTML, wasInvalid) {\n const hugeDomNode = document.createElement('div');\n if (ViewLayerRenderer._ttPolicy) {\n invalidLinesHTML = ViewLayerRenderer._ttPolicy.createHTML(invalidLinesHTML);\n }\n hugeDomNode.innerHTML = invalidLinesHTML;\n for (let i = 0; i < ctx.linesLength; i++) {\n const line = ctx.lines[i];\n if (wasInvalid[i]) {\n const source = hugeDomNode.firstChild;\n const lineDomNode = line.getDomNode();\n lineDomNode.parentNode.replaceChild(source, lineDomNode);\n line.setDomNode(source);\n }\n }\n }\n _finishRendering(ctx, domNodeIsEmpty, deltaTop) {\n const sb = ViewLayerRenderer._sb;\n const linesLength = ctx.linesLength;\n const lines = ctx.lines;\n const rendLineNumberStart = ctx.rendLineNumberStart;\n const wasNew = [];\n {\n sb.reset();\n let hadNewLine = false;\n for (let i = 0; i < linesLength; i++) {\n const line = lines[i];\n wasNew[i] = false;\n const lineDomNode = line.getDomNode();\n if (lineDomNode) {\n // line is not new\n continue;\n }\n const renderResult = line.renderLine(i + rendLineNumberStart, deltaTop[i], this.viewportData, sb);\n if (!renderResult) {\n // line does not need rendering\n continue;\n }\n wasNew[i] = true;\n hadNewLine = true;\n }\n if (hadNewLine) {\n this._finishRenderingNewLines(ctx, domNodeIsEmpty, sb.build(), wasNew);\n }\n }\n {\n sb.reset();\n let hadInvalidLine = false;\n const wasInvalid = [];\n for (let i = 0; i < linesLength; i++) {\n const line = lines[i];\n wasInvalid[i] = false;\n if (wasNew[i]) {\n // line was new\n continue;\n }\n const renderResult = line.renderLine(i + rendLineNumberStart, deltaTop[i], this.viewportData, sb);\n if (!renderResult) {\n // line does not need rendering\n continue;\n }\n wasInvalid[i] = true;\n hadInvalidLine = true;\n }\n if (hadInvalidLine) {\n this._finishRenderingInvalidLines(ctx, sb.build(), wasInvalid);\n }\n }\n }\n}\nViewLayerRenderer._ttPolicy = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy('editorViewLayer', { createHTML: value => value });\nViewLayerRenderer._sb = createStringBuilder(100000);\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 *--------------------------------------------------------------------------------------------*/\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { Configuration } from '../config/configuration.js';\nimport { VisibleLinesCollection } from './viewLayer.js';\nimport { ViewPart } from './viewPart.js';\nexport class ViewOverlays extends ViewPart {\n constructor(context) {\n super(context);\n this._visibleLines = new VisibleLinesCollection(this);\n this.domNode = this._visibleLines.domNode;\n this._dynamicOverlays = [];\n this._isFocused = false;\n this.domNode.setClassName('view-overlays');\n }\n shouldRender() {\n if (super.shouldRender()) {\n return true;\n }\n for (let i = 0, len = this._dynamicOverlays.length; i < len; i++) {\n const dynamicOverlay = this._dynamicOverlays[i];\n if (dynamicOverlay.shouldRender()) {\n return true;\n }\n }\n return false;\n }\n dispose() {\n super.dispose();\n for (let i = 0, len = this._dynamicOverlays.length; i < len; i++) {\n const dynamicOverlay = this._dynamicOverlays[i];\n dynamicOverlay.dispose();\n }\n this._dynamicOverlays = [];\n }\n getDomNode() {\n return this.domNode;\n }\n // ---- begin IVisibleLinesHost\n createVisibleLine() {\n return new ViewOverlayLine(this._context.configuration, this._dynamicOverlays);\n }\n // ---- end IVisibleLinesHost\n addDynamicOverlay(overlay) {\n this._dynamicOverlays.push(overlay);\n }\n // ----- event handlers\n onConfigurationChanged(e) {\n this._visibleLines.onConfigurationChanged(e);\n const startLineNumber = this._visibleLines.getStartLineNumber();\n const endLineNumber = this._visibleLines.getEndLineNumber();\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n const line = this._visibleLines.getVisibleLine(lineNumber);\n line.onConfigurationChanged(e);\n }\n return true;\n }\n onFlushed(e) {\n return this._visibleLines.onFlushed(e);\n }\n onFocusChanged(e) {\n this._isFocused = e.isFocused;\n return true;\n }\n onLinesChanged(e) {\n return this._visibleLines.onLinesChanged(e);\n }\n onLinesDeleted(e) {\n return this._visibleLines.onLinesDeleted(e);\n }\n onLinesInserted(e) {\n return this._visibleLines.onLinesInserted(e);\n }\n onScrollChanged(e) {\n return this._visibleLines.onScrollChanged(e) || true;\n }\n onTokensChanged(e) {\n return this._visibleLines.onTokensChanged(e);\n }\n onZonesChanged(e) {\n return this._visibleLines.onZonesChanged(e);\n }\n // ----- end event handlers\n prepareRender(ctx) {\n const toRender = this._dynamicOverlays.filter(overlay => overlay.shouldRender());\n for (let i = 0, len = toRender.length; i < len; i++) {\n const dynamicOverlay = toRender[i];\n dynamicOverlay.prepareRender(ctx);\n dynamicOverlay.onDidRender();\n }\n }\n render(ctx) {\n // Overwriting to bypass `shouldRender` flag\n this._viewOverlaysRender(ctx);\n this.domNode.toggleClassName('focused', this._isFocused);\n }\n _viewOverlaysRender(ctx) {\n this._visibleLines.renderLines(ctx.viewportData);\n }\n}\nexport class ViewOverlayLine {\n constructor(configuration, dynamicOverlays) {\n this._configuration = configuration;\n this._lineHeight = this._configuration.options.get(55 /* lineHeight */);\n this._dynamicOverlays = dynamicOverlays;\n this._domNode = null;\n this._renderedContent = null;\n }\n getDomNode() {\n if (!this._domNode) {\n return null;\n }\n return this._domNode.domNode;\n }\n setDomNode(domNode) {\n this._domNode = createFastDomNode(domNode);\n }\n onContentChanged() {\n // Nothing\n }\n onTokensChanged() {\n // Nothing\n }\n onConfigurationChanged(e) {\n this._lineHeight = this._configuration.options.get(55 /* lineHeight */);\n }\n renderLine(lineNumber, deltaTop, viewportData, sb) {\n let result = '';\n for (let i = 0, len = this._dynamicOverlays.length; i < len; i++) {\n const dynamicOverlay = this._dynamicOverlays[i];\n result += dynamicOverlay.render(viewportData.startLineNumber, lineNumber);\n }\n if (this._renderedContent === result) {\n // No rendering needed\n return false;\n }\n this._renderedContent = result;\n sb.appendASCIIString('<div style=\"position:absolute;top:');\n sb.appendASCIIString(String(deltaTop));\n sb.appendASCIIString('px;width:100%;height:');\n sb.appendASCIIString(String(this._lineHeight));\n sb.appendASCIIString('px;\">');\n sb.appendASCIIString(result);\n sb.appendASCIIString('</div>');\n return true;\n }\n layoutLine(lineNumber, deltaTop) {\n if (this._domNode) {\n this._domNode.setTop(deltaTop);\n this._domNode.setHeight(this._lineHeight);\n }\n }\n}\nexport class ContentViewOverlays extends ViewOverlays {\n constructor(context) {\n super(context);\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._contentWidth = layoutInfo.contentWidth;\n this.domNode.setHeight(0);\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._contentWidth = layoutInfo.contentWidth;\n return super.onConfigurationChanged(e) || true;\n }\n onScrollChanged(e) {\n return super.onScrollChanged(e) || e.scrollWidthChanged;\n }\n // --- end event handlers\n _viewOverlaysRender(ctx) {\n super._viewOverlaysRender(ctx);\n this.domNode.setWidth(Math.max(ctx.scrollWidth, this._contentWidth));\n }\n}\nexport class MarginViewOverlays extends ViewOverlays {\n constructor(context) {\n super(context);\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._contentLeft = layoutInfo.contentLeft;\n this.domNode.setClassName('margin-view-overlays');\n this.domNode.setWidth(1);\n Configuration.applyFontInfo(this.domNode, options.get(40 /* fontInfo */));\n }\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n Configuration.applyFontInfo(this.domNode, options.get(40 /* fontInfo */));\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._contentLeft = layoutInfo.contentLeft;\n return super.onConfigurationChanged(e) || true;\n }\n onScrollChanged(e) {\n return super.onScrollChanged(e) || e.scrollHeightChanged;\n }\n _viewOverlaysRender(ctx) {\n super._viewOverlaysRender(ctx);\n const height = Math.min(ctx.scrollHeight, 1000000);\n this.domNode.setHeight(height);\n this.domNode.setWidth(this._contentLeft);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../../base/browser/dom.js';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\nclass Coordinate {\n constructor(top, left) {\n this.top = top;\n this.left = left;\n }\n}\nexport class ViewContentWidgets extends ViewPart {\n constructor(context, viewDomNode) {\n super(context);\n this._viewDomNode = viewDomNode;\n this._widgets = {};\n this.domNode = createFastDomNode(document.createElement('div'));\n PartFingerprints.write(this.domNode, 1 /* ContentWidgets */);\n this.domNode.setClassName('contentWidgets');\n this.domNode.setPosition('absolute');\n this.domNode.setTop(0);\n this.overflowingContentWidgetsDomNode = createFastDomNode(document.createElement('div'));\n PartFingerprints.write(this.overflowingContentWidgetsDomNode, 2 /* OverflowingContentWidgets */);\n this.overflowingContentWidgetsDomNode.setClassName('overflowingContentWidgets');\n }\n dispose() {\n super.dispose();\n this._widgets = {};\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const keys = Object.keys(this._widgets);\n for (const widgetId of keys) {\n this._widgets[widgetId].onConfigurationChanged(e);\n }\n return true;\n }\n onDecorationsChanged(e) {\n // true for inline decorations that can end up relayouting text\n return true;\n }\n onFlushed(e) {\n return true;\n }\n onLineMappingChanged(e) {\n const keys = Object.keys(this._widgets);\n for (const widgetId of keys) {\n this._widgets[widgetId].onLineMappingChanged(e);\n }\n return true;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return true;\n }\n onZonesChanged(e) {\n return true;\n }\n // ---- end view event handlers\n addWidget(_widget) {\n const myWidget = new Widget(this._context, this._viewDomNode, _widget);\n this._widgets[myWidget.id] = myWidget;\n if (myWidget.allowEditorOverflow) {\n this.overflowingContentWidgetsDomNode.appendChild(myWidget.domNode);\n }\n else {\n this.domNode.appendChild(myWidget.domNode);\n }\n this.setShouldRender();\n }\n setWidgetPosition(widget, range, preference) {\n const myWidget = this._widgets[widget.getId()];\n myWidget.setPosition(range, preference);\n this.setShouldRender();\n }\n removeWidget(widget) {\n const widgetId = widget.getId();\n if (this._widgets.hasOwnProperty(widgetId)) {\n const myWidget = this._widgets[widgetId];\n delete this._widgets[widgetId];\n const domNode = myWidget.domNode.domNode;\n domNode.parentNode.removeChild(domNode);\n domNode.removeAttribute('monaco-visible-content-widget');\n this.setShouldRender();\n }\n }\n shouldSuppressMouseDownOnWidget(widgetId) {\n if (this._widgets.hasOwnProperty(widgetId)) {\n return this._widgets[widgetId].suppressMouseDown;\n }\n return false;\n }\n onBeforeRender(viewportData) {\n const keys = Object.keys(this._widgets);\n for (const widgetId of keys) {\n this._widgets[widgetId].onBeforeRender(viewportData);\n }\n }\n prepareRender(ctx) {\n const keys = Object.keys(this._widgets);\n for (const widgetId of keys) {\n this._widgets[widgetId].prepareRender(ctx);\n }\n }\n render(ctx) {\n const keys = Object.keys(this._widgets);\n for (const widgetId of keys) {\n this._widgets[widgetId].render(ctx);\n }\n }\n}\nclass Widget {\n constructor(context, viewDomNode, actual) {\n this._context = context;\n this._viewDomNode = viewDomNode;\n this._actual = actual;\n this.domNode = createFastDomNode(this._actual.getDomNode());\n this.id = this._actual.getId();\n this.allowEditorOverflow = this._actual.allowEditorOverflow || false;\n this.suppressMouseDown = this._actual.suppressMouseDown || false;\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._fixedOverflowWidgets = options.get(34 /* fixedOverflowWidgets */);\n this._contentWidth = layoutInfo.contentWidth;\n this._contentLeft = layoutInfo.contentLeft;\n this._lineHeight = options.get(55 /* lineHeight */);\n this._range = null;\n this._viewRange = null;\n this._preference = [];\n this._cachedDomNodeClientWidth = -1;\n this._cachedDomNodeClientHeight = -1;\n this._maxWidth = this._getMaxWidth();\n this._isVisible = false;\n this._renderData = null;\n this.domNode.setPosition((this._fixedOverflowWidgets && this.allowEditorOverflow) ? 'fixed' : 'absolute');\n this.domNode.setVisibility('hidden');\n this.domNode.setAttribute('widgetId', this.id);\n this.domNode.setMaxWidth(this._maxWidth);\n }\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n this._lineHeight = options.get(55 /* lineHeight */);\n if (e.hasChanged(127 /* layoutInfo */)) {\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._contentLeft = layoutInfo.contentLeft;\n this._contentWidth = layoutInfo.contentWidth;\n this._maxWidth = this._getMaxWidth();\n }\n }\n onLineMappingChanged(e) {\n this._setPosition(this._range);\n }\n _setPosition(range) {\n this._range = range;\n this._viewRange = null;\n if (this._range) {\n // Do not trust that widgets give a valid position\n const validModelRange = this._context.model.validateModelRange(this._range);\n if (this._context.model.coordinatesConverter.modelPositionIsVisible(validModelRange.getStartPosition()) || this._context.model.coordinatesConverter.modelPositionIsVisible(validModelRange.getEndPosition())) {\n this._viewRange = this._context.model.coordinatesConverter.convertModelRangeToViewRange(validModelRange);\n }\n }\n }\n _getMaxWidth() {\n return (this.allowEditorOverflow\n ? window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth\n : this._contentWidth);\n }\n setPosition(range, preference) {\n this._setPosition(range);\n this._preference = preference;\n this._cachedDomNodeClientWidth = -1;\n this._cachedDomNodeClientHeight = -1;\n }\n _layoutBoxInViewport(topLeft, bottomLeft, width, height, ctx) {\n // Our visible box is split horizontally by the current line => 2 boxes\n // a) the box above the line\n const aboveLineTop = topLeft.top;\n const heightAboveLine = aboveLineTop;\n // b) the box under the line\n const underLineTop = bottomLeft.top + this._lineHeight;\n const heightUnderLine = ctx.viewportHeight - underLineTop;\n const aboveTop = aboveLineTop - height;\n const fitsAbove = (heightAboveLine >= height);\n const belowTop = underLineTop;\n const fitsBelow = (heightUnderLine >= height);\n // And its left\n let actualAboveLeft = topLeft.left;\n let actualBelowLeft = bottomLeft.left;\n if (actualAboveLeft + width > ctx.scrollLeft + ctx.viewportWidth) {\n actualAboveLeft = ctx.scrollLeft + ctx.viewportWidth - width;\n }\n if (actualBelowLeft + width > ctx.scrollLeft + ctx.viewportWidth) {\n actualBelowLeft = ctx.scrollLeft + ctx.viewportWidth - width;\n }\n if (actualAboveLeft < ctx.scrollLeft) {\n actualAboveLeft = ctx.scrollLeft;\n }\n if (actualBelowLeft < ctx.scrollLeft) {\n actualBelowLeft = ctx.scrollLeft;\n }\n return {\n fitsAbove: fitsAbove,\n aboveTop: aboveTop,\n aboveLeft: actualAboveLeft,\n fitsBelow: fitsBelow,\n belowTop: belowTop,\n belowLeft: actualBelowLeft,\n };\n }\n _layoutHorizontalSegmentInPage(windowSize, domNodePosition, left, width) {\n // Initially, the limits are defined as the dom node limits\n const MIN_LIMIT = Math.max(0, domNodePosition.left - width);\n const MAX_LIMIT = Math.min(domNodePosition.left + domNodePosition.width + width, windowSize.width);\n let absoluteLeft = domNodePosition.left + left - dom.StandardWindow.scrollX;\n if (absoluteLeft + width > MAX_LIMIT) {\n const delta = absoluteLeft - (MAX_LIMIT - width);\n absoluteLeft -= delta;\n left -= delta;\n }\n if (absoluteLeft < MIN_LIMIT) {\n const delta = absoluteLeft - MIN_LIMIT;\n absoluteLeft -= delta;\n left -= delta;\n }\n return [left, absoluteLeft];\n }\n _layoutBoxInPage(topLeft, bottomLeft, width, height, ctx) {\n const aboveTop = topLeft.top - height;\n const belowTop = bottomLeft.top + this._lineHeight;\n const domNodePosition = dom.getDomNodePagePosition(this._viewDomNode.domNode);\n const absoluteAboveTop = domNodePosition.top + aboveTop - dom.StandardWindow.scrollY;\n const absoluteBelowTop = domNodePosition.top + belowTop - dom.StandardWindow.scrollY;\n const windowSize = dom.getClientArea(document.body);\n const [aboveLeft, absoluteAboveLeft] = this._layoutHorizontalSegmentInPage(windowSize, domNodePosition, topLeft.left - ctx.scrollLeft + this._contentLeft, width);\n const [belowLeft, absoluteBelowLeft] = this._layoutHorizontalSegmentInPage(windowSize, domNodePosition, bottomLeft.left - ctx.scrollLeft + this._contentLeft, width);\n // Leave some clearance to the top/bottom\n const TOP_PADDING = 22;\n const BOTTOM_PADDING = 22;\n const fitsAbove = (absoluteAboveTop >= TOP_PADDING);\n const fitsBelow = (absoluteBelowTop + height <= windowSize.height - BOTTOM_PADDING);\n if (this._fixedOverflowWidgets) {\n return {\n fitsAbove,\n aboveTop: Math.max(absoluteAboveTop, TOP_PADDING),\n aboveLeft: absoluteAboveLeft,\n fitsBelow,\n belowTop: absoluteBelowTop,\n belowLeft: absoluteBelowLeft\n };\n }\n return {\n fitsAbove,\n aboveTop: aboveTop,\n aboveLeft,\n fitsBelow,\n belowTop,\n belowLeft\n };\n }\n _prepareRenderWidgetAtExactPositionOverflowing(topLeft) {\n return new Coordinate(topLeft.top, topLeft.left + this._contentLeft);\n }\n /**\n * Compute `this._topLeft`\n */\n _getTopAndBottomLeft(ctx) {\n if (!this._viewRange) {\n return [null, null];\n }\n const visibleRangesForRange = ctx.linesVisibleRangesForRange(this._viewRange, false);\n if (!visibleRangesForRange || visibleRangesForRange.length === 0) {\n return [null, null];\n }\n let firstLine = visibleRangesForRange[0];\n let lastLine = visibleRangesForRange[0];\n for (const visibleRangesForLine of visibleRangesForRange) {\n if (visibleRangesForLine.lineNumber < firstLine.lineNumber) {\n firstLine = visibleRangesForLine;\n }\n if (visibleRangesForLine.lineNumber > lastLine.lineNumber) {\n lastLine = visibleRangesForLine;\n }\n }\n let firstLineMinLeft = 1073741824 /* MAX_SAFE_SMALL_INTEGER */; //firstLine.Constants.MAX_SAFE_SMALL_INTEGER;\n for (const visibleRange of firstLine.ranges) {\n if (visibleRange.left < firstLineMinLeft) {\n firstLineMinLeft = visibleRange.left;\n }\n }\n let lastLineMinLeft = 1073741824 /* MAX_SAFE_SMALL_INTEGER */; //lastLine.Constants.MAX_SAFE_SMALL_INTEGER;\n for (const visibleRange of lastLine.ranges) {\n if (visibleRange.left < lastLineMinLeft) {\n lastLineMinLeft = visibleRange.left;\n }\n }\n const topForPosition = ctx.getVerticalOffsetForLineNumber(firstLine.lineNumber) - ctx.scrollTop;\n const topLeft = new Coordinate(topForPosition, firstLineMinLeft);\n const topForBottomLine = ctx.getVerticalOffsetForLineNumber(lastLine.lineNumber) - ctx.scrollTop;\n const bottomLeft = new Coordinate(topForBottomLine, lastLineMinLeft);\n return [topLeft, bottomLeft];\n }\n _prepareRenderWidget(ctx) {\n const [topLeft, bottomLeft] = this._getTopAndBottomLeft(ctx);\n if (!topLeft || !bottomLeft) {\n return null;\n }\n if (this._cachedDomNodeClientWidth === -1 || this._cachedDomNodeClientHeight === -1) {\n let preferredDimensions = null;\n if (typeof this._actual.beforeRender === 'function') {\n preferredDimensions = safeInvoke(this._actual.beforeRender, this._actual);\n }\n if (preferredDimensions) {\n this._cachedDomNodeClientWidth = preferredDimensions.width;\n this._cachedDomNodeClientHeight = preferredDimensions.height;\n }\n else {\n const domNode = this.domNode.domNode;\n this._cachedDomNodeClientWidth = domNode.clientWidth;\n this._cachedDomNodeClientHeight = domNode.clientHeight;\n }\n }\n let placement;\n if (this.allowEditorOverflow) {\n placement = this._layoutBoxInPage(topLeft, bottomLeft, this._cachedDomNodeClientWidth, this._cachedDomNodeClientHeight, ctx);\n }\n else {\n placement = this._layoutBoxInViewport(topLeft, bottomLeft, this._cachedDomNodeClientWidth, this._cachedDomNodeClientHeight, ctx);\n }\n // Do two passes, first for perfect fit, second picks first option\n if (this._preference) {\n for (let pass = 1; pass <= 2; pass++) {\n for (const pref of this._preference) {\n // placement\n if (pref === 1 /* ABOVE */) {\n if (!placement) {\n // Widget outside of viewport\n return null;\n }\n if (pass === 2 || placement.fitsAbove) {\n return { coordinate: new Coordinate(placement.aboveTop, placement.aboveLeft), position: 1 /* ABOVE */ };\n }\n }\n else if (pref === 2 /* BELOW */) {\n if (!placement) {\n // Widget outside of viewport\n return null;\n }\n if (pass === 2 || placement.fitsBelow) {\n return { coordinate: new Coordinate(placement.belowTop, placement.belowLeft), position: 2 /* BELOW */ };\n }\n }\n else {\n if (this.allowEditorOverflow) {\n return { coordinate: this._prepareRenderWidgetAtExactPositionOverflowing(topLeft), position: 0 /* EXACT */ };\n }\n else {\n return { coordinate: topLeft, position: 0 /* EXACT */ };\n }\n }\n }\n }\n }\n return null;\n }\n /**\n * On this first pass, we ensure that the content widget (if it is in the viewport) has the max width set correctly.\n */\n onBeforeRender(viewportData) {\n if (!this._viewRange || !this._preference) {\n return;\n }\n if (this._viewRange.endLineNumber < viewportData.startLineNumber || this._viewRange.startLineNumber > viewportData.endLineNumber) {\n // Outside of viewport\n return;\n }\n this.domNode.setMaxWidth(this._maxWidth);\n }\n prepareRender(ctx) {\n this._renderData = this._prepareRenderWidget(ctx);\n }\n render(ctx) {\n if (!this._renderData) {\n // This widget should be invisible\n if (this._isVisible) {\n this.domNode.removeAttribute('monaco-visible-content-widget');\n this._isVisible = false;\n this.domNode.setVisibility('hidden');\n }\n if (typeof this._actual.afterRender === 'function') {\n safeInvoke(this._actual.afterRender, this._actual, null);\n }\n return;\n }\n // This widget should be visible\n if (this.allowEditorOverflow) {\n this.domNode.setTop(this._renderData.coordinate.top);\n this.domNode.setLeft(this._renderData.coordinate.left);\n }\n else {\n this.domNode.setTop(this._renderData.coordinate.top + ctx.scrollTop - ctx.bigNumbersDelta);\n this.domNode.setLeft(this._renderData.coordinate.left);\n }\n if (!this._isVisible) {\n this.domNode.setVisibility('inherit');\n this.domNode.setAttribute('monaco-visible-content-widget', 'true');\n this._isVisible = true;\n }\n if (typeof this._actual.afterRender === 'function') {\n safeInvoke(this._actual.afterRender, this._actual, this._renderData.position);\n }\n }\n}\nfunction safeInvoke(fn, thisArg, ...args) {\n try {\n return fn.call(thisArg, ...args);\n }\n catch (_a) {\n // ignore\n return null;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './currentLineHighlight.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { editorLineHighlight, editorLineHighlightBorder } from '../../../common/view/editorColorRegistry.js';\nimport * as arrays from '../../../../base/common/arrays.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { Selection } from '../../../common/core/selection.js';\nlet isRenderedUsingBorder = true;\nexport class AbstractLineHighlightOverlay extends DynamicViewOverlay {\n constructor(context) {\n super();\n this._context = context;\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._renderLineHighlight = options.get(82 /* renderLineHighlight */);\n this._renderLineHighlightOnlyWhenFocus = options.get(83 /* renderLineHighlightOnlyWhenFocus */);\n this._contentLeft = layoutInfo.contentLeft;\n this._contentWidth = layoutInfo.contentWidth;\n this._selectionIsEmpty = true;\n this._focused = false;\n this._cursorLineNumbers = [1];\n this._selections = [new Selection(1, 1, 1, 1)];\n this._renderData = null;\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n super.dispose();\n }\n _readFromSelections() {\n let hasChanged = false;\n // Only render the first selection when using border\n const renderSelections = isRenderedUsingBorder ? this._selections.slice(0, 1) : this._selections;\n const cursorsLineNumbers = renderSelections.map(s => s.positionLineNumber);\n cursorsLineNumbers.sort((a, b) => a - b);\n if (!arrays.equals(this._cursorLineNumbers, cursorsLineNumbers)) {\n this._cursorLineNumbers = cursorsLineNumbers;\n hasChanged = true;\n }\n const selectionIsEmpty = renderSelections.every(s => s.isEmpty());\n if (this._selectionIsEmpty !== selectionIsEmpty) {\n this._selectionIsEmpty = selectionIsEmpty;\n hasChanged = true;\n }\n return hasChanged;\n }\n // --- begin event handlers\n onThemeChanged(e) {\n return this._readFromSelections();\n }\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._renderLineHighlight = options.get(82 /* renderLineHighlight */);\n this._renderLineHighlightOnlyWhenFocus = options.get(83 /* renderLineHighlightOnlyWhenFocus */);\n this._contentLeft = layoutInfo.contentLeft;\n this._contentWidth = layoutInfo.contentWidth;\n return true;\n }\n onCursorStateChanged(e) {\n this._selections = e.selections;\n return this._readFromSelections();\n }\n onFlushed(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollWidthChanged || e.scrollTopChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n onFocusChanged(e) {\n if (!this._renderLineHighlightOnlyWhenFocus) {\n return false;\n }\n this._focused = e.isFocused;\n return true;\n }\n // --- end event handlers\n prepareRender(ctx) {\n if (!this._shouldRenderThis()) {\n this._renderData = null;\n return;\n }\n const renderedLine = this._renderOne(ctx);\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n const len = this._cursorLineNumbers.length;\n let index = 0;\n const renderData = [];\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - visibleStartLineNumber;\n while (index < len && this._cursorLineNumbers[index] < lineNumber) {\n index++;\n }\n if (index < len && this._cursorLineNumbers[index] === lineNumber) {\n renderData[lineIndex] = renderedLine;\n }\n else {\n renderData[lineIndex] = '';\n }\n }\n this._renderData = renderData;\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderData) {\n return '';\n }\n const lineIndex = lineNumber - startLineNumber;\n if (lineIndex >= this._renderData.length) {\n return '';\n }\n return this._renderData[lineIndex];\n }\n}\nexport class CurrentLineHighlightOverlay extends AbstractLineHighlightOverlay {\n _renderOne(ctx) {\n const className = 'current-line' + (this._shouldRenderOther() ? ' current-line-both' : '');\n return `<div class=\"${className}\" style=\"width:${Math.max(ctx.scrollWidth, this._contentWidth)}px; height:${this._lineHeight}px;\"></div>`;\n }\n _shouldRenderThis() {\n return ((this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all')\n && this._selectionIsEmpty\n && (!this._renderLineHighlightOnlyWhenFocus || this._focused));\n }\n _shouldRenderOther() {\n return ((this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all')\n && (!this._renderLineHighlightOnlyWhenFocus || this._focused));\n }\n}\nexport class CurrentLineMarginHighlightOverlay extends AbstractLineHighlightOverlay {\n _renderOne(ctx) {\n const className = 'current-line' + (this._shouldRenderMargin() ? ' current-line-margin' : '') + (this._shouldRenderOther() ? ' current-line-margin-both' : '');\n return `<div class=\"${className}\" style=\"width:${this._contentLeft}px; height:${this._lineHeight}px;\"></div>`;\n }\n _shouldRenderMargin() {\n return ((this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all')\n && (!this._renderLineHighlightOnlyWhenFocus || this._focused));\n }\n _shouldRenderThis() {\n return true;\n }\n _shouldRenderOther() {\n return ((this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all')\n && this._selectionIsEmpty\n && (!this._renderLineHighlightOnlyWhenFocus || this._focused));\n }\n}\nregisterThemingParticipant((theme, collector) => {\n isRenderedUsingBorder = false;\n const lineHighlight = theme.getColor(editorLineHighlight);\n if (lineHighlight) {\n collector.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${lineHighlight}; }`);\n collector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${lineHighlight}; border: none; }`);\n }\n if (!lineHighlight || lineHighlight.isTransparent() || theme.defines(editorLineHighlightBorder)) {\n const lineHighlightBorder = theme.getColor(editorLineHighlightBorder);\n if (lineHighlightBorder) {\n isRenderedUsingBorder = true;\n collector.addRule(`.monaco-editor .view-overlays .current-line { border: 2px solid ${lineHighlightBorder}; }`);\n collector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { border: 2px solid ${lineHighlightBorder}; }`);\n if (theme.type === 'hc') {\n collector.addRule(`.monaco-editor .view-overlays .current-line { border-width: 1px; }`);\n collector.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { border-width: 1px; }`);\n }\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './decorations.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { Range } from '../../../common/core/range.js';\nimport { HorizontalRange } from '../../../common/view/renderingContext.js';\nexport class DecorationsOverlay extends DynamicViewOverlay {\n constructor(context) {\n super();\n this._context = context;\n const options = this._context.configuration.options;\n this._lineHeight = options.get(55 /* lineHeight */);\n this._typicalHalfwidthCharacterWidth = options.get(40 /* fontInfo */).typicalHalfwidthCharacterWidth;\n this._renderResult = null;\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n this._renderResult = null;\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n this._lineHeight = options.get(55 /* lineHeight */);\n this._typicalHalfwidthCharacterWidth = options.get(40 /* fontInfo */).typicalHalfwidthCharacterWidth;\n return true;\n }\n onDecorationsChanged(e) {\n return true;\n }\n onFlushed(e) {\n return true;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged || e.scrollWidthChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n // --- end event handlers\n prepareRender(ctx) {\n const _decorations = ctx.getDecorationsInViewport();\n // Keep only decorations with `className`\n let decorations = [], decorationsLen = 0;\n for (let i = 0, len = _decorations.length; i < len; i++) {\n const d = _decorations[i];\n if (d.options.className) {\n decorations[decorationsLen++] = d;\n }\n }\n // Sort decorations for consistent render output\n decorations = decorations.sort((a, b) => {\n if (a.options.zIndex < b.options.zIndex) {\n return -1;\n }\n if (a.options.zIndex > b.options.zIndex) {\n return 1;\n }\n const aClassName = a.options.className;\n const bClassName = b.options.className;\n if (aClassName < bClassName) {\n return -1;\n }\n if (aClassName > bClassName) {\n return 1;\n }\n return Range.compareRangesUsingStarts(a.range, b.range);\n });\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n const output = [];\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - visibleStartLineNumber;\n output[lineIndex] = '';\n }\n // Render first whole line decorations and then regular decorations\n this._renderWholeLineDecorations(ctx, decorations, output);\n this._renderNormalDecorations(ctx, decorations, output);\n this._renderResult = output;\n }\n _renderWholeLineDecorations(ctx, decorations, output) {\n const lineHeight = String(this._lineHeight);\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n for (let i = 0, lenI = decorations.length; i < lenI; i++) {\n const d = decorations[i];\n if (!d.options.isWholeLine) {\n continue;\n }\n const decorationOutput = ('<div class=\"cdr '\n + d.options.className\n + '\" style=\"left:0;width:100%;height:'\n + lineHeight\n + 'px;\"></div>');\n const startLineNumber = Math.max(d.range.startLineNumber, visibleStartLineNumber);\n const endLineNumber = Math.min(d.range.endLineNumber, visibleEndLineNumber);\n for (let j = startLineNumber; j <= endLineNumber; j++) {\n const lineIndex = j - visibleStartLineNumber;\n output[lineIndex] += decorationOutput;\n }\n }\n }\n _renderNormalDecorations(ctx, decorations, output) {\n const lineHeight = String(this._lineHeight);\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n let prevClassName = null;\n let prevShowIfCollapsed = false;\n let prevRange = null;\n for (let i = 0, lenI = decorations.length; i < lenI; i++) {\n const d = decorations[i];\n if (d.options.isWholeLine) {\n continue;\n }\n const className = d.options.className;\n const showIfCollapsed = Boolean(d.options.showIfCollapsed);\n let range = d.range;\n if (showIfCollapsed && range.endColumn === 1 && range.endLineNumber !== range.startLineNumber) {\n range = new Range(range.startLineNumber, range.startColumn, range.endLineNumber - 1, this._context.model.getLineMaxColumn(range.endLineNumber - 1));\n }\n if (prevClassName === className && prevShowIfCollapsed === showIfCollapsed && Range.areIntersectingOrTouching(prevRange, range)) {\n // merge into previous decoration\n prevRange = Range.plusRange(prevRange, range);\n continue;\n }\n // flush previous decoration\n if (prevClassName !== null) {\n this._renderNormalDecoration(ctx, prevRange, prevClassName, prevShowIfCollapsed, lineHeight, visibleStartLineNumber, output);\n }\n prevClassName = className;\n prevShowIfCollapsed = showIfCollapsed;\n prevRange = range;\n }\n if (prevClassName !== null) {\n this._renderNormalDecoration(ctx, prevRange, prevClassName, prevShowIfCollapsed, lineHeight, visibleStartLineNumber, output);\n }\n }\n _renderNormalDecoration(ctx, range, className, showIfCollapsed, lineHeight, visibleStartLineNumber, output) {\n const linesVisibleRanges = ctx.linesVisibleRangesForRange(range, /*TODO@Alex*/ className === 'findMatch');\n if (!linesVisibleRanges) {\n return;\n }\n for (let j = 0, lenJ = linesVisibleRanges.length; j < lenJ; j++) {\n const lineVisibleRanges = linesVisibleRanges[j];\n if (lineVisibleRanges.outsideRenderedLine) {\n continue;\n }\n const lineIndex = lineVisibleRanges.lineNumber - visibleStartLineNumber;\n if (showIfCollapsed && lineVisibleRanges.ranges.length === 1) {\n const singleVisibleRange = lineVisibleRanges.ranges[0];\n if (singleVisibleRange.width === 0) {\n // collapsed range case => make the decoration visible by faking its width\n lineVisibleRanges.ranges[0] = new HorizontalRange(singleVisibleRange.left, this._typicalHalfwidthCharacterWidth);\n }\n }\n for (let k = 0, lenK = lineVisibleRanges.ranges.length; k < lenK; k++) {\n const visibleRange = lineVisibleRanges.ranges[k];\n const decorationOutput = ('<div class=\"cdr '\n + className\n + '\" style=\"left:'\n + String(visibleRange.left)\n + 'px;width:'\n + String(visibleRange.width)\n + 'px;height:'\n + lineHeight\n + 'px;\"></div>');\n output[lineIndex] += decorationOutput;\n }\n }\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderResult) {\n return '';\n }\n const lineIndex = lineNumber - startLineNumber;\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n return '';\n }\n return this._renderResult[lineIndex];\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../../base/browser/dom.js';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { SmoothScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js';\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\nimport { getThemeTypeSelector } from '../../../../platform/theme/common/themeService.js';\nexport class EditorScrollbar extends ViewPart {\n constructor(context, linesContent, viewDomNode, overflowGuardDomNode) {\n super(context);\n const options = this._context.configuration.options;\n const scrollbar = options.get(89 /* scrollbar */);\n const mouseWheelScrollSensitivity = options.get(63 /* mouseWheelScrollSensitivity */);\n const fastScrollSensitivity = options.get(32 /* fastScrollSensitivity */);\n const scrollPredominantAxis = options.get(92 /* scrollPredominantAxis */);\n const scrollbarOptions = {\n listenOnDomNode: viewDomNode.domNode,\n className: 'editor-scrollable' + ' ' + getThemeTypeSelector(context.theme.type),\n useShadows: false,\n lazyRender: true,\n vertical: scrollbar.vertical,\n horizontal: scrollbar.horizontal,\n verticalHasArrows: scrollbar.verticalHasArrows,\n horizontalHasArrows: scrollbar.horizontalHasArrows,\n verticalScrollbarSize: scrollbar.verticalScrollbarSize,\n verticalSliderSize: scrollbar.verticalSliderSize,\n horizontalScrollbarSize: scrollbar.horizontalScrollbarSize,\n horizontalSliderSize: scrollbar.horizontalSliderSize,\n handleMouseWheel: scrollbar.handleMouseWheel,\n alwaysConsumeMouseWheel: scrollbar.alwaysConsumeMouseWheel,\n arrowSize: scrollbar.arrowSize,\n mouseWheelScrollSensitivity: mouseWheelScrollSensitivity,\n fastScrollSensitivity: fastScrollSensitivity,\n scrollPredominantAxis: scrollPredominantAxis,\n scrollByPage: scrollbar.scrollByPage,\n };\n this.scrollbar = this._register(new SmoothScrollableElement(linesContent.domNode, scrollbarOptions, this._context.viewLayout.getScrollable()));\n PartFingerprints.write(this.scrollbar.getDomNode(), 5 /* ScrollableElement */);\n this.scrollbarDomNode = createFastDomNode(this.scrollbar.getDomNode());\n this.scrollbarDomNode.setPosition('absolute');\n this._setLayout();\n // When having a zone widget that calls .focus() on one of its dom elements,\n // the browser will try desperately to reveal that dom node, unexpectedly\n // changing the .scrollTop of this.linesContent\n const onBrowserDesperateReveal = (domNode, lookAtScrollTop, lookAtScrollLeft) => {\n const newScrollPosition = {};\n if (lookAtScrollTop) {\n const deltaTop = domNode.scrollTop;\n if (deltaTop) {\n newScrollPosition.scrollTop = this._context.viewLayout.getCurrentScrollTop() + deltaTop;\n domNode.scrollTop = 0;\n }\n }\n if (lookAtScrollLeft) {\n const deltaLeft = domNode.scrollLeft;\n if (deltaLeft) {\n newScrollPosition.scrollLeft = this._context.viewLayout.getCurrentScrollLeft() + deltaLeft;\n domNode.scrollLeft = 0;\n }\n }\n this._context.model.setScrollPosition(newScrollPosition, 1 /* Immediate */);\n };\n // I've seen this happen both on the view dom node & on the lines content dom node.\n this._register(dom.addDisposableListener(viewDomNode.domNode, 'scroll', (e) => onBrowserDesperateReveal(viewDomNode.domNode, true, true)));\n this._register(dom.addDisposableListener(linesContent.domNode, 'scroll', (e) => onBrowserDesperateReveal(linesContent.domNode, true, false)));\n this._register(dom.addDisposableListener(overflowGuardDomNode.domNode, 'scroll', (e) => onBrowserDesperateReveal(overflowGuardDomNode.domNode, true, false)));\n this._register(dom.addDisposableListener(this.scrollbarDomNode.domNode, 'scroll', (e) => onBrowserDesperateReveal(this.scrollbarDomNode.domNode, true, false)));\n }\n dispose() {\n super.dispose();\n }\n _setLayout() {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this.scrollbarDomNode.setLeft(layoutInfo.contentLeft);\n const minimap = options.get(61 /* minimap */);\n const side = minimap.side;\n if (side === 'right') {\n this.scrollbarDomNode.setWidth(layoutInfo.contentWidth + layoutInfo.minimap.minimapWidth);\n }\n else {\n this.scrollbarDomNode.setWidth(layoutInfo.contentWidth);\n }\n this.scrollbarDomNode.setHeight(layoutInfo.height);\n }\n getOverviewRulerLayoutInfo() {\n return this.scrollbar.getOverviewRulerLayoutInfo();\n }\n getDomNode() {\n return this.scrollbarDomNode;\n }\n delegateVerticalScrollbarMouseDown(browserEvent) {\n this.scrollbar.delegateVerticalScrollbarMouseDown(browserEvent);\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n if (e.hasChanged(89 /* scrollbar */)\n || e.hasChanged(63 /* mouseWheelScrollSensitivity */)\n || e.hasChanged(32 /* fastScrollSensitivity */)) {\n const options = this._context.configuration.options;\n const scrollbar = options.get(89 /* scrollbar */);\n const mouseWheelScrollSensitivity = options.get(63 /* mouseWheelScrollSensitivity */);\n const fastScrollSensitivity = options.get(32 /* fastScrollSensitivity */);\n const scrollPredominantAxis = options.get(92 /* scrollPredominantAxis */);\n const newOpts = {\n handleMouseWheel: scrollbar.handleMouseWheel,\n mouseWheelScrollSensitivity: mouseWheelScrollSensitivity,\n fastScrollSensitivity: fastScrollSensitivity,\n scrollPredominantAxis: scrollPredominantAxis\n };\n this.scrollbar.updateOptions(newOpts);\n }\n if (e.hasChanged(127 /* layoutInfo */)) {\n this._setLayout();\n }\n return true;\n }\n onScrollChanged(e) {\n return true;\n }\n onThemeChanged(e) {\n this.scrollbar.updateClassName('editor-scrollable' + ' ' + getThemeTypeSelector(this._context.theme.type));\n return true;\n }\n // --- end event handlers\n prepareRender(ctx) {\n // Nothing to do\n }\n render(ctx) {\n this.scrollbar.renderNow();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './glyphMargin.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nexport class DecorationToRender {\n constructor(startLineNumber, endLineNumber, className) {\n this.startLineNumber = +startLineNumber;\n this.endLineNumber = +endLineNumber;\n this.className = String(className);\n }\n}\nexport class DedupOverlay extends DynamicViewOverlay {\n _render(visibleStartLineNumber, visibleEndLineNumber, decorations) {\n const output = [];\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - visibleStartLineNumber;\n output[lineIndex] = [];\n }\n if (decorations.length === 0) {\n return output;\n }\n decorations.sort((a, b) => {\n if (a.className === b.className) {\n if (a.startLineNumber === b.startLineNumber) {\n return a.endLineNumber - b.endLineNumber;\n }\n return a.startLineNumber - b.startLineNumber;\n }\n return (a.className < b.className ? -1 : 1);\n });\n let prevClassName = null;\n let prevEndLineIndex = 0;\n for (let i = 0, len = decorations.length; i < len; i++) {\n const d = decorations[i];\n const className = d.className;\n let startLineIndex = Math.max(d.startLineNumber, visibleStartLineNumber) - visibleStartLineNumber;\n const endLineIndex = Math.min(d.endLineNumber, visibleEndLineNumber) - visibleStartLineNumber;\n if (prevClassName === className) {\n startLineIndex = Math.max(prevEndLineIndex + 1, startLineIndex);\n prevEndLineIndex = Math.max(prevEndLineIndex, endLineIndex);\n }\n else {\n prevClassName = className;\n prevEndLineIndex = endLineIndex;\n }\n for (let i = startLineIndex; i <= prevEndLineIndex; i++) {\n output[i].push(prevClassName);\n }\n }\n return output;\n }\n}\nexport class GlyphMarginOverlay extends DedupOverlay {\n constructor(context) {\n super();\n this._context = context;\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._glyphMargin = options.get(46 /* glyphMargin */);\n this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\n this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\n this._renderResult = null;\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n this._renderResult = null;\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._glyphMargin = options.get(46 /* glyphMargin */);\n this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\n this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\n return true;\n }\n onDecorationsChanged(e) {\n return true;\n }\n onFlushed(e) {\n return true;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n // --- end event handlers\n _getDecorations(ctx) {\n const decorations = ctx.getDecorationsInViewport();\n let r = [], rLen = 0;\n for (let i = 0, len = decorations.length; i < len; i++) {\n const d = decorations[i];\n const glyphMarginClassName = d.options.glyphMarginClassName;\n if (glyphMarginClassName) {\n r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, glyphMarginClassName);\n }\n }\n return r;\n }\n prepareRender(ctx) {\n if (!this._glyphMargin) {\n this._renderResult = null;\n return;\n }\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n const toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));\n const lineHeight = this._lineHeight.toString();\n const left = this._glyphMarginLeft.toString();\n const width = this._glyphMarginWidth.toString();\n const common = '\" style=\"left:' + left + 'px;width:' + width + 'px' + ';height:' + lineHeight + 'px;\"></div>';\n const output = [];\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - visibleStartLineNumber;\n const classNames = toRender[lineIndex];\n if (classNames.length === 0) {\n output[lineIndex] = '';\n }\n else {\n output[lineIndex] = ('<div class=\"cgmr codicon '\n + classNames.join(' ')\n + common);\n }\n }\n this._renderResult = output;\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderResult) {\n return '';\n }\n const lineIndex = lineNumber - startLineNumber;\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n return '';\n }\n return this._renderResult[lineIndex];\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './indentGuides.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { Position } from '../../../common/core/position.js';\nimport { editorActiveIndentGuides, editorIndentGuides } from '../../../common/view/editorColorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nexport class IndentGuidesOverlay extends DynamicViewOverlay {\n constructor(context) {\n super();\n this._context = context;\n this._primaryLineNumber = 0;\n const options = this._context.configuration.options;\n const wrappingInfo = options.get(128 /* wrappingInfo */);\n const fontInfo = options.get(40 /* fontInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._spaceWidth = fontInfo.spaceWidth;\n this._enabled = options.get(80 /* renderIndentGuides */);\n this._activeIndentEnabled = options.get(49 /* highlightActiveIndentGuide */);\n this._maxIndentLeft = wrappingInfo.wrappingColumn === -1 ? -1 : (wrappingInfo.wrappingColumn * fontInfo.typicalHalfwidthCharacterWidth);\n this._renderResult = null;\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n this._renderResult = null;\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const wrappingInfo = options.get(128 /* wrappingInfo */);\n const fontInfo = options.get(40 /* fontInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._spaceWidth = fontInfo.spaceWidth;\n this._enabled = options.get(80 /* renderIndentGuides */);\n this._activeIndentEnabled = options.get(49 /* highlightActiveIndentGuide */);\n this._maxIndentLeft = wrappingInfo.wrappingColumn === -1 ? -1 : (wrappingInfo.wrappingColumn * fontInfo.typicalHalfwidthCharacterWidth);\n return true;\n }\n onCursorStateChanged(e) {\n const selection = e.selections[0];\n const newPrimaryLineNumber = selection.isEmpty() ? selection.positionLineNumber : 0;\n if (this._primaryLineNumber !== newPrimaryLineNumber) {\n this._primaryLineNumber = newPrimaryLineNumber;\n return true;\n }\n return false;\n }\n onDecorationsChanged(e) {\n // true for inline decorations\n return true;\n }\n onFlushed(e) {\n return true;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged; // || e.scrollWidthChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n onLanguageConfigurationChanged(e) {\n return true;\n }\n // --- end event handlers\n prepareRender(ctx) {\n if (!this._enabled) {\n this._renderResult = null;\n return;\n }\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n const { indentSize } = this._context.model.getTextModelOptions();\n const indentWidth = indentSize * this._spaceWidth;\n const scrollWidth = ctx.scrollWidth;\n const lineHeight = this._lineHeight;\n const indents = this._context.model.getLinesIndentGuides(visibleStartLineNumber, visibleEndLineNumber);\n let activeIndentStartLineNumber = 0;\n let activeIndentEndLineNumber = 0;\n let activeIndentLevel = 0;\n if (this._activeIndentEnabled && this._primaryLineNumber) {\n const activeIndentInfo = this._context.model.getActiveIndentGuide(this._primaryLineNumber, visibleStartLineNumber, visibleEndLineNumber);\n activeIndentStartLineNumber = activeIndentInfo.startLineNumber;\n activeIndentEndLineNumber = activeIndentInfo.endLineNumber;\n activeIndentLevel = activeIndentInfo.indent;\n }\n const output = [];\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const containsActiveIndentGuide = (activeIndentStartLineNumber <= lineNumber && lineNumber <= activeIndentEndLineNumber);\n const lineIndex = lineNumber - visibleStartLineNumber;\n const indent = indents[lineIndex];\n let result = '';\n if (indent >= 1) {\n const leftMostVisiblePosition = ctx.visibleRangeForPosition(new Position(lineNumber, 1));\n let left = leftMostVisiblePosition ? leftMostVisiblePosition.left : 0;\n for (let i = 1; i <= indent; i++) {\n const className = (containsActiveIndentGuide && i === activeIndentLevel ? 'cigra' : 'cigr');\n result += `<div class=\"${className}\" style=\"left:${left}px;height:${lineHeight}px;width:${indentWidth}px\"></div>`;\n left += indentWidth;\n if (left > scrollWidth || (this._maxIndentLeft > 0 && left > this._maxIndentLeft)) {\n break;\n }\n }\n }\n output[lineIndex] = result;\n }\n this._renderResult = output;\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderResult) {\n return '';\n }\n const lineIndex = lineNumber - startLineNumber;\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n return '';\n }\n return this._renderResult[lineIndex];\n }\n}\nregisterThemingParticipant((theme, collector) => {\n const editorIndentGuidesColor = theme.getColor(editorIndentGuides);\n if (editorIndentGuidesColor) {\n collector.addRule(`.monaco-editor .lines-content .cigr { box-shadow: 1px 0 0 0 ${editorIndentGuidesColor} inset; }`);\n }\n const editorActiveIndentGuidesColor = theme.getColor(editorActiveIndentGuides) || editorIndentGuidesColor;\n if (editorActiveIndentGuidesColor) {\n collector.addRule(`.monaco-editor .lines-content .cigra { box-shadow: 1px 0 0 0 ${editorActiveIndentGuidesColor} inset; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './viewLines.css';\nimport * as platform from '../../../../base/common/platform.js';\nimport { RunOnceScheduler } from '../../../../base/common/async.js';\nimport { Configuration } from '../../config/configuration.js';\nimport { VisibleLinesCollection } from '../../view/viewLayer.js';\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\nimport { DomReadingContext, ViewLine, ViewLineOptions } from './viewLine.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { LineVisibleRanges, HorizontalPosition } from '../../../common/view/renderingContext.js';\nimport { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../base/browser/ui/mouseCursor/mouseCursor.js';\nclass LastRenderedData {\n constructor() {\n this._currentVisibleRange = new Range(1, 1, 1, 1);\n }\n getCurrentVisibleRange() {\n return this._currentVisibleRange;\n }\n setCurrentVisibleRange(currentVisibleRange) {\n this._currentVisibleRange = currentVisibleRange;\n }\n}\nclass HorizontalRevealRangeRequest {\n constructor(lineNumber, startColumn, endColumn, startScrollTop, stopScrollTop, scrollType) {\n this.lineNumber = lineNumber;\n this.startColumn = startColumn;\n this.endColumn = endColumn;\n this.startScrollTop = startScrollTop;\n this.stopScrollTop = stopScrollTop;\n this.scrollType = scrollType;\n this.type = 'range';\n this.minLineNumber = lineNumber;\n this.maxLineNumber = lineNumber;\n }\n}\nclass HorizontalRevealSelectionsRequest {\n constructor(selections, startScrollTop, stopScrollTop, scrollType) {\n this.selections = selections;\n this.startScrollTop = startScrollTop;\n this.stopScrollTop = stopScrollTop;\n this.scrollType = scrollType;\n this.type = 'selections';\n let minLineNumber = selections[0].startLineNumber;\n let maxLineNumber = selections[0].endLineNumber;\n for (let i = 1, len = selections.length; i < len; i++) {\n const selection = selections[i];\n minLineNumber = Math.min(minLineNumber, selection.startLineNumber);\n maxLineNumber = Math.max(maxLineNumber, selection.endLineNumber);\n }\n this.minLineNumber = minLineNumber;\n this.maxLineNumber = maxLineNumber;\n }\n}\nexport class ViewLines extends ViewPart {\n constructor(context, linesContent) {\n super(context);\n this._linesContent = linesContent;\n this._textRangeRestingSpot = document.createElement('div');\n this._visibleLines = new VisibleLinesCollection(this);\n this.domNode = this._visibleLines.domNode;\n const conf = this._context.configuration;\n const options = this._context.configuration.options;\n const fontInfo = options.get(40 /* fontInfo */);\n const wrappingInfo = options.get(128 /* wrappingInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n this._isViewportWrapping = wrappingInfo.isViewportWrapping;\n this._revealHorizontalRightPadding = options.get(86 /* revealHorizontalRightPadding */);\n this._cursorSurroundingLines = options.get(23 /* cursorSurroundingLines */);\n this._cursorSurroundingLinesStyle = options.get(24 /* cursorSurroundingLinesStyle */);\n this._canUseLayerHinting = !options.get(26 /* disableLayerHinting */);\n this._viewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n PartFingerprints.write(this.domNode, 7 /* ViewLines */);\n this.domNode.setClassName(`view-lines ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n Configuration.applyFontInfo(this.domNode, fontInfo);\n // --- width & height\n this._maxLineWidth = 0;\n this._asyncUpdateLineWidths = new RunOnceScheduler(() => {\n this._updateLineWidthsSlow();\n }, 200);\n this._asyncCheckMonospaceFontAssumptions = new RunOnceScheduler(() => {\n this._checkMonospaceFontAssumptions();\n }, 2000);\n this._lastRenderedData = new LastRenderedData();\n this._horizontalRevealRequest = null;\n }\n dispose() {\n this._asyncUpdateLineWidths.dispose();\n this._asyncCheckMonospaceFontAssumptions.dispose();\n super.dispose();\n }\n getDomNode() {\n return this.domNode;\n }\n // ---- begin IVisibleLinesHost\n createVisibleLine() {\n return new ViewLine(this._viewLineOptions);\n }\n // ---- end IVisibleLinesHost\n // ---- begin view event handlers\n onConfigurationChanged(e) {\n this._visibleLines.onConfigurationChanged(e);\n if (e.hasChanged(128 /* wrappingInfo */)) {\n this._maxLineWidth = 0;\n }\n const options = this._context.configuration.options;\n const fontInfo = options.get(40 /* fontInfo */);\n const wrappingInfo = options.get(128 /* wrappingInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n this._isViewportWrapping = wrappingInfo.isViewportWrapping;\n this._revealHorizontalRightPadding = options.get(86 /* revealHorizontalRightPadding */);\n this._cursorSurroundingLines = options.get(23 /* cursorSurroundingLines */);\n this._cursorSurroundingLinesStyle = options.get(24 /* cursorSurroundingLinesStyle */);\n this._canUseLayerHinting = !options.get(26 /* disableLayerHinting */);\n Configuration.applyFontInfo(this.domNode, fontInfo);\n this._onOptionsMaybeChanged();\n if (e.hasChanged(127 /* layoutInfo */)) {\n this._maxLineWidth = 0;\n }\n return true;\n }\n _onOptionsMaybeChanged() {\n const conf = this._context.configuration;\n const newViewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n if (!this._viewLineOptions.equals(newViewLineOptions)) {\n this._viewLineOptions = newViewLineOptions;\n const startLineNumber = this._visibleLines.getStartLineNumber();\n const endLineNumber = this._visibleLines.getEndLineNumber();\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n const line = this._visibleLines.getVisibleLine(lineNumber);\n line.onOptionsChanged(this._viewLineOptions);\n }\n return true;\n }\n return false;\n }\n onCursorStateChanged(e) {\n const rendStartLineNumber = this._visibleLines.getStartLineNumber();\n const rendEndLineNumber = this._visibleLines.getEndLineNumber();\n let r = false;\n for (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n r = this._visibleLines.getVisibleLine(lineNumber).onSelectionChanged() || r;\n }\n return r;\n }\n onDecorationsChanged(e) {\n if (true /*e.inlineDecorationsChanged*/) {\n const rendStartLineNumber = this._visibleLines.getStartLineNumber();\n const rendEndLineNumber = this._visibleLines.getEndLineNumber();\n for (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n this._visibleLines.getVisibleLine(lineNumber).onDecorationsChanged();\n }\n }\n return true;\n }\n onFlushed(e) {\n const shouldRender = this._visibleLines.onFlushed(e);\n this._maxLineWidth = 0;\n return shouldRender;\n }\n onLinesChanged(e) {\n return this._visibleLines.onLinesChanged(e);\n }\n onLinesDeleted(e) {\n return this._visibleLines.onLinesDeleted(e);\n }\n onLinesInserted(e) {\n return this._visibleLines.onLinesInserted(e);\n }\n onRevealRangeRequest(e) {\n // Using the future viewport here in order to handle multiple\n // incoming reveal range requests that might all desire to be animated\n const desiredScrollTop = this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(), e.source, e.range, e.selections, e.verticalType);\n if (desiredScrollTop === -1) {\n // marker to abort the reveal range request\n return false;\n }\n // validate the new desired scroll top\n let newScrollPosition = this._context.viewLayout.validateScrollPosition({ scrollTop: desiredScrollTop });\n if (e.revealHorizontal) {\n if (e.range && e.range.startLineNumber !== e.range.endLineNumber) {\n // Two or more lines? => scroll to base (That's how you see most of the two lines)\n newScrollPosition = {\n scrollTop: newScrollPosition.scrollTop,\n scrollLeft: 0\n };\n }\n else if (e.range) {\n // We don't necessarily know the horizontal offset of this range since the line might not be in the view...\n this._horizontalRevealRequest = new HorizontalRevealRangeRequest(e.range.startLineNumber, e.range.startColumn, e.range.endColumn, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\n }\n else if (e.selections && e.selections.length > 0) {\n this._horizontalRevealRequest = new HorizontalRevealSelectionsRequest(e.selections, this._context.viewLayout.getCurrentScrollTop(), newScrollPosition.scrollTop, e.scrollType);\n }\n }\n else {\n this._horizontalRevealRequest = null;\n }\n const scrollTopDelta = Math.abs(this._context.viewLayout.getCurrentScrollTop() - newScrollPosition.scrollTop);\n const scrollType = (scrollTopDelta <= this._lineHeight ? 1 /* Immediate */ : e.scrollType);\n this._context.model.setScrollPosition(newScrollPosition, scrollType);\n return true;\n }\n onScrollChanged(e) {\n if (this._horizontalRevealRequest && e.scrollLeftChanged) {\n // cancel any outstanding horizontal reveal request if someone else scrolls horizontally.\n this._horizontalRevealRequest = null;\n }\n if (this._horizontalRevealRequest && e.scrollTopChanged) {\n const min = Math.min(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\n const max = Math.max(this._horizontalRevealRequest.startScrollTop, this._horizontalRevealRequest.stopScrollTop);\n if (e.scrollTop < min || e.scrollTop > max) {\n // cancel any outstanding horizontal reveal request if someone else scrolls vertically.\n this._horizontalRevealRequest = null;\n }\n }\n this.domNode.setWidth(e.scrollWidth);\n return this._visibleLines.onScrollChanged(e) || true;\n }\n onTokensChanged(e) {\n return this._visibleLines.onTokensChanged(e);\n }\n onZonesChanged(e) {\n this._context.model.setMaxLineWidth(this._maxLineWidth);\n return this._visibleLines.onZonesChanged(e);\n }\n onThemeChanged(e) {\n return this._onOptionsMaybeChanged();\n }\n // ---- end view event handlers\n // ----------- HELPERS FOR OTHERS\n getPositionFromDOMInfo(spanNode, offset) {\n const viewLineDomNode = this._getViewLineDomNode(spanNode);\n if (viewLineDomNode === null) {\n // Couldn't find view line node\n return null;\n }\n const lineNumber = this._getLineNumberFor(viewLineDomNode);\n if (lineNumber === -1) {\n // Couldn't find view line node\n return null;\n }\n if (lineNumber < 1 || lineNumber > this._context.model.getLineCount()) {\n // lineNumber is outside range\n return null;\n }\n if (this._context.model.getLineMaxColumn(lineNumber) === 1) {\n // Line is empty\n return new Position(lineNumber, 1);\n }\n const rendStartLineNumber = this._visibleLines.getStartLineNumber();\n const rendEndLineNumber = this._visibleLines.getEndLineNumber();\n if (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n // Couldn't find line\n return null;\n }\n let column = this._visibleLines.getVisibleLine(lineNumber).getColumnOfNodeOffset(lineNumber, spanNode, offset);\n const minColumn = this._context.model.getLineMinColumn(lineNumber);\n if (column < minColumn) {\n column = minColumn;\n }\n return new Position(lineNumber, column);\n }\n _getViewLineDomNode(node) {\n while (node && node.nodeType === 1) {\n if (node.className === ViewLine.CLASS_NAME) {\n return node;\n }\n node = node.parentElement;\n }\n return null;\n }\n /**\n * @returns the line number of this view line dom node.\n */\n _getLineNumberFor(domNode) {\n const startLineNumber = this._visibleLines.getStartLineNumber();\n const endLineNumber = this._visibleLines.getEndLineNumber();\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n const line = this._visibleLines.getVisibleLine(lineNumber);\n if (domNode === line.getDomNode()) {\n return lineNumber;\n }\n }\n return -1;\n }\n getLineWidth(lineNumber) {\n const rendStartLineNumber = this._visibleLines.getStartLineNumber();\n const rendEndLineNumber = this._visibleLines.getEndLineNumber();\n if (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n // Couldn't find line\n return -1;\n }\n return this._visibleLines.getVisibleLine(lineNumber).getWidth();\n }\n linesVisibleRangesForRange(_range, includeNewLines) {\n if (this.shouldRender()) {\n // Cannot read from the DOM because it is dirty\n // i.e. the model & the dom are out of sync, so I'd be reading something stale\n return null;\n }\n const originalEndLineNumber = _range.endLineNumber;\n const range = Range.intersectRanges(_range, this._lastRenderedData.getCurrentVisibleRange());\n if (!range) {\n return null;\n }\n let visibleRanges = [], visibleRangesLen = 0;\n const domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n let nextLineModelLineNumber = 0;\n if (includeNewLines) {\n nextLineModelLineNumber = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(range.startLineNumber, 1)).lineNumber;\n }\n const rendStartLineNumber = this._visibleLines.getStartLineNumber();\n const rendEndLineNumber = this._visibleLines.getEndLineNumber();\n for (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {\n if (lineNumber < rendStartLineNumber || lineNumber > rendEndLineNumber) {\n continue;\n }\n const startColumn = lineNumber === range.startLineNumber ? range.startColumn : 1;\n const endColumn = lineNumber === range.endLineNumber ? range.endColumn : this._context.model.getLineMaxColumn(lineNumber);\n const visibleRangesForLine = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(startColumn, endColumn, domReadingContext);\n if (!visibleRangesForLine) {\n continue;\n }\n if (includeNewLines && lineNumber < originalEndLineNumber) {\n const currentLineModelLineNumber = nextLineModelLineNumber;\n nextLineModelLineNumber = this._context.model.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber + 1, 1)).lineNumber;\n if (currentLineModelLineNumber !== nextLineModelLineNumber) {\n visibleRangesForLine.ranges[visibleRangesForLine.ranges.length - 1].width += this._typicalHalfwidthCharacterWidth;\n }\n }\n visibleRanges[visibleRangesLen++] = new LineVisibleRanges(visibleRangesForLine.outsideRenderedLine, lineNumber, visibleRangesForLine.ranges);\n }\n if (visibleRangesLen === 0) {\n return null;\n }\n return visibleRanges;\n }\n _visibleRangesForLineRange(lineNumber, startColumn, endColumn) {\n if (this.shouldRender()) {\n // Cannot read from the DOM because it is dirty\n // i.e. the model & the dom are out of sync, so I'd be reading something stale\n return null;\n }\n if (lineNumber < this._visibleLines.getStartLineNumber() || lineNumber > this._visibleLines.getEndLineNumber()) {\n return null;\n }\n return this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(startColumn, endColumn, new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot));\n }\n visibleRangeForPosition(position) {\n const visibleRanges = this._visibleRangesForLineRange(position.lineNumber, position.column, position.column);\n if (!visibleRanges) {\n return null;\n }\n return new HorizontalPosition(visibleRanges.outsideRenderedLine, visibleRanges.ranges[0].left);\n }\n // --- implementation\n updateLineWidths() {\n this._updateLineWidths(false);\n }\n /**\n * Updates the max line width if it is fast to compute.\n * Returns true if all lines were taken into account.\n * Returns false if some lines need to be reevaluated (in a slow fashion).\n */\n _updateLineWidthsFast() {\n return this._updateLineWidths(true);\n }\n _updateLineWidthsSlow() {\n this._updateLineWidths(false);\n }\n _updateLineWidths(fast) {\n const rendStartLineNumber = this._visibleLines.getStartLineNumber();\n const rendEndLineNumber = this._visibleLines.getEndLineNumber();\n let localMaxLineWidth = 1;\n let allWidthsComputed = true;\n for (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n const visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n if (fast && !visibleLine.getWidthIsFast()) {\n // Cannot compute width in a fast way for this line\n allWidthsComputed = false;\n continue;\n }\n localMaxLineWidth = Math.max(localMaxLineWidth, visibleLine.getWidth());\n }\n if (allWidthsComputed && rendStartLineNumber === 1 && rendEndLineNumber === this._context.model.getLineCount()) {\n // we know the max line width for all the lines\n this._maxLineWidth = 0;\n }\n this._ensureMaxLineWidth(localMaxLineWidth);\n return allWidthsComputed;\n }\n _checkMonospaceFontAssumptions() {\n // Problems with monospace assumptions are more apparent for longer lines,\n // as small rounding errors start to sum up, so we will select the longest\n // line for a closer inspection\n let longestLineNumber = -1;\n let longestWidth = -1;\n const rendStartLineNumber = this._visibleLines.getStartLineNumber();\n const rendEndLineNumber = this._visibleLines.getEndLineNumber();\n for (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n const visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n if (visibleLine.needsMonospaceFontCheck()) {\n const lineWidth = visibleLine.getWidth();\n if (lineWidth > longestWidth) {\n longestWidth = lineWidth;\n longestLineNumber = lineNumber;\n }\n }\n }\n if (longestLineNumber === -1) {\n return;\n }\n if (!this._visibleLines.getVisibleLine(longestLineNumber).monospaceAssumptionsAreValid()) {\n for (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n const visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n visibleLine.onMonospaceAssumptionsInvalidated();\n }\n }\n }\n prepareRender() {\n throw new Error('Not supported');\n }\n render() {\n throw new Error('Not supported');\n }\n renderText(viewportData) {\n // (1) render lines - ensures lines are in the DOM\n this._visibleLines.renderLines(viewportData);\n this._lastRenderedData.setCurrentVisibleRange(viewportData.visibleRange);\n this.domNode.setWidth(this._context.viewLayout.getScrollWidth());\n this.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(), 1000000));\n // (2) compute horizontal scroll position:\n // - this must happen after the lines are in the DOM since it might need a line that rendered just now\n // - it might change `scrollWidth` and `scrollLeft`\n if (this._horizontalRevealRequest) {\n const horizontalRevealRequest = this._horizontalRevealRequest;\n // Check that we have the line that contains the horizontal range in the viewport\n if (viewportData.startLineNumber <= horizontalRevealRequest.minLineNumber && horizontalRevealRequest.maxLineNumber <= viewportData.endLineNumber) {\n this._horizontalRevealRequest = null;\n // allow `visibleRangesForRange2` to work\n this.onDidRender();\n // compute new scroll position\n const newScrollLeft = this._computeScrollLeftToReveal(horizontalRevealRequest);\n if (newScrollLeft) {\n if (!this._isViewportWrapping) {\n // ensure `scrollWidth` is large enough\n this._ensureMaxLineWidth(newScrollLeft.maxHorizontalOffset);\n }\n // set `scrollLeft`\n this._context.model.setScrollPosition({\n scrollLeft: newScrollLeft.scrollLeft\n }, horizontalRevealRequest.scrollType);\n }\n }\n }\n // Update max line width (not so important, it is just so the horizontal scrollbar doesn't get too small)\n if (!this._updateLineWidthsFast()) {\n // Computing the width of some lines would be slow => delay it\n this._asyncUpdateLineWidths.schedule();\n }\n if (platform.isLinux && !this._asyncCheckMonospaceFontAssumptions.isScheduled()) {\n const rendStartLineNumber = this._visibleLines.getStartLineNumber();\n const rendEndLineNumber = this._visibleLines.getEndLineNumber();\n for (let lineNumber = rendStartLineNumber; lineNumber <= rendEndLineNumber; lineNumber++) {\n const visibleLine = this._visibleLines.getVisibleLine(lineNumber);\n if (visibleLine.needsMonospaceFontCheck()) {\n this._asyncCheckMonospaceFontAssumptions.schedule();\n break;\n }\n }\n }\n // (3) handle scrolling\n this._linesContent.setLayerHinting(this._canUseLayerHinting);\n this._linesContent.setContain('strict');\n const adjustedScrollTop = this._context.viewLayout.getCurrentScrollTop() - viewportData.bigNumbersDelta;\n this._linesContent.setTop(-adjustedScrollTop);\n this._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft());\n }\n // --- width\n _ensureMaxLineWidth(lineWidth) {\n const iLineWidth = Math.ceil(lineWidth);\n if (this._maxLineWidth < iLineWidth) {\n this._maxLineWidth = iLineWidth;\n this._context.model.setMaxLineWidth(this._maxLineWidth);\n }\n }\n _computeScrollTopToRevealRange(viewport, source, range, selections, verticalType) {\n const viewportStartY = viewport.top;\n const viewportHeight = viewport.height;\n const viewportEndY = viewportStartY + viewportHeight;\n let boxIsSingleRange;\n let boxStartY;\n let boxEndY;\n // Have a box that includes one extra line height (for the horizontal scrollbar)\n if (selections && selections.length > 0) {\n let minLineNumber = selections[0].startLineNumber;\n let maxLineNumber = selections[0].endLineNumber;\n for (let i = 1, len = selections.length; i < len; i++) {\n const selection = selections[i];\n minLineNumber = Math.min(minLineNumber, selection.startLineNumber);\n maxLineNumber = Math.max(maxLineNumber, selection.endLineNumber);\n }\n boxIsSingleRange = false;\n boxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(minLineNumber);\n boxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(maxLineNumber) + this._lineHeight;\n }\n else if (range) {\n boxIsSingleRange = true;\n boxStartY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.startLineNumber);\n boxEndY = this._context.viewLayout.getVerticalOffsetForLineNumber(range.endLineNumber) + this._lineHeight;\n }\n else {\n return -1;\n }\n const shouldIgnoreScrollOff = source === 'mouse' && this._cursorSurroundingLinesStyle === 'default';\n if (!shouldIgnoreScrollOff) {\n const context = Math.min((viewportHeight / this._lineHeight) / 2, this._cursorSurroundingLines);\n boxStartY -= context * this._lineHeight;\n boxEndY += Math.max(0, (context - 1)) * this._lineHeight;\n }\n if (verticalType === 0 /* Simple */ || verticalType === 4 /* Bottom */) {\n // Reveal one line more when the last line would be covered by the scrollbar - arrow down case or revealing a line explicitly at bottom\n boxEndY += this._lineHeight;\n }\n let newScrollTop;\n if (boxEndY - boxStartY > viewportHeight) {\n // the box is larger than the viewport ... scroll to its top\n if (!boxIsSingleRange) {\n // do not reveal multiple cursors if there are more than fit the viewport\n return -1;\n }\n newScrollTop = boxStartY;\n }\n else if (verticalType === 5 /* NearTop */ || verticalType === 6 /* NearTopIfOutsideViewport */) {\n if (verticalType === 6 /* NearTopIfOutsideViewport */ && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n // Box is already in the viewport... do nothing\n newScrollTop = viewportStartY;\n }\n else {\n // We want a gap that is 20% of the viewport, but with a minimum of 5 lines\n const desiredGapAbove = Math.max(5 * this._lineHeight, viewportHeight * 0.2);\n // Try to scroll just above the box with the desired gap\n const desiredScrollTop = boxStartY - desiredGapAbove;\n // But ensure that the box is not pushed out of viewport\n const minScrollTop = boxEndY - viewportHeight;\n newScrollTop = Math.max(minScrollTop, desiredScrollTop);\n }\n }\n else if (verticalType === 1 /* Center */ || verticalType === 2 /* CenterIfOutsideViewport */) {\n if (verticalType === 2 /* CenterIfOutsideViewport */ && viewportStartY <= boxStartY && boxEndY <= viewportEndY) {\n // Box is already in the viewport... do nothing\n newScrollTop = viewportStartY;\n }\n else {\n // Box is outside the viewport... center it\n const boxMiddleY = (boxStartY + boxEndY) / 2;\n newScrollTop = Math.max(0, boxMiddleY - viewportHeight / 2);\n }\n }\n else {\n newScrollTop = this._computeMinimumScrolling(viewportStartY, viewportEndY, boxStartY, boxEndY, verticalType === 3 /* Top */, verticalType === 4 /* Bottom */);\n }\n return newScrollTop;\n }\n _computeScrollLeftToReveal(horizontalRevealRequest) {\n const viewport = this._context.viewLayout.getCurrentViewport();\n const viewportStartX = viewport.left;\n const viewportEndX = viewportStartX + viewport.width;\n let boxStartX = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n let boxEndX = 0;\n if (horizontalRevealRequest.type === 'range') {\n const visibleRanges = this._visibleRangesForLineRange(horizontalRevealRequest.lineNumber, horizontalRevealRequest.startColumn, horizontalRevealRequest.endColumn);\n if (!visibleRanges) {\n return null;\n }\n for (const visibleRange of visibleRanges.ranges) {\n boxStartX = Math.min(boxStartX, visibleRange.left);\n boxEndX = Math.max(boxEndX, visibleRange.left + visibleRange.width);\n }\n }\n else {\n for (const selection of horizontalRevealRequest.selections) {\n if (selection.startLineNumber !== selection.endLineNumber) {\n return null;\n }\n const visibleRanges = this._visibleRangesForLineRange(selection.startLineNumber, selection.startColumn, selection.endColumn);\n if (!visibleRanges) {\n return null;\n }\n for (const visibleRange of visibleRanges.ranges) {\n boxStartX = Math.min(boxStartX, visibleRange.left);\n boxEndX = Math.max(boxEndX, visibleRange.left + visibleRange.width);\n }\n }\n }\n boxStartX = Math.max(0, boxStartX - ViewLines.HORIZONTAL_EXTRA_PX);\n boxEndX += this._revealHorizontalRightPadding;\n if (horizontalRevealRequest.type === 'selections' && boxEndX - boxStartX > viewport.width) {\n return null;\n }\n const newScrollLeft = this._computeMinimumScrolling(viewportStartX, viewportEndX, boxStartX, boxEndX);\n return {\n scrollLeft: newScrollLeft,\n maxHorizontalOffset: boxEndX\n };\n }\n _computeMinimumScrolling(viewportStart, viewportEnd, boxStart, boxEnd, revealAtStart, revealAtEnd) {\n viewportStart = viewportStart | 0;\n viewportEnd = viewportEnd | 0;\n boxStart = boxStart | 0;\n boxEnd = boxEnd | 0;\n revealAtStart = !!revealAtStart;\n revealAtEnd = !!revealAtEnd;\n const viewportLength = viewportEnd - viewportStart;\n const boxLength = boxEnd - boxStart;\n if (boxLength < viewportLength) {\n // The box would fit in the viewport\n if (revealAtStart) {\n return boxStart;\n }\n if (revealAtEnd) {\n return Math.max(0, boxEnd - viewportLength);\n }\n if (boxStart < viewportStart) {\n // The box is above the viewport\n return boxStart;\n }\n else if (boxEnd > viewportEnd) {\n // The box is below the viewport\n return Math.max(0, boxEnd - viewportLength);\n }\n }\n else {\n // The box would not fit in the viewport\n // Reveal the beginning of the box\n return boxStart;\n }\n return viewportStart;\n }\n}\n/**\n * Adds this amount of pixels to the right of lines (no-one wants to type near the edge of the viewport)\n */\nViewLines.HORIZONTAL_EXTRA_PX = 30;\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 *--------------------------------------------------------------------------------------------*/\nimport './linesDecorations.css';\nimport { DecorationToRender, DedupOverlay } from '../glyphMargin/glyphMargin.js';\nexport class LinesDecorationsOverlay extends DedupOverlay {\n constructor(context) {\n super();\n this._context = context;\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._decorationsLeft = layoutInfo.decorationsLeft;\n this._decorationsWidth = layoutInfo.decorationsWidth;\n this._renderResult = null;\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n this._renderResult = null;\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._decorationsLeft = layoutInfo.decorationsLeft;\n this._decorationsWidth = layoutInfo.decorationsWidth;\n return true;\n }\n onDecorationsChanged(e) {\n return true;\n }\n onFlushed(e) {\n return true;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n // --- end event handlers\n _getDecorations(ctx) {\n const decorations = ctx.getDecorationsInViewport();\n let r = [], rLen = 0;\n for (let i = 0, len = decorations.length; i < len; i++) {\n const d = decorations[i];\n const linesDecorationsClassName = d.options.linesDecorationsClassName;\n if (linesDecorationsClassName) {\n r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, linesDecorationsClassName);\n }\n const firstLineDecorationClassName = d.options.firstLineDecorationClassName;\n if (firstLineDecorationClassName) {\n r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.startLineNumber, firstLineDecorationClassName);\n }\n }\n return r;\n }\n prepareRender(ctx) {\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n const toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));\n const left = this._decorationsLeft.toString();\n const width = this._decorationsWidth.toString();\n const common = '\" style=\"left:' + left + 'px;width:' + width + 'px;\"></div>';\n const output = [];\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - visibleStartLineNumber;\n const classNames = toRender[lineIndex];\n let lineOutput = '';\n for (let i = 0, len = classNames.length; i < len; i++) {\n lineOutput += '<div class=\"cldr ' + classNames[i] + common;\n }\n output[lineIndex] = lineOutput;\n }\n this._renderResult = output;\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderResult) {\n return '';\n }\n return this._renderResult[lineNumber - startLineNumber];\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './marginDecorations.css';\nimport { DecorationToRender, DedupOverlay } from '../glyphMargin/glyphMargin.js';\nexport class MarginViewLineDecorationsOverlay extends DedupOverlay {\n constructor(context) {\n super();\n this._context = context;\n this._renderResult = null;\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n this._renderResult = null;\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n return true;\n }\n onDecorationsChanged(e) {\n return true;\n }\n onFlushed(e) {\n return true;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n // --- end event handlers\n _getDecorations(ctx) {\n const decorations = ctx.getDecorationsInViewport();\n let r = [], rLen = 0;\n for (let i = 0, len = decorations.length; i < len; i++) {\n const d = decorations[i];\n const marginClassName = d.options.marginClassName;\n if (marginClassName) {\n r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, marginClassName);\n }\n }\n return r;\n }\n prepareRender(ctx) {\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n const toRender = this._render(visibleStartLineNumber, visibleEndLineNumber, this._getDecorations(ctx));\n const output = [];\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - visibleStartLineNumber;\n const classNames = toRender[lineIndex];\n let lineOutput = '';\n for (let i = 0, len = classNames.length; i < len; i++) {\n lineOutput += '<div class=\"cmdr ' + classNames[i] + '\" style=\"\"></div>';\n }\n output[lineIndex] = lineOutput;\n }\n this._renderResult = output;\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderResult) {\n return '';\n }\n return this._renderResult[lineNumber - startLineNumber];\n }\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/**\n * A very VM friendly rgba datastructure.\n * Please don't touch unless you take a look at the IR.\n */\nexport class RGBA8 {\n constructor(r, g, b, a) {\n this.r = RGBA8._clamp(r);\n this.g = RGBA8._clamp(g);\n this.b = RGBA8._clamp(b);\n this.a = RGBA8._clamp(a);\n }\n equals(other) {\n return (this.r === other.r\n && this.g === other.g\n && this.b === other.b\n && this.a === other.a);\n }\n static _clamp(c) {\n if (c < 0) {\n return 0;\n }\n if (c > 255) {\n return 255;\n }\n return c | 0;\n }\n}\nRGBA8.Empty = new RGBA8(0, 0, 0, 0);\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { RGBA8 } from '../core/rgba.js';\nimport { TokenizationRegistry } from '../modes.js';\nexport class MinimapTokensColorTracker {\n constructor() {\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this._updateColorMap();\n TokenizationRegistry.onDidChange(e => {\n if (e.changedColorMap) {\n this._updateColorMap();\n }\n });\n }\n static getInstance() {\n if (!this._INSTANCE) {\n this._INSTANCE = new MinimapTokensColorTracker();\n }\n return this._INSTANCE;\n }\n _updateColorMap() {\n const colorMap = TokenizationRegistry.getColorMap();\n if (!colorMap) {\n this._colors = [RGBA8.Empty];\n this._backgroundIsLight = true;\n return;\n }\n this._colors = [RGBA8.Empty];\n for (let colorId = 1; colorId < colorMap.length; colorId++) {\n const source = colorMap[colorId].rgba;\n // Use a VM friendly data-type\n this._colors[colorId] = new RGBA8(source.r, source.g, source.b, Math.round(source.a * 255));\n }\n let backgroundLuminosity = colorMap[2 /* DefaultBackground */].getRelativeLuminance();\n this._backgroundIsLight = backgroundLuminosity >= 0.5;\n this._onDidChange.fire(undefined);\n }\n getColor(colorId) {\n if (colorId < 1 || colorId >= this._colors.length) {\n // background color (basically invisible)\n colorId = 2 /* DefaultBackground */;\n }\n return this._colors[colorId];\n }\n backgroundIsLight() {\n return this._backgroundIsLight;\n }\n}\nMinimapTokensColorTracker._INSTANCE = null;\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 *--------------------------------------------------------------------------------------------*/\nexport const allCharCodes = (() => {\n const v = [];\n for (let i = 32 /* START_CH_CODE */; i <= 126 /* END_CH_CODE */; i++) {\n v.push(i);\n }\n v.push(65533 /* UNKNOWN_CODE */);\n return v;\n})();\nexport const getCharIndex = (chCode, fontScale) => {\n chCode -= 32 /* START_CH_CODE */;\n if (chCode < 0 || chCode > 96 /* CHAR_COUNT */) {\n if (fontScale <= 2) {\n // for smaller scales, we can get away with using any ASCII character...\n return (chCode + 96 /* CHAR_COUNT */) % 96 /* CHAR_COUNT */;\n }\n return 96 /* CHAR_COUNT */ - 1; // unknown symbol\n }\n return chCode;\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 *--------------------------------------------------------------------------------------------*/\nimport { getCharIndex } from './minimapCharSheet.js';\nimport { toUint8 } from '../../../../base/common/uint.js';\nexport class MinimapCharRenderer {\n constructor(charData, scale) {\n this.scale = scale;\n this.charDataNormal = MinimapCharRenderer.soften(charData, 12 / 15);\n this.charDataLight = MinimapCharRenderer.soften(charData, 50 / 60);\n }\n static soften(input, ratio) {\n let result = new Uint8ClampedArray(input.length);\n for (let i = 0, len = input.length; i < len; i++) {\n result[i] = toUint8(input[i] * ratio);\n }\n return result;\n }\n renderChar(target, dx, dy, chCode, color, backgroundColor, fontScale, useLighterFont, force1pxHeight) {\n const charWidth = 1 /* BASE_CHAR_WIDTH */ * this.scale;\n const charHeight = 2 /* BASE_CHAR_HEIGHT */ * this.scale;\n const renderHeight = (force1pxHeight ? 1 : charHeight);\n if (dx + charWidth > target.width || dy + renderHeight > target.height) {\n console.warn('bad render request outside image data');\n return;\n }\n const charData = useLighterFont ? this.charDataLight : this.charDataNormal;\n const charIndex = getCharIndex(chCode, fontScale);\n const destWidth = target.width * 4 /* RGBA_CHANNELS_CNT */;\n const backgroundR = backgroundColor.r;\n const backgroundG = backgroundColor.g;\n const backgroundB = backgroundColor.b;\n const deltaR = color.r - backgroundR;\n const deltaG = color.g - backgroundG;\n const deltaB = color.b - backgroundB;\n const dest = target.data;\n let sourceOffset = charIndex * charWidth * charHeight;\n let row = dy * destWidth + dx * 4 /* RGBA_CHANNELS_CNT */;\n for (let y = 0; y < renderHeight; y++) {\n let column = row;\n for (let x = 0; x < charWidth; x++) {\n const c = charData[sourceOffset++] / 255;\n dest[column++] = backgroundR + deltaR * c;\n dest[column++] = backgroundG + deltaG * c;\n dest[column++] = backgroundB + deltaB * c;\n column++;\n }\n row += destWidth;\n }\n }\n blockRenderChar(target, dx, dy, color, backgroundColor, useLighterFont, force1pxHeight) {\n const charWidth = 1 /* BASE_CHAR_WIDTH */ * this.scale;\n const charHeight = 2 /* BASE_CHAR_HEIGHT */ * this.scale;\n const renderHeight = (force1pxHeight ? 1 : charHeight);\n if (dx + charWidth > target.width || dy + renderHeight > target.height) {\n console.warn('bad render request outside image data');\n return;\n }\n const destWidth = target.width * 4 /* RGBA_CHANNELS_CNT */;\n const c = 0.5;\n const backgroundR = backgroundColor.r;\n const backgroundG = backgroundColor.g;\n const backgroundB = backgroundColor.b;\n const deltaR = color.r - backgroundR;\n const deltaG = color.g - backgroundG;\n const deltaB = color.b - backgroundB;\n const colorR = backgroundR + deltaR * c;\n const colorG = backgroundG + deltaG * c;\n const colorB = backgroundB + deltaB * c;\n const dest = target.data;\n let row = dy * destWidth + dx * 4 /* RGBA_CHANNELS_CNT */;\n for (let y = 0; y < renderHeight; y++) {\n let column = row;\n for (let x = 0; x < charWidth; x++) {\n dest[column++] = colorR;\n dest[column++] = colorG;\n dest[column++] = colorB;\n column++;\n }\n row += destWidth;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { once } from '../../../../base/common/functional.js';\nconst charTable = {\n '0': 0,\n '1': 1,\n '2': 2,\n '3': 3,\n '4': 4,\n '5': 5,\n '6': 6,\n '7': 7,\n '8': 8,\n '9': 9,\n A: 10,\n B: 11,\n C: 12,\n D: 13,\n E: 14,\n F: 15\n};\nconst decodeData = (str) => {\n const output = new Uint8ClampedArray(str.length / 2);\n for (let i = 0; i < str.length; i += 2) {\n output[i >> 1] = (charTable[str[i]] << 4) | (charTable[str[i + 1]] & 0xF);\n }\n return output;\n};\n/*\nconst encodeData = (data: Uint8ClampedArray, length: string) => {\n const chars = '0123456789ABCDEF';\n let output = '';\n for (let i = 0; i < data.length; i++) {\n output += chars[data[i] >> 4] + chars[data[i] & 0xf];\n }\n return output;\n};\n*/\n/**\n * Map of minimap scales to prebaked sample data at those scales. We don't\n * sample much larger data, because then font family becomes visible, which\n * is use-configurable.\n */\nexport const prebakedMiniMaps = {\n 1: once(() => decodeData('0000511D6300CF609C709645A78432005642574171487021003C451900274D35D762755E8B629C5BA856AF57BA649530C167D1512A272A3F6038604460398526BCA2A968DB6F8957C768BE5FBE2FB467CF5D8D5B795DC7625B5DFF50DE64C466DB2FC47CD860A65E9A2EB96CB54CE06DA763AB2EA26860524D3763536601005116008177A8705E53AB738E6A982F88BAA35B5F5B626D9C636B449B737E5B7B678598869A662F6B5B8542706C704C80736A607578685B70594A49715A4522E792')),\n 2: once(() => decodeData('000000000000000055394F383D2800008B8B1F210002000081B1CBCBCC820000847AAF6B9AAF2119BE08B8881AD60000A44FD07DCCF107015338130C00000000385972265F390B406E2437634B4B48031B12B8A0847000001E15B29A402F0000000000004B33460B00007A752C2A0000000000004D3900000084394B82013400ABA5CFC7AD9C0302A45A3E5A98AB000089A43382D97900008BA54AA087A70A0248A6A7AE6DBE0000BF6F94987EA40A01A06DCFA7A7A9030496C32F77891D0000A99FB1A0AFA80603B29AB9CA75930D010C0948354D3900000C0948354F37460D0028BE673D8400000000AF9D7B6E00002B007AA8933400007AA642675C2700007984CFB9C3985B768772A8A6B7B20000CAAECAAFC4B700009F94A6009F840009D09F9BA4CA9C0000CC8FC76DC87F0000C991C472A2000000A894A48CA7B501079BA2C9C69BA20000B19A5D3FA89000005CA6009DA2960901B0A7F0669FB200009D009E00B7890000DAD0F5D092820000D294D4C48BD10000B5A7A4A3B1A50402CAB6CBA6A2000000B5A7A4A3B1A8044FCDADD19D9CB00000B7778F7B8AAE0803C9AB5D3F5D3F00009EA09EA0BAB006039EA0989A8C7900009B9EF4D6B7C00000A9A7816CACA80000ABAC84705D3F000096DA635CDC8C00006F486F266F263D4784006124097B00374F6D2D6D2D6D4A3A95872322000000030000000000008D8939130000000000002E22A5C9CBC70600AB25C0B5C9B400061A2DB04CA67001082AA6BEBEBFC606002321DACBC19E03087AA08B6768380000282FBAC0B8CA7A88AD25BBA5A29900004C396C5894A6000040485A6E356E9442A32CD17EADA70000B4237923628600003E2DE9C1D7B500002F25BBA5A2990000231DB6AFB4A804023025C0B5CAB588062B2CBDBEC0C706882435A75CA20000002326BD6A82A908048B4B9A5A668000002423A09CB4BB060025259C9D8A7900001C1FCAB2C7C700002A2A9387ABA200002626A4A47D6E9D14333163A0C87500004B6F9C2D643A257049364936493647358A34438355497F1A0000A24C1D590000D38DFFBDD4CD3126'))\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 *--------------------------------------------------------------------------------------------*/\nimport { MinimapCharRenderer } from './minimapCharRenderer.js';\nimport { allCharCodes } from './minimapCharSheet.js';\nimport { prebakedMiniMaps } from './minimapPreBaked.js';\nimport { toUint8 } from '../../../../base/common/uint.js';\n/**\n * Creates character renderers. It takes a 'scale' that determines how large\n * characters should be drawn. Using this, it draws data into a canvas and\n * then downsamples the characters as necessary for the current display.\n * This makes rendering more efficient, rather than drawing a full (tiny)\n * font, or downsampling in real-time.\n */\nexport class MinimapCharRendererFactory {\n /**\n * Creates a new character renderer factory with the given scale.\n */\n static create(scale, fontFamily) {\n // renderers are immutable. By default we'll 'create' a new minimap\n // character renderer whenever we switch editors, no need to do extra work.\n if (this.lastCreated && scale === this.lastCreated.scale && fontFamily === this.lastFontFamily) {\n return this.lastCreated;\n }\n let factory;\n if (prebakedMiniMaps[scale]) {\n factory = new MinimapCharRenderer(prebakedMiniMaps[scale](), scale);\n }\n else {\n factory = MinimapCharRendererFactory.createFromSampleData(MinimapCharRendererFactory.createSampleData(fontFamily).data, scale);\n }\n this.lastFontFamily = fontFamily;\n this.lastCreated = factory;\n return factory;\n }\n /**\n * Creates the font sample data, writing to a canvas.\n */\n static createSampleData(fontFamily) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n canvas.style.height = `${16 /* SAMPLED_CHAR_HEIGHT */}px`;\n canvas.height = 16 /* SAMPLED_CHAR_HEIGHT */;\n canvas.width = 96 /* CHAR_COUNT */ * 10 /* SAMPLED_CHAR_WIDTH */;\n canvas.style.width = 96 /* CHAR_COUNT */ * 10 /* SAMPLED_CHAR_WIDTH */ + 'px';\n ctx.fillStyle = '#ffffff';\n ctx.font = `bold ${16 /* SAMPLED_CHAR_HEIGHT */}px ${fontFamily}`;\n ctx.textBaseline = 'middle';\n let x = 0;\n for (const code of allCharCodes) {\n ctx.fillText(String.fromCharCode(code), x, 16 /* SAMPLED_CHAR_HEIGHT */ / 2);\n x += 10 /* SAMPLED_CHAR_WIDTH */;\n }\n return ctx.getImageData(0, 0, 96 /* CHAR_COUNT */ * 10 /* SAMPLED_CHAR_WIDTH */, 16 /* SAMPLED_CHAR_HEIGHT */);\n }\n /**\n * Creates a character renderer from the canvas sample data.\n */\n static createFromSampleData(source, scale) {\n const expectedLength = 16 /* SAMPLED_CHAR_HEIGHT */ * 10 /* SAMPLED_CHAR_WIDTH */ * 4 /* RGBA_CHANNELS_CNT */ * 96 /* CHAR_COUNT */;\n if (source.length !== expectedLength) {\n throw new Error('Unexpected source in MinimapCharRenderer');\n }\n let charData = MinimapCharRendererFactory._downsample(source, scale);\n return new MinimapCharRenderer(charData, scale);\n }\n static _downsampleChar(source, sourceOffset, dest, destOffset, scale) {\n const width = 1 /* BASE_CHAR_WIDTH */ * scale;\n const height = 2 /* BASE_CHAR_HEIGHT */ * scale;\n let targetIndex = destOffset;\n let brightest = 0;\n // This is essentially an ad-hoc rescaling algorithm. Standard approaches\n // like bicubic interpolation are awesome for scaling between image sizes,\n // but don't work so well when scaling to very small pixel values, we end\n // up with blurry, indistinct forms.\n //\n // The approach taken here is simply mapping each source pixel to the target\n // pixels, and taking the weighted values for all pixels in each, and then\n // averaging them out. Finally we apply an intensity boost in _downsample,\n // since when scaling to the smallest pixel sizes there's more black space\n // which causes characters to be much less distinct.\n for (let y = 0; y < height; y++) {\n // 1. For this destination pixel, get the source pixels we're sampling\n // from (x1, y1) to the next pixel (x2, y2)\n const sourceY1 = (y / height) * 16 /* SAMPLED_CHAR_HEIGHT */;\n const sourceY2 = ((y + 1) / height) * 16 /* SAMPLED_CHAR_HEIGHT */;\n for (let x = 0; x < width; x++) {\n const sourceX1 = (x / width) * 10 /* SAMPLED_CHAR_WIDTH */;\n const sourceX2 = ((x + 1) / width) * 10 /* SAMPLED_CHAR_WIDTH */;\n // 2. Sample all of them, summing them up and weighting them. Similar\n // to bilinear interpolation.\n let value = 0;\n let samples = 0;\n for (let sy = sourceY1; sy < sourceY2; sy++) {\n const sourceRow = sourceOffset + Math.floor(sy) * 3840 /* RGBA_SAMPLED_ROW_WIDTH */;\n const yBalance = 1 - (sy - Math.floor(sy));\n for (let sx = sourceX1; sx < sourceX2; sx++) {\n const xBalance = 1 - (sx - Math.floor(sx));\n const sourceIndex = sourceRow + Math.floor(sx) * 4 /* RGBA_CHANNELS_CNT */;\n const weight = xBalance * yBalance;\n samples += weight;\n value += ((source[sourceIndex] * source[sourceIndex + 3]) / 255) * weight;\n }\n }\n const final = value / samples;\n brightest = Math.max(brightest, final);\n dest[targetIndex++] = toUint8(final);\n }\n }\n return brightest;\n }\n static _downsample(data, scale) {\n const pixelsPerCharacter = 2 /* BASE_CHAR_HEIGHT */ * scale * 1 /* BASE_CHAR_WIDTH */ * scale;\n const resultLen = pixelsPerCharacter * 96 /* CHAR_COUNT */;\n const result = new Uint8ClampedArray(resultLen);\n let resultOffset = 0;\n let sourceOffset = 0;\n let brightest = 0;\n for (let charIndex = 0; charIndex < 96 /* CHAR_COUNT */; charIndex++) {\n brightest = Math.max(brightest, this._downsampleChar(data, sourceOffset, result, resultOffset, scale));\n resultOffset += pixelsPerCharacter;\n sourceOffset += 10 /* SAMPLED_CHAR_WIDTH */ * 4 /* RGBA_CHANNELS_CNT */;\n }\n if (brightest > 0) {\n const adjust = 255 / brightest;\n for (let i = 0; i < resultLen; i++) {\n result[i] *= adjust;\n }\n }\n return result;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './minimap.css';\nimport * as dom from '../../../../base/browser/dom.js';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { GlobalMouseMoveMonitor, standardMouseMoveMerger } from '../../../../base/browser/globalMouseMoveMonitor.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { RenderedLinesCollection } from '../../view/viewLayer.js';\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\nimport { MINIMAP_GUTTER_WIDTH, EditorLayoutInfoComputer } from '../../../common/config/editorOptions.js';\nimport { Range } from '../../../common/core/range.js';\nimport { RGBA8 } from '../../../common/core/rgba.js';\nimport { MinimapTokensColorTracker } from '../../../common/viewModel/minimapTokensColorTracker.js';\nimport { ViewModelDecoration } from '../../../common/viewModel/viewModel.js';\nimport { minimapSelection, scrollbarShadow, minimapBackground, minimapSliderBackground, minimapSliderHoverBackground, minimapSliderActiveBackground } from '../../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { EventType, Gesture } from '../../../../base/browser/touch.js';\nimport { MinimapCharRendererFactory } from './minimapCharRendererFactory.js';\nimport { MinimapPosition } from '../../../common/model.js';\nimport { once } from '../../../../base/common/functional.js';\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst MOUSE_DRAG_RESET_DISTANCE = 140;\nconst GUTTER_DECORATION_WIDTH = 2;\nclass MinimapOptions {\n constructor(configuration, theme, tokensColorTracker) {\n const options = configuration.options;\n const pixelRatio = options.get(125 /* pixelRatio */);\n const layoutInfo = options.get(127 /* layoutInfo */);\n const minimapLayout = layoutInfo.minimap;\n const fontInfo = options.get(40 /* fontInfo */);\n const minimapOpts = options.get(61 /* minimap */);\n this.renderMinimap = minimapLayout.renderMinimap;\n this.size = minimapOpts.size;\n this.minimapHeightIsEditorHeight = minimapLayout.minimapHeightIsEditorHeight;\n this.scrollBeyondLastLine = options.get(91 /* scrollBeyondLastLine */);\n this.showSlider = minimapOpts.showSlider;\n this.pixelRatio = pixelRatio;\n this.typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n this.lineHeight = options.get(55 /* lineHeight */);\n this.minimapLeft = minimapLayout.minimapLeft;\n this.minimapWidth = minimapLayout.minimapWidth;\n this.minimapHeight = layoutInfo.height;\n this.canvasInnerWidth = minimapLayout.minimapCanvasInnerWidth;\n this.canvasInnerHeight = minimapLayout.minimapCanvasInnerHeight;\n this.canvasOuterWidth = minimapLayout.minimapCanvasOuterWidth;\n this.canvasOuterHeight = minimapLayout.minimapCanvasOuterHeight;\n this.isSampling = minimapLayout.minimapIsSampling;\n this.editorHeight = layoutInfo.height;\n this.fontScale = minimapLayout.minimapScale;\n this.minimapLineHeight = minimapLayout.minimapLineHeight;\n this.minimapCharWidth = 1 /* BASE_CHAR_WIDTH */ * this.fontScale;\n this.charRenderer = once(() => MinimapCharRendererFactory.create(this.fontScale, fontInfo.fontFamily));\n this.backgroundColor = MinimapOptions._getMinimapBackground(theme, tokensColorTracker);\n }\n static _getMinimapBackground(theme, tokensColorTracker) {\n const themeColor = theme.getColor(minimapBackground);\n if (themeColor) {\n return new RGBA8(themeColor.rgba.r, themeColor.rgba.g, themeColor.rgba.b, themeColor.rgba.a);\n }\n return tokensColorTracker.getColor(2 /* DefaultBackground */);\n }\n equals(other) {\n return (this.renderMinimap === other.renderMinimap\n && this.size === other.size\n && this.minimapHeightIsEditorHeight === other.minimapHeightIsEditorHeight\n && this.scrollBeyondLastLine === other.scrollBeyondLastLine\n && this.showSlider === other.showSlider\n && this.pixelRatio === other.pixelRatio\n && this.typicalHalfwidthCharacterWidth === other.typicalHalfwidthCharacterWidth\n && this.lineHeight === other.lineHeight\n && this.minimapLeft === other.minimapLeft\n && this.minimapWidth === other.minimapWidth\n && this.minimapHeight === other.minimapHeight\n && this.canvasInnerWidth === other.canvasInnerWidth\n && this.canvasInnerHeight === other.canvasInnerHeight\n && this.canvasOuterWidth === other.canvasOuterWidth\n && this.canvasOuterHeight === other.canvasOuterHeight\n && this.isSampling === other.isSampling\n && this.editorHeight === other.editorHeight\n && this.fontScale === other.fontScale\n && this.minimapLineHeight === other.minimapLineHeight\n && this.minimapCharWidth === other.minimapCharWidth\n && this.backgroundColor && this.backgroundColor.equals(other.backgroundColor));\n }\n}\nclass MinimapLayout {\n constructor(scrollTop, scrollHeight, sliderNeeded, computedSliderRatio, sliderTop, sliderHeight, startLineNumber, endLineNumber) {\n this.scrollTop = scrollTop;\n this.scrollHeight = scrollHeight;\n this.sliderNeeded = sliderNeeded;\n this._computedSliderRatio = computedSliderRatio;\n this.sliderTop = sliderTop;\n this.sliderHeight = sliderHeight;\n this.startLineNumber = startLineNumber;\n this.endLineNumber = endLineNumber;\n }\n /**\n * Compute a desired `scrollPosition` such that the slider moves by `delta`.\n */\n getDesiredScrollTopFromDelta(delta) {\n return Math.round(this.scrollTop + delta / this._computedSliderRatio);\n }\n getDesiredScrollTopFromTouchLocation(pageY) {\n return Math.round((pageY - this.sliderHeight / 2) / this._computedSliderRatio);\n }\n static create(options, viewportStartLineNumber, viewportEndLineNumber, viewportStartLineNumberVerticalOffset, viewportHeight, viewportContainsWhitespaceGaps, lineCount, realLineCount, scrollTop, scrollHeight, previousLayout) {\n const pixelRatio = options.pixelRatio;\n const minimapLineHeight = options.minimapLineHeight;\n const minimapLinesFitting = Math.floor(options.canvasInnerHeight / minimapLineHeight);\n const lineHeight = options.lineHeight;\n if (options.minimapHeightIsEditorHeight) {\n const logicalScrollHeight = (realLineCount * options.lineHeight\n + (options.scrollBeyondLastLine ? viewportHeight - options.lineHeight : 0));\n const sliderHeight = Math.max(1, Math.floor(viewportHeight * viewportHeight / logicalScrollHeight));\n const maxMinimapSliderTop = Math.max(0, options.minimapHeight - sliderHeight);\n // The slider can move from 0 to `maxMinimapSliderTop`\n // in the same way `scrollTop` can move from 0 to `scrollHeight` - `viewportHeight`.\n const computedSliderRatio = (maxMinimapSliderTop) / (scrollHeight - viewportHeight);\n const sliderTop = (scrollTop * computedSliderRatio);\n const sliderNeeded = (maxMinimapSliderTop > 0);\n const maxLinesFitting = Math.floor(options.canvasInnerHeight / options.minimapLineHeight);\n return new MinimapLayout(scrollTop, scrollHeight, sliderNeeded, computedSliderRatio, sliderTop, sliderHeight, 1, Math.min(lineCount, maxLinesFitting));\n }\n // The visible line count in a viewport can change due to a number of reasons:\n // a) with the same viewport width, different scroll positions can result in partial lines being visible:\n // e.g. for a line height of 20, and a viewport height of 600\n // * scrollTop = 0 => visible lines are [1, 30]\n // * scrollTop = 10 => visible lines are [1, 31] (with lines 1 and 31 partially visible)\n // * scrollTop = 20 => visible lines are [2, 31]\n // b) whitespace gaps might make their way in the viewport (which results in a decrease in the visible line count)\n // c) we could be in the scroll beyond last line case (which also results in a decrease in the visible line count, down to possibly only one line being visible)\n // We must first establish a desirable slider height.\n let sliderHeight;\n if (viewportContainsWhitespaceGaps && viewportEndLineNumber !== lineCount) {\n // case b) from above: there are whitespace gaps in the viewport.\n // In this case, the height of the slider directly reflects the visible line count.\n const viewportLineCount = viewportEndLineNumber - viewportStartLineNumber + 1;\n sliderHeight = Math.floor(viewportLineCount * minimapLineHeight / pixelRatio);\n }\n else {\n // The slider has a stable height\n const expectedViewportLineCount = viewportHeight / lineHeight;\n sliderHeight = Math.floor(expectedViewportLineCount * minimapLineHeight / pixelRatio);\n }\n let maxMinimapSliderTop;\n if (options.scrollBeyondLastLine) {\n // The minimap slider, when dragged all the way down, will contain the last line at its top\n maxMinimapSliderTop = (lineCount - 1) * minimapLineHeight / pixelRatio;\n }\n else {\n // The minimap slider, when dragged all the way down, will contain the last line at its bottom\n maxMinimapSliderTop = Math.max(0, lineCount * minimapLineHeight / pixelRatio - sliderHeight);\n }\n maxMinimapSliderTop = Math.min(options.minimapHeight - sliderHeight, maxMinimapSliderTop);\n // The slider can move from 0 to `maxMinimapSliderTop`\n // in the same way `scrollTop` can move from 0 to `scrollHeight` - `viewportHeight`.\n const computedSliderRatio = (maxMinimapSliderTop) / (scrollHeight - viewportHeight);\n const sliderTop = (scrollTop * computedSliderRatio);\n let extraLinesAtTheBottom = 0;\n if (options.scrollBeyondLastLine) {\n const expectedViewportLineCount = viewportHeight / lineHeight;\n extraLinesAtTheBottom = expectedViewportLineCount - 1;\n }\n if (minimapLinesFitting >= lineCount + extraLinesAtTheBottom) {\n // All lines fit in the minimap\n const startLineNumber = 1;\n const endLineNumber = lineCount;\n const sliderNeeded = (maxMinimapSliderTop > 0);\n return new MinimapLayout(scrollTop, scrollHeight, sliderNeeded, computedSliderRatio, sliderTop, sliderHeight, startLineNumber, endLineNumber);\n }\n else {\n let startLineNumber = Math.max(1, Math.floor(viewportStartLineNumber - sliderTop * pixelRatio / minimapLineHeight));\n // Avoid flickering caused by a partial viewport start line\n // by being consistent w.r.t. the previous layout decision\n if (previousLayout && previousLayout.scrollHeight === scrollHeight) {\n if (previousLayout.scrollTop > scrollTop) {\n // Scrolling up => never increase `startLineNumber`\n startLineNumber = Math.min(startLineNumber, previousLayout.startLineNumber);\n }\n if (previousLayout.scrollTop < scrollTop) {\n // Scrolling down => never decrease `startLineNumber`\n startLineNumber = Math.max(startLineNumber, previousLayout.startLineNumber);\n }\n }\n const endLineNumber = Math.min(lineCount, startLineNumber + minimapLinesFitting - 1);\n const partialLine = (scrollTop - viewportStartLineNumberVerticalOffset) / lineHeight;\n const sliderTopAligned = (viewportStartLineNumber - startLineNumber + partialLine) * minimapLineHeight / pixelRatio;\n return new MinimapLayout(scrollTop, scrollHeight, true, computedSliderRatio, sliderTopAligned, sliderHeight, startLineNumber, endLineNumber);\n }\n }\n}\nclass MinimapLine {\n constructor(dy) {\n this.dy = dy;\n }\n onContentChanged() {\n this.dy = -1;\n }\n onTokensChanged() {\n this.dy = -1;\n }\n}\nMinimapLine.INVALID = new MinimapLine(-1);\nclass RenderData {\n constructor(renderedLayout, imageData, lines) {\n this.renderedLayout = renderedLayout;\n this._imageData = imageData;\n this._renderedLines = new RenderedLinesCollection(() => MinimapLine.INVALID);\n this._renderedLines._set(renderedLayout.startLineNumber, lines);\n }\n /**\n * Check if the current RenderData matches accurately the new desired layout and no painting is needed.\n */\n linesEquals(layout) {\n if (!this.scrollEquals(layout)) {\n return false;\n }\n const tmp = this._renderedLines._get();\n const lines = tmp.lines;\n for (let i = 0, len = lines.length; i < len; i++) {\n if (lines[i].dy === -1) {\n // This line is invalid\n return false;\n }\n }\n return true;\n }\n /**\n * Check if the current RenderData matches the new layout's scroll position\n */\n scrollEquals(layout) {\n return this.renderedLayout.startLineNumber === layout.startLineNumber\n && this.renderedLayout.endLineNumber === layout.endLineNumber;\n }\n _get() {\n const tmp = this._renderedLines._get();\n return {\n imageData: this._imageData,\n rendLineNumberStart: tmp.rendLineNumberStart,\n lines: tmp.lines\n };\n }\n onLinesChanged(changeFromLineNumber, changeToLineNumber) {\n return this._renderedLines.onLinesChanged(changeFromLineNumber, changeToLineNumber);\n }\n onLinesDeleted(deleteFromLineNumber, deleteToLineNumber) {\n this._renderedLines.onLinesDeleted(deleteFromLineNumber, deleteToLineNumber);\n }\n onLinesInserted(insertFromLineNumber, insertToLineNumber) {\n this._renderedLines.onLinesInserted(insertFromLineNumber, insertToLineNumber);\n }\n onTokensChanged(ranges) {\n return this._renderedLines.onTokensChanged(ranges);\n }\n}\n/**\n * Some sort of double buffering.\n *\n * Keeps two buffers around that will be rotated for painting.\n * Always gives a buffer that is filled with the background color.\n */\nclass MinimapBuffers {\n constructor(ctx, WIDTH, HEIGHT, background) {\n this._backgroundFillData = MinimapBuffers._createBackgroundFillData(WIDTH, HEIGHT, background);\n this._buffers = [\n ctx.createImageData(WIDTH, HEIGHT),\n ctx.createImageData(WIDTH, HEIGHT)\n ];\n this._lastUsedBuffer = 0;\n }\n getBuffer() {\n // rotate buffers\n this._lastUsedBuffer = 1 - this._lastUsedBuffer;\n const result = this._buffers[this._lastUsedBuffer];\n // fill with background color\n result.data.set(this._backgroundFillData);\n return result;\n }\n static _createBackgroundFillData(WIDTH, HEIGHT, background) {\n const backgroundR = background.r;\n const backgroundG = background.g;\n const backgroundB = background.b;\n const result = new Uint8ClampedArray(WIDTH * HEIGHT * 4);\n let offset = 0;\n for (let i = 0; i < HEIGHT; i++) {\n for (let j = 0; j < WIDTH; j++) {\n result[offset] = backgroundR;\n result[offset + 1] = backgroundG;\n result[offset + 2] = backgroundB;\n result[offset + 3] = 255;\n offset += 4;\n }\n }\n return result;\n }\n}\nclass MinimapSamplingState {\n constructor(samplingRatio, minimapLines) {\n this.samplingRatio = samplingRatio;\n this.minimapLines = minimapLines;\n }\n static compute(options, viewLineCount, oldSamplingState) {\n if (options.renderMinimap === 0 /* None */ || !options.isSampling) {\n return [null, []];\n }\n // ratio is intentionally not part of the layout to avoid the layout changing all the time\n // so we need to recompute it again...\n const pixelRatio = options.pixelRatio;\n const lineHeight = options.lineHeight;\n const scrollBeyondLastLine = options.scrollBeyondLastLine;\n const { minimapLineCount } = EditorLayoutInfoComputer.computeContainedMinimapLineCount({\n viewLineCount: viewLineCount,\n scrollBeyondLastLine: scrollBeyondLastLine,\n height: options.editorHeight,\n lineHeight: lineHeight,\n pixelRatio: pixelRatio\n });\n const ratio = viewLineCount / minimapLineCount;\n const halfRatio = ratio / 2;\n if (!oldSamplingState || oldSamplingState.minimapLines.length === 0) {\n let result = [];\n result[0] = 1;\n if (minimapLineCount > 1) {\n for (let i = 0, lastIndex = minimapLineCount - 1; i < lastIndex; i++) {\n result[i] = Math.round(i * ratio + halfRatio);\n }\n result[minimapLineCount - 1] = viewLineCount;\n }\n return [new MinimapSamplingState(ratio, result), []];\n }\n const oldMinimapLines = oldSamplingState.minimapLines;\n const oldLength = oldMinimapLines.length;\n let result = [];\n let oldIndex = 0;\n let oldDeltaLineCount = 0;\n let minViewLineNumber = 1;\n const MAX_EVENT_COUNT = 10; // generate at most 10 events, if there are more than 10 changes, just flush all previous data\n let events = [];\n let lastEvent = null;\n for (let i = 0; i < minimapLineCount; i++) {\n const fromViewLineNumber = Math.max(minViewLineNumber, Math.round(i * ratio));\n const toViewLineNumber = Math.max(fromViewLineNumber, Math.round((i + 1) * ratio));\n while (oldIndex < oldLength && oldMinimapLines[oldIndex] < fromViewLineNumber) {\n if (events.length < MAX_EVENT_COUNT) {\n const oldMinimapLineNumber = oldIndex + 1 + oldDeltaLineCount;\n if (lastEvent && lastEvent.type === 'deleted' && lastEvent._oldIndex === oldIndex - 1) {\n lastEvent.deleteToLineNumber++;\n }\n else {\n lastEvent = { type: 'deleted', _oldIndex: oldIndex, deleteFromLineNumber: oldMinimapLineNumber, deleteToLineNumber: oldMinimapLineNumber };\n events.push(lastEvent);\n }\n oldDeltaLineCount--;\n }\n oldIndex++;\n }\n let selectedViewLineNumber;\n if (oldIndex < oldLength && oldMinimapLines[oldIndex] <= toViewLineNumber) {\n // reuse the old sampled line\n selectedViewLineNumber = oldMinimapLines[oldIndex];\n oldIndex++;\n }\n else {\n if (i === 0) {\n selectedViewLineNumber = 1;\n }\n else if (i + 1 === minimapLineCount) {\n selectedViewLineNumber = viewLineCount;\n }\n else {\n selectedViewLineNumber = Math.round(i * ratio + halfRatio);\n }\n if (events.length < MAX_EVENT_COUNT) {\n const oldMinimapLineNumber = oldIndex + 1 + oldDeltaLineCount;\n if (lastEvent && lastEvent.type === 'inserted' && lastEvent._i === i - 1) {\n lastEvent.insertToLineNumber++;\n }\n else {\n lastEvent = { type: 'inserted', _i: i, insertFromLineNumber: oldMinimapLineNumber, insertToLineNumber: oldMinimapLineNumber };\n events.push(lastEvent);\n }\n oldDeltaLineCount++;\n }\n }\n result[i] = selectedViewLineNumber;\n minViewLineNumber = selectedViewLineNumber;\n }\n if (events.length < MAX_EVENT_COUNT) {\n while (oldIndex < oldLength) {\n const oldMinimapLineNumber = oldIndex + 1 + oldDeltaLineCount;\n if (lastEvent && lastEvent.type === 'deleted' && lastEvent._oldIndex === oldIndex - 1) {\n lastEvent.deleteToLineNumber++;\n }\n else {\n lastEvent = { type: 'deleted', _oldIndex: oldIndex, deleteFromLineNumber: oldMinimapLineNumber, deleteToLineNumber: oldMinimapLineNumber };\n events.push(lastEvent);\n }\n oldDeltaLineCount--;\n oldIndex++;\n }\n }\n else {\n // too many events, just give up\n events = [{ type: 'flush' }];\n }\n return [new MinimapSamplingState(ratio, result), events];\n }\n modelLineToMinimapLine(lineNumber) {\n return Math.min(this.minimapLines.length, Math.max(1, Math.round(lineNumber / this.samplingRatio)));\n }\n /**\n * Will return null if the model line ranges are not intersecting with a sampled model line.\n */\n modelLineRangeToMinimapLineRange(fromLineNumber, toLineNumber) {\n let fromLineIndex = this.modelLineToMinimapLine(fromLineNumber) - 1;\n while (fromLineIndex > 0 && this.minimapLines[fromLineIndex - 1] >= fromLineNumber) {\n fromLineIndex--;\n }\n let toLineIndex = this.modelLineToMinimapLine(toLineNumber) - 1;\n while (toLineIndex + 1 < this.minimapLines.length && this.minimapLines[toLineIndex + 1] <= toLineNumber) {\n toLineIndex++;\n }\n if (fromLineIndex === toLineIndex) {\n const sampledLineNumber = this.minimapLines[fromLineIndex];\n if (sampledLineNumber < fromLineNumber || sampledLineNumber > toLineNumber) {\n // This line is not part of the sampled lines ==> nothing to do\n return null;\n }\n }\n return [fromLineIndex + 1, toLineIndex + 1];\n }\n /**\n * Will always return a range, even if it is not intersecting with a sampled model line.\n */\n decorationLineRangeToMinimapLineRange(startLineNumber, endLineNumber) {\n let minimapLineStart = this.modelLineToMinimapLine(startLineNumber);\n let minimapLineEnd = this.modelLineToMinimapLine(endLineNumber);\n if (startLineNumber !== endLineNumber && minimapLineEnd === minimapLineStart) {\n if (minimapLineEnd === this.minimapLines.length) {\n if (minimapLineStart > 1) {\n minimapLineStart--;\n }\n }\n else {\n minimapLineEnd++;\n }\n }\n return [minimapLineStart, minimapLineEnd];\n }\n onLinesDeleted(e) {\n // have the mapping be sticky\n const deletedLineCount = e.toLineNumber - e.fromLineNumber + 1;\n let changeStartIndex = this.minimapLines.length;\n let changeEndIndex = 0;\n for (let i = this.minimapLines.length - 1; i >= 0; i--) {\n if (this.minimapLines[i] < e.fromLineNumber) {\n break;\n }\n if (this.minimapLines[i] <= e.toLineNumber) {\n // this line got deleted => move to previous available\n this.minimapLines[i] = Math.max(1, e.fromLineNumber - 1);\n changeStartIndex = Math.min(changeStartIndex, i);\n changeEndIndex = Math.max(changeEndIndex, i);\n }\n else {\n this.minimapLines[i] -= deletedLineCount;\n }\n }\n return [changeStartIndex, changeEndIndex];\n }\n onLinesInserted(e) {\n // have the mapping be sticky\n const insertedLineCount = e.toLineNumber - e.fromLineNumber + 1;\n for (let i = this.minimapLines.length - 1; i >= 0; i--) {\n if (this.minimapLines[i] < e.fromLineNumber) {\n break;\n }\n this.minimapLines[i] += insertedLineCount;\n }\n }\n}\nexport class Minimap extends ViewPart {\n constructor(context) {\n super(context);\n this.tokensColorTracker = MinimapTokensColorTracker.getInstance();\n this._selections = [];\n this._minimapSelections = null;\n this.options = new MinimapOptions(this._context.configuration, this._context.theme, this.tokensColorTracker);\n const [samplingState,] = MinimapSamplingState.compute(this.options, this._context.model.getLineCount(), null);\n this._samplingState = samplingState;\n this._shouldCheckSampling = false;\n this._actual = new InnerMinimap(context.theme, this);\n }\n dispose() {\n this._actual.dispose();\n super.dispose();\n }\n getDomNode() {\n return this._actual.getDomNode();\n }\n _onOptionsMaybeChanged() {\n const opts = new MinimapOptions(this._context.configuration, this._context.theme, this.tokensColorTracker);\n if (this.options.equals(opts)) {\n return false;\n }\n this.options = opts;\n this._recreateLineSampling();\n this._actual.onDidChangeOptions();\n return true;\n }\n // ---- begin view event handlers\n onConfigurationChanged(e) {\n return this._onOptionsMaybeChanged();\n }\n onCursorStateChanged(e) {\n this._selections = e.selections;\n this._minimapSelections = null;\n return this._actual.onSelectionChanged();\n }\n onDecorationsChanged(e) {\n if (e.affectsMinimap) {\n return this._actual.onDecorationsChanged();\n }\n return false;\n }\n onFlushed(e) {\n if (this._samplingState) {\n this._shouldCheckSampling = true;\n }\n return this._actual.onFlushed();\n }\n onLinesChanged(e) {\n if (this._samplingState) {\n const minimapLineRange = this._samplingState.modelLineRangeToMinimapLineRange(e.fromLineNumber, e.toLineNumber);\n if (minimapLineRange) {\n return this._actual.onLinesChanged(minimapLineRange[0], minimapLineRange[1]);\n }\n else {\n return false;\n }\n }\n else {\n return this._actual.onLinesChanged(e.fromLineNumber, e.toLineNumber);\n }\n }\n onLinesDeleted(e) {\n if (this._samplingState) {\n const [changeStartIndex, changeEndIndex] = this._samplingState.onLinesDeleted(e);\n if (changeStartIndex <= changeEndIndex) {\n this._actual.onLinesChanged(changeStartIndex + 1, changeEndIndex + 1);\n }\n this._shouldCheckSampling = true;\n return true;\n }\n else {\n return this._actual.onLinesDeleted(e.fromLineNumber, e.toLineNumber);\n }\n }\n onLinesInserted(e) {\n if (this._samplingState) {\n this._samplingState.onLinesInserted(e);\n this._shouldCheckSampling = true;\n return true;\n }\n else {\n return this._actual.onLinesInserted(e.fromLineNumber, e.toLineNumber);\n }\n }\n onScrollChanged(e) {\n return this._actual.onScrollChanged();\n }\n onThemeChanged(e) {\n this._context.model.invalidateMinimapColorCache();\n this._actual.onThemeChanged();\n this._onOptionsMaybeChanged();\n return true;\n }\n onTokensChanged(e) {\n if (this._samplingState) {\n let ranges = [];\n for (const range of e.ranges) {\n const minimapLineRange = this._samplingState.modelLineRangeToMinimapLineRange(range.fromLineNumber, range.toLineNumber);\n if (minimapLineRange) {\n ranges.push({ fromLineNumber: minimapLineRange[0], toLineNumber: minimapLineRange[1] });\n }\n }\n if (ranges.length) {\n return this._actual.onTokensChanged(ranges);\n }\n else {\n return false;\n }\n }\n else {\n return this._actual.onTokensChanged(e.ranges);\n }\n }\n onTokensColorsChanged(e) {\n this._onOptionsMaybeChanged();\n return this._actual.onTokensColorsChanged();\n }\n onZonesChanged(e) {\n return this._actual.onZonesChanged();\n }\n // --- end event handlers\n prepareRender(ctx) {\n if (this._shouldCheckSampling) {\n this._shouldCheckSampling = false;\n this._recreateLineSampling();\n }\n }\n render(ctx) {\n let viewportStartLineNumber = ctx.visibleRange.startLineNumber;\n let viewportEndLineNumber = ctx.visibleRange.endLineNumber;\n if (this._samplingState) {\n viewportStartLineNumber = this._samplingState.modelLineToMinimapLine(viewportStartLineNumber);\n viewportEndLineNumber = this._samplingState.modelLineToMinimapLine(viewportEndLineNumber);\n }\n const minimapCtx = {\n viewportContainsWhitespaceGaps: (ctx.viewportData.whitespaceViewportData.length > 0),\n scrollWidth: ctx.scrollWidth,\n scrollHeight: ctx.scrollHeight,\n viewportStartLineNumber: viewportStartLineNumber,\n viewportEndLineNumber: viewportEndLineNumber,\n viewportStartLineNumberVerticalOffset: ctx.getVerticalOffsetForLineNumber(viewportStartLineNumber),\n scrollTop: ctx.scrollTop,\n scrollLeft: ctx.scrollLeft,\n viewportWidth: ctx.viewportWidth,\n viewportHeight: ctx.viewportHeight,\n };\n this._actual.render(minimapCtx);\n }\n //#region IMinimapModel\n _recreateLineSampling() {\n this._minimapSelections = null;\n const wasSampling = Boolean(this._samplingState);\n const [samplingState, events] = MinimapSamplingState.compute(this.options, this._context.model.getLineCount(), this._samplingState);\n this._samplingState = samplingState;\n if (wasSampling && this._samplingState) {\n // was sampling, is sampling\n for (const event of events) {\n switch (event.type) {\n case 'deleted':\n this._actual.onLinesDeleted(event.deleteFromLineNumber, event.deleteToLineNumber);\n break;\n case 'inserted':\n this._actual.onLinesInserted(event.insertFromLineNumber, event.insertToLineNumber);\n break;\n case 'flush':\n this._actual.onFlushed();\n break;\n }\n }\n }\n }\n getLineCount() {\n if (this._samplingState) {\n return this._samplingState.minimapLines.length;\n }\n return this._context.model.getLineCount();\n }\n getRealLineCount() {\n return this._context.model.getLineCount();\n }\n getLineContent(lineNumber) {\n if (this._samplingState) {\n return this._context.model.getLineContent(this._samplingState.minimapLines[lineNumber - 1]);\n }\n return this._context.model.getLineContent(lineNumber);\n }\n getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed) {\n if (this._samplingState) {\n let result = [];\n for (let lineIndex = 0, lineCount = endLineNumber - startLineNumber + 1; lineIndex < lineCount; lineIndex++) {\n if (needed[lineIndex]) {\n result[lineIndex] = this._context.model.getViewLineData(this._samplingState.minimapLines[startLineNumber + lineIndex - 1]);\n }\n else {\n result[lineIndex] = null;\n }\n }\n return result;\n }\n return this._context.model.getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed).data;\n }\n getSelections() {\n if (this._minimapSelections === null) {\n if (this._samplingState) {\n this._minimapSelections = [];\n for (const selection of this._selections) {\n const [minimapLineStart, minimapLineEnd] = this._samplingState.decorationLineRangeToMinimapLineRange(selection.startLineNumber, selection.endLineNumber);\n this._minimapSelections.push(new Selection(minimapLineStart, selection.startColumn, minimapLineEnd, selection.endColumn));\n }\n }\n else {\n this._minimapSelections = this._selections;\n }\n }\n return this._minimapSelections;\n }\n getMinimapDecorationsInViewport(startLineNumber, endLineNumber) {\n let visibleRange;\n if (this._samplingState) {\n const modelStartLineNumber = this._samplingState.minimapLines[startLineNumber - 1];\n const modelEndLineNumber = this._samplingState.minimapLines[endLineNumber - 1];\n visibleRange = new Range(modelStartLineNumber, 1, modelEndLineNumber, this._context.model.getLineMaxColumn(modelEndLineNumber));\n }\n else {\n visibleRange = new Range(startLineNumber, 1, endLineNumber, this._context.model.getLineMaxColumn(endLineNumber));\n }\n const decorations = this._context.model.getDecorationsInViewport(visibleRange);\n if (this._samplingState) {\n let result = [];\n for (const decoration of decorations) {\n if (!decoration.options.minimap) {\n continue;\n }\n const range = decoration.range;\n const minimapStartLineNumber = this._samplingState.modelLineToMinimapLine(range.startLineNumber);\n const minimapEndLineNumber = this._samplingState.modelLineToMinimapLine(range.endLineNumber);\n result.push(new ViewModelDecoration(new Range(minimapStartLineNumber, range.startColumn, minimapEndLineNumber, range.endColumn), decoration.options));\n }\n return result;\n }\n return decorations;\n }\n getOptions() {\n return this._context.model.getTextModelOptions();\n }\n revealLineNumber(lineNumber) {\n if (this._samplingState) {\n lineNumber = this._samplingState.minimapLines[lineNumber - 1];\n }\n this._context.model.revealRange('mouse', false, new Range(lineNumber, 1, lineNumber, 1), 1 /* Center */, 0 /* Smooth */);\n }\n setScrollTop(scrollTop) {\n this._context.model.setScrollPosition({\n scrollTop: scrollTop\n }, 1 /* Immediate */);\n }\n}\nclass InnerMinimap extends Disposable {\n constructor(theme, model) {\n super();\n this._renderDecorations = false;\n this._gestureInProgress = false;\n this._theme = theme;\n this._model = model;\n this._lastRenderData = null;\n this._buffers = null;\n this._selectionColor = this._theme.getColor(minimapSelection);\n this._domNode = createFastDomNode(document.createElement('div'));\n PartFingerprints.write(this._domNode, 8 /* Minimap */);\n this._domNode.setClassName(this._getMinimapDomNodeClassName());\n this._domNode.setPosition('absolute');\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._shadow = createFastDomNode(document.createElement('div'));\n this._shadow.setClassName('minimap-shadow-hidden');\n this._domNode.appendChild(this._shadow);\n this._canvas = createFastDomNode(document.createElement('canvas'));\n this._canvas.setPosition('absolute');\n this._canvas.setLeft(0);\n this._domNode.appendChild(this._canvas);\n this._decorationsCanvas = createFastDomNode(document.createElement('canvas'));\n this._decorationsCanvas.setPosition('absolute');\n this._decorationsCanvas.setClassName('minimap-decorations-layer');\n this._decorationsCanvas.setLeft(0);\n this._domNode.appendChild(this._decorationsCanvas);\n this._slider = createFastDomNode(document.createElement('div'));\n this._slider.setPosition('absolute');\n this._slider.setClassName('minimap-slider');\n this._slider.setLayerHinting(true);\n this._slider.setContain('strict');\n this._domNode.appendChild(this._slider);\n this._sliderHorizontal = createFastDomNode(document.createElement('div'));\n this._sliderHorizontal.setPosition('absolute');\n this._sliderHorizontal.setClassName('minimap-slider-horizontal');\n this._slider.appendChild(this._sliderHorizontal);\n this._applyLayout();\n this._mouseDownListener = dom.addStandardDisposableListener(this._domNode.domNode, 'mousedown', (e) => {\n e.preventDefault();\n const renderMinimap = this._model.options.renderMinimap;\n if (renderMinimap === 0 /* None */) {\n return;\n }\n if (!this._lastRenderData) {\n return;\n }\n if (this._model.options.size !== 'proportional') {\n if (e.leftButton && this._lastRenderData) {\n // pretend the click occured in the center of the slider\n const position = dom.getDomNodePagePosition(this._slider.domNode);\n const initialPosY = position.top + position.height / 2;\n this._startSliderDragging(e.buttons, e.posx, initialPosY, e.posy, this._lastRenderData.renderedLayout);\n }\n return;\n }\n const minimapLineHeight = this._model.options.minimapLineHeight;\n const internalOffsetY = (this._model.options.canvasInnerHeight / this._model.options.canvasOuterHeight) * e.browserEvent.offsetY;\n const lineIndex = Math.floor(internalOffsetY / minimapLineHeight);\n let lineNumber = lineIndex + this._lastRenderData.renderedLayout.startLineNumber;\n lineNumber = Math.min(lineNumber, this._model.getLineCount());\n this._model.revealLineNumber(lineNumber);\n });\n this._sliderMouseMoveMonitor = new GlobalMouseMoveMonitor();\n this._sliderMouseDownListener = dom.addStandardDisposableListener(this._slider.domNode, 'mousedown', (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (e.leftButton && this._lastRenderData) {\n this._startSliderDragging(e.buttons, e.posx, e.posy, e.posy, this._lastRenderData.renderedLayout);\n }\n });\n this._gestureDisposable = Gesture.addTarget(this._domNode.domNode);\n this._sliderTouchStartListener = dom.addDisposableListener(this._domNode.domNode, EventType.Start, (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (this._lastRenderData) {\n this._slider.toggleClassName('active', true);\n this._gestureInProgress = true;\n this.scrollDueToTouchEvent(e);\n }\n }, { passive: false });\n this._sliderTouchMoveListener = dom.addDisposableListener(this._domNode.domNode, EventType.Change, (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (this._lastRenderData && this._gestureInProgress) {\n this.scrollDueToTouchEvent(e);\n }\n }, { passive: false });\n this._sliderTouchEndListener = dom.addStandardDisposableListener(this._domNode.domNode, EventType.End, (e) => {\n e.preventDefault();\n e.stopPropagation();\n this._gestureInProgress = false;\n this._slider.toggleClassName('active', false);\n });\n }\n _startSliderDragging(initialButtons, initialPosX, initialPosY, posy, initialSliderState) {\n this._slider.toggleClassName('active', true);\n const handleMouseMove = (posy, posx) => {\n const mouseOrthogonalDelta = Math.abs(posx - initialPosX);\n if (platform.isWindows && mouseOrthogonalDelta > MOUSE_DRAG_RESET_DISTANCE) {\n // The mouse has wondered away from the scrollbar => reset dragging\n this._model.setScrollTop(initialSliderState.scrollTop);\n return;\n }\n const mouseDelta = posy - initialPosY;\n this._model.setScrollTop(initialSliderState.getDesiredScrollTopFromDelta(mouseDelta));\n };\n if (posy !== initialPosY) {\n handleMouseMove(posy, initialPosX);\n }\n this._sliderMouseMoveMonitor.startMonitoring(this._slider.domNode, initialButtons, standardMouseMoveMerger, (mouseMoveData) => handleMouseMove(mouseMoveData.posy, mouseMoveData.posx), () => {\n this._slider.toggleClassName('active', false);\n });\n }\n scrollDueToTouchEvent(touch) {\n const startY = this._domNode.domNode.getBoundingClientRect().top;\n const scrollTop = this._lastRenderData.renderedLayout.getDesiredScrollTopFromTouchLocation(touch.pageY - startY);\n this._model.setScrollTop(scrollTop);\n }\n dispose() {\n this._mouseDownListener.dispose();\n this._sliderMouseMoveMonitor.dispose();\n this._sliderMouseDownListener.dispose();\n this._gestureDisposable.dispose();\n this._sliderTouchStartListener.dispose();\n this._sliderTouchMoveListener.dispose();\n this._sliderTouchEndListener.dispose();\n super.dispose();\n }\n _getMinimapDomNodeClassName() {\n if (this._model.options.showSlider === 'always') {\n return 'minimap slider-always';\n }\n return 'minimap slider-mouseover';\n }\n getDomNode() {\n return this._domNode;\n }\n _applyLayout() {\n this._domNode.setLeft(this._model.options.minimapLeft);\n this._domNode.setWidth(this._model.options.minimapWidth);\n this._domNode.setHeight(this._model.options.minimapHeight);\n this._shadow.setHeight(this._model.options.minimapHeight);\n this._canvas.setWidth(this._model.options.canvasOuterWidth);\n this._canvas.setHeight(this._model.options.canvasOuterHeight);\n this._canvas.domNode.width = this._model.options.canvasInnerWidth;\n this._canvas.domNode.height = this._model.options.canvasInnerHeight;\n this._decorationsCanvas.setWidth(this._model.options.canvasOuterWidth);\n this._decorationsCanvas.setHeight(this._model.options.canvasOuterHeight);\n this._decorationsCanvas.domNode.width = this._model.options.canvasInnerWidth;\n this._decorationsCanvas.domNode.height = this._model.options.canvasInnerHeight;\n this._slider.setWidth(this._model.options.minimapWidth);\n }\n _getBuffer() {\n if (!this._buffers) {\n if (this._model.options.canvasInnerWidth > 0 && this._model.options.canvasInnerHeight > 0) {\n this._buffers = new MinimapBuffers(this._canvas.domNode.getContext('2d'), this._model.options.canvasInnerWidth, this._model.options.canvasInnerHeight, this._model.options.backgroundColor);\n }\n }\n return this._buffers ? this._buffers.getBuffer() : null;\n }\n // ---- begin view event handlers\n onDidChangeOptions() {\n this._lastRenderData = null;\n this._buffers = null;\n this._applyLayout();\n this._domNode.setClassName(this._getMinimapDomNodeClassName());\n }\n onSelectionChanged() {\n this._renderDecorations = true;\n return true;\n }\n onDecorationsChanged() {\n this._renderDecorations = true;\n return true;\n }\n onFlushed() {\n this._lastRenderData = null;\n return true;\n }\n onLinesChanged(changeFromLineNumber, changeToLineNumber) {\n if (this._lastRenderData) {\n return this._lastRenderData.onLinesChanged(changeFromLineNumber, changeToLineNumber);\n }\n return false;\n }\n onLinesDeleted(deleteFromLineNumber, deleteToLineNumber) {\n if (this._lastRenderData) {\n this._lastRenderData.onLinesDeleted(deleteFromLineNumber, deleteToLineNumber);\n }\n return true;\n }\n onLinesInserted(insertFromLineNumber, insertToLineNumber) {\n if (this._lastRenderData) {\n this._lastRenderData.onLinesInserted(insertFromLineNumber, insertToLineNumber);\n }\n return true;\n }\n onScrollChanged() {\n this._renderDecorations = true;\n return true;\n }\n onThemeChanged() {\n this._selectionColor = this._theme.getColor(minimapSelection);\n this._renderDecorations = true;\n return true;\n }\n onTokensChanged(ranges) {\n if (this._lastRenderData) {\n return this._lastRenderData.onTokensChanged(ranges);\n }\n return false;\n }\n onTokensColorsChanged() {\n this._lastRenderData = null;\n this._buffers = null;\n return true;\n }\n onZonesChanged() {\n this._lastRenderData = null;\n return true;\n }\n // --- end event handlers\n render(renderingCtx) {\n const renderMinimap = this._model.options.renderMinimap;\n if (renderMinimap === 0 /* None */) {\n this._shadow.setClassName('minimap-shadow-hidden');\n this._sliderHorizontal.setWidth(0);\n this._sliderHorizontal.setHeight(0);\n return;\n }\n if (renderingCtx.scrollLeft + renderingCtx.viewportWidth >= renderingCtx.scrollWidth) {\n this._shadow.setClassName('minimap-shadow-hidden');\n }\n else {\n this._shadow.setClassName('minimap-shadow-visible');\n }\n const layout = MinimapLayout.create(this._model.options, renderingCtx.viewportStartLineNumber, renderingCtx.viewportEndLineNumber, renderingCtx.viewportStartLineNumberVerticalOffset, renderingCtx.viewportHeight, renderingCtx.viewportContainsWhitespaceGaps, this._model.getLineCount(), this._model.getRealLineCount(), renderingCtx.scrollTop, renderingCtx.scrollHeight, this._lastRenderData ? this._lastRenderData.renderedLayout : null);\n this._slider.setDisplay(layout.sliderNeeded ? 'block' : 'none');\n this._slider.setTop(layout.sliderTop);\n this._slider.setHeight(layout.sliderHeight);\n // Compute horizontal slider coordinates\n const scrollLeftChars = renderingCtx.scrollLeft / this._model.options.typicalHalfwidthCharacterWidth;\n const horizontalSliderLeft = Math.min(this._model.options.minimapWidth, Math.round(scrollLeftChars * this._model.options.minimapCharWidth / this._model.options.pixelRatio));\n this._sliderHorizontal.setLeft(horizontalSliderLeft);\n this._sliderHorizontal.setWidth(this._model.options.minimapWidth - horizontalSliderLeft);\n this._sliderHorizontal.setTop(0);\n this._sliderHorizontal.setHeight(layout.sliderHeight);\n this.renderDecorations(layout);\n this._lastRenderData = this.renderLines(layout);\n }\n renderDecorations(layout) {\n if (this._renderDecorations) {\n this._renderDecorations = false;\n const selections = this._model.getSelections();\n const decorations = this._model.getMinimapDecorationsInViewport(layout.startLineNumber, layout.endLineNumber);\n const { canvasInnerWidth, canvasInnerHeight } = this._model.options;\n const lineHeight = this._model.options.minimapLineHeight;\n const characterWidth = this._model.options.minimapCharWidth;\n const tabSize = this._model.getOptions().tabSize;\n const canvasContext = this._decorationsCanvas.domNode.getContext('2d');\n canvasContext.clearRect(0, 0, canvasInnerWidth, canvasInnerHeight);\n const lineOffsetMap = new Map();\n for (let i = 0; i < selections.length; i++) {\n const selection = selections[i];\n for (let line = selection.startLineNumber; line <= selection.endLineNumber; line++) {\n this.renderDecorationOnLine(canvasContext, lineOffsetMap, selection, this._selectionColor, layout, line, lineHeight, lineHeight, tabSize, characterWidth);\n }\n }\n // Loop over decorations, ignoring those that don't have the minimap property set and rendering rectangles for each line the decoration spans\n for (let i = 0; i < decorations.length; i++) {\n const decoration = decorations[i];\n if (!decoration.options.minimap) {\n continue;\n }\n const decorationColor = decoration.options.minimap.getColor(this._theme);\n for (let line = decoration.range.startLineNumber; line <= decoration.range.endLineNumber; line++) {\n switch (decoration.options.minimap.position) {\n case MinimapPosition.Inline:\n this.renderDecorationOnLine(canvasContext, lineOffsetMap, decoration.range, decorationColor, layout, line, lineHeight, lineHeight, tabSize, characterWidth);\n continue;\n case MinimapPosition.Gutter:\n const y = (line - layout.startLineNumber) * lineHeight;\n const x = 2;\n this.renderDecoration(canvasContext, decorationColor, x, y, GUTTER_DECORATION_WIDTH, lineHeight);\n continue;\n }\n }\n }\n }\n }\n renderDecorationOnLine(canvasContext, lineOffsetMap, decorationRange, decorationColor, layout, lineNumber, height, lineHeight, tabSize, charWidth) {\n const y = (lineNumber - layout.startLineNumber) * lineHeight;\n // Skip rendering the line if it's vertically outside our viewport\n if (y + height < 0 || y > this._model.options.canvasInnerHeight) {\n return;\n }\n // Cache line offset data so that it is only read once per line\n let lineIndexToXOffset = lineOffsetMap.get(lineNumber);\n const isFirstDecorationForLine = !lineIndexToXOffset;\n if (!lineIndexToXOffset) {\n const lineData = this._model.getLineContent(lineNumber);\n lineIndexToXOffset = [MINIMAP_GUTTER_WIDTH];\n for (let i = 1; i < lineData.length + 1; i++) {\n const charCode = lineData.charCodeAt(i - 1);\n const dx = charCode === 9 /* Tab */\n ? tabSize * charWidth\n : strings.isFullWidthCharacter(charCode)\n ? 2 * charWidth\n : charWidth;\n lineIndexToXOffset[i] = lineIndexToXOffset[i - 1] + dx;\n }\n lineOffsetMap.set(lineNumber, lineIndexToXOffset);\n }\n const { startColumn, endColumn, startLineNumber, endLineNumber } = decorationRange;\n const x = startLineNumber === lineNumber ? lineIndexToXOffset[startColumn - 1] : MINIMAP_GUTTER_WIDTH;\n const endColumnForLine = endLineNumber > lineNumber ? lineIndexToXOffset.length - 1 : endColumn - 1;\n if (endColumnForLine > 0) {\n // If the decoration starts at the last character of the column and spans over it, ensure it has a width\n const width = lineIndexToXOffset[endColumnForLine] - x || 2;\n this.renderDecoration(canvasContext, decorationColor, x, y, width, height);\n }\n if (isFirstDecorationForLine) {\n this.renderLineHighlight(canvasContext, decorationColor, y, height);\n }\n }\n renderLineHighlight(canvasContext, decorationColor, y, height) {\n canvasContext.fillStyle = decorationColor && decorationColor.transparent(0.5).toString() || '';\n canvasContext.fillRect(MINIMAP_GUTTER_WIDTH, y, canvasContext.canvas.width, height);\n }\n renderDecoration(canvasContext, decorationColor, x, y, width, height) {\n canvasContext.fillStyle = decorationColor && decorationColor.toString() || '';\n canvasContext.fillRect(x, y, width, height);\n }\n renderLines(layout) {\n const startLineNumber = layout.startLineNumber;\n const endLineNumber = layout.endLineNumber;\n const minimapLineHeight = this._model.options.minimapLineHeight;\n // Check if nothing changed w.r.t. lines from last frame\n if (this._lastRenderData && this._lastRenderData.linesEquals(layout)) {\n const _lastData = this._lastRenderData._get();\n // Nice!! Nothing changed from last frame\n return new RenderData(layout, _lastData.imageData, _lastData.lines);\n }\n // Oh well!! We need to repaint some lines...\n const imageData = this._getBuffer();\n if (!imageData) {\n // 0 width or 0 height canvas, nothing to do\n return null;\n }\n // Render untouched lines by using last rendered data.\n let [_dirtyY1, _dirtyY2, needed] = InnerMinimap._renderUntouchedLines(imageData, startLineNumber, endLineNumber, minimapLineHeight, this._lastRenderData);\n // Fetch rendering info from view model for rest of lines that need rendering.\n const lineInfo = this._model.getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed);\n const tabSize = this._model.getOptions().tabSize;\n const background = this._model.options.backgroundColor;\n const tokensColorTracker = this._model.tokensColorTracker;\n const useLighterFont = tokensColorTracker.backgroundIsLight();\n const renderMinimap = this._model.options.renderMinimap;\n const charRenderer = this._model.options.charRenderer();\n const fontScale = this._model.options.fontScale;\n const minimapCharWidth = this._model.options.minimapCharWidth;\n const baseCharHeight = (renderMinimap === 1 /* Text */ ? 2 /* BASE_CHAR_HEIGHT */ : 2 /* BASE_CHAR_HEIGHT */ + 1);\n const renderMinimapLineHeight = baseCharHeight * fontScale;\n const innerLinePadding = (minimapLineHeight > renderMinimapLineHeight ? Math.floor((minimapLineHeight - renderMinimapLineHeight) / 2) : 0);\n // Render the rest of lines\n let dy = 0;\n const renderedLines = [];\n for (let lineIndex = 0, lineCount = endLineNumber - startLineNumber + 1; lineIndex < lineCount; lineIndex++) {\n if (needed[lineIndex]) {\n InnerMinimap._renderLine(imageData, background, useLighterFont, renderMinimap, minimapCharWidth, tokensColorTracker, charRenderer, dy, innerLinePadding, tabSize, lineInfo[lineIndex], fontScale, minimapLineHeight);\n }\n renderedLines[lineIndex] = new MinimapLine(dy);\n dy += minimapLineHeight;\n }\n const dirtyY1 = (_dirtyY1 === -1 ? 0 : _dirtyY1);\n const dirtyY2 = (_dirtyY2 === -1 ? imageData.height : _dirtyY2);\n const dirtyHeight = dirtyY2 - dirtyY1;\n // Finally, paint to the canvas\n const ctx = this._canvas.domNode.getContext('2d');\n ctx.putImageData(imageData, 0, 0, 0, dirtyY1, imageData.width, dirtyHeight);\n // Save rendered data for reuse on next frame if possible\n return new RenderData(layout, imageData, renderedLines);\n }\n static _renderUntouchedLines(target, startLineNumber, endLineNumber, minimapLineHeight, lastRenderData) {\n const needed = [];\n if (!lastRenderData) {\n for (let i = 0, len = endLineNumber - startLineNumber + 1; i < len; i++) {\n needed[i] = true;\n }\n return [-1, -1, needed];\n }\n const _lastData = lastRenderData._get();\n const lastTargetData = _lastData.imageData.data;\n const lastStartLineNumber = _lastData.rendLineNumberStart;\n const lastLines = _lastData.lines;\n const lastLinesLength = lastLines.length;\n const WIDTH = target.width;\n const targetData = target.data;\n const maxDestPixel = (endLineNumber - startLineNumber + 1) * minimapLineHeight * WIDTH * 4;\n let dirtyPixel1 = -1; // the pixel offset up to which all the data is equal to the prev frame\n let dirtyPixel2 = -1; // the pixel offset after which all the data is equal to the prev frame\n let copySourceStart = -1;\n let copySourceEnd = -1;\n let copyDestStart = -1;\n let copyDestEnd = -1;\n let dest_dy = 0;\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n const lineIndex = lineNumber - startLineNumber;\n const lastLineIndex = lineNumber - lastStartLineNumber;\n const source_dy = (lastLineIndex >= 0 && lastLineIndex < lastLinesLength ? lastLines[lastLineIndex].dy : -1);\n if (source_dy === -1) {\n needed[lineIndex] = true;\n dest_dy += minimapLineHeight;\n continue;\n }\n const sourceStart = source_dy * WIDTH * 4;\n const sourceEnd = (source_dy + minimapLineHeight) * WIDTH * 4;\n const destStart = dest_dy * WIDTH * 4;\n const destEnd = (dest_dy + minimapLineHeight) * WIDTH * 4;\n if (copySourceEnd === sourceStart && copyDestEnd === destStart) {\n // contiguous zone => extend copy request\n copySourceEnd = sourceEnd;\n copyDestEnd = destEnd;\n }\n else {\n if (copySourceStart !== -1) {\n // flush existing copy request\n targetData.set(lastTargetData.subarray(copySourceStart, copySourceEnd), copyDestStart);\n if (dirtyPixel1 === -1 && copySourceStart === 0 && copySourceStart === copyDestStart) {\n dirtyPixel1 = copySourceEnd;\n }\n if (dirtyPixel2 === -1 && copySourceEnd === maxDestPixel && copySourceStart === copyDestStart) {\n dirtyPixel2 = copySourceStart;\n }\n }\n copySourceStart = sourceStart;\n copySourceEnd = sourceEnd;\n copyDestStart = destStart;\n copyDestEnd = destEnd;\n }\n needed[lineIndex] = false;\n dest_dy += minimapLineHeight;\n }\n if (copySourceStart !== -1) {\n // flush existing copy request\n targetData.set(lastTargetData.subarray(copySourceStart, copySourceEnd), copyDestStart);\n if (dirtyPixel1 === -1 && copySourceStart === 0 && copySourceStart === copyDestStart) {\n dirtyPixel1 = copySourceEnd;\n }\n if (dirtyPixel2 === -1 && copySourceEnd === maxDestPixel && copySourceStart === copyDestStart) {\n dirtyPixel2 = copySourceStart;\n }\n }\n const dirtyY1 = (dirtyPixel1 === -1 ? -1 : dirtyPixel1 / (WIDTH * 4));\n const dirtyY2 = (dirtyPixel2 === -1 ? -1 : dirtyPixel2 / (WIDTH * 4));\n return [dirtyY1, dirtyY2, needed];\n }\n static _renderLine(target, backgroundColor, useLighterFont, renderMinimap, charWidth, colorTracker, minimapCharRenderer, dy, innerLinePadding, tabSize, lineData, fontScale, minimapLineHeight) {\n const content = lineData.content;\n const tokens = lineData.tokens;\n const maxDx = target.width - charWidth;\n const force1pxHeight = (minimapLineHeight === 1);\n let dx = MINIMAP_GUTTER_WIDTH;\n let charIndex = 0;\n let tabsCharDelta = 0;\n for (let tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) {\n const tokenEndIndex = tokens.getEndOffset(tokenIndex);\n const tokenColorId = tokens.getForeground(tokenIndex);\n const tokenColor = colorTracker.getColor(tokenColorId);\n for (; charIndex < tokenEndIndex; charIndex++) {\n if (dx > maxDx) {\n // hit edge of minimap\n return;\n }\n const charCode = content.charCodeAt(charIndex);\n if (charCode === 9 /* Tab */) {\n const insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\n tabsCharDelta += insertSpacesCount - 1;\n // No need to render anything since tab is invisible\n dx += insertSpacesCount * charWidth;\n }\n else if (charCode === 32 /* Space */) {\n // No need to render anything since space is invisible\n dx += charWidth;\n }\n else {\n // Render twice for a full width character\n const count = strings.isFullWidthCharacter(charCode) ? 2 : 1;\n for (let i = 0; i < count; i++) {\n if (renderMinimap === 2 /* Blocks */) {\n minimapCharRenderer.blockRenderChar(target, dx, dy + innerLinePadding, tokenColor, backgroundColor, useLighterFont, force1pxHeight);\n }\n else { // RenderMinimap.Text\n minimapCharRenderer.renderChar(target, dx, dy + innerLinePadding, charCode, tokenColor, backgroundColor, fontScale, useLighterFont, force1pxHeight);\n }\n dx += charWidth;\n if (dx > maxDx) {\n // hit edge of minimap\n return;\n }\n }\n }\n }\n }\n }\n}\nregisterThemingParticipant((theme, collector) => {\n const minimapBackgroundValue = theme.getColor(minimapBackground);\n if (minimapBackgroundValue) {\n collector.addRule(`.monaco-editor .minimap > canvas { opacity: ${minimapBackgroundValue.rgba.a}; will-change: opacity; }`);\n }\n const sliderBackground = theme.getColor(minimapSliderBackground);\n if (sliderBackground) {\n collector.addRule(`.monaco-editor .minimap-slider .minimap-slider-horizontal { background: ${sliderBackground}; }`);\n }\n const sliderHoverBackground = theme.getColor(minimapSliderHoverBackground);\n if (sliderHoverBackground) {\n collector.addRule(`.monaco-editor .minimap-slider:hover .minimap-slider-horizontal { background: ${sliderHoverBackground}; }`);\n }\n const sliderActiveBackground = theme.getColor(minimapSliderActiveBackground);\n if (sliderActiveBackground) {\n collector.addRule(`.monaco-editor .minimap-slider.active .minimap-slider-horizontal { background: ${sliderActiveBackground}; }`);\n }\n const shadow = theme.getColor(scrollbarShadow);\n if (shadow) {\n collector.addRule(`.monaco-editor .minimap-shadow-visible { box-shadow: ${shadow} -6px 0 6px -6px inset; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './overlayWidgets.css';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\nexport class ViewOverlayWidgets extends ViewPart {\n constructor(context) {\n super(context);\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._widgets = {};\n this._verticalScrollbarWidth = layoutInfo.verticalScrollbarWidth;\n this._minimapWidth = layoutInfo.minimap.minimapWidth;\n this._horizontalScrollbarHeight = layoutInfo.horizontalScrollbarHeight;\n this._editorHeight = layoutInfo.height;\n this._editorWidth = layoutInfo.width;\n this._domNode = createFastDomNode(document.createElement('div'));\n PartFingerprints.write(this._domNode, 4 /* OverlayWidgets */);\n this._domNode.setClassName('overlayWidgets');\n }\n dispose() {\n super.dispose();\n this._widgets = {};\n }\n getDomNode() {\n return this._domNode;\n }\n // ---- begin view event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._verticalScrollbarWidth = layoutInfo.verticalScrollbarWidth;\n this._minimapWidth = layoutInfo.minimap.minimapWidth;\n this._horizontalScrollbarHeight = layoutInfo.horizontalScrollbarHeight;\n this._editorHeight = layoutInfo.height;\n this._editorWidth = layoutInfo.width;\n return true;\n }\n // ---- end view event handlers\n addWidget(widget) {\n const domNode = createFastDomNode(widget.getDomNode());\n this._widgets[widget.getId()] = {\n widget: widget,\n preference: null,\n domNode: domNode\n };\n // This is sync because a widget wants to be in the dom\n domNode.setPosition('absolute');\n domNode.setAttribute('widgetId', widget.getId());\n this._domNode.appendChild(domNode);\n this.setShouldRender();\n }\n setWidgetPosition(widget, preference) {\n const widgetData = this._widgets[widget.getId()];\n if (widgetData.preference === preference) {\n return false;\n }\n widgetData.preference = preference;\n this.setShouldRender();\n return true;\n }\n removeWidget(widget) {\n const widgetId = widget.getId();\n if (this._widgets.hasOwnProperty(widgetId)) {\n const widgetData = this._widgets[widgetId];\n const domNode = widgetData.domNode.domNode;\n delete this._widgets[widgetId];\n domNode.parentNode.removeChild(domNode);\n this.setShouldRender();\n }\n }\n _renderWidget(widgetData) {\n const domNode = widgetData.domNode;\n if (widgetData.preference === null) {\n domNode.unsetTop();\n return;\n }\n if (widgetData.preference === 0 /* TOP_RIGHT_CORNER */) {\n domNode.setTop(0);\n domNode.setRight((2 * this._verticalScrollbarWidth) + this._minimapWidth);\n }\n else if (widgetData.preference === 1 /* BOTTOM_RIGHT_CORNER */) {\n const widgetHeight = domNode.domNode.clientHeight;\n domNode.setTop((this._editorHeight - widgetHeight - 2 * this._horizontalScrollbarHeight));\n domNode.setRight((2 * this._verticalScrollbarWidth) + this._minimapWidth);\n }\n else if (widgetData.preference === 2 /* TOP_CENTER */) {\n domNode.setTop(0);\n domNode.domNode.style.right = '50%';\n }\n }\n prepareRender(ctx) {\n // Nothing to read\n }\n render(ctx) {\n this._domNode.setWidth(this._editorWidth);\n const keys = Object.keys(this._widgets);\n for (let i = 0, len = keys.length; i < len; i++) {\n const widgetId = keys[i];\n this._renderWidget(this._widgets[widgetId]);\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { Color } from '../../../../base/common/color.js';\nimport { ViewPart } from '../../view/viewPart.js';\nimport { Position } from '../../../common/core/position.js';\nimport { TokenizationRegistry } from '../../../common/modes.js';\nimport { editorCursorForeground, editorOverviewRulerBorder, editorOverviewRulerBackground } from '../../../common/view/editorColorRegistry.js';\nclass Settings {\n constructor(config, theme) {\n const options = config.options;\n this.lineHeight = options.get(55 /* lineHeight */);\n this.pixelRatio = options.get(125 /* pixelRatio */);\n this.overviewRulerLanes = options.get(70 /* overviewRulerLanes */);\n this.renderBorder = options.get(69 /* overviewRulerBorder */);\n const borderColor = theme.getColor(editorOverviewRulerBorder);\n this.borderColor = borderColor ? borderColor.toString() : null;\n this.hideCursor = options.get(48 /* hideCursorInOverviewRuler */);\n const cursorColor = theme.getColor(editorCursorForeground);\n this.cursorColor = cursorColor ? cursorColor.transparent(0.7).toString() : null;\n this.themeType = theme.type;\n const minimapOpts = options.get(61 /* minimap */);\n const minimapEnabled = minimapOpts.enabled;\n const minimapSide = minimapOpts.side;\n const backgroundColor = minimapEnabled\n ? theme.getColor(editorOverviewRulerBackground) || TokenizationRegistry.getDefaultBackground()\n : null;\n if (backgroundColor === null || minimapSide === 'left') {\n this.backgroundColor = null;\n }\n else {\n this.backgroundColor = Color.Format.CSS.formatHex(backgroundColor);\n }\n const layoutInfo = options.get(127 /* layoutInfo */);\n const position = layoutInfo.overviewRuler;\n this.top = position.top;\n this.right = position.right;\n this.domWidth = position.width;\n this.domHeight = position.height;\n if (this.overviewRulerLanes === 0) {\n // overview ruler is off\n this.canvasWidth = 0;\n this.canvasHeight = 0;\n }\n else {\n this.canvasWidth = (this.domWidth * this.pixelRatio) | 0;\n this.canvasHeight = (this.domHeight * this.pixelRatio) | 0;\n }\n const [x, w] = this._initLanes(1, this.canvasWidth, this.overviewRulerLanes);\n this.x = x;\n this.w = w;\n }\n _initLanes(canvasLeftOffset, canvasWidth, laneCount) {\n const remainingWidth = canvasWidth - canvasLeftOffset;\n if (laneCount >= 3) {\n const leftWidth = Math.floor(remainingWidth / 3);\n const rightWidth = Math.floor(remainingWidth / 3);\n const centerWidth = remainingWidth - leftWidth - rightWidth;\n const leftOffset = canvasLeftOffset;\n const centerOffset = leftOffset + leftWidth;\n const rightOffset = leftOffset + leftWidth + centerWidth;\n return [\n [\n 0,\n leftOffset,\n centerOffset,\n leftOffset,\n rightOffset,\n leftOffset,\n centerOffset,\n leftOffset, // Left | Center | Right\n ], [\n 0,\n leftWidth,\n centerWidth,\n leftWidth + centerWidth,\n rightWidth,\n leftWidth + centerWidth + rightWidth,\n centerWidth + rightWidth,\n leftWidth + centerWidth + rightWidth, // Left | Center | Right\n ]\n ];\n }\n else if (laneCount === 2) {\n const leftWidth = Math.floor(remainingWidth / 2);\n const rightWidth = remainingWidth - leftWidth;\n const leftOffset = canvasLeftOffset;\n const rightOffset = leftOffset + leftWidth;\n return [\n [\n 0,\n leftOffset,\n leftOffset,\n leftOffset,\n rightOffset,\n leftOffset,\n leftOffset,\n leftOffset, // Left | Center | Right\n ], [\n 0,\n leftWidth,\n leftWidth,\n leftWidth,\n rightWidth,\n leftWidth + rightWidth,\n leftWidth + rightWidth,\n leftWidth + rightWidth, // Left | Center | Right\n ]\n ];\n }\n else {\n const offset = canvasLeftOffset;\n const width = remainingWidth;\n return [\n [\n 0,\n offset,\n offset,\n offset,\n offset,\n offset,\n offset,\n offset, // Left | Center | Right\n ], [\n 0,\n width,\n width,\n width,\n width,\n width,\n width,\n width, // Left | Center | Right\n ]\n ];\n }\n }\n equals(other) {\n return (this.lineHeight === other.lineHeight\n && this.pixelRatio === other.pixelRatio\n && this.overviewRulerLanes === other.overviewRulerLanes\n && this.renderBorder === other.renderBorder\n && this.borderColor === other.borderColor\n && this.hideCursor === other.hideCursor\n && this.cursorColor === other.cursorColor\n && this.themeType === other.themeType\n && this.backgroundColor === other.backgroundColor\n && this.top === other.top\n && this.right === other.right\n && this.domWidth === other.domWidth\n && this.domHeight === other.domHeight\n && this.canvasWidth === other.canvasWidth\n && this.canvasHeight === other.canvasHeight);\n }\n}\nexport class DecorationsOverviewRuler extends ViewPart {\n constructor(context) {\n super(context);\n this._domNode = createFastDomNode(document.createElement('canvas'));\n this._domNode.setClassName('decorationsOverviewRuler');\n this._domNode.setPosition('absolute');\n this._domNode.setLayerHinting(true);\n this._domNode.setContain('strict');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._updateSettings(false);\n this._tokensColorTrackerListener = TokenizationRegistry.onDidChange((e) => {\n if (e.changedColorMap) {\n this._updateSettings(true);\n }\n });\n this._cursorPositions = [];\n }\n dispose() {\n super.dispose();\n this._tokensColorTrackerListener.dispose();\n }\n _updateSettings(renderNow) {\n const newSettings = new Settings(this._context.configuration, this._context.theme);\n if (this._settings && this._settings.equals(newSettings)) {\n // nothing to do\n return false;\n }\n this._settings = newSettings;\n this._domNode.setTop(this._settings.top);\n this._domNode.setRight(this._settings.right);\n this._domNode.setWidth(this._settings.domWidth);\n this._domNode.setHeight(this._settings.domHeight);\n this._domNode.domNode.width = this._settings.canvasWidth;\n this._domNode.domNode.height = this._settings.canvasHeight;\n if (renderNow) {\n this._render();\n }\n return true;\n }\n // ---- begin view event handlers\n onConfigurationChanged(e) {\n return this._updateSettings(false);\n }\n onCursorStateChanged(e) {\n this._cursorPositions = [];\n for (let i = 0, len = e.selections.length; i < len; i++) {\n this._cursorPositions[i] = e.selections[i].getPosition();\n }\n this._cursorPositions.sort(Position.compare);\n return true;\n }\n onDecorationsChanged(e) {\n if (e.affectsOverviewRuler) {\n return true;\n }\n return false;\n }\n onFlushed(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollHeightChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n onThemeChanged(e) {\n // invalidate color cache\n this._context.model.invalidateOverviewRulerColorCache();\n return this._updateSettings(false);\n }\n // ---- end view event handlers\n getDomNode() {\n return this._domNode.domNode;\n }\n prepareRender(ctx) {\n // Nothing to read\n }\n render(editorCtx) {\n this._render();\n }\n _render() {\n if (this._settings.overviewRulerLanes === 0) {\n // overview ruler is off\n this._domNode.setBackgroundColor(this._settings.backgroundColor ? this._settings.backgroundColor : '');\n return;\n }\n const canvasWidth = this._settings.canvasWidth;\n const canvasHeight = this._settings.canvasHeight;\n const lineHeight = this._settings.lineHeight;\n const viewLayout = this._context.viewLayout;\n const outerHeight = this._context.viewLayout.getScrollHeight();\n const heightRatio = canvasHeight / outerHeight;\n const decorations = this._context.model.getAllOverviewRulerDecorations(this._context.theme);\n const minDecorationHeight = (6 /* MIN_DECORATION_HEIGHT */ * this._settings.pixelRatio) | 0;\n const halfMinDecorationHeight = (minDecorationHeight / 2) | 0;\n const canvasCtx = this._domNode.domNode.getContext('2d');\n if (this._settings.backgroundColor === null) {\n canvasCtx.clearRect(0, 0, canvasWidth, canvasHeight);\n }\n else {\n canvasCtx.fillStyle = this._settings.backgroundColor;\n canvasCtx.fillRect(0, 0, canvasWidth, canvasHeight);\n }\n const x = this._settings.x;\n const w = this._settings.w;\n // Avoid flickering by always rendering the colors in the same order\n // colors that don't use transparency will be sorted last (they start with #)\n const colors = Object.keys(decorations);\n colors.sort();\n for (let cIndex = 0, cLen = colors.length; cIndex < cLen; cIndex++) {\n const color = colors[cIndex];\n const colorDecorations = decorations[color];\n canvasCtx.fillStyle = color;\n let prevLane = 0;\n let prevY1 = 0;\n let prevY2 = 0;\n for (let i = 0, len = colorDecorations.length; i < len; i++) {\n const lane = colorDecorations[3 * i];\n const startLineNumber = colorDecorations[3 * i + 1];\n const endLineNumber = colorDecorations[3 * i + 2];\n let y1 = (viewLayout.getVerticalOffsetForLineNumber(startLineNumber) * heightRatio) | 0;\n let y2 = ((viewLayout.getVerticalOffsetForLineNumber(endLineNumber) + lineHeight) * heightRatio) | 0;\n const height = y2 - y1;\n if (height < minDecorationHeight) {\n let yCenter = ((y1 + y2) / 2) | 0;\n if (yCenter < halfMinDecorationHeight) {\n yCenter = halfMinDecorationHeight;\n }\n else if (yCenter + halfMinDecorationHeight > canvasHeight) {\n yCenter = canvasHeight - halfMinDecorationHeight;\n }\n y1 = yCenter - halfMinDecorationHeight;\n y2 = yCenter + halfMinDecorationHeight;\n }\n if (y1 > prevY2 + 1 || lane !== prevLane) {\n // flush prev\n if (i !== 0) {\n canvasCtx.fillRect(x[prevLane], prevY1, w[prevLane], prevY2 - prevY1);\n }\n prevLane = lane;\n prevY1 = y1;\n prevY2 = y2;\n }\n else {\n // merge into prev\n if (y2 > prevY2) {\n prevY2 = y2;\n }\n }\n }\n canvasCtx.fillRect(x[prevLane], prevY1, w[prevLane], prevY2 - prevY1);\n }\n // Draw cursors\n if (!this._settings.hideCursor && this._settings.cursorColor) {\n const cursorHeight = (2 * this._settings.pixelRatio) | 0;\n const halfCursorHeight = (cursorHeight / 2) | 0;\n const cursorX = this._settings.x[7 /* Full */];\n const cursorW = this._settings.w[7 /* Full */];\n canvasCtx.fillStyle = this._settings.cursorColor;\n let prevY1 = -100;\n let prevY2 = -100;\n for (let i = 0, len = this._cursorPositions.length; i < len; i++) {\n const cursor = this._cursorPositions[i];\n let yCenter = (viewLayout.getVerticalOffsetForLineNumber(cursor.lineNumber) * heightRatio) | 0;\n if (yCenter < halfCursorHeight) {\n yCenter = halfCursorHeight;\n }\n else if (yCenter + halfCursorHeight > canvasHeight) {\n yCenter = canvasHeight - halfCursorHeight;\n }\n const y1 = yCenter - halfCursorHeight;\n const y2 = y1 + cursorHeight;\n if (y1 > prevY2 + 1) {\n // flush prev\n if (i !== 0) {\n canvasCtx.fillRect(cursorX, prevY1, cursorW, prevY2 - prevY1);\n }\n prevY1 = y1;\n prevY2 = y2;\n }\n else {\n // merge into prev\n if (y2 > prevY2) {\n prevY2 = y2;\n }\n }\n }\n canvasCtx.fillRect(cursorX, prevY1, cursorW, prevY2 - prevY1);\n }\n if (this._settings.renderBorder && this._settings.borderColor && this._settings.overviewRulerLanes > 0) {\n canvasCtx.beginPath();\n canvasCtx.lineWidth = 1;\n canvasCtx.strokeStyle = this._settings.borderColor;\n canvasCtx.moveTo(0, 0);\n canvasCtx.lineTo(0, canvasHeight);\n canvasCtx.stroke();\n canvasCtx.moveTo(0, 0);\n canvasCtx.lineTo(canvasWidth, 0);\n canvasCtx.stroke();\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { OverviewZoneManager } from '../../../common/view/overviewZoneManager.js';\nimport { ViewEventHandler } from '../../../common/viewModel/viewEventHandler.js';\nexport class OverviewRuler extends ViewEventHandler {\n constructor(context, cssClassName) {\n super();\n this._context = context;\n const options = this._context.configuration.options;\n this._domNode = createFastDomNode(document.createElement('canvas'));\n this._domNode.setClassName(cssClassName);\n this._domNode.setPosition('absolute');\n this._domNode.setLayerHinting(true);\n this._domNode.setContain('strict');\n this._zoneManager = new OverviewZoneManager((lineNumber) => this._context.viewLayout.getVerticalOffsetForLineNumber(lineNumber));\n this._zoneManager.setDOMWidth(0);\n this._zoneManager.setDOMHeight(0);\n this._zoneManager.setOuterHeight(this._context.viewLayout.getScrollHeight());\n this._zoneManager.setLineHeight(options.get(55 /* lineHeight */));\n this._zoneManager.setPixelRatio(options.get(125 /* pixelRatio */));\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n super.dispose();\n }\n // ---- begin view event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n if (e.hasChanged(55 /* lineHeight */)) {\n this._zoneManager.setLineHeight(options.get(55 /* lineHeight */));\n this._render();\n }\n if (e.hasChanged(125 /* pixelRatio */)) {\n this._zoneManager.setPixelRatio(options.get(125 /* pixelRatio */));\n this._domNode.setWidth(this._zoneManager.getDOMWidth());\n this._domNode.setHeight(this._zoneManager.getDOMHeight());\n this._domNode.domNode.width = this._zoneManager.getCanvasWidth();\n this._domNode.domNode.height = this._zoneManager.getCanvasHeight();\n this._render();\n }\n return true;\n }\n onFlushed(e) {\n this._render();\n return true;\n }\n onScrollChanged(e) {\n if (e.scrollHeightChanged) {\n this._zoneManager.setOuterHeight(e.scrollHeight);\n this._render();\n }\n return true;\n }\n onZonesChanged(e) {\n this._render();\n return true;\n }\n // ---- end view event handlers\n getDomNode() {\n return this._domNode.domNode;\n }\n setLayout(position) {\n this._domNode.setTop(position.top);\n this._domNode.setRight(position.right);\n let hasChanged = false;\n hasChanged = this._zoneManager.setDOMWidth(position.width) || hasChanged;\n hasChanged = this._zoneManager.setDOMHeight(position.height) || hasChanged;\n if (hasChanged) {\n this._domNode.setWidth(this._zoneManager.getDOMWidth());\n this._domNode.setHeight(this._zoneManager.getDOMHeight());\n this._domNode.domNode.width = this._zoneManager.getCanvasWidth();\n this._domNode.domNode.height = this._zoneManager.getCanvasHeight();\n this._render();\n }\n }\n setZones(zones) {\n this._zoneManager.setZones(zones);\n this._render();\n }\n _render() {\n if (this._zoneManager.getOuterHeight() === 0) {\n return false;\n }\n const width = this._zoneManager.getCanvasWidth();\n const height = this._zoneManager.getCanvasHeight();\n const colorZones = this._zoneManager.resolveColorZones();\n const id2Color = this._zoneManager.getId2Color();\n const ctx = this._domNode.domNode.getContext('2d');\n ctx.clearRect(0, 0, width, height);\n if (colorZones.length > 0) {\n this._renderOneLane(ctx, colorZones, id2Color, width);\n }\n return true;\n }\n _renderOneLane(ctx, colorZones, id2Color, width) {\n let currentColorId = 0;\n let currentFrom = 0;\n let currentTo = 0;\n for (const zone of colorZones) {\n const zoneColorId = zone.colorId;\n const zoneFrom = zone.from;\n const zoneTo = zone.to;\n if (zoneColorId !== currentColorId) {\n ctx.fillRect(0, currentFrom, width, currentTo - currentFrom);\n currentColorId = zoneColorId;\n ctx.fillStyle = id2Color[currentColorId];\n currentFrom = zoneFrom;\n currentTo = zoneTo;\n }\n else {\n if (currentTo >= zoneFrom) {\n currentTo = Math.max(currentTo, zoneTo);\n }\n else {\n ctx.fillRect(0, currentFrom, width, currentTo - currentFrom);\n currentFrom = zoneFrom;\n currentTo = zoneTo;\n }\n }\n }\n ctx.fillRect(0, currentFrom, width, currentTo - currentFrom);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './rulers.css';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { ViewPart } from '../../view/viewPart.js';\nimport { editorRuler } from '../../../common/view/editorColorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nexport class Rulers extends ViewPart {\n constructor(context) {\n super(context);\n this.domNode = createFastDomNode(document.createElement('div'));\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n this.domNode.setClassName('view-rulers');\n this._renderedRulers = [];\n const options = this._context.configuration.options;\n this._rulers = options.get(88 /* rulers */);\n this._typicalHalfwidthCharacterWidth = options.get(40 /* fontInfo */).typicalHalfwidthCharacterWidth;\n }\n dispose() {\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n this._rulers = options.get(88 /* rulers */);\n this._typicalHalfwidthCharacterWidth = options.get(40 /* fontInfo */).typicalHalfwidthCharacterWidth;\n return true;\n }\n onScrollChanged(e) {\n return e.scrollHeightChanged;\n }\n // --- end event handlers\n prepareRender(ctx) {\n // Nothing to read\n }\n _ensureRulersCount() {\n const currentCount = this._renderedRulers.length;\n const desiredCount = this._rulers.length;\n if (currentCount === desiredCount) {\n // Nothing to do\n return;\n }\n if (currentCount < desiredCount) {\n const { tabSize } = this._context.model.getTextModelOptions();\n const rulerWidth = tabSize;\n let addCount = desiredCount - currentCount;\n while (addCount > 0) {\n const node = createFastDomNode(document.createElement('div'));\n node.setClassName('view-ruler');\n node.setWidth(rulerWidth);\n this.domNode.appendChild(node);\n this._renderedRulers.push(node);\n addCount--;\n }\n return;\n }\n let removeCount = currentCount - desiredCount;\n while (removeCount > 0) {\n const node = this._renderedRulers.pop();\n this.domNode.removeChild(node);\n removeCount--;\n }\n }\n render(ctx) {\n this._ensureRulersCount();\n for (let i = 0, len = this._rulers.length; i < len; i++) {\n const node = this._renderedRulers[i];\n const ruler = this._rulers[i];\n node.setBoxShadow(ruler.color ? `1px 0 0 0 ${ruler.color} inset` : ``);\n node.setHeight(Math.min(ctx.scrollHeight, 1000000));\n node.setLeft(ruler.column * this._typicalHalfwidthCharacterWidth);\n }\n }\n}\nregisterThemingParticipant((theme, collector) => {\n const rulerColor = theme.getColor(editorRuler);\n if (rulerColor) {\n collector.addRule(`.monaco-editor .view-ruler { box-shadow: 1px 0 0 0 ${rulerColor} inset; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './scrollDecoration.css';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { ViewPart } from '../../view/viewPart.js';\nimport { scrollbarShadow } from '../../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nexport class ScrollDecorationViewPart extends ViewPart {\n constructor(context) {\n super(context);\n this._scrollTop = 0;\n this._width = 0;\n this._updateWidth();\n this._shouldShow = false;\n const options = this._context.configuration.options;\n const scrollbar = options.get(89 /* scrollbar */);\n this._useShadows = scrollbar.useShadows;\n this._domNode = createFastDomNode(document.createElement('div'));\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.setAttribute('aria-hidden', 'true');\n }\n dispose() {\n super.dispose();\n }\n _updateShouldShow() {\n const newShouldShow = (this._useShadows && this._scrollTop > 0);\n if (this._shouldShow !== newShouldShow) {\n this._shouldShow = newShouldShow;\n return true;\n }\n return false;\n }\n getDomNode() {\n return this._domNode;\n }\n _updateWidth() {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n if (layoutInfo.minimap.renderMinimap === 0 || (layoutInfo.minimap.minimapWidth > 0 && layoutInfo.minimap.minimapLeft === 0)) {\n this._width = layoutInfo.width;\n }\n else {\n this._width = layoutInfo.width - layoutInfo.minimap.minimapWidth - layoutInfo.verticalScrollbarWidth;\n }\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const scrollbar = options.get(89 /* scrollbar */);\n this._useShadows = scrollbar.useShadows;\n this._updateWidth();\n this._updateShouldShow();\n return true;\n }\n onScrollChanged(e) {\n this._scrollTop = e.scrollTop;\n return this._updateShouldShow();\n }\n // --- end event handlers\n prepareRender(ctx) {\n // Nothing to read\n }\n render(ctx) {\n this._domNode.setWidth(this._width);\n this._domNode.setClassName(this._shouldShow ? 'scroll-decoration' : '');\n }\n}\nregisterThemingParticipant((theme, collector) => {\n const shadow = theme.getColor(scrollbarShadow);\n if (shadow) {\n collector.addRule(`.monaco-editor .scroll-decoration { box-shadow: ${shadow} 0 6px 6px -6px inset; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './selections.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { editorInactiveSelection, editorSelectionBackground, editorSelectionForeground } from '../../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nclass HorizontalRangeWithStyle {\n constructor(other) {\n this.left = other.left;\n this.width = other.width;\n this.startStyle = null;\n this.endStyle = null;\n }\n}\nclass LineVisibleRangesWithStyle {\n constructor(lineNumber, ranges) {\n this.lineNumber = lineNumber;\n this.ranges = ranges;\n }\n}\nfunction toStyledRange(item) {\n return new HorizontalRangeWithStyle(item);\n}\nfunction toStyled(item) {\n return new LineVisibleRangesWithStyle(item.lineNumber, item.ranges.map(toStyledRange));\n}\nexport class SelectionsOverlay extends DynamicViewOverlay {\n constructor(context) {\n super();\n this._previousFrameVisibleRangesWithStyle = [];\n this._context = context;\n const options = this._context.configuration.options;\n this._lineHeight = options.get(55 /* lineHeight */);\n this._roundedSelection = options.get(87 /* roundedSelection */);\n this._typicalHalfwidthCharacterWidth = options.get(40 /* fontInfo */).typicalHalfwidthCharacterWidth;\n this._selections = [];\n this._renderResult = null;\n this._context.addEventHandler(this);\n }\n dispose() {\n this._context.removeEventHandler(this);\n this._renderResult = null;\n super.dispose();\n }\n // --- begin event handlers\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n this._lineHeight = options.get(55 /* lineHeight */);\n this._roundedSelection = options.get(87 /* roundedSelection */);\n this._typicalHalfwidthCharacterWidth = options.get(40 /* fontInfo */).typicalHalfwidthCharacterWidth;\n return true;\n }\n onCursorStateChanged(e) {\n this._selections = e.selections.slice(0);\n return true;\n }\n onDecorationsChanged(e) {\n // true for inline decorations that can end up relayouting text\n return true; //e.inlineDecorationsChanged;\n }\n onFlushed(e) {\n return true;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n // --- end event handlers\n _visibleRangesHaveGaps(linesVisibleRanges) {\n for (let i = 0, len = linesVisibleRanges.length; i < len; i++) {\n const lineVisibleRanges = linesVisibleRanges[i];\n if (lineVisibleRanges.ranges.length > 1) {\n // There are two ranges on the same line\n return true;\n }\n }\n return false;\n }\n _enrichVisibleRangesWithStyle(viewport, linesVisibleRanges, previousFrame) {\n const epsilon = this._typicalHalfwidthCharacterWidth / 4;\n let previousFrameTop = null;\n let previousFrameBottom = null;\n if (previousFrame && previousFrame.length > 0 && linesVisibleRanges.length > 0) {\n const topLineNumber = linesVisibleRanges[0].lineNumber;\n if (topLineNumber === viewport.startLineNumber) {\n for (let i = 0; !previousFrameTop && i < previousFrame.length; i++) {\n if (previousFrame[i].lineNumber === topLineNumber) {\n previousFrameTop = previousFrame[i].ranges[0];\n }\n }\n }\n const bottomLineNumber = linesVisibleRanges[linesVisibleRanges.length - 1].lineNumber;\n if (bottomLineNumber === viewport.endLineNumber) {\n for (let i = previousFrame.length - 1; !previousFrameBottom && i >= 0; i--) {\n if (previousFrame[i].lineNumber === bottomLineNumber) {\n previousFrameBottom = previousFrame[i].ranges[0];\n }\n }\n }\n if (previousFrameTop && !previousFrameTop.startStyle) {\n previousFrameTop = null;\n }\n if (previousFrameBottom && !previousFrameBottom.startStyle) {\n previousFrameBottom = null;\n }\n }\n for (let i = 0, len = linesVisibleRanges.length; i < len; i++) {\n // We know for a fact that there is precisely one range on each line\n const curLineRange = linesVisibleRanges[i].ranges[0];\n const curLeft = curLineRange.left;\n const curRight = curLineRange.left + curLineRange.width;\n const startStyle = {\n top: 0 /* EXTERN */,\n bottom: 0 /* EXTERN */\n };\n const endStyle = {\n top: 0 /* EXTERN */,\n bottom: 0 /* EXTERN */\n };\n if (i > 0) {\n // Look above\n const prevLeft = linesVisibleRanges[i - 1].ranges[0].left;\n const prevRight = linesVisibleRanges[i - 1].ranges[0].left + linesVisibleRanges[i - 1].ranges[0].width;\n if (abs(curLeft - prevLeft) < epsilon) {\n startStyle.top = 2 /* FLAT */;\n }\n else if (curLeft > prevLeft) {\n startStyle.top = 1 /* INTERN */;\n }\n if (abs(curRight - prevRight) < epsilon) {\n endStyle.top = 2 /* FLAT */;\n }\n else if (prevLeft < curRight && curRight < prevRight) {\n endStyle.top = 1 /* INTERN */;\n }\n }\n else if (previousFrameTop) {\n // Accept some hiccups near the viewport edges to save on repaints\n startStyle.top = previousFrameTop.startStyle.top;\n endStyle.top = previousFrameTop.endStyle.top;\n }\n if (i + 1 < len) {\n // Look below\n const nextLeft = linesVisibleRanges[i + 1].ranges[0].left;\n const nextRight = linesVisibleRanges[i + 1].ranges[0].left + linesVisibleRanges[i + 1].ranges[0].width;\n if (abs(curLeft - nextLeft) < epsilon) {\n startStyle.bottom = 2 /* FLAT */;\n }\n else if (nextLeft < curLeft && curLeft < nextRight) {\n startStyle.bottom = 1 /* INTERN */;\n }\n if (abs(curRight - nextRight) < epsilon) {\n endStyle.bottom = 2 /* FLAT */;\n }\n else if (curRight < nextRight) {\n endStyle.bottom = 1 /* INTERN */;\n }\n }\n else if (previousFrameBottom) {\n // Accept some hiccups near the viewport edges to save on repaints\n startStyle.bottom = previousFrameBottom.startStyle.bottom;\n endStyle.bottom = previousFrameBottom.endStyle.bottom;\n }\n curLineRange.startStyle = startStyle;\n curLineRange.endStyle = endStyle;\n }\n }\n _getVisibleRangesWithStyle(selection, ctx, previousFrame) {\n const _linesVisibleRanges = ctx.linesVisibleRangesForRange(selection, true) || [];\n const linesVisibleRanges = _linesVisibleRanges.map(toStyled);\n const visibleRangesHaveGaps = this._visibleRangesHaveGaps(linesVisibleRanges);\n if (!visibleRangesHaveGaps && this._roundedSelection) {\n this._enrichVisibleRangesWithStyle(ctx.visibleRange, linesVisibleRanges, previousFrame);\n }\n // The visible ranges are sorted TOP-BOTTOM and LEFT-RIGHT\n return linesVisibleRanges;\n }\n _createSelectionPiece(top, height, className, left, width) {\n return ('<div class=\"cslr '\n + className\n + '\" style=\"top:'\n + top.toString()\n + 'px;left:'\n + left.toString()\n + 'px;width:'\n + width.toString()\n + 'px;height:'\n + height\n + 'px;\"></div>');\n }\n _actualRenderOneSelection(output2, visibleStartLineNumber, hasMultipleSelections, visibleRanges) {\n if (visibleRanges.length === 0) {\n return;\n }\n const visibleRangesHaveStyle = !!visibleRanges[0].ranges[0].startStyle;\n const fullLineHeight = (this._lineHeight).toString();\n const reducedLineHeight = (this._lineHeight - 1).toString();\n const firstLineNumber = visibleRanges[0].lineNumber;\n const lastLineNumber = visibleRanges[visibleRanges.length - 1].lineNumber;\n for (let i = 0, len = visibleRanges.length; i < len; i++) {\n const lineVisibleRanges = visibleRanges[i];\n const lineNumber = lineVisibleRanges.lineNumber;\n const lineIndex = lineNumber - visibleStartLineNumber;\n const lineHeight = hasMultipleSelections ? (lineNumber === lastLineNumber || lineNumber === firstLineNumber ? reducedLineHeight : fullLineHeight) : fullLineHeight;\n const top = hasMultipleSelections ? (lineNumber === firstLineNumber ? 1 : 0) : 0;\n let innerCornerOutput = '';\n let restOfSelectionOutput = '';\n for (let j = 0, lenJ = lineVisibleRanges.ranges.length; j < lenJ; j++) {\n const visibleRange = lineVisibleRanges.ranges[j];\n if (visibleRangesHaveStyle) {\n const startStyle = visibleRange.startStyle;\n const endStyle = visibleRange.endStyle;\n if (startStyle.top === 1 /* INTERN */ || startStyle.bottom === 1 /* INTERN */) {\n // Reverse rounded corner to the left\n // First comes the selection (blue layer)\n innerCornerOutput += this._createSelectionPiece(top, lineHeight, SelectionsOverlay.SELECTION_CLASS_NAME, visibleRange.left - SelectionsOverlay.ROUNDED_PIECE_WIDTH, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n // Second comes the background (white layer) with inverse border radius\n let className = SelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME;\n if (startStyle.top === 1 /* INTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_TOP_RIGHT;\n }\n if (startStyle.bottom === 1 /* INTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_RIGHT;\n }\n innerCornerOutput += this._createSelectionPiece(top, lineHeight, className, visibleRange.left - SelectionsOverlay.ROUNDED_PIECE_WIDTH, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n }\n if (endStyle.top === 1 /* INTERN */ || endStyle.bottom === 1 /* INTERN */) {\n // Reverse rounded corner to the right\n // First comes the selection (blue layer)\n innerCornerOutput += this._createSelectionPiece(top, lineHeight, SelectionsOverlay.SELECTION_CLASS_NAME, visibleRange.left + visibleRange.width, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n // Second comes the background (white layer) with inverse border radius\n let className = SelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME;\n if (endStyle.top === 1 /* INTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_TOP_LEFT;\n }\n if (endStyle.bottom === 1 /* INTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_LEFT;\n }\n innerCornerOutput += this._createSelectionPiece(top, lineHeight, className, visibleRange.left + visibleRange.width, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n }\n }\n let className = SelectionsOverlay.SELECTION_CLASS_NAME;\n if (visibleRangesHaveStyle) {\n const startStyle = visibleRange.startStyle;\n const endStyle = visibleRange.endStyle;\n if (startStyle.top === 0 /* EXTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_TOP_LEFT;\n }\n if (startStyle.bottom === 0 /* EXTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_LEFT;\n }\n if (endStyle.top === 0 /* EXTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_TOP_RIGHT;\n }\n if (endStyle.bottom === 0 /* EXTERN */) {\n className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_RIGHT;\n }\n }\n restOfSelectionOutput += this._createSelectionPiece(top, lineHeight, className, visibleRange.left, visibleRange.width);\n }\n output2[lineIndex][0] += innerCornerOutput;\n output2[lineIndex][1] += restOfSelectionOutput;\n }\n }\n prepareRender(ctx) {\n // Build HTML for inner corners separate from HTML for the rest of selections,\n // as the inner corner HTML can interfere with that of other selections.\n // In final render, make sure to place the inner corner HTML before the rest of selection HTML. See issue #77777.\n const output = [];\n const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - visibleStartLineNumber;\n output[lineIndex] = ['', ''];\n }\n const thisFrameVisibleRangesWithStyle = [];\n for (let i = 0, len = this._selections.length; i < len; i++) {\n const selection = this._selections[i];\n if (selection.isEmpty()) {\n thisFrameVisibleRangesWithStyle[i] = null;\n continue;\n }\n const visibleRangesWithStyle = this._getVisibleRangesWithStyle(selection, ctx, this._previousFrameVisibleRangesWithStyle[i]);\n thisFrameVisibleRangesWithStyle[i] = visibleRangesWithStyle;\n this._actualRenderOneSelection(output, visibleStartLineNumber, this._selections.length > 1, visibleRangesWithStyle);\n }\n this._previousFrameVisibleRangesWithStyle = thisFrameVisibleRangesWithStyle;\n this._renderResult = output.map(([internalCorners, restOfSelection]) => internalCorners + restOfSelection);\n }\n render(startLineNumber, lineNumber) {\n if (!this._renderResult) {\n return '';\n }\n const lineIndex = lineNumber - startLineNumber;\n if (lineIndex < 0 || lineIndex >= this._renderResult.length) {\n return '';\n }\n return this._renderResult[lineIndex];\n }\n}\nSelectionsOverlay.SELECTION_CLASS_NAME = 'selected-text';\nSelectionsOverlay.SELECTION_TOP_LEFT = 'top-left-radius';\nSelectionsOverlay.SELECTION_BOTTOM_LEFT = 'bottom-left-radius';\nSelectionsOverlay.SELECTION_TOP_RIGHT = 'top-right-radius';\nSelectionsOverlay.SELECTION_BOTTOM_RIGHT = 'bottom-right-radius';\nSelectionsOverlay.EDITOR_BACKGROUND_CLASS_NAME = 'monaco-editor-background';\nSelectionsOverlay.ROUNDED_PIECE_WIDTH = 10;\nregisterThemingParticipant((theme, collector) => {\n const editorSelectionColor = theme.getColor(editorSelectionBackground);\n if (editorSelectionColor) {\n collector.addRule(`.monaco-editor .focused .selected-text { background-color: ${editorSelectionColor}; }`);\n }\n const editorInactiveSelectionColor = theme.getColor(editorInactiveSelection);\n if (editorInactiveSelectionColor) {\n collector.addRule(`.monaco-editor .selected-text { background-color: ${editorInactiveSelectionColor}; }`);\n }\n const editorSelectionForegroundColor = theme.getColor(editorSelectionForeground);\n if (editorSelectionForegroundColor && !editorSelectionForegroundColor.isTransparent()) {\n collector.addRule(`.monaco-editor .view-line span.inline-selected-text { color: ${editorSelectionForegroundColor}; }`);\n }\n});\nfunction abs(n) {\n return n < 0 ? -n : n;\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../../base/browser/dom.js';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { Configuration } from '../../config/configuration.js';\nimport { TextEditorCursorStyle } from '../../../common/config/editorOptions.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../base/browser/ui/mouseCursor/mouseCursor.js';\nclass ViewCursorRenderData {\n constructor(top, left, width, height, textContent, textContentClassName) {\n this.top = top;\n this.left = left;\n this.width = width;\n this.height = height;\n this.textContent = textContent;\n this.textContentClassName = textContentClassName;\n }\n}\nexport class ViewCursor {\n constructor(context) {\n this._context = context;\n const options = this._context.configuration.options;\n const fontInfo = options.get(40 /* fontInfo */);\n this._cursorStyle = options.get(22 /* cursorStyle */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n this._lineCursorWidth = Math.min(options.get(25 /* cursorWidth */), this._typicalHalfwidthCharacterWidth);\n this._isVisible = true;\n // Create the dom node\n this._domNode = createFastDomNode(document.createElement('div'));\n this._domNode.setClassName(`cursor ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n this._domNode.setHeight(this._lineHeight);\n this._domNode.setTop(0);\n this._domNode.setLeft(0);\n Configuration.applyFontInfo(this._domNode, fontInfo);\n this._domNode.setDisplay('none');\n this._position = new Position(1, 1);\n this._lastRenderedContent = '';\n this._renderData = null;\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n return this._position;\n }\n show() {\n if (!this._isVisible) {\n this._domNode.setVisibility('inherit');\n this._isVisible = true;\n }\n }\n hide() {\n if (this._isVisible) {\n this._domNode.setVisibility('hidden');\n this._isVisible = false;\n }\n }\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const fontInfo = options.get(40 /* fontInfo */);\n this._cursorStyle = options.get(22 /* cursorStyle */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n this._lineCursorWidth = Math.min(options.get(25 /* cursorWidth */), this._typicalHalfwidthCharacterWidth);\n Configuration.applyFontInfo(this._domNode, fontInfo);\n return true;\n }\n onCursorPositionChanged(position) {\n this._position = position;\n return true;\n }\n _prepareRender(ctx) {\n let textContent = '';\n if (this._cursorStyle === TextEditorCursorStyle.Line || this._cursorStyle === TextEditorCursorStyle.LineThin) {\n const visibleRange = ctx.visibleRangeForPosition(this._position);\n if (!visibleRange || visibleRange.outsideRenderedLine) {\n // Outside viewport\n return null;\n }\n let width;\n if (this._cursorStyle === TextEditorCursorStyle.Line) {\n width = dom.computeScreenAwareSize(this._lineCursorWidth > 0 ? this._lineCursorWidth : 2);\n if (width > 2) {\n const lineContent = this._context.model.getLineContent(this._position.lineNumber);\n const nextCharLength = strings.nextCharLength(lineContent, this._position.column - 1);\n textContent = lineContent.substr(this._position.column - 1, nextCharLength);\n }\n }\n else {\n width = dom.computeScreenAwareSize(1);\n }\n let left = visibleRange.left;\n if (width >= 2 && left >= 1) {\n // try to center cursor\n left -= 1;\n }\n const top = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta;\n return new ViewCursorRenderData(top, left, width, this._lineHeight, textContent, '');\n }\n const lineContent = this._context.model.getLineContent(this._position.lineNumber);\n const nextCharLength = strings.nextCharLength(lineContent, this._position.column - 1);\n const visibleRangeForCharacter = ctx.linesVisibleRangesForRange(new Range(this._position.lineNumber, this._position.column, this._position.lineNumber, this._position.column + nextCharLength), false);\n if (!visibleRangeForCharacter || visibleRangeForCharacter.length === 0) {\n // Outside viewport\n return null;\n }\n const firstVisibleRangeForCharacter = visibleRangeForCharacter[0];\n if (firstVisibleRangeForCharacter.outsideRenderedLine || firstVisibleRangeForCharacter.ranges.length === 0) {\n // Outside viewport\n return null;\n }\n const range = firstVisibleRangeForCharacter.ranges[0];\n const width = range.width < 1 ? this._typicalHalfwidthCharacterWidth : range.width;\n let textContentClassName = '';\n if (this._cursorStyle === TextEditorCursorStyle.Block) {\n const lineData = this._context.model.getViewLineData(this._position.lineNumber);\n textContent = lineContent.substr(this._position.column - 1, nextCharLength);\n const tokenIndex = lineData.tokens.findTokenIndexAtOffset(this._position.column - 1);\n textContentClassName = lineData.tokens.getClassName(tokenIndex);\n }\n let top = ctx.getVerticalOffsetForLineNumber(this._position.lineNumber) - ctx.bigNumbersDelta;\n let height = this._lineHeight;\n // Underline might interfere with clicking\n if (this._cursorStyle === TextEditorCursorStyle.Underline || this._cursorStyle === TextEditorCursorStyle.UnderlineThin) {\n top += this._lineHeight - 2;\n height = 2;\n }\n return new ViewCursorRenderData(top, range.left, width, height, textContent, textContentClassName);\n }\n prepareRender(ctx) {\n this._renderData = this._prepareRender(ctx);\n }\n render(ctx) {\n if (!this._renderData) {\n this._domNode.setDisplay('none');\n return null;\n }\n if (this._lastRenderedContent !== this._renderData.textContent) {\n this._lastRenderedContent = this._renderData.textContent;\n this._domNode.domNode.textContent = this._lastRenderedContent;\n }\n this._domNode.setClassName(`cursor ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME} ${this._renderData.textContentClassName}`);\n this._domNode.setDisplay('block');\n this._domNode.setTop(this._renderData.top);\n this._domNode.setLeft(this._renderData.left);\n this._domNode.setWidth(this._renderData.width);\n this._domNode.setLineHeight(this._renderData.height);\n this._domNode.setHeight(this._renderData.height);\n return {\n domNode: this._domNode.domNode,\n position: this._position,\n contentLeft: this._renderData.left,\n height: this._renderData.height,\n width: 2\n };\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './viewCursors.css';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { IntervalTimer, TimeoutTimer } from '../../../../base/common/async.js';\nimport { ViewPart } from '../../view/viewPart.js';\nimport { ViewCursor } from './viewCursor.js';\nimport { TextEditorCursorStyle } from '../../../common/config/editorOptions.js';\nimport { editorCursorBackground, editorCursorForeground } from '../../../common/view/editorColorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nexport class ViewCursors extends ViewPart {\n constructor(context) {\n super(context);\n const options = this._context.configuration.options;\n this._readOnly = options.get(77 /* readOnly */);\n this._cursorBlinking = options.get(20 /* cursorBlinking */);\n this._cursorStyle = options.get(22 /* cursorStyle */);\n this._cursorSmoothCaretAnimation = options.get(21 /* cursorSmoothCaretAnimation */);\n this._selectionIsEmpty = true;\n this._isComposingInput = false;\n this._isVisible = false;\n this._primaryCursor = new ViewCursor(this._context);\n this._secondaryCursors = [];\n this._renderData = [];\n this._domNode = createFastDomNode(document.createElement('div'));\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._updateDomClassName();\n this._domNode.appendChild(this._primaryCursor.getDomNode());\n this._startCursorBlinkAnimation = new TimeoutTimer();\n this._cursorFlatBlinkInterval = new IntervalTimer();\n this._blinkingEnabled = false;\n this._editorHasFocus = false;\n this._updateBlinking();\n }\n dispose() {\n super.dispose();\n this._startCursorBlinkAnimation.dispose();\n this._cursorFlatBlinkInterval.dispose();\n }\n getDomNode() {\n return this._domNode;\n }\n // --- begin event handlers\n onCompositionStart(e) {\n this._isComposingInput = true;\n this._updateBlinking();\n return true;\n }\n onCompositionEnd(e) {\n this._isComposingInput = false;\n this._updateBlinking();\n return true;\n }\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n this._readOnly = options.get(77 /* readOnly */);\n this._cursorBlinking = options.get(20 /* cursorBlinking */);\n this._cursorStyle = options.get(22 /* cursorStyle */);\n this._cursorSmoothCaretAnimation = options.get(21 /* cursorSmoothCaretAnimation */);\n this._updateBlinking();\n this._updateDomClassName();\n this._primaryCursor.onConfigurationChanged(e);\n for (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n this._secondaryCursors[i].onConfigurationChanged(e);\n }\n return true;\n }\n _onCursorPositionChanged(position, secondaryPositions) {\n this._primaryCursor.onCursorPositionChanged(position);\n this._updateBlinking();\n if (this._secondaryCursors.length < secondaryPositions.length) {\n // Create new cursors\n const addCnt = secondaryPositions.length - this._secondaryCursors.length;\n for (let i = 0; i < addCnt; i++) {\n const newCursor = new ViewCursor(this._context);\n this._domNode.domNode.insertBefore(newCursor.getDomNode().domNode, this._primaryCursor.getDomNode().domNode.nextSibling);\n this._secondaryCursors.push(newCursor);\n }\n }\n else if (this._secondaryCursors.length > secondaryPositions.length) {\n // Remove some cursors\n const removeCnt = this._secondaryCursors.length - secondaryPositions.length;\n for (let i = 0; i < removeCnt; i++) {\n this._domNode.removeChild(this._secondaryCursors[0].getDomNode());\n this._secondaryCursors.splice(0, 1);\n }\n }\n for (let i = 0; i < secondaryPositions.length; i++) {\n this._secondaryCursors[i].onCursorPositionChanged(secondaryPositions[i]);\n }\n }\n onCursorStateChanged(e) {\n const positions = [];\n for (let i = 0, len = e.selections.length; i < len; i++) {\n positions[i] = e.selections[i].getPosition();\n }\n this._onCursorPositionChanged(positions[0], positions.slice(1));\n const selectionIsEmpty = e.selections[0].isEmpty();\n if (this._selectionIsEmpty !== selectionIsEmpty) {\n this._selectionIsEmpty = selectionIsEmpty;\n this._updateDomClassName();\n }\n return true;\n }\n onDecorationsChanged(e) {\n // true for inline decorations that can end up relayouting text\n return true;\n }\n onFlushed(e) {\n return true;\n }\n onFocusChanged(e) {\n this._editorHasFocus = e.isFocused;\n this._updateBlinking();\n return false;\n }\n onLinesChanged(e) {\n return true;\n }\n onLinesDeleted(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n onScrollChanged(e) {\n return true;\n }\n onTokensChanged(e) {\n const shouldRender = (position) => {\n for (let i = 0, len = e.ranges.length; i < len; i++) {\n if (e.ranges[i].fromLineNumber <= position.lineNumber && position.lineNumber <= e.ranges[i].toLineNumber) {\n return true;\n }\n }\n return false;\n };\n if (shouldRender(this._primaryCursor.getPosition())) {\n return true;\n }\n for (const secondaryCursor of this._secondaryCursors) {\n if (shouldRender(secondaryCursor.getPosition())) {\n return true;\n }\n }\n return false;\n }\n onZonesChanged(e) {\n return true;\n }\n // --- end event handlers\n // ---- blinking logic\n _getCursorBlinking() {\n if (this._isComposingInput) {\n // avoid double cursors\n return 0 /* Hidden */;\n }\n if (!this._editorHasFocus) {\n return 0 /* Hidden */;\n }\n if (this._readOnly) {\n return 5 /* Solid */;\n }\n return this._cursorBlinking;\n }\n _updateBlinking() {\n this._startCursorBlinkAnimation.cancel();\n this._cursorFlatBlinkInterval.cancel();\n const blinkingStyle = this._getCursorBlinking();\n // hidden and solid are special as they involve no animations\n const isHidden = (blinkingStyle === 0 /* Hidden */);\n const isSolid = (blinkingStyle === 5 /* Solid */);\n if (isHidden) {\n this._hide();\n }\n else {\n this._show();\n }\n this._blinkingEnabled = false;\n this._updateDomClassName();\n if (!isHidden && !isSolid) {\n if (blinkingStyle === 1 /* Blink */) {\n // flat blinking is handled by JavaScript to save battery life due to Chromium step timing issue https://bugs.chromium.org/p/chromium/issues/detail?id=361587\n this._cursorFlatBlinkInterval.cancelAndSet(() => {\n if (this._isVisible) {\n this._hide();\n }\n else {\n this._show();\n }\n }, ViewCursors.BLINK_INTERVAL);\n }\n else {\n this._startCursorBlinkAnimation.setIfNotSet(() => {\n this._blinkingEnabled = true;\n this._updateDomClassName();\n }, ViewCursors.BLINK_INTERVAL);\n }\n }\n }\n // --- end blinking logic\n _updateDomClassName() {\n this._domNode.setClassName(this._getClassName());\n }\n _getClassName() {\n let result = 'cursors-layer';\n if (!this._selectionIsEmpty) {\n result += ' has-selection';\n }\n switch (this._cursorStyle) {\n case TextEditorCursorStyle.Line:\n result += ' cursor-line-style';\n break;\n case TextEditorCursorStyle.Block:\n result += ' cursor-block-style';\n break;\n case TextEditorCursorStyle.Underline:\n result += ' cursor-underline-style';\n break;\n case TextEditorCursorStyle.LineThin:\n result += ' cursor-line-thin-style';\n break;\n case TextEditorCursorStyle.BlockOutline:\n result += ' cursor-block-outline-style';\n break;\n case TextEditorCursorStyle.UnderlineThin:\n result += ' cursor-underline-thin-style';\n break;\n default:\n result += ' cursor-line-style';\n }\n if (this._blinkingEnabled) {\n switch (this._getCursorBlinking()) {\n case 1 /* Blink */:\n result += ' cursor-blink';\n break;\n case 2 /* Smooth */:\n result += ' cursor-smooth';\n break;\n case 3 /* Phase */:\n result += ' cursor-phase';\n break;\n case 4 /* Expand */:\n result += ' cursor-expand';\n break;\n case 5 /* Solid */:\n result += ' cursor-solid';\n break;\n default:\n result += ' cursor-solid';\n }\n }\n else {\n result += ' cursor-solid';\n }\n if (this._cursorSmoothCaretAnimation) {\n result += ' cursor-smooth-caret-animation';\n }\n return result;\n }\n _show() {\n this._primaryCursor.show();\n for (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n this._secondaryCursors[i].show();\n }\n this._isVisible = true;\n }\n _hide() {\n this._primaryCursor.hide();\n for (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n this._secondaryCursors[i].hide();\n }\n this._isVisible = false;\n }\n // ---- IViewPart implementation\n prepareRender(ctx) {\n this._primaryCursor.prepareRender(ctx);\n for (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n this._secondaryCursors[i].prepareRender(ctx);\n }\n }\n render(ctx) {\n let renderData = [], renderDataLen = 0;\n const primaryRenderData = this._primaryCursor.render(ctx);\n if (primaryRenderData) {\n renderData[renderDataLen++] = primaryRenderData;\n }\n for (let i = 0, len = this._secondaryCursors.length; i < len; i++) {\n const secondaryRenderData = this._secondaryCursors[i].render(ctx);\n if (secondaryRenderData) {\n renderData[renderDataLen++] = secondaryRenderData;\n }\n }\n this._renderData = renderData;\n }\n getLastRenderData() {\n return this._renderData;\n }\n}\nViewCursors.BLINK_INTERVAL = 500;\nregisterThemingParticipant((theme, collector) => {\n const caret = theme.getColor(editorCursorForeground);\n if (caret) {\n let caretBackground = theme.getColor(editorCursorBackground);\n if (!caretBackground) {\n caretBackground = caret.opposite();\n }\n collector.addRule(`.monaco-editor .cursors-layer .cursor { background-color: ${caret}; border-color: ${caret}; color: ${caretBackground}; }`);\n if (theme.type === 'hc') {\n collector.addRule(`.monaco-editor .cursors-layer.has-selection .cursor { border-left: 1px solid ${caretBackground}; border-right: 1px solid ${caretBackground}; }`);\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { ViewPart } from '../../view/viewPart.js';\nimport { Position } from '../../../common/core/position.js';\nconst invalidFunc = () => { throw new Error(`Invalid change accessor`); };\nexport class ViewZones extends ViewPart {\n constructor(context) {\n super(context);\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._contentWidth = layoutInfo.contentWidth;\n this._contentLeft = layoutInfo.contentLeft;\n this.domNode = createFastDomNode(document.createElement('div'));\n this.domNode.setClassName('view-zones');\n this.domNode.setPosition('absolute');\n this.domNode.setAttribute('role', 'presentation');\n this.domNode.setAttribute('aria-hidden', 'true');\n this.marginDomNode = createFastDomNode(document.createElement('div'));\n this.marginDomNode.setClassName('margin-view-zones');\n this.marginDomNode.setPosition('absolute');\n this.marginDomNode.setAttribute('role', 'presentation');\n this.marginDomNode.setAttribute('aria-hidden', 'true');\n this._zones = {};\n }\n dispose() {\n super.dispose();\n this._zones = {};\n }\n // ---- begin view event handlers\n _recomputeWhitespacesProps() {\n const whitespaces = this._context.viewLayout.getWhitespaces();\n const oldWhitespaces = new Map();\n for (const whitespace of whitespaces) {\n oldWhitespaces.set(whitespace.id, whitespace);\n }\n let hadAChange = false;\n this._context.model.changeWhitespace((whitespaceAccessor) => {\n const keys = Object.keys(this._zones);\n for (let i = 0, len = keys.length; i < len; i++) {\n const id = keys[i];\n const zone = this._zones[id];\n const props = this._computeWhitespaceProps(zone.delegate);\n const oldWhitespace = oldWhitespaces.get(id);\n if (oldWhitespace && (oldWhitespace.afterLineNumber !== props.afterViewLineNumber || oldWhitespace.height !== props.heightInPx)) {\n whitespaceAccessor.changeOneWhitespace(id, props.afterViewLineNumber, props.heightInPx);\n this._safeCallOnComputedHeight(zone.delegate, props.heightInPx);\n hadAChange = true;\n }\n }\n });\n return hadAChange;\n }\n onConfigurationChanged(e) {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._lineHeight = options.get(55 /* lineHeight */);\n this._contentWidth = layoutInfo.contentWidth;\n this._contentLeft = layoutInfo.contentLeft;\n if (e.hasChanged(55 /* lineHeight */)) {\n this._recomputeWhitespacesProps();\n }\n return true;\n }\n onLineMappingChanged(e) {\n return this._recomputeWhitespacesProps();\n }\n onLinesDeleted(e) {\n return true;\n }\n onScrollChanged(e) {\n return e.scrollTopChanged || e.scrollWidthChanged;\n }\n onZonesChanged(e) {\n return true;\n }\n onLinesInserted(e) {\n return true;\n }\n // ---- end view event handlers\n _getZoneOrdinal(zone) {\n if (typeof zone.afterColumn !== 'undefined') {\n return zone.afterColumn;\n }\n return 10000;\n }\n _computeWhitespaceProps(zone) {\n if (zone.afterLineNumber === 0) {\n return {\n afterViewLineNumber: 0,\n heightInPx: this._heightInPixels(zone),\n minWidthInPx: this._minWidthInPixels(zone)\n };\n }\n let zoneAfterModelPosition;\n if (typeof zone.afterColumn !== 'undefined') {\n zoneAfterModelPosition = this._context.model.validateModelPosition({\n lineNumber: zone.afterLineNumber,\n column: zone.afterColumn\n });\n }\n else {\n const validAfterLineNumber = this._context.model.validateModelPosition({\n lineNumber: zone.afterLineNumber,\n column: 1\n }).lineNumber;\n zoneAfterModelPosition = new Position(validAfterLineNumber, this._context.model.getModelLineMaxColumn(validAfterLineNumber));\n }\n let zoneBeforeModelPosition;\n if (zoneAfterModelPosition.column === this._context.model.getModelLineMaxColumn(zoneAfterModelPosition.lineNumber)) {\n zoneBeforeModelPosition = this._context.model.validateModelPosition({\n lineNumber: zoneAfterModelPosition.lineNumber + 1,\n column: 1\n });\n }\n else {\n zoneBeforeModelPosition = this._context.model.validateModelPosition({\n lineNumber: zoneAfterModelPosition.lineNumber,\n column: zoneAfterModelPosition.column + 1\n });\n }\n const viewPosition = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(zoneAfterModelPosition);\n const isVisible = this._context.model.coordinatesConverter.modelPositionIsVisible(zoneBeforeModelPosition);\n return {\n afterViewLineNumber: viewPosition.lineNumber,\n heightInPx: (isVisible ? this._heightInPixels(zone) : 0),\n minWidthInPx: this._minWidthInPixels(zone)\n };\n }\n changeViewZones(callback) {\n let zonesHaveChanged = false;\n this._context.model.changeWhitespace((whitespaceAccessor) => {\n const changeAccessor = {\n addZone: (zone) => {\n zonesHaveChanged = true;\n return this._addZone(whitespaceAccessor, zone);\n },\n removeZone: (id) => {\n if (!id) {\n return;\n }\n zonesHaveChanged = this._removeZone(whitespaceAccessor, id) || zonesHaveChanged;\n },\n layoutZone: (id) => {\n if (!id) {\n return;\n }\n zonesHaveChanged = this._layoutZone(whitespaceAccessor, id) || zonesHaveChanged;\n }\n };\n safeInvoke1Arg(callback, changeAccessor);\n // Invalidate changeAccessor\n changeAccessor.addZone = invalidFunc;\n changeAccessor.removeZone = invalidFunc;\n changeAccessor.layoutZone = invalidFunc;\n });\n return zonesHaveChanged;\n }\n _addZone(whitespaceAccessor, zone) {\n const props = this._computeWhitespaceProps(zone);\n const whitespaceId = whitespaceAccessor.insertWhitespace(props.afterViewLineNumber, this._getZoneOrdinal(zone), props.heightInPx, props.minWidthInPx);\n const myZone = {\n whitespaceId: whitespaceId,\n delegate: zone,\n isVisible: false,\n domNode: createFastDomNode(zone.domNode),\n marginDomNode: zone.marginDomNode ? createFastDomNode(zone.marginDomNode) : null\n };\n this._safeCallOnComputedHeight(myZone.delegate, props.heightInPx);\n myZone.domNode.setPosition('absolute');\n myZone.domNode.domNode.style.width = '100%';\n myZone.domNode.setDisplay('none');\n myZone.domNode.setAttribute('monaco-view-zone', myZone.whitespaceId);\n this.domNode.appendChild(myZone.domNode);\n if (myZone.marginDomNode) {\n myZone.marginDomNode.setPosition('absolute');\n myZone.marginDomNode.domNode.style.width = '100%';\n myZone.marginDomNode.setDisplay('none');\n myZone.marginDomNode.setAttribute('monaco-view-zone', myZone.whitespaceId);\n this.marginDomNode.appendChild(myZone.marginDomNode);\n }\n this._zones[myZone.whitespaceId] = myZone;\n this.setShouldRender();\n return myZone.whitespaceId;\n }\n _removeZone(whitespaceAccessor, id) {\n if (this._zones.hasOwnProperty(id)) {\n const zone = this._zones[id];\n delete this._zones[id];\n whitespaceAccessor.removeWhitespace(zone.whitespaceId);\n zone.domNode.removeAttribute('monaco-visible-view-zone');\n zone.domNode.removeAttribute('monaco-view-zone');\n zone.domNode.domNode.parentNode.removeChild(zone.domNode.domNode);\n if (zone.marginDomNode) {\n zone.marginDomNode.removeAttribute('monaco-visible-view-zone');\n zone.marginDomNode.removeAttribute('monaco-view-zone');\n zone.marginDomNode.domNode.parentNode.removeChild(zone.marginDomNode.domNode);\n }\n this.setShouldRender();\n return true;\n }\n return false;\n }\n _layoutZone(whitespaceAccessor, id) {\n if (this._zones.hasOwnProperty(id)) {\n const zone = this._zones[id];\n const props = this._computeWhitespaceProps(zone.delegate);\n // const newOrdinal = this._getZoneOrdinal(zone.delegate);\n whitespaceAccessor.changeOneWhitespace(zone.whitespaceId, props.afterViewLineNumber, props.heightInPx);\n // TODO@Alex: change `newOrdinal` too\n this._safeCallOnComputedHeight(zone.delegate, props.heightInPx);\n this.setShouldRender();\n return true;\n }\n return false;\n }\n shouldSuppressMouseDownOnViewZone(id) {\n if (this._zones.hasOwnProperty(id)) {\n const zone = this._zones[id];\n return Boolean(zone.delegate.suppressMouseDown);\n }\n return false;\n }\n _heightInPixels(zone) {\n if (typeof zone.heightInPx === 'number') {\n return zone.heightInPx;\n }\n if (typeof zone.heightInLines === 'number') {\n return this._lineHeight * zone.heightInLines;\n }\n return this._lineHeight;\n }\n _minWidthInPixels(zone) {\n if (typeof zone.minWidthInPx === 'number') {\n return zone.minWidthInPx;\n }\n return 0;\n }\n _safeCallOnComputedHeight(zone, height) {\n if (typeof zone.onComputedHeight === 'function') {\n try {\n zone.onComputedHeight(height);\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n }\n _safeCallOnDomNodeTop(zone, top) {\n if (typeof zone.onDomNodeTop === 'function') {\n try {\n zone.onDomNodeTop(top);\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n }\n prepareRender(ctx) {\n // Nothing to read\n }\n render(ctx) {\n const visibleWhitespaces = ctx.viewportData.whitespaceViewportData;\n const visibleZones = {};\n let hasVisibleZone = false;\n for (let i = 0, len = visibleWhitespaces.length; i < len; i++) {\n visibleZones[visibleWhitespaces[i].id] = visibleWhitespaces[i];\n hasVisibleZone = true;\n }\n const keys = Object.keys(this._zones);\n for (let i = 0, len = keys.length; i < len; i++) {\n const id = keys[i];\n const zone = this._zones[id];\n let newTop = 0;\n let newHeight = 0;\n let newDisplay = 'none';\n if (visibleZones.hasOwnProperty(id)) {\n newTop = visibleZones[id].verticalOffset - ctx.bigNumbersDelta;\n newHeight = visibleZones[id].height;\n newDisplay = 'block';\n // zone is visible\n if (!zone.isVisible) {\n zone.domNode.setAttribute('monaco-visible-view-zone', 'true');\n zone.isVisible = true;\n }\n this._safeCallOnDomNodeTop(zone.delegate, ctx.getScrolledTopFromAbsoluteTop(visibleZones[id].verticalOffset));\n }\n else {\n if (zone.isVisible) {\n zone.domNode.removeAttribute('monaco-visible-view-zone');\n zone.isVisible = false;\n }\n this._safeCallOnDomNodeTop(zone.delegate, ctx.getScrolledTopFromAbsoluteTop(-1000000));\n }\n zone.domNode.setTop(newTop);\n zone.domNode.setHeight(newHeight);\n zone.domNode.setDisplay(newDisplay);\n if (zone.marginDomNode) {\n zone.marginDomNode.setTop(newTop);\n zone.marginDomNode.setHeight(newHeight);\n zone.marginDomNode.setDisplay(newDisplay);\n }\n }\n if (hasVisibleZone) {\n this.domNode.setWidth(Math.max(ctx.scrollWidth, this._contentWidth));\n this.marginDomNode.setWidth(this._contentLeft);\n }\n }\n}\nfunction safeInvoke1Arg(func, arg1) {\n try {\n return func(arg1);\n }\n catch (e) {\n onUnexpectedError(e);\n }\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 *--------------------------------------------------------------------------------------------*/\nexport class EditorTheme {\n constructor(theme) {\n this._theme = theme;\n }\n get type() {\n return this._theme.type;\n }\n update(theme) {\n this._theme = theme;\n }\n getColor(color) {\n return this._theme.getColor(color);\n }\n}\nexport class ViewContext {\n constructor(configuration, theme, model) {\n this.configuration = configuration;\n this.theme = new EditorTheme(theme);\n this.model = model;\n this.viewLayout = model.viewLayout;\n }\n addEventHandler(eventHandler) {\n this.model.addViewEventHandler(eventHandler);\n }\n removeEventHandler(eventHandler) {\n this.model.removeViewEventHandler(eventHandler);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Range } from '../core/range.js';\n/**\n * Contains all data needed to render at a specific viewport.\n */\nexport class ViewportData {\n constructor(selections, partialData, whitespaceViewportData, model) {\n this.selections = selections;\n this.startLineNumber = partialData.startLineNumber | 0;\n this.endLineNumber = partialData.endLineNumber | 0;\n this.relativeVerticalOffset = partialData.relativeVerticalOffset;\n this.bigNumbersDelta = partialData.bigNumbersDelta | 0;\n this.whitespaceViewportData = whitespaceViewportData;\n this._model = model;\n this.visibleRange = new Range(partialData.startLineNumber, this._model.getLineMinColumn(partialData.startLineNumber), partialData.endLineNumber, this._model.getLineMaxColumn(partialData.endLineNumber));\n }\n getViewLineRenderingData(lineNumber) {\n return this._model.getViewLineRenderingData(this.visibleRange, lineNumber);\n }\n getDecorationsInViewport() {\n return this._model.getDecorationsInViewport(this.visibleRange);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../base/browser/dom.js';\nimport * as browser from '../../../base/browser/browser.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { PointerHandler } from '../controller/pointerHandler.js';\nimport { TextAreaHandler } from '../controller/textAreaHandler.js';\nimport { ViewController } from './viewController.js';\nimport { ViewUserInputEvents } from './viewUserInputEvents.js';\nimport { ContentViewOverlays, MarginViewOverlays } from './viewOverlays.js';\nimport { PartFingerprints } from './viewPart.js';\nimport { ViewContentWidgets } from '../viewParts/contentWidgets/contentWidgets.js';\nimport { CurrentLineHighlightOverlay, CurrentLineMarginHighlightOverlay } from '../viewParts/currentLineHighlight/currentLineHighlight.js';\nimport { DecorationsOverlay } from '../viewParts/decorations/decorations.js';\nimport { EditorScrollbar } from '../viewParts/editorScrollbar/editorScrollbar.js';\nimport { GlyphMarginOverlay } from '../viewParts/glyphMargin/glyphMargin.js';\nimport { IndentGuidesOverlay } from '../viewParts/indentGuides/indentGuides.js';\nimport { LineNumbersOverlay } from '../viewParts/lineNumbers/lineNumbers.js';\nimport { ViewLines } from '../viewParts/lines/viewLines.js';\nimport { LinesDecorationsOverlay } from '../viewParts/linesDecorations/linesDecorations.js';\nimport { Margin } from '../viewParts/margin/margin.js';\nimport { MarginViewLineDecorationsOverlay } from '../viewParts/marginDecorations/marginDecorations.js';\nimport { Minimap } from '../viewParts/minimap/minimap.js';\nimport { ViewOverlayWidgets } from '../viewParts/overlayWidgets/overlayWidgets.js';\nimport { DecorationsOverviewRuler } from '../viewParts/overviewRuler/decorationsOverviewRuler.js';\nimport { OverviewRuler } from '../viewParts/overviewRuler/overviewRuler.js';\nimport { Rulers } from '../viewParts/rulers/rulers.js';\nimport { ScrollDecorationViewPart } from '../viewParts/scrollDecoration/scrollDecoration.js';\nimport { SelectionsOverlay } from '../viewParts/selections/selections.js';\nimport { ViewCursors } from '../viewParts/viewCursors/viewCursors.js';\nimport { ViewZones } from '../viewParts/viewZones/viewZones.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { RenderingContext } from '../../common/view/renderingContext.js';\nimport { ViewContext } from '../../common/view/viewContext.js';\nimport { ViewportData } from '../../common/viewLayout/viewLinesViewportData.js';\nimport { ViewEventHandler } from '../../common/viewModel/viewEventHandler.js';\nimport { getThemeTypeSelector } from '../../../platform/theme/common/themeService.js';\nimport { PointerHandlerLastRenderData } from '../controller/mouseTarget.js';\nexport class View extends ViewEventHandler {\n constructor(commandDelegate, configuration, themeService, model, userInputEvents, overflowWidgetsDomNode) {\n super();\n this._selections = [new Selection(1, 1, 1, 1)];\n this._renderAnimationFrame = null;\n const viewController = new ViewController(configuration, model, userInputEvents, commandDelegate);\n // The view context is passed on to most classes (basically to reduce param. counts in ctors)\n this._context = new ViewContext(configuration, themeService.getColorTheme(), model);\n this._configPixelRatio = this._context.configuration.options.get(125 /* pixelRatio */);\n // Ensure the view is the first event handler in order to update the layout\n this._context.addEventHandler(this);\n this._register(themeService.onDidColorThemeChange(theme => {\n this._context.theme.update(theme);\n this._context.model.onDidColorThemeChange();\n this.render(true, false);\n }));\n this._viewParts = [];\n // Keyboard handler\n this._textAreaHandler = new TextAreaHandler(this._context, viewController, this._createTextAreaHandlerHelper());\n this._viewParts.push(this._textAreaHandler);\n // These two dom nodes must be constructed up front, since references are needed in the layout provider (scrolling & co.)\n this._linesContent = createFastDomNode(document.createElement('div'));\n this._linesContent.setClassName('lines-content' + ' monaco-editor-background');\n this._linesContent.setPosition('absolute');\n this.domNode = createFastDomNode(document.createElement('div'));\n this.domNode.setClassName(this._getEditorClassName());\n // Set role 'code' for better screen reader support https://github.com/microsoft/vscode/issues/93438\n this.domNode.setAttribute('role', 'code');\n this._overflowGuardContainer = createFastDomNode(document.createElement('div'));\n PartFingerprints.write(this._overflowGuardContainer, 3 /* OverflowGuard */);\n this._overflowGuardContainer.setClassName('overflow-guard');\n this._scrollbar = new EditorScrollbar(this._context, this._linesContent, this.domNode, this._overflowGuardContainer);\n this._viewParts.push(this._scrollbar);\n // View Lines\n this._viewLines = new ViewLines(this._context, this._linesContent);\n // View Zones\n this._viewZones = new ViewZones(this._context);\n this._viewParts.push(this._viewZones);\n // Decorations overview ruler\n const decorationsOverviewRuler = new DecorationsOverviewRuler(this._context);\n this._viewParts.push(decorationsOverviewRuler);\n const scrollDecoration = new ScrollDecorationViewPart(this._context);\n this._viewParts.push(scrollDecoration);\n const contentViewOverlays = new ContentViewOverlays(this._context);\n this._viewParts.push(contentViewOverlays);\n contentViewOverlays.addDynamicOverlay(new CurrentLineHighlightOverlay(this._context));\n contentViewOverlays.addDynamicOverlay(new SelectionsOverlay(this._context));\n contentViewOverlays.addDynamicOverlay(new IndentGuidesOverlay(this._context));\n contentViewOverlays.addDynamicOverlay(new DecorationsOverlay(this._context));\n const marginViewOverlays = new MarginViewOverlays(this._context);\n this._viewParts.push(marginViewOverlays);\n marginViewOverlays.addDynamicOverlay(new CurrentLineMarginHighlightOverlay(this._context));\n marginViewOverlays.addDynamicOverlay(new GlyphMarginOverlay(this._context));\n marginViewOverlays.addDynamicOverlay(new MarginViewLineDecorationsOverlay(this._context));\n marginViewOverlays.addDynamicOverlay(new LinesDecorationsOverlay(this._context));\n marginViewOverlays.addDynamicOverlay(new LineNumbersOverlay(this._context));\n const margin = new Margin(this._context);\n margin.getDomNode().appendChild(this._viewZones.marginDomNode);\n margin.getDomNode().appendChild(marginViewOverlays.getDomNode());\n this._viewParts.push(margin);\n // Content widgets\n this._contentWidgets = new ViewContentWidgets(this._context, this.domNode);\n this._viewParts.push(this._contentWidgets);\n this._viewCursors = new ViewCursors(this._context);\n this._viewParts.push(this._viewCursors);\n // Overlay widgets\n this._overlayWidgets = new ViewOverlayWidgets(this._context);\n this._viewParts.push(this._overlayWidgets);\n const rulers = new Rulers(this._context);\n this._viewParts.push(rulers);\n const minimap = new Minimap(this._context);\n this._viewParts.push(minimap);\n // -------------- Wire dom nodes up\n if (decorationsOverviewRuler) {\n const overviewRulerData = this._scrollbar.getOverviewRulerLayoutInfo();\n overviewRulerData.parent.insertBefore(decorationsOverviewRuler.getDomNode(), overviewRulerData.insertBefore);\n }\n this._linesContent.appendChild(contentViewOverlays.getDomNode());\n this._linesContent.appendChild(rulers.domNode);\n this._linesContent.appendChild(this._viewZones.domNode);\n this._linesContent.appendChild(this._viewLines.getDomNode());\n this._linesContent.appendChild(this._contentWidgets.domNode);\n this._linesContent.appendChild(this._viewCursors.getDomNode());\n this._overflowGuardContainer.appendChild(margin.getDomNode());\n this._overflowGuardContainer.appendChild(this._scrollbar.getDomNode());\n this._overflowGuardContainer.appendChild(scrollDecoration.getDomNode());\n this._overflowGuardContainer.appendChild(this._textAreaHandler.textArea);\n this._overflowGuardContainer.appendChild(this._textAreaHandler.textAreaCover);\n this._overflowGuardContainer.appendChild(this._overlayWidgets.getDomNode());\n this._overflowGuardContainer.appendChild(minimap.getDomNode());\n this.domNode.appendChild(this._overflowGuardContainer);\n if (overflowWidgetsDomNode) {\n overflowWidgetsDomNode.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode.domNode);\n }\n else {\n this.domNode.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode);\n }\n this._applyLayout();\n // Pointer handler\n this._pointerHandler = this._register(new PointerHandler(this._context, viewController, this._createPointerHandlerHelper()));\n }\n _flushAccumulatedAndRenderNow() {\n this._renderNow();\n }\n _createPointerHandlerHelper() {\n return {\n viewDomNode: this.domNode.domNode,\n linesContentDomNode: this._linesContent.domNode,\n focusTextArea: () => {\n this.focus();\n },\n dispatchTextAreaEvent: (event) => {\n this._textAreaHandler.textArea.domNode.dispatchEvent(event);\n },\n getLastRenderData: () => {\n const lastViewCursorsRenderData = this._viewCursors.getLastRenderData() || [];\n const lastTextareaPosition = this._textAreaHandler.getLastRenderData();\n return new PointerHandlerLastRenderData(lastViewCursorsRenderData, lastTextareaPosition);\n },\n shouldSuppressMouseDownOnViewZone: (viewZoneId) => {\n return this._viewZones.shouldSuppressMouseDownOnViewZone(viewZoneId);\n },\n shouldSuppressMouseDownOnWidget: (widgetId) => {\n return this._contentWidgets.shouldSuppressMouseDownOnWidget(widgetId);\n },\n getPositionFromDOMInfo: (spanNode, offset) => {\n this._flushAccumulatedAndRenderNow();\n return this._viewLines.getPositionFromDOMInfo(spanNode, offset);\n },\n visibleRangeForPosition: (lineNumber, column) => {\n this._flushAccumulatedAndRenderNow();\n return this._viewLines.visibleRangeForPosition(new Position(lineNumber, column));\n },\n getLineWidth: (lineNumber) => {\n this._flushAccumulatedAndRenderNow();\n return this._viewLines.getLineWidth(lineNumber);\n }\n };\n }\n _createTextAreaHandlerHelper() {\n return {\n visibleRangeForPositionRelativeToEditor: (lineNumber, column) => {\n this._flushAccumulatedAndRenderNow();\n return this._viewLines.visibleRangeForPosition(new Position(lineNumber, column));\n }\n };\n }\n _applyLayout() {\n const options = this._context.configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this.domNode.setWidth(layoutInfo.width);\n this.domNode.setHeight(layoutInfo.height);\n this._overflowGuardContainer.setWidth(layoutInfo.width);\n this._overflowGuardContainer.setHeight(layoutInfo.height);\n this._linesContent.setWidth(1000000);\n this._linesContent.setHeight(1000000);\n }\n _getEditorClassName() {\n const focused = this._textAreaHandler.isFocused() ? ' focused' : '';\n return this._context.configuration.options.get(124 /* editorClassName */) + ' ' + getThemeTypeSelector(this._context.theme.type) + focused;\n }\n // --- begin event handlers\n handleEvents(events) {\n super.handleEvents(events);\n this._scheduleRender();\n }\n onConfigurationChanged(e) {\n this._configPixelRatio = this._context.configuration.options.get(125 /* pixelRatio */);\n this.domNode.setClassName(this._getEditorClassName());\n this._applyLayout();\n return false;\n }\n onCursorStateChanged(e) {\n this._selections = e.selections;\n return false;\n }\n onFocusChanged(e) {\n this.domNode.setClassName(this._getEditorClassName());\n return false;\n }\n onThemeChanged(e) {\n this.domNode.setClassName(this._getEditorClassName());\n return false;\n }\n // --- end event handlers\n dispose() {\n if (this._renderAnimationFrame !== null) {\n this._renderAnimationFrame.dispose();\n this._renderAnimationFrame = null;\n }\n this._contentWidgets.overflowingContentWidgetsDomNode.domNode.remove();\n this._context.removeEventHandler(this);\n this._viewLines.dispose();\n // Destroy view parts\n for (const viewPart of this._viewParts) {\n viewPart.dispose();\n }\n super.dispose();\n }\n _scheduleRender() {\n if (this._renderAnimationFrame === null) {\n this._renderAnimationFrame = dom.runAtThisOrScheduleAtNextAnimationFrame(this._onRenderScheduled.bind(this), 100);\n }\n }\n _onRenderScheduled() {\n this._renderAnimationFrame = null;\n this._flushAccumulatedAndRenderNow();\n }\n _renderNow() {\n safeInvokeNoArg(() => this._actualRender());\n }\n _getViewPartsToRender() {\n let result = [], resultLen = 0;\n for (const viewPart of this._viewParts) {\n if (viewPart.shouldRender()) {\n result[resultLen++] = viewPart;\n }\n }\n return result;\n }\n _actualRender() {\n if (!dom.isInDOM(this.domNode.domNode)) {\n return;\n }\n let viewPartsToRender = this._getViewPartsToRender();\n if (!this._viewLines.shouldRender() && viewPartsToRender.length === 0) {\n // Nothing to render\n return;\n }\n const partialViewportData = this._context.viewLayout.getLinesViewportData();\n this._context.model.setViewport(partialViewportData.startLineNumber, partialViewportData.endLineNumber, partialViewportData.centeredLineNumber);\n const viewportData = new ViewportData(this._selections, partialViewportData, this._context.viewLayout.getWhitespaceViewportData(), this._context.model);\n if (this._contentWidgets.shouldRender()) {\n // Give the content widgets a chance to set their max width before a possible synchronous layout\n this._contentWidgets.onBeforeRender(viewportData);\n }\n if (this._viewLines.shouldRender()) {\n this._viewLines.renderText(viewportData);\n this._viewLines.onDidRender();\n // Rendering of viewLines might cause scroll events to occur, so collect view parts to render again\n viewPartsToRender = this._getViewPartsToRender();\n }\n const renderingContext = new RenderingContext(this._context.viewLayout, viewportData, this._viewLines);\n // Render the rest of the parts\n for (const viewPart of viewPartsToRender) {\n viewPart.prepareRender(renderingContext);\n }\n for (const viewPart of viewPartsToRender) {\n viewPart.render(renderingContext);\n viewPart.onDidRender();\n }\n // Try to detect browser zooming and paint again if necessary\n if (Math.abs(browser.getPixelRatio() - this._configPixelRatio) > 0.001) {\n // looks like the pixel ratio has changed\n this._context.configuration.updatePixelRatio();\n }\n }\n // --- BEGIN CodeEditor helpers\n delegateVerticalScrollbarMouseDown(browserEvent) {\n this._scrollbar.delegateVerticalScrollbarMouseDown(browserEvent);\n }\n restoreState(scrollPosition) {\n this._context.model.setScrollPosition({ scrollTop: scrollPosition.scrollTop }, 1 /* Immediate */);\n this._context.model.tokenizeViewport();\n this._renderNow();\n this._viewLines.updateLineWidths();\n this._context.model.setScrollPosition({ scrollLeft: scrollPosition.scrollLeft }, 1 /* Immediate */);\n }\n getOffsetForColumn(modelLineNumber, modelColumn) {\n const modelPosition = this._context.model.validateModelPosition({\n lineNumber: modelLineNumber,\n column: modelColumn\n });\n const viewPosition = this._context.model.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\n this._flushAccumulatedAndRenderNow();\n const visibleRange = this._viewLines.visibleRangeForPosition(new Position(viewPosition.lineNumber, viewPosition.column));\n if (!visibleRange) {\n return -1;\n }\n return visibleRange.left;\n }\n getTargetAtClientPoint(clientX, clientY) {\n const mouseTarget = this._pointerHandler.getTargetAtClientPoint(clientX, clientY);\n if (!mouseTarget) {\n return null;\n }\n return ViewUserInputEvents.convertViewToModelMouseTarget(mouseTarget, this._context.model.coordinatesConverter);\n }\n createOverviewRuler(cssClassName) {\n return new OverviewRuler(this._context, cssClassName);\n }\n change(callback) {\n this._viewZones.changeViewZones(callback);\n this._scheduleRender();\n }\n render(now, everything) {\n if (everything) {\n // Force everything to render...\n this._viewLines.forceShouldRender();\n for (const viewPart of this._viewParts) {\n viewPart.forceShouldRender();\n }\n }\n if (now) {\n this._flushAccumulatedAndRenderNow();\n }\n else {\n this._scheduleRender();\n }\n }\n focus() {\n this._textAreaHandler.focusTextArea();\n }\n isFocused() {\n return this._textAreaHandler.isFocused();\n }\n setAriaOptions(options) {\n this._textAreaHandler.setAriaOptions(options);\n }\n addContentWidget(widgetData) {\n this._contentWidgets.addWidget(widgetData.widget);\n this.layoutContentWidget(widgetData);\n this._scheduleRender();\n }\n layoutContentWidget(widgetData) {\n let newRange = widgetData.position ? widgetData.position.range || null : null;\n if (newRange === null) {\n const newPosition = widgetData.position ? widgetData.position.position : null;\n if (newPosition !== null) {\n newRange = new Range(newPosition.lineNumber, newPosition.column, newPosition.lineNumber, newPosition.column);\n }\n }\n const newPreference = widgetData.position ? widgetData.position.preference : null;\n this._contentWidgets.setWidgetPosition(widgetData.widget, newRange, newPreference);\n this._scheduleRender();\n }\n removeContentWidget(widgetData) {\n this._contentWidgets.removeWidget(widgetData.widget);\n this._scheduleRender();\n }\n addOverlayWidget(widgetData) {\n this._overlayWidgets.addWidget(widgetData.widget);\n this.layoutOverlayWidget(widgetData);\n this._scheduleRender();\n }\n layoutOverlayWidget(widgetData) {\n const newPreference = widgetData.position ? widgetData.position.preference : null;\n const shouldRender = this._overlayWidgets.setWidgetPosition(widgetData.widget, newPreference);\n if (shouldRender) {\n this._scheduleRender();\n }\n }\n removeOverlayWidget(widgetData) {\n this._overlayWidgets.removeWidget(widgetData.widget);\n this._scheduleRender();\n }\n}\nfunction safeInvokeNoArg(func) {\n try {\n return func();\n }\n catch (e) {\n onUnexpectedError(e);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { CursorState, SingleCursorState } from './cursorCommon.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nexport class OneCursor {\n constructor(context) {\n this._selTrackedRange = null;\n this._trackSelection = true;\n this._setState(context, new SingleCursorState(new Range(1, 1, 1, 1), 0, new Position(1, 1), 0), new SingleCursorState(new Range(1, 1, 1, 1), 0, new Position(1, 1), 0));\n }\n dispose(context) {\n this._removeTrackedRange(context);\n }\n startTrackingSelection(context) {\n this._trackSelection = true;\n this._updateTrackedRange(context);\n }\n stopTrackingSelection(context) {\n this._trackSelection = false;\n this._removeTrackedRange(context);\n }\n _updateTrackedRange(context) {\n if (!this._trackSelection) {\n // don't track the selection\n return;\n }\n this._selTrackedRange = context.model._setTrackedRange(this._selTrackedRange, this.modelState.selection, 0 /* AlwaysGrowsWhenTypingAtEdges */);\n }\n _removeTrackedRange(context) {\n this._selTrackedRange = context.model._setTrackedRange(this._selTrackedRange, null, 0 /* AlwaysGrowsWhenTypingAtEdges */);\n }\n asCursorState() {\n return new CursorState(this.modelState, this.viewState);\n }\n readSelectionFromMarkers(context) {\n const range = context.model._getTrackedRange(this._selTrackedRange);\n if (this.modelState.selection.getDirection() === 0 /* LTR */) {\n return new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n }\n return new Selection(range.endLineNumber, range.endColumn, range.startLineNumber, range.startColumn);\n }\n ensureValidState(context) {\n this._setState(context, this.modelState, this.viewState);\n }\n setState(context, modelState, viewState) {\n this._setState(context, modelState, viewState);\n }\n _setState(context, modelState, viewState) {\n if (!modelState) {\n if (!viewState) {\n return;\n }\n // We only have the view state => compute the model state\n const selectionStart = context.model.validateRange(context.coordinatesConverter.convertViewRangeToModelRange(viewState.selectionStart));\n const position = context.model.validatePosition(context.coordinatesConverter.convertViewPositionToModelPosition(viewState.position));\n modelState = new SingleCursorState(selectionStart, viewState.selectionStartLeftoverVisibleColumns, position, viewState.leftoverVisibleColumns);\n }\n else {\n // Validate new model state\n const selectionStart = context.model.validateRange(modelState.selectionStart);\n const selectionStartLeftoverVisibleColumns = modelState.selectionStart.equalsRange(selectionStart) ? modelState.selectionStartLeftoverVisibleColumns : 0;\n const position = context.model.validatePosition(modelState.position);\n const leftoverVisibleColumns = modelState.position.equals(position) ? modelState.leftoverVisibleColumns : 0;\n modelState = new SingleCursorState(selectionStart, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns);\n }\n if (!viewState) {\n // We only have the model state => compute the view state\n const viewSelectionStart1 = context.coordinatesConverter.convertModelPositionToViewPosition(new Position(modelState.selectionStart.startLineNumber, modelState.selectionStart.startColumn));\n const viewSelectionStart2 = context.coordinatesConverter.convertModelPositionToViewPosition(new Position(modelState.selectionStart.endLineNumber, modelState.selectionStart.endColumn));\n const viewSelectionStart = new Range(viewSelectionStart1.lineNumber, viewSelectionStart1.column, viewSelectionStart2.lineNumber, viewSelectionStart2.column);\n const viewPosition = context.coordinatesConverter.convertModelPositionToViewPosition(modelState.position);\n viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns);\n }\n else {\n // Validate new view state\n const viewSelectionStart = context.coordinatesConverter.validateViewRange(viewState.selectionStart, modelState.selectionStart);\n const viewPosition = context.coordinatesConverter.validateViewPosition(viewState.position, modelState.position);\n viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns);\n }\n this.modelState = modelState;\n this.viewState = viewState;\n this._updateTrackedRange(context);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { CursorState } from './cursorCommon.js';\nimport { OneCursor } from './oneCursor.js';\nimport { Selection } from '../core/selection.js';\nexport class CursorCollection {\n constructor(context) {\n this.context = context;\n this.primaryCursor = new OneCursor(context);\n this.secondaryCursors = [];\n this.lastAddedCursorIndex = 0;\n }\n dispose() {\n this.primaryCursor.dispose(this.context);\n this.killSecondaryCursors();\n }\n startTrackingSelections() {\n this.primaryCursor.startTrackingSelection(this.context);\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n this.secondaryCursors[i].startTrackingSelection(this.context);\n }\n }\n stopTrackingSelections() {\n this.primaryCursor.stopTrackingSelection(this.context);\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n this.secondaryCursors[i].stopTrackingSelection(this.context);\n }\n }\n updateContext(context) {\n this.context = context;\n }\n ensureValidState() {\n this.primaryCursor.ensureValidState(this.context);\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n this.secondaryCursors[i].ensureValidState(this.context);\n }\n }\n readSelectionFromMarkers() {\n let result = [];\n result[0] = this.primaryCursor.readSelectionFromMarkers(this.context);\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n result[i + 1] = this.secondaryCursors[i].readSelectionFromMarkers(this.context);\n }\n return result;\n }\n getAll() {\n let result = [];\n result[0] = this.primaryCursor.asCursorState();\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n result[i + 1] = this.secondaryCursors[i].asCursorState();\n }\n return result;\n }\n getViewPositions() {\n let result = [];\n result[0] = this.primaryCursor.viewState.position;\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n result[i + 1] = this.secondaryCursors[i].viewState.position;\n }\n return result;\n }\n getTopMostViewPosition() {\n let result = this.primaryCursor.viewState.position;\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n const viewPosition = this.secondaryCursors[i].viewState.position;\n if (viewPosition.isBefore(result)) {\n result = viewPosition;\n }\n }\n return result;\n }\n getBottomMostViewPosition() {\n let result = this.primaryCursor.viewState.position;\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n const viewPosition = this.secondaryCursors[i].viewState.position;\n if (result.isBeforeOrEqual(viewPosition)) {\n result = viewPosition;\n }\n }\n return result;\n }\n getSelections() {\n let result = [];\n result[0] = this.primaryCursor.modelState.selection;\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n result[i + 1] = this.secondaryCursors[i].modelState.selection;\n }\n return result;\n }\n getViewSelections() {\n let result = [];\n result[0] = this.primaryCursor.viewState.selection;\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n result[i + 1] = this.secondaryCursors[i].viewState.selection;\n }\n return result;\n }\n setSelections(selections) {\n this.setStates(CursorState.fromModelSelections(selections));\n }\n getPrimaryCursor() {\n return this.primaryCursor.asCursorState();\n }\n setStates(states) {\n if (states === null) {\n return;\n }\n this.primaryCursor.setState(this.context, states[0].modelState, states[0].viewState);\n this._setSecondaryStates(states.slice(1));\n }\n /**\n * Creates or disposes secondary cursors as necessary to match the number of `secondarySelections`.\n */\n _setSecondaryStates(secondaryStates) {\n const secondaryCursorsLength = this.secondaryCursors.length;\n const secondaryStatesLength = secondaryStates.length;\n if (secondaryCursorsLength < secondaryStatesLength) {\n let createCnt = secondaryStatesLength - secondaryCursorsLength;\n for (let i = 0; i < createCnt; i++) {\n this._addSecondaryCursor();\n }\n }\n else if (secondaryCursorsLength > secondaryStatesLength) {\n let removeCnt = secondaryCursorsLength - secondaryStatesLength;\n for (let i = 0; i < removeCnt; i++) {\n this._removeSecondaryCursor(this.secondaryCursors.length - 1);\n }\n }\n for (let i = 0; i < secondaryStatesLength; i++) {\n this.secondaryCursors[i].setState(this.context, secondaryStates[i].modelState, secondaryStates[i].viewState);\n }\n }\n killSecondaryCursors() {\n this._setSecondaryStates([]);\n }\n _addSecondaryCursor() {\n this.secondaryCursors.push(new OneCursor(this.context));\n this.lastAddedCursorIndex = this.secondaryCursors.length;\n }\n getLastAddedCursorIndex() {\n if (this.secondaryCursors.length === 0 || this.lastAddedCursorIndex === 0) {\n return 0;\n }\n return this.lastAddedCursorIndex;\n }\n _removeSecondaryCursor(removeIndex) {\n if (this.lastAddedCursorIndex >= removeIndex + 1) {\n this.lastAddedCursorIndex--;\n }\n this.secondaryCursors[removeIndex].dispose(this.context);\n this.secondaryCursors.splice(removeIndex, 1);\n }\n _getAll() {\n let result = [];\n result[0] = this.primaryCursor;\n for (let i = 0, len = this.secondaryCursors.length; i < len; i++) {\n result[i + 1] = this.secondaryCursors[i];\n }\n return result;\n }\n normalize() {\n if (this.secondaryCursors.length === 0) {\n return;\n }\n let cursors = this._getAll();\n let sortedCursors = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n sortedCursors.push({\n index: i,\n selection: cursors[i].modelState.selection,\n });\n }\n sortedCursors.sort((a, b) => {\n if (a.selection.startLineNumber === b.selection.startLineNumber) {\n return a.selection.startColumn - b.selection.startColumn;\n }\n return a.selection.startLineNumber - b.selection.startLineNumber;\n });\n for (let sortedCursorIndex = 0; sortedCursorIndex < sortedCursors.length - 1; sortedCursorIndex++) {\n const current = sortedCursors[sortedCursorIndex];\n const next = sortedCursors[sortedCursorIndex + 1];\n const currentSelection = current.selection;\n const nextSelection = next.selection;\n if (!this.context.cursorConfig.multiCursorMergeOverlapping) {\n continue;\n }\n let shouldMergeCursors;\n if (nextSelection.isEmpty() || currentSelection.isEmpty()) {\n // Merge touching cursors if one of them is collapsed\n shouldMergeCursors = nextSelection.getStartPosition().isBeforeOrEqual(currentSelection.getEndPosition());\n }\n else {\n // Merge only overlapping cursors (i.e. allow touching ranges)\n shouldMergeCursors = nextSelection.getStartPosition().isBefore(currentSelection.getEndPosition());\n }\n if (shouldMergeCursors) {\n const winnerSortedCursorIndex = current.index < next.index ? sortedCursorIndex : sortedCursorIndex + 1;\n const looserSortedCursorIndex = current.index < next.index ? sortedCursorIndex + 1 : sortedCursorIndex;\n const looserIndex = sortedCursors[looserSortedCursorIndex].index;\n const winnerIndex = sortedCursors[winnerSortedCursorIndex].index;\n const looserSelection = sortedCursors[looserSortedCursorIndex].selection;\n const winnerSelection = sortedCursors[winnerSortedCursorIndex].selection;\n if (!looserSelection.equalsSelection(winnerSelection)) {\n const resultingRange = looserSelection.plusRange(winnerSelection);\n const looserSelectionIsLTR = (looserSelection.selectionStartLineNumber === looserSelection.startLineNumber && looserSelection.selectionStartColumn === looserSelection.startColumn);\n const winnerSelectionIsLTR = (winnerSelection.selectionStartLineNumber === winnerSelection.startLineNumber && winnerSelection.selectionStartColumn === winnerSelection.startColumn);\n // Give more importance to the last added cursor (think Ctrl-dragging + hitting another cursor)\n let resultingSelectionIsLTR;\n if (looserIndex === this.lastAddedCursorIndex) {\n resultingSelectionIsLTR = looserSelectionIsLTR;\n this.lastAddedCursorIndex = winnerIndex;\n }\n else {\n // Winner takes it all\n resultingSelectionIsLTR = winnerSelectionIsLTR;\n }\n let resultingSelection;\n if (resultingSelectionIsLTR) {\n resultingSelection = new Selection(resultingRange.startLineNumber, resultingRange.startColumn, resultingRange.endLineNumber, resultingRange.endColumn);\n }\n else {\n resultingSelection = new Selection(resultingRange.endLineNumber, resultingRange.endColumn, resultingRange.startLineNumber, resultingRange.startColumn);\n }\n sortedCursors[winnerSortedCursorIndex].selection = resultingSelection;\n const resultingState = CursorState.fromModelSelection(resultingSelection);\n cursors[winnerIndex].setState(this.context, resultingState.modelState, resultingState.viewState);\n }\n for (const sortedCursor of sortedCursors) {\n if (sortedCursor.index > looserIndex) {\n sortedCursor.index--;\n }\n }\n cursors.splice(looserIndex, 1);\n sortedCursors.splice(looserSortedCursorIndex, 1);\n this._removeSecondaryCursor(looserIndex - 1);\n sortedCursorIndex--;\n }\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nexport class ViewCompositionStartEvent {\n constructor() {\n this.type = 0 /* ViewCompositionStart */;\n }\n}\nexport class ViewCompositionEndEvent {\n constructor() {\n this.type = 1 /* ViewCompositionEnd */;\n }\n}\nexport class ViewConfigurationChangedEvent {\n constructor(source) {\n this.type = 2 /* ViewConfigurationChanged */;\n this._source = source;\n }\n hasChanged(id) {\n return this._source.hasChanged(id);\n }\n}\nexport class ViewCursorStateChangedEvent {\n constructor(selections, modelSelections) {\n this.type = 3 /* ViewCursorStateChanged */;\n this.selections = selections;\n this.modelSelections = modelSelections;\n }\n}\nexport class ViewDecorationsChangedEvent {\n constructor(source) {\n this.type = 4 /* ViewDecorationsChanged */;\n if (source) {\n this.affectsMinimap = source.affectsMinimap;\n this.affectsOverviewRuler = source.affectsOverviewRuler;\n }\n else {\n this.affectsMinimap = true;\n this.affectsOverviewRuler = true;\n }\n }\n}\nexport class ViewFlushedEvent {\n constructor() {\n this.type = 5 /* ViewFlushed */;\n // Nothing to do\n }\n}\nexport class ViewFocusChangedEvent {\n constructor(isFocused) {\n this.type = 6 /* ViewFocusChanged */;\n this.isFocused = isFocused;\n }\n}\nexport class ViewLanguageConfigurationEvent {\n constructor() {\n this.type = 7 /* ViewLanguageConfigurationChanged */;\n }\n}\nexport class ViewLineMappingChangedEvent {\n constructor() {\n this.type = 8 /* ViewLineMappingChanged */;\n // Nothing to do\n }\n}\nexport class ViewLinesChangedEvent {\n constructor(fromLineNumber, toLineNumber) {\n this.type = 9 /* ViewLinesChanged */;\n this.fromLineNumber = fromLineNumber;\n this.toLineNumber = toLineNumber;\n }\n}\nexport class ViewLinesDeletedEvent {\n constructor(fromLineNumber, toLineNumber) {\n this.type = 10 /* ViewLinesDeleted */;\n this.fromLineNumber = fromLineNumber;\n this.toLineNumber = toLineNumber;\n }\n}\nexport class ViewLinesInsertedEvent {\n constructor(fromLineNumber, toLineNumber) {\n this.type = 11 /* ViewLinesInserted */;\n this.fromLineNumber = fromLineNumber;\n this.toLineNumber = toLineNumber;\n }\n}\nexport class ViewRevealRangeRequestEvent {\n constructor(source, range, selections, verticalType, revealHorizontal, scrollType) {\n this.type = 12 /* ViewRevealRangeRequest */;\n this.source = source;\n this.range = range;\n this.selections = selections;\n this.verticalType = verticalType;\n this.revealHorizontal = revealHorizontal;\n this.scrollType = scrollType;\n }\n}\nexport class ViewScrollChangedEvent {\n constructor(source) {\n this.type = 13 /* ViewScrollChanged */;\n this.scrollWidth = source.scrollWidth;\n this.scrollLeft = source.scrollLeft;\n this.scrollHeight = source.scrollHeight;\n this.scrollTop = source.scrollTop;\n this.scrollWidthChanged = source.scrollWidthChanged;\n this.scrollLeftChanged = source.scrollLeftChanged;\n this.scrollHeightChanged = source.scrollHeightChanged;\n this.scrollTopChanged = source.scrollTopChanged;\n }\n}\nexport class ViewThemeChangedEvent {\n constructor() {\n this.type = 14 /* ViewThemeChanged */;\n }\n}\nexport class ViewTokensChangedEvent {\n constructor(ranges) {\n this.type = 15 /* ViewTokensChanged */;\n this.ranges = ranges;\n }\n}\nexport class ViewTokensColorsChangedEvent {\n constructor() {\n this.type = 16 /* ViewTokensColorsChanged */;\n // Nothing to do\n }\n}\nexport class ViewZonesChangedEvent {\n constructor() {\n this.type = 17 /* ViewZonesChanged */;\n // Nothing to do\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nexport class ViewModelEventDispatcher extends Disposable {\n constructor() {\n super();\n this._onEvent = this._register(new Emitter());\n this.onEvent = this._onEvent.event;\n this._eventHandlers = [];\n this._viewEventQueue = null;\n this._isConsumingViewEventQueue = false;\n this._collector = null;\n this._collectorCnt = 0;\n this._outgoingEvents = [];\n }\n emitOutgoingEvent(e) {\n this._addOutgoingEvent(e);\n this._emitOugoingEvents();\n }\n _addOutgoingEvent(e) {\n for (let i = 0, len = this._outgoingEvents.length; i < len; i++) {\n if (this._outgoingEvents[i].kind === e.kind) {\n this._outgoingEvents[i] = this._outgoingEvents[i].merge(e);\n return;\n }\n }\n // not merged\n this._outgoingEvents.push(e);\n }\n _emitOugoingEvents() {\n while (this._outgoingEvents.length > 0) {\n if (this._collector || this._isConsumingViewEventQueue) {\n // right now collecting or emitting view events, so let's postpone emitting\n return;\n }\n const event = this._outgoingEvents.shift();\n if (event.isNoOp()) {\n continue;\n }\n this._onEvent.fire(event);\n }\n }\n addViewEventHandler(eventHandler) {\n for (let i = 0, len = this._eventHandlers.length; i < len; i++) {\n if (this._eventHandlers[i] === eventHandler) {\n console.warn('Detected duplicate listener in ViewEventDispatcher', eventHandler);\n }\n }\n this._eventHandlers.push(eventHandler);\n }\n removeViewEventHandler(eventHandler) {\n for (let i = 0; i < this._eventHandlers.length; i++) {\n if (this._eventHandlers[i] === eventHandler) {\n this._eventHandlers.splice(i, 1);\n break;\n }\n }\n }\n beginEmitViewEvents() {\n this._collectorCnt++;\n if (this._collectorCnt === 1) {\n this._collector = new ViewModelEventsCollector();\n }\n return this._collector;\n }\n endEmitViewEvents() {\n this._collectorCnt--;\n if (this._collectorCnt === 0) {\n const outgoingEvents = this._collector.outgoingEvents;\n const viewEvents = this._collector.viewEvents;\n this._collector = null;\n for (const outgoingEvent of outgoingEvents) {\n this._addOutgoingEvent(outgoingEvent);\n }\n if (viewEvents.length > 0) {\n this._emitMany(viewEvents);\n }\n }\n this._emitOugoingEvents();\n }\n emitSingleViewEvent(event) {\n try {\n const eventsCollector = this.beginEmitViewEvents();\n eventsCollector.emitViewEvent(event);\n }\n finally {\n this.endEmitViewEvents();\n }\n }\n _emitMany(events) {\n if (this._viewEventQueue) {\n this._viewEventQueue = this._viewEventQueue.concat(events);\n }\n else {\n this._viewEventQueue = events;\n }\n if (!this._isConsumingViewEventQueue) {\n this._consumeViewEventQueue();\n }\n }\n _consumeViewEventQueue() {\n try {\n this._isConsumingViewEventQueue = true;\n this._doConsumeQueue();\n }\n finally {\n this._isConsumingViewEventQueue = false;\n }\n }\n _doConsumeQueue() {\n while (this._viewEventQueue) {\n // Empty event queue, as events might come in while sending these off\n const events = this._viewEventQueue;\n this._viewEventQueue = null;\n // Use a clone of the event handlers list, as they might remove themselves\n const eventHandlers = this._eventHandlers.slice(0);\n for (const eventHandler of eventHandlers) {\n eventHandler.handleEvents(events);\n }\n }\n }\n}\nexport class ViewModelEventsCollector {\n constructor() {\n this.viewEvents = [];\n this.outgoingEvents = [];\n }\n emitViewEvent(event) {\n this.viewEvents.push(event);\n }\n emitOutgoingEvent(e) {\n this.outgoingEvents.push(e);\n }\n}\nexport class ContentSizeChangedEvent {\n constructor(oldContentWidth, oldContentHeight, contentWidth, contentHeight) {\n this.kind = 0 /* ContentSizeChanged */;\n this._oldContentWidth = oldContentWidth;\n this._oldContentHeight = oldContentHeight;\n this.contentWidth = contentWidth;\n this.contentHeight = contentHeight;\n this.contentWidthChanged = (this._oldContentWidth !== this.contentWidth);\n this.contentHeightChanged = (this._oldContentHeight !== this.contentHeight);\n }\n isNoOp() {\n return (!this.contentWidthChanged && !this.contentHeightChanged);\n }\n merge(other) {\n if (other.kind !== 0 /* ContentSizeChanged */) {\n return this;\n }\n return new ContentSizeChangedEvent(this._oldContentWidth, this._oldContentHeight, other.contentWidth, other.contentHeight);\n }\n}\nexport class FocusChangedEvent {\n constructor(oldHasFocus, hasFocus) {\n this.kind = 1 /* FocusChanged */;\n this.oldHasFocus = oldHasFocus;\n this.hasFocus = hasFocus;\n }\n isNoOp() {\n return (this.oldHasFocus === this.hasFocus);\n }\n merge(other) {\n if (other.kind !== 1 /* FocusChanged */) {\n return this;\n }\n return new FocusChangedEvent(this.oldHasFocus, other.hasFocus);\n }\n}\nexport class ScrollChangedEvent {\n constructor(oldScrollWidth, oldScrollLeft, oldScrollHeight, oldScrollTop, scrollWidth, scrollLeft, scrollHeight, scrollTop) {\n this.kind = 2 /* ScrollChanged */;\n this._oldScrollWidth = oldScrollWidth;\n this._oldScrollLeft = oldScrollLeft;\n this._oldScrollHeight = oldScrollHeight;\n this._oldScrollTop = oldScrollTop;\n this.scrollWidth = scrollWidth;\n this.scrollLeft = scrollLeft;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n this.scrollWidthChanged = (this._oldScrollWidth !== this.scrollWidth);\n this.scrollLeftChanged = (this._oldScrollLeft !== this.scrollLeft);\n this.scrollHeightChanged = (this._oldScrollHeight !== this.scrollHeight);\n this.scrollTopChanged = (this._oldScrollTop !== this.scrollTop);\n }\n isNoOp() {\n return (!this.scrollWidthChanged && !this.scrollLeftChanged && !this.scrollHeightChanged && !this.scrollTopChanged);\n }\n merge(other) {\n if (other.kind !== 2 /* ScrollChanged */) {\n return this;\n }\n return new ScrollChangedEvent(this._oldScrollWidth, this._oldScrollLeft, this._oldScrollHeight, this._oldScrollTop, other.scrollWidth, other.scrollLeft, other.scrollHeight, other.scrollTop);\n }\n}\nexport class ViewZonesChangedEvent {\n constructor() {\n this.kind = 3 /* ViewZonesChanged */;\n }\n isNoOp() {\n return false;\n }\n merge(other) {\n return this;\n }\n}\nexport class CursorStateChangedEvent {\n constructor(oldSelections, selections, oldModelVersionId, modelVersionId, source, reason, reachedMaxCursorCount) {\n this.kind = 5 /* CursorStateChanged */;\n this.oldSelections = oldSelections;\n this.selections = selections;\n this.oldModelVersionId = oldModelVersionId;\n this.modelVersionId = modelVersionId;\n this.source = source;\n this.reason = reason;\n this.reachedMaxCursorCount = reachedMaxCursorCount;\n }\n static _selectionsAreEqual(a, b) {\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n const aLen = a.length;\n const bLen = b.length;\n if (aLen !== bLen) {\n return false;\n }\n for (let i = 0; i < aLen; i++) {\n if (!a[i].equalsSelection(b[i])) {\n return false;\n }\n }\n return true;\n }\n isNoOp() {\n return (CursorStateChangedEvent._selectionsAreEqual(this.oldSelections, this.selections)\n && this.oldModelVersionId === this.modelVersionId);\n }\n merge(other) {\n if (other.kind !== 5 /* CursorStateChanged */) {\n return this;\n }\n return new CursorStateChangedEvent(this.oldSelections, other.selections, this.oldModelVersionId, other.modelVersionId, other.source, other.reason, this.reachedMaxCursorCount || other.reachedMaxCursorCount);\n }\n}\nexport class ReadOnlyEditAttemptEvent {\n constructor() {\n this.kind = 4 /* ReadOnlyEditAttempt */;\n }\n isNoOp() {\n return false;\n }\n merge(other) {\n return this;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { CursorCollection } from './cursorCollection.js';\nimport { CursorColumns, CursorContext, CursorState, EditOperationResult } from './cursorCommon.js';\nimport { DeleteOperations } from './cursorDeleteOperations.js';\nimport { TypeOperations, TypeWithAutoClosingCommand } from './cursorTypeOperations.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { ViewCursorStateChangedEvent, ViewRevealRangeRequestEvent } from '../view/viewEvents.js';\nimport { dispose, Disposable } from '../../../base/common/lifecycle.js';\nimport { CursorStateChangedEvent } from '../viewModel/viewModelEventDispatcher.js';\n/**\n * A snapshot of the cursor and the model state\n */\nexport class CursorModelState {\n constructor(model, cursor) {\n this.modelVersionId = model.getVersionId();\n this.cursorState = cursor.getCursorStates();\n }\n equals(other) {\n if (!other) {\n return false;\n }\n if (this.modelVersionId !== other.modelVersionId) {\n return false;\n }\n if (this.cursorState.length !== other.cursorState.length) {\n return false;\n }\n for (let i = 0, len = this.cursorState.length; i < len; i++) {\n if (!this.cursorState[i].equals(other.cursorState[i])) {\n return false;\n }\n }\n return true;\n }\n}\nclass AutoClosedAction {\n constructor(model, autoClosedCharactersDecorations, autoClosedEnclosingDecorations) {\n this._model = model;\n this._autoClosedCharactersDecorations = autoClosedCharactersDecorations;\n this._autoClosedEnclosingDecorations = autoClosedEnclosingDecorations;\n }\n static getAllAutoClosedCharacters(autoClosedActions) {\n let autoClosedCharacters = [];\n for (const autoClosedAction of autoClosedActions) {\n autoClosedCharacters = autoClosedCharacters.concat(autoClosedAction.getAutoClosedCharactersRanges());\n }\n return autoClosedCharacters;\n }\n dispose() {\n this._autoClosedCharactersDecorations = this._model.deltaDecorations(this._autoClosedCharactersDecorations, []);\n this._autoClosedEnclosingDecorations = this._model.deltaDecorations(this._autoClosedEnclosingDecorations, []);\n }\n getAutoClosedCharactersRanges() {\n let result = [];\n for (let i = 0; i < this._autoClosedCharactersDecorations.length; i++) {\n const decorationRange = this._model.getDecorationRange(this._autoClosedCharactersDecorations[i]);\n if (decorationRange) {\n result.push(decorationRange);\n }\n }\n return result;\n }\n isValid(selections) {\n let enclosingRanges = [];\n for (let i = 0; i < this._autoClosedEnclosingDecorations.length; i++) {\n const decorationRange = this._model.getDecorationRange(this._autoClosedEnclosingDecorations[i]);\n if (decorationRange) {\n enclosingRanges.push(decorationRange);\n if (decorationRange.startLineNumber !== decorationRange.endLineNumber) {\n // Stop tracking if the range becomes multiline...\n return false;\n }\n }\n }\n enclosingRanges.sort(Range.compareRangesUsingStarts);\n selections.sort(Range.compareRangesUsingStarts);\n for (let i = 0; i < selections.length; i++) {\n if (i >= enclosingRanges.length) {\n return false;\n }\n if (!enclosingRanges[i].strictContainsRange(selections[i])) {\n return false;\n }\n }\n return true;\n }\n}\nexport class Cursor extends Disposable {\n constructor(model, viewModel, coordinatesConverter, cursorConfig) {\n super();\n this._model = model;\n this._knownModelVersionId = this._model.getVersionId();\n this._viewModel = viewModel;\n this._coordinatesConverter = coordinatesConverter;\n this.context = new CursorContext(this._model, this._coordinatesConverter, cursorConfig);\n this._cursors = new CursorCollection(this.context);\n this._hasFocus = false;\n this._isHandling = false;\n this._isDoingComposition = false;\n this._selectionsWhenCompositionStarted = null;\n this._columnSelectData = null;\n this._autoClosedActions = [];\n this._prevEditOperationType = 0 /* Other */;\n }\n dispose() {\n this._cursors.dispose();\n this._autoClosedActions = dispose(this._autoClosedActions);\n super.dispose();\n }\n updateConfiguration(cursorConfig) {\n this.context = new CursorContext(this._model, this._coordinatesConverter, cursorConfig);\n this._cursors.updateContext(this.context);\n }\n onLineMappingChanged(eventsCollector) {\n if (this._knownModelVersionId !== this._model.getVersionId()) {\n // There are model change events that I didn't yet receive.\n //\n // This can happen when editing the model, and the view model receives the change events first,\n // and the view model emits line mapping changed events, all before the cursor gets a chance to\n // recover from markers.\n //\n // The model change listener above will be called soon and we'll ensure a valid cursor state there.\n return;\n }\n // Ensure valid state\n this.setStates(eventsCollector, 'viewModel', 0 /* NotSet */, this.getCursorStates());\n }\n setHasFocus(hasFocus) {\n this._hasFocus = hasFocus;\n }\n _validateAutoClosedActions() {\n if (this._autoClosedActions.length > 0) {\n let selections = this._cursors.getSelections();\n for (let i = 0; i < this._autoClosedActions.length; i++) {\n const autoClosedAction = this._autoClosedActions[i];\n if (!autoClosedAction.isValid(selections)) {\n autoClosedAction.dispose();\n this._autoClosedActions.splice(i, 1);\n i--;\n }\n }\n }\n }\n // ------ some getters/setters\n getPrimaryCursorState() {\n return this._cursors.getPrimaryCursor();\n }\n getLastAddedCursorIndex() {\n return this._cursors.getLastAddedCursorIndex();\n }\n getCursorStates() {\n return this._cursors.getAll();\n }\n setStates(eventsCollector, source, reason, states) {\n let reachedMaxCursorCount = false;\n if (states !== null && states.length > Cursor.MAX_CURSOR_COUNT) {\n states = states.slice(0, Cursor.MAX_CURSOR_COUNT);\n reachedMaxCursorCount = true;\n }\n const oldState = new CursorModelState(this._model, this);\n this._cursors.setStates(states);\n this._cursors.normalize();\n this._columnSelectData = null;\n this._validateAutoClosedActions();\n return this._emitStateChangedIfNecessary(eventsCollector, source, reason, oldState, reachedMaxCursorCount);\n }\n setCursorColumnSelectData(columnSelectData) {\n this._columnSelectData = columnSelectData;\n }\n revealPrimary(eventsCollector, source, revealHorizontal, scrollType) {\n const viewPositions = this._cursors.getViewPositions();\n if (viewPositions.length > 1) {\n this._emitCursorRevealRange(eventsCollector, source, null, this._cursors.getViewSelections(), 0 /* Simple */, revealHorizontal, scrollType);\n return;\n }\n else {\n const viewPosition = viewPositions[0];\n const viewRange = new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column);\n this._emitCursorRevealRange(eventsCollector, source, viewRange, null, 0 /* Simple */, revealHorizontal, scrollType);\n }\n }\n _revealPrimaryCursor(eventsCollector, source, verticalType, revealHorizontal, scrollType) {\n const viewPositions = this._cursors.getViewPositions();\n if (viewPositions.length > 1) {\n this._emitCursorRevealRange(eventsCollector, source, null, this._cursors.getViewSelections(), verticalType, revealHorizontal, scrollType);\n }\n else {\n const viewPosition = viewPositions[0];\n const viewRange = new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column);\n this._emitCursorRevealRange(eventsCollector, source, viewRange, null, verticalType, revealHorizontal, scrollType);\n }\n }\n _emitCursorRevealRange(eventsCollector, source, viewRange, viewSelections, verticalType, revealHorizontal, scrollType) {\n eventsCollector.emitViewEvent(new ViewRevealRangeRequestEvent(source, viewRange, viewSelections, verticalType, revealHorizontal, scrollType));\n }\n saveState() {\n let result = [];\n const selections = this._cursors.getSelections();\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n result.push({\n inSelectionMode: !selection.isEmpty(),\n selectionStart: {\n lineNumber: selection.selectionStartLineNumber,\n column: selection.selectionStartColumn,\n },\n position: {\n lineNumber: selection.positionLineNumber,\n column: selection.positionColumn,\n }\n });\n }\n return result;\n }\n restoreState(eventsCollector, states) {\n let desiredSelections = [];\n for (let i = 0, len = states.length; i < len; i++) {\n const state = states[i];\n let positionLineNumber = 1;\n let positionColumn = 1;\n // Avoid missing properties on the literal\n if (state.position && state.position.lineNumber) {\n positionLineNumber = state.position.lineNumber;\n }\n if (state.position && state.position.column) {\n positionColumn = state.position.column;\n }\n let selectionStartLineNumber = positionLineNumber;\n let selectionStartColumn = positionColumn;\n // Avoid missing properties on the literal\n if (state.selectionStart && state.selectionStart.lineNumber) {\n selectionStartLineNumber = state.selectionStart.lineNumber;\n }\n if (state.selectionStart && state.selectionStart.column) {\n selectionStartColumn = state.selectionStart.column;\n }\n desiredSelections.push({\n selectionStartLineNumber: selectionStartLineNumber,\n selectionStartColumn: selectionStartColumn,\n positionLineNumber: positionLineNumber,\n positionColumn: positionColumn\n });\n }\n this.setStates(eventsCollector, 'restoreState', 0 /* NotSet */, CursorState.fromModelSelections(desiredSelections));\n this.revealPrimary(eventsCollector, 'restoreState', true, 1 /* Immediate */);\n }\n onModelContentChanged(eventsCollector, e) {\n this._knownModelVersionId = e.versionId;\n if (this._isHandling) {\n return;\n }\n const hadFlushEvent = e.containsEvent(1 /* Flush */);\n this._prevEditOperationType = 0 /* Other */;\n if (hadFlushEvent) {\n // a model.setValue() was called\n this._cursors.dispose();\n this._cursors = new CursorCollection(this.context);\n this._validateAutoClosedActions();\n this._emitStateChangedIfNecessary(eventsCollector, 'model', 1 /* ContentFlush */, null, false);\n }\n else {\n if (this._hasFocus && e.resultingSelection && e.resultingSelection.length > 0) {\n const cursorState = CursorState.fromModelSelections(e.resultingSelection);\n if (this.setStates(eventsCollector, 'modelChange', e.isUndoing ? 5 /* Undo */ : e.isRedoing ? 6 /* Redo */ : 2 /* RecoverFromMarkers */, cursorState)) {\n this._revealPrimaryCursor(eventsCollector, 'modelChange', 0 /* Simple */, true, 0 /* Smooth */);\n }\n }\n else {\n const selectionsFromMarkers = this._cursors.readSelectionFromMarkers();\n this.setStates(eventsCollector, 'modelChange', 2 /* RecoverFromMarkers */, CursorState.fromModelSelections(selectionsFromMarkers));\n }\n }\n }\n getSelection() {\n return this._cursors.getPrimaryCursor().modelState.selection;\n }\n getTopMostViewPosition() {\n return this._cursors.getTopMostViewPosition();\n }\n getBottomMostViewPosition() {\n return this._cursors.getBottomMostViewPosition();\n }\n getCursorColumnSelectData() {\n if (this._columnSelectData) {\n return this._columnSelectData;\n }\n const primaryCursor = this._cursors.getPrimaryCursor();\n const viewSelectionStart = primaryCursor.viewState.selectionStart.getStartPosition();\n const viewPosition = primaryCursor.viewState.position;\n return {\n isReal: false,\n fromViewLineNumber: viewSelectionStart.lineNumber,\n fromViewVisualColumn: CursorColumns.visibleColumnFromColumn2(this.context.cursorConfig, this._viewModel, viewSelectionStart),\n toViewLineNumber: viewPosition.lineNumber,\n toViewVisualColumn: CursorColumns.visibleColumnFromColumn2(this.context.cursorConfig, this._viewModel, viewPosition),\n };\n }\n getSelections() {\n return this._cursors.getSelections();\n }\n setSelections(eventsCollector, source, selections, reason) {\n this.setStates(eventsCollector, source, reason, CursorState.fromModelSelections(selections));\n }\n getPrevEditOperationType() {\n return this._prevEditOperationType;\n }\n setPrevEditOperationType(type) {\n this._prevEditOperationType = type;\n }\n // ------ auxiliary handling logic\n _pushAutoClosedAction(autoClosedCharactersRanges, autoClosedEnclosingRanges) {\n let autoClosedCharactersDeltaDecorations = [];\n let autoClosedEnclosingDeltaDecorations = [];\n for (let i = 0, len = autoClosedCharactersRanges.length; i < len; i++) {\n autoClosedCharactersDeltaDecorations.push({\n range: autoClosedCharactersRanges[i],\n options: {\n inlineClassName: 'auto-closed-character',\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */\n }\n });\n autoClosedEnclosingDeltaDecorations.push({\n range: autoClosedEnclosingRanges[i],\n options: {\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */\n }\n });\n }\n const autoClosedCharactersDecorations = this._model.deltaDecorations([], autoClosedCharactersDeltaDecorations);\n const autoClosedEnclosingDecorations = this._model.deltaDecorations([], autoClosedEnclosingDeltaDecorations);\n this._autoClosedActions.push(new AutoClosedAction(this._model, autoClosedCharactersDecorations, autoClosedEnclosingDecorations));\n }\n _executeEditOperation(opResult) {\n if (!opResult) {\n // Nothing to execute\n return;\n }\n if (opResult.shouldPushStackElementBefore) {\n this._model.pushStackElement();\n }\n const result = CommandExecutor.executeCommands(this._model, this._cursors.getSelections(), opResult.commands);\n if (result) {\n // The commands were applied correctly\n this._interpretCommandResult(result);\n // Check for auto-closing closed characters\n let autoClosedCharactersRanges = [];\n let autoClosedEnclosingRanges = [];\n for (let i = 0; i < opResult.commands.length; i++) {\n const command = opResult.commands[i];\n if (command instanceof TypeWithAutoClosingCommand && command.enclosingRange && command.closeCharacterRange) {\n autoClosedCharactersRanges.push(command.closeCharacterRange);\n autoClosedEnclosingRanges.push(command.enclosingRange);\n }\n }\n if (autoClosedCharactersRanges.length > 0) {\n this._pushAutoClosedAction(autoClosedCharactersRanges, autoClosedEnclosingRanges);\n }\n this._prevEditOperationType = opResult.type;\n }\n if (opResult.shouldPushStackElementAfter) {\n this._model.pushStackElement();\n }\n }\n _interpretCommandResult(cursorState) {\n if (!cursorState || cursorState.length === 0) {\n cursorState = this._cursors.readSelectionFromMarkers();\n }\n this._columnSelectData = null;\n this._cursors.setSelections(cursorState);\n this._cursors.normalize();\n }\n // -----------------------------------------------------------------------------------------------------------\n // ----- emitting events\n _emitStateChangedIfNecessary(eventsCollector, source, reason, oldState, reachedMaxCursorCount) {\n const newState = new CursorModelState(this._model, this);\n if (newState.equals(oldState)) {\n return false;\n }\n const selections = this._cursors.getSelections();\n const viewSelections = this._cursors.getViewSelections();\n // Let the view get the event first.\n eventsCollector.emitViewEvent(new ViewCursorStateChangedEvent(viewSelections, selections));\n // Only after the view has been notified, let the rest of the world know...\n if (!oldState\n || oldState.cursorState.length !== newState.cursorState.length\n || newState.cursorState.some((newCursorState, i) => !newCursorState.modelState.equals(oldState.cursorState[i].modelState))) {\n const oldSelections = oldState ? oldState.cursorState.map(s => s.modelState.selection) : null;\n const oldModelVersionId = oldState ? oldState.modelVersionId : 0;\n eventsCollector.emitOutgoingEvent(new CursorStateChangedEvent(oldSelections, selections, oldModelVersionId, newState.modelVersionId, source || 'keyboard', reason, reachedMaxCursorCount));\n }\n return true;\n }\n // -----------------------------------------------------------------------------------------------------------\n // ----- handlers beyond this point\n _findAutoClosingPairs(edits) {\n if (!edits.length) {\n return null;\n }\n let indices = [];\n for (let i = 0, len = edits.length; i < len; i++) {\n const edit = edits[i];\n if (!edit.text || edit.text.indexOf('\\n') >= 0) {\n return null;\n }\n const m = edit.text.match(/([)\\]}>'\"`])([^)\\]}>'\"`]*)$/);\n if (!m) {\n return null;\n }\n const closeChar = m[1];\n const autoClosingPairsCandidates = this.context.cursorConfig.autoClosingPairs.autoClosingPairsCloseSingleChar.get(closeChar);\n if (!autoClosingPairsCandidates || autoClosingPairsCandidates.length !== 1) {\n return null;\n }\n const openChar = autoClosingPairsCandidates[0].open;\n const closeCharIndex = edit.text.length - m[2].length - 1;\n const openCharIndex = edit.text.lastIndexOf(openChar, closeCharIndex - 1);\n if (openCharIndex === -1) {\n return null;\n }\n indices.push([openCharIndex, closeCharIndex]);\n }\n return indices;\n }\n executeEdits(eventsCollector, source, edits, cursorStateComputer) {\n let autoClosingIndices = null;\n if (source === 'snippet') {\n autoClosingIndices = this._findAutoClosingPairs(edits);\n }\n if (autoClosingIndices) {\n edits[0]._isTracked = true;\n }\n let autoClosedCharactersRanges = [];\n let autoClosedEnclosingRanges = [];\n const selections = this._model.pushEditOperations(this.getSelections(), edits, (undoEdits) => {\n if (autoClosingIndices) {\n for (let i = 0, len = autoClosingIndices.length; i < len; i++) {\n const [openCharInnerIndex, closeCharInnerIndex] = autoClosingIndices[i];\n const undoEdit = undoEdits[i];\n const lineNumber = undoEdit.range.startLineNumber;\n const openCharIndex = undoEdit.range.startColumn - 1 + openCharInnerIndex;\n const closeCharIndex = undoEdit.range.startColumn - 1 + closeCharInnerIndex;\n autoClosedCharactersRanges.push(new Range(lineNumber, closeCharIndex + 1, lineNumber, closeCharIndex + 2));\n autoClosedEnclosingRanges.push(new Range(lineNumber, openCharIndex + 1, lineNumber, closeCharIndex + 2));\n }\n }\n const selections = cursorStateComputer(undoEdits);\n if (selections) {\n // Don't recover the selection from markers because\n // we know what it should be.\n this._isHandling = true;\n }\n return selections;\n });\n if (selections) {\n this._isHandling = false;\n this.setSelections(eventsCollector, source, selections, 0 /* NotSet */);\n }\n if (autoClosedCharactersRanges.length > 0) {\n this._pushAutoClosedAction(autoClosedCharactersRanges, autoClosedEnclosingRanges);\n }\n }\n _executeEdit(callback, eventsCollector, source, cursorChangeReason = 0 /* NotSet */) {\n if (this.context.cursorConfig.readOnly) {\n // we cannot edit when read only...\n return;\n }\n const oldState = new CursorModelState(this._model, this);\n this._cursors.stopTrackingSelections();\n this._isHandling = true;\n try {\n this._cursors.ensureValidState();\n callback();\n }\n catch (err) {\n onUnexpectedError(err);\n }\n this._isHandling = false;\n this._cursors.startTrackingSelections();\n this._validateAutoClosedActions();\n if (this._emitStateChangedIfNecessary(eventsCollector, source, cursorChangeReason, oldState, false)) {\n this._revealPrimaryCursor(eventsCollector, source, 0 /* Simple */, true, 0 /* Smooth */);\n }\n }\n setIsDoingComposition(isDoingComposition) {\n this._isDoingComposition = isDoingComposition;\n }\n getAutoClosedCharacters() {\n return AutoClosedAction.getAllAutoClosedCharacters(this._autoClosedActions);\n }\n startComposition(eventsCollector) {\n this._selectionsWhenCompositionStarted = this.getSelections().slice(0);\n }\n endComposition(eventsCollector, source) {\n this._executeEdit(() => {\n if (source === 'keyboard') {\n // composition finishes, let's check if we need to auto complete if necessary.\n this._executeEditOperation(TypeOperations.compositionEndWithInterceptors(this._prevEditOperationType, this.context.cursorConfig, this._model, this._selectionsWhenCompositionStarted, this.getSelections(), this.getAutoClosedCharacters()));\n this._selectionsWhenCompositionStarted = null;\n }\n }, eventsCollector, source);\n }\n type(eventsCollector, text, source) {\n this._executeEdit(() => {\n if (source === 'keyboard') {\n // If this event is coming straight from the keyboard, look for electric characters and enter\n const len = text.length;\n let offset = 0;\n while (offset < len) {\n const charLength = strings.nextCharLength(text, offset);\n const chr = text.substr(offset, charLength);\n // Here we must interpret each typed character individually\n this._executeEditOperation(TypeOperations.typeWithInterceptors(this._isDoingComposition, this._prevEditOperationType, this.context.cursorConfig, this._model, this.getSelections(), this.getAutoClosedCharacters(), chr));\n offset += charLength;\n }\n }\n else {\n this._executeEditOperation(TypeOperations.typeWithoutInterceptors(this._prevEditOperationType, this.context.cursorConfig, this._model, this.getSelections(), text));\n }\n }, eventsCollector, source);\n }\n compositionType(eventsCollector, text, replacePrevCharCnt, replaceNextCharCnt, positionDelta, source) {\n if (text.length === 0 && replacePrevCharCnt === 0 && replaceNextCharCnt === 0) {\n // this edit is a no-op\n if (positionDelta !== 0) {\n // but it still wants to move the cursor\n const newSelections = this.getSelections().map(selection => {\n const position = selection.getPosition();\n return new Selection(position.lineNumber, position.column + positionDelta, position.lineNumber, position.column + positionDelta);\n });\n this.setSelections(eventsCollector, source, newSelections, 0 /* NotSet */);\n }\n return;\n }\n this._executeEdit(() => {\n this._executeEditOperation(TypeOperations.compositionType(this._prevEditOperationType, this.context.cursorConfig, this._model, this.getSelections(), text, replacePrevCharCnt, replaceNextCharCnt, positionDelta));\n }, eventsCollector, source);\n }\n paste(eventsCollector, text, pasteOnNewLine, multicursorText, source) {\n this._executeEdit(() => {\n this._executeEditOperation(TypeOperations.paste(this.context.cursorConfig, this._model, this.getSelections(), text, pasteOnNewLine, multicursorText || []));\n }, eventsCollector, source, 4 /* Paste */);\n }\n cut(eventsCollector, source) {\n this._executeEdit(() => {\n this._executeEditOperation(DeleteOperations.cut(this.context.cursorConfig, this._model, this.getSelections()));\n }, eventsCollector, source);\n }\n executeCommand(eventsCollector, command, source) {\n this._executeEdit(() => {\n this._cursors.killSecondaryCursors();\n this._executeEditOperation(new EditOperationResult(0 /* Other */, [command], {\n shouldPushStackElementBefore: false,\n shouldPushStackElementAfter: false\n }));\n }, eventsCollector, source);\n }\n executeCommands(eventsCollector, commands, source) {\n this._executeEdit(() => {\n this._executeEditOperation(new EditOperationResult(0 /* Other */, commands, {\n shouldPushStackElementBefore: false,\n shouldPushStackElementAfter: false\n }));\n }, eventsCollector, source);\n }\n}\nCursor.MAX_CURSOR_COUNT = 10000;\nclass CommandExecutor {\n static executeCommands(model, selectionsBefore, commands) {\n const ctx = {\n model: model,\n selectionsBefore: selectionsBefore,\n trackedRanges: [],\n trackedRangesDirection: []\n };\n const result = this._innerExecuteCommands(ctx, commands);\n for (let i = 0, len = ctx.trackedRanges.length; i < len; i++) {\n ctx.model._setTrackedRange(ctx.trackedRanges[i], null, 0 /* AlwaysGrowsWhenTypingAtEdges */);\n }\n return result;\n }\n static _innerExecuteCommands(ctx, commands) {\n if (this._arrayIsEmpty(commands)) {\n return null;\n }\n const commandsData = this._getEditOperations(ctx, commands);\n if (commandsData.operations.length === 0) {\n return null;\n }\n const rawOperations = commandsData.operations;\n const loserCursorsMap = this._getLoserCursorMap(rawOperations);\n if (loserCursorsMap.hasOwnProperty('0')) {\n // These commands are very messed up\n console.warn('Ignoring commands');\n return null;\n }\n // Remove operations belonging to losing cursors\n let filteredOperations = [];\n for (let i = 0, len = rawOperations.length; i < len; i++) {\n if (!loserCursorsMap.hasOwnProperty(rawOperations[i].identifier.major.toString())) {\n filteredOperations.push(rawOperations[i]);\n }\n }\n // TODO@Alex: find a better way to do this.\n // give the hint that edit operations are tracked to the model\n if (commandsData.hadTrackedEditOperation && filteredOperations.length > 0) {\n filteredOperations[0]._isTracked = true;\n }\n let selectionsAfter = ctx.model.pushEditOperations(ctx.selectionsBefore, filteredOperations, (inverseEditOperations) => {\n let groupedInverseEditOperations = [];\n for (let i = 0; i < ctx.selectionsBefore.length; i++) {\n groupedInverseEditOperations[i] = [];\n }\n for (const op of inverseEditOperations) {\n if (!op.identifier) {\n // perhaps auto whitespace trim edits\n continue;\n }\n groupedInverseEditOperations[op.identifier.major].push(op);\n }\n const minorBasedSorter = (a, b) => {\n return a.identifier.minor - b.identifier.minor;\n };\n let cursorSelections = [];\n for (let i = 0; i < ctx.selectionsBefore.length; i++) {\n if (groupedInverseEditOperations[i].length > 0) {\n groupedInverseEditOperations[i].sort(minorBasedSorter);\n cursorSelections[i] = commands[i].computeCursorState(ctx.model, {\n getInverseEditOperations: () => {\n return groupedInverseEditOperations[i];\n },\n getTrackedSelection: (id) => {\n const idx = parseInt(id, 10);\n const range = ctx.model._getTrackedRange(ctx.trackedRanges[idx]);\n if (ctx.trackedRangesDirection[idx] === 0 /* LTR */) {\n return new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n }\n return new Selection(range.endLineNumber, range.endColumn, range.startLineNumber, range.startColumn);\n }\n });\n }\n else {\n cursorSelections[i] = ctx.selectionsBefore[i];\n }\n }\n return cursorSelections;\n });\n if (!selectionsAfter) {\n selectionsAfter = ctx.selectionsBefore;\n }\n // Extract losing cursors\n let losingCursors = [];\n for (let losingCursorIndex in loserCursorsMap) {\n if (loserCursorsMap.hasOwnProperty(losingCursorIndex)) {\n losingCursors.push(parseInt(losingCursorIndex, 10));\n }\n }\n // Sort losing cursors descending\n losingCursors.sort((a, b) => {\n return b - a;\n });\n // Remove losing cursors\n for (const losingCursor of losingCursors) {\n selectionsAfter.splice(losingCursor, 1);\n }\n return selectionsAfter;\n }\n static _arrayIsEmpty(commands) {\n for (let i = 0, len = commands.length; i < len; i++) {\n if (commands[i]) {\n return false;\n }\n }\n return true;\n }\n static _getEditOperations(ctx, commands) {\n let operations = [];\n let hadTrackedEditOperation = false;\n for (let i = 0, len = commands.length; i < len; i++) {\n const command = commands[i];\n if (command) {\n const r = this._getEditOperationsFromCommand(ctx, i, command);\n operations = operations.concat(r.operations);\n hadTrackedEditOperation = hadTrackedEditOperation || r.hadTrackedEditOperation;\n }\n }\n return {\n operations: operations,\n hadTrackedEditOperation: hadTrackedEditOperation\n };\n }\n static _getEditOperationsFromCommand(ctx, majorIdentifier, command) {\n // This method acts as a transaction, if the command fails\n // everything it has done is ignored\n let operations = [];\n let operationMinor = 0;\n const addEditOperation = (range, text, forceMoveMarkers = false) => {\n if (Range.isEmpty(range) && text === '') {\n // This command wants to add a no-op => no thank you\n return;\n }\n operations.push({\n identifier: {\n major: majorIdentifier,\n minor: operationMinor++\n },\n range: range,\n text: text,\n forceMoveMarkers: forceMoveMarkers,\n isAutoWhitespaceEdit: command.insertsAutoWhitespace\n });\n };\n let hadTrackedEditOperation = false;\n const addTrackedEditOperation = (selection, text, forceMoveMarkers) => {\n hadTrackedEditOperation = true;\n addEditOperation(selection, text, forceMoveMarkers);\n };\n const trackSelection = (_selection, trackPreviousOnEmpty) => {\n const selection = Selection.liftSelection(_selection);\n let stickiness;\n if (selection.isEmpty()) {\n if (typeof trackPreviousOnEmpty === 'boolean') {\n if (trackPreviousOnEmpty) {\n stickiness = 2 /* GrowsOnlyWhenTypingBefore */;\n }\n else {\n stickiness = 3 /* GrowsOnlyWhenTypingAfter */;\n }\n }\n else {\n // Try to lock it with surrounding text\n const maxLineColumn = ctx.model.getLineMaxColumn(selection.startLineNumber);\n if (selection.startColumn === maxLineColumn) {\n stickiness = 2 /* GrowsOnlyWhenTypingBefore */;\n }\n else {\n stickiness = 3 /* GrowsOnlyWhenTypingAfter */;\n }\n }\n }\n else {\n stickiness = 1 /* NeverGrowsWhenTypingAtEdges */;\n }\n const l = ctx.trackedRanges.length;\n const id = ctx.model._setTrackedRange(null, selection, stickiness);\n ctx.trackedRanges[l] = id;\n ctx.trackedRangesDirection[l] = selection.getDirection();\n return l.toString();\n };\n const editOperationBuilder = {\n addEditOperation: addEditOperation,\n addTrackedEditOperation: addTrackedEditOperation,\n trackSelection: trackSelection\n };\n try {\n command.getEditOperations(ctx.model, editOperationBuilder);\n }\n catch (e) {\n // TODO@Alex use notification service if this should be user facing\n // e.friendlyMessage = nls.localize('corrupt.commands', \"Unexpected exception while executing command.\");\n onUnexpectedError(e);\n return {\n operations: [],\n hadTrackedEditOperation: false\n };\n }\n return {\n operations: operations,\n hadTrackedEditOperation: hadTrackedEditOperation\n };\n }\n static _getLoserCursorMap(operations) {\n // This is destructive on the array\n operations = operations.slice(0);\n // Sort operations with last one first\n operations.sort((a, b) => {\n // Note the minus!\n return -(Range.compareRangesUsingEnds(a.range, b.range));\n });\n // Operations can not overlap!\n let loserCursorsMap = {};\n for (let i = 1; i < operations.length; i++) {\n const previousOp = operations[i - 1];\n const currentOp = operations[i];\n if (Range.getStartPosition(previousOp.range).isBefore(Range.getEndPosition(currentOp.range))) {\n let loserMajor;\n if (previousOp.identifier.major > currentOp.identifier.major) {\n // previousOp loses the battle\n loserMajor = previousOp.identifier.major;\n }\n else {\n loserMajor = currentOp.identifier.major;\n }\n loserCursorsMap[loserMajor.toString()] = true;\n for (let j = 0; j < operations.length; j++) {\n if (operations[j].identifier.major === loserMajor) {\n operations.splice(j, 1);\n if (j < i) {\n i--;\n }\n j--;\n }\n }\n if (i > 0) {\n i--;\n }\n }\n }\n return loserCursorsMap;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nclass PendingChanges {\n constructor() {\n this._hasPending = false;\n this._inserts = [];\n this._changes = [];\n this._removes = [];\n }\n insert(x) {\n this._hasPending = true;\n this._inserts.push(x);\n }\n change(x) {\n this._hasPending = true;\n this._changes.push(x);\n }\n remove(x) {\n this._hasPending = true;\n this._removes.push(x);\n }\n mustCommit() {\n return this._hasPending;\n }\n commit(linesLayout) {\n if (!this._hasPending) {\n return;\n }\n const inserts = this._inserts;\n const changes = this._changes;\n const removes = this._removes;\n this._hasPending = false;\n this._inserts = [];\n this._changes = [];\n this._removes = [];\n linesLayout._commitPendingChanges(inserts, changes, removes);\n }\n}\nexport class EditorWhitespace {\n constructor(id, afterLineNumber, ordinal, height, minWidth) {\n this.id = id;\n this.afterLineNumber = afterLineNumber;\n this.ordinal = ordinal;\n this.height = height;\n this.minWidth = minWidth;\n this.prefixSum = 0;\n }\n}\n/**\n * Layouting of objects that take vertical space (by having a height) and push down other objects.\n *\n * These objects are basically either text (lines) or spaces between those lines (whitespaces).\n * This provides commodity operations for working with lines that contain whitespace that pushes lines lower (vertically).\n */\nexport class LinesLayout {\n constructor(lineCount, lineHeight, paddingTop, paddingBottom) {\n this._instanceId = strings.singleLetterHash(++LinesLayout.INSTANCE_COUNT);\n this._pendingChanges = new PendingChanges();\n this._lastWhitespaceId = 0;\n this._arr = [];\n this._prefixSumValidIndex = -1;\n this._minWidth = -1; /* marker for not being computed */\n this._lineCount = lineCount;\n this._lineHeight = lineHeight;\n this._paddingTop = paddingTop;\n this._paddingBottom = paddingBottom;\n }\n /**\n * Find the insertion index for a new value inside a sorted array of values.\n * If the value is already present in the sorted array, the insertion index will be after the already existing value.\n */\n static findInsertionIndex(arr, afterLineNumber, ordinal) {\n let low = 0;\n let high = arr.length;\n while (low < high) {\n const mid = ((low + high) >>> 1);\n if (afterLineNumber === arr[mid].afterLineNumber) {\n if (ordinal < arr[mid].ordinal) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n else if (afterLineNumber < arr[mid].afterLineNumber) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n return low;\n }\n /**\n * Change the height of a line in pixels.\n */\n setLineHeight(lineHeight) {\n this._checkPendingChanges();\n this._lineHeight = lineHeight;\n }\n /**\n * Changes the padding used to calculate vertical offsets.\n */\n setPadding(paddingTop, paddingBottom) {\n this._paddingTop = paddingTop;\n this._paddingBottom = paddingBottom;\n }\n /**\n * Set the number of lines.\n *\n * @param lineCount New number of lines.\n */\n onFlushed(lineCount) {\n this._checkPendingChanges();\n this._lineCount = lineCount;\n }\n changeWhitespace(callback) {\n let hadAChange = false;\n try {\n const accessor = {\n insertWhitespace: (afterLineNumber, ordinal, heightInPx, minWidth) => {\n hadAChange = true;\n afterLineNumber = afterLineNumber | 0;\n ordinal = ordinal | 0;\n heightInPx = heightInPx | 0;\n minWidth = minWidth | 0;\n const id = this._instanceId + (++this._lastWhitespaceId);\n this._pendingChanges.insert(new EditorWhitespace(id, afterLineNumber, ordinal, heightInPx, minWidth));\n return id;\n },\n changeOneWhitespace: (id, newAfterLineNumber, newHeight) => {\n hadAChange = true;\n newAfterLineNumber = newAfterLineNumber | 0;\n newHeight = newHeight | 0;\n this._pendingChanges.change({ id, newAfterLineNumber, newHeight });\n },\n removeWhitespace: (id) => {\n hadAChange = true;\n this._pendingChanges.remove({ id });\n }\n };\n callback(accessor);\n }\n finally {\n this._pendingChanges.commit(this);\n }\n return hadAChange;\n }\n _commitPendingChanges(inserts, changes, removes) {\n if (inserts.length > 0 || removes.length > 0) {\n this._minWidth = -1; /* marker for not being computed */\n }\n if (inserts.length + changes.length + removes.length <= 1) {\n // when only one thing happened, handle it \"delicately\"\n for (const insert of inserts) {\n this._insertWhitespace(insert);\n }\n for (const change of changes) {\n this._changeOneWhitespace(change.id, change.newAfterLineNumber, change.newHeight);\n }\n for (const remove of removes) {\n const index = this._findWhitespaceIndex(remove.id);\n if (index === -1) {\n continue;\n }\n this._removeWhitespace(index);\n }\n return;\n }\n // simply rebuild the entire datastructure\n const toRemove = new Set();\n for (const remove of removes) {\n toRemove.add(remove.id);\n }\n const toChange = new Map();\n for (const change of changes) {\n toChange.set(change.id, change);\n }\n const applyRemoveAndChange = (whitespaces) => {\n let result = [];\n for (const whitespace of whitespaces) {\n if (toRemove.has(whitespace.id)) {\n continue;\n }\n if (toChange.has(whitespace.id)) {\n const change = toChange.get(whitespace.id);\n whitespace.afterLineNumber = change.newAfterLineNumber;\n whitespace.height = change.newHeight;\n }\n result.push(whitespace);\n }\n return result;\n };\n const result = applyRemoveAndChange(this._arr).concat(applyRemoveAndChange(inserts));\n result.sort((a, b) => {\n if (a.afterLineNumber === b.afterLineNumber) {\n return a.ordinal - b.ordinal;\n }\n return a.afterLineNumber - b.afterLineNumber;\n });\n this._arr = result;\n this._prefixSumValidIndex = -1;\n }\n _checkPendingChanges() {\n if (this._pendingChanges.mustCommit()) {\n this._pendingChanges.commit(this);\n }\n }\n _insertWhitespace(whitespace) {\n const insertIndex = LinesLayout.findInsertionIndex(this._arr, whitespace.afterLineNumber, whitespace.ordinal);\n this._arr.splice(insertIndex, 0, whitespace);\n this._prefixSumValidIndex = Math.min(this._prefixSumValidIndex, insertIndex - 1);\n }\n _findWhitespaceIndex(id) {\n const arr = this._arr;\n for (let i = 0, len = arr.length; i < len; i++) {\n if (arr[i].id === id) {\n return i;\n }\n }\n return -1;\n }\n _changeOneWhitespace(id, newAfterLineNumber, newHeight) {\n const index = this._findWhitespaceIndex(id);\n if (index === -1) {\n return;\n }\n if (this._arr[index].height !== newHeight) {\n this._arr[index].height = newHeight;\n this._prefixSumValidIndex = Math.min(this._prefixSumValidIndex, index - 1);\n }\n if (this._arr[index].afterLineNumber !== newAfterLineNumber) {\n // `afterLineNumber` changed for this whitespace\n // Record old whitespace\n const whitespace = this._arr[index];\n // Since changing `afterLineNumber` can trigger a reordering, we're gonna remove this whitespace\n this._removeWhitespace(index);\n whitespace.afterLineNumber = newAfterLineNumber;\n // And add it again\n this._insertWhitespace(whitespace);\n }\n }\n _removeWhitespace(removeIndex) {\n this._arr.splice(removeIndex, 1);\n this._prefixSumValidIndex = Math.min(this._prefixSumValidIndex, removeIndex - 1);\n }\n /**\n * Notify the layouter that lines have been deleted (a continuous zone of lines).\n *\n * @param fromLineNumber The line number at which the deletion started, inclusive\n * @param toLineNumber The line number at which the deletion ended, inclusive\n */\n onLinesDeleted(fromLineNumber, toLineNumber) {\n this._checkPendingChanges();\n fromLineNumber = fromLineNumber | 0;\n toLineNumber = toLineNumber | 0;\n this._lineCount -= (toLineNumber - fromLineNumber + 1);\n for (let i = 0, len = this._arr.length; i < len; i++) {\n const afterLineNumber = this._arr[i].afterLineNumber;\n if (fromLineNumber <= afterLineNumber && afterLineNumber <= toLineNumber) {\n // The line this whitespace was after has been deleted\n // => move whitespace to before first deleted line\n this._arr[i].afterLineNumber = fromLineNumber - 1;\n }\n else if (afterLineNumber > toLineNumber) {\n // The line this whitespace was after has been moved up\n // => move whitespace up\n this._arr[i].afterLineNumber -= (toLineNumber - fromLineNumber + 1);\n }\n }\n }\n /**\n * Notify the layouter that lines have been inserted (a continuous zone of lines).\n *\n * @param fromLineNumber The line number at which the insertion started, inclusive\n * @param toLineNumber The line number at which the insertion ended, inclusive.\n */\n onLinesInserted(fromLineNumber, toLineNumber) {\n this._checkPendingChanges();\n fromLineNumber = fromLineNumber | 0;\n toLineNumber = toLineNumber | 0;\n this._lineCount += (toLineNumber - fromLineNumber + 1);\n for (let i = 0, len = this._arr.length; i < len; i++) {\n const afterLineNumber = this._arr[i].afterLineNumber;\n if (fromLineNumber <= afterLineNumber) {\n this._arr[i].afterLineNumber += (toLineNumber - fromLineNumber + 1);\n }\n }\n }\n /**\n * Get the sum of all the whitespaces.\n */\n getWhitespacesTotalHeight() {\n this._checkPendingChanges();\n if (this._arr.length === 0) {\n return 0;\n }\n return this.getWhitespacesAccumulatedHeight(this._arr.length - 1);\n }\n /**\n * Return the sum of the heights of the whitespaces at [0..index].\n * This includes the whitespace at `index`.\n *\n * @param index The index of the whitespace.\n * @return The sum of the heights of all whitespaces before the one at `index`, including the one at `index`.\n */\n getWhitespacesAccumulatedHeight(index) {\n this._checkPendingChanges();\n index = index | 0;\n let startIndex = Math.max(0, this._prefixSumValidIndex + 1);\n if (startIndex === 0) {\n this._arr[0].prefixSum = this._arr[0].height;\n startIndex++;\n }\n for (let i = startIndex; i <= index; i++) {\n this._arr[i].prefixSum = this._arr[i - 1].prefixSum + this._arr[i].height;\n }\n this._prefixSumValidIndex = Math.max(this._prefixSumValidIndex, index);\n return this._arr[index].prefixSum;\n }\n /**\n * Get the sum of heights for all objects.\n *\n * @return The sum of heights for all objects.\n */\n getLinesTotalHeight() {\n this._checkPendingChanges();\n const linesHeight = this._lineHeight * this._lineCount;\n const whitespacesHeight = this.getWhitespacesTotalHeight();\n return linesHeight + whitespacesHeight + this._paddingTop + this._paddingBottom;\n }\n /**\n * Returns the accumulated height of whitespaces before the given line number.\n *\n * @param lineNumber The line number\n */\n getWhitespaceAccumulatedHeightBeforeLineNumber(lineNumber) {\n this._checkPendingChanges();\n lineNumber = lineNumber | 0;\n const lastWhitespaceBeforeLineNumber = this._findLastWhitespaceBeforeLineNumber(lineNumber);\n if (lastWhitespaceBeforeLineNumber === -1) {\n return 0;\n }\n return this.getWhitespacesAccumulatedHeight(lastWhitespaceBeforeLineNumber);\n }\n _findLastWhitespaceBeforeLineNumber(lineNumber) {\n lineNumber = lineNumber | 0;\n // Find the whitespace before line number\n const arr = this._arr;\n let low = 0;\n let high = arr.length - 1;\n while (low <= high) {\n const delta = (high - low) | 0;\n const halfDelta = (delta / 2) | 0;\n const mid = (low + halfDelta) | 0;\n if (arr[mid].afterLineNumber < lineNumber) {\n if (mid + 1 >= arr.length || arr[mid + 1].afterLineNumber >= lineNumber) {\n return mid;\n }\n else {\n low = (mid + 1) | 0;\n }\n }\n else {\n high = (mid - 1) | 0;\n }\n }\n return -1;\n }\n _findFirstWhitespaceAfterLineNumber(lineNumber) {\n lineNumber = lineNumber | 0;\n const lastWhitespaceBeforeLineNumber = this._findLastWhitespaceBeforeLineNumber(lineNumber);\n const firstWhitespaceAfterLineNumber = lastWhitespaceBeforeLineNumber + 1;\n if (firstWhitespaceAfterLineNumber < this._arr.length) {\n return firstWhitespaceAfterLineNumber;\n }\n return -1;\n }\n /**\n * Find the index of the first whitespace which has `afterLineNumber` >= `lineNumber`.\n * @return The index of the first whitespace with `afterLineNumber` >= `lineNumber` or -1 if no whitespace is found.\n */\n getFirstWhitespaceIndexAfterLineNumber(lineNumber) {\n this._checkPendingChanges();\n lineNumber = lineNumber | 0;\n return this._findFirstWhitespaceAfterLineNumber(lineNumber);\n }\n /**\n * Get the vertical offset (the sum of heights for all objects above) a certain line number.\n *\n * @param lineNumber The line number\n * @return The sum of heights for all objects above `lineNumber`.\n */\n getVerticalOffsetForLineNumber(lineNumber) {\n this._checkPendingChanges();\n lineNumber = lineNumber | 0;\n let previousLinesHeight;\n if (lineNumber > 1) {\n previousLinesHeight = this._lineHeight * (lineNumber - 1);\n }\n else {\n previousLinesHeight = 0;\n }\n const previousWhitespacesHeight = this.getWhitespaceAccumulatedHeightBeforeLineNumber(lineNumber);\n return previousLinesHeight + previousWhitespacesHeight + this._paddingTop;\n }\n /**\n * The maximum min width for all whitespaces.\n */\n getWhitespaceMinWidth() {\n this._checkPendingChanges();\n if (this._minWidth === -1) {\n let minWidth = 0;\n for (let i = 0, len = this._arr.length; i < len; i++) {\n minWidth = Math.max(minWidth, this._arr[i].minWidth);\n }\n this._minWidth = minWidth;\n }\n return this._minWidth;\n }\n /**\n * Check if `verticalOffset` is below all lines.\n */\n isAfterLines(verticalOffset) {\n this._checkPendingChanges();\n const totalHeight = this.getLinesTotalHeight();\n return verticalOffset > totalHeight;\n }\n isInTopPadding(verticalOffset) {\n if (this._paddingTop === 0) {\n return false;\n }\n this._checkPendingChanges();\n return (verticalOffset < this._paddingTop);\n }\n isInBottomPadding(verticalOffset) {\n if (this._paddingBottom === 0) {\n return false;\n }\n this._checkPendingChanges();\n const totalHeight = this.getLinesTotalHeight();\n return (verticalOffset >= totalHeight - this._paddingBottom);\n }\n /**\n * Find the first line number that is at or after vertical offset `verticalOffset`.\n * i.e. if getVerticalOffsetForLine(line) is x and getVerticalOffsetForLine(line + 1) is y, then\n * getLineNumberAtOrAfterVerticalOffset(i) = line, x <= i < y.\n *\n * @param verticalOffset The vertical offset to search at.\n * @return The line number at or after vertical offset `verticalOffset`.\n */\n getLineNumberAtOrAfterVerticalOffset(verticalOffset) {\n this._checkPendingChanges();\n verticalOffset = verticalOffset | 0;\n if (verticalOffset < 0) {\n return 1;\n }\n const linesCount = this._lineCount | 0;\n const lineHeight = this._lineHeight;\n let minLineNumber = 1;\n let maxLineNumber = linesCount;\n while (minLineNumber < maxLineNumber) {\n const midLineNumber = ((minLineNumber + maxLineNumber) / 2) | 0;\n const midLineNumberVerticalOffset = this.getVerticalOffsetForLineNumber(midLineNumber) | 0;\n if (verticalOffset >= midLineNumberVerticalOffset + lineHeight) {\n // vertical offset is after mid line number\n minLineNumber = midLineNumber + 1;\n }\n else if (verticalOffset >= midLineNumberVerticalOffset) {\n // Hit\n return midLineNumber;\n }\n else {\n // vertical offset is before mid line number, but mid line number could still be what we're searching for\n maxLineNumber = midLineNumber;\n }\n }\n if (minLineNumber > linesCount) {\n return linesCount;\n }\n return minLineNumber;\n }\n /**\n * Get all the lines and their relative vertical offsets that are positioned between `verticalOffset1` and `verticalOffset2`.\n *\n * @param verticalOffset1 The beginning of the viewport.\n * @param verticalOffset2 The end of the viewport.\n * @return A structure describing the lines positioned between `verticalOffset1` and `verticalOffset2`.\n */\n getLinesViewportData(verticalOffset1, verticalOffset2) {\n this._checkPendingChanges();\n verticalOffset1 = verticalOffset1 | 0;\n verticalOffset2 = verticalOffset2 | 0;\n const lineHeight = this._lineHeight;\n // Find first line number\n // We don't live in a perfect world, so the line number might start before or after verticalOffset1\n const startLineNumber = this.getLineNumberAtOrAfterVerticalOffset(verticalOffset1) | 0;\n const startLineNumberVerticalOffset = this.getVerticalOffsetForLineNumber(startLineNumber) | 0;\n let endLineNumber = this._lineCount | 0;\n // Also keep track of what whitespace we've got\n let whitespaceIndex = this.getFirstWhitespaceIndexAfterLineNumber(startLineNumber) | 0;\n const whitespaceCount = this.getWhitespacesCount() | 0;\n let currentWhitespaceHeight;\n let currentWhitespaceAfterLineNumber;\n if (whitespaceIndex === -1) {\n whitespaceIndex = whitespaceCount;\n currentWhitespaceAfterLineNumber = endLineNumber + 1;\n currentWhitespaceHeight = 0;\n }\n else {\n currentWhitespaceAfterLineNumber = this.getAfterLineNumberForWhitespaceIndex(whitespaceIndex) | 0;\n currentWhitespaceHeight = this.getHeightForWhitespaceIndex(whitespaceIndex) | 0;\n }\n let currentVerticalOffset = startLineNumberVerticalOffset;\n let currentLineRelativeOffset = currentVerticalOffset;\n // IE (all versions) cannot handle units above about 1,533,908 px, so every 500k pixels bring numbers down\n const STEP_SIZE = 500000;\n let bigNumbersDelta = 0;\n if (startLineNumberVerticalOffset >= STEP_SIZE) {\n // Compute a delta that guarantees that lines are positioned at `lineHeight` increments\n bigNumbersDelta = Math.floor(startLineNumberVerticalOffset / STEP_SIZE) * STEP_SIZE;\n bigNumbersDelta = Math.floor(bigNumbersDelta / lineHeight) * lineHeight;\n currentLineRelativeOffset -= bigNumbersDelta;\n }\n const linesOffsets = [];\n const verticalCenter = verticalOffset1 + (verticalOffset2 - verticalOffset1) / 2;\n let centeredLineNumber = -1;\n // Figure out how far the lines go\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n if (centeredLineNumber === -1) {\n const currentLineTop = currentVerticalOffset;\n const currentLineBottom = currentVerticalOffset + lineHeight;\n if ((currentLineTop <= verticalCenter && verticalCenter < currentLineBottom) || currentLineTop > verticalCenter) {\n centeredLineNumber = lineNumber;\n }\n }\n // Count current line height in the vertical offsets\n currentVerticalOffset += lineHeight;\n linesOffsets[lineNumber - startLineNumber] = currentLineRelativeOffset;\n // Next line starts immediately after this one\n currentLineRelativeOffset += lineHeight;\n while (currentWhitespaceAfterLineNumber === lineNumber) {\n // Push down next line with the height of the current whitespace\n currentLineRelativeOffset += currentWhitespaceHeight;\n // Count current whitespace in the vertical offsets\n currentVerticalOffset += currentWhitespaceHeight;\n whitespaceIndex++;\n if (whitespaceIndex >= whitespaceCount) {\n currentWhitespaceAfterLineNumber = endLineNumber + 1;\n }\n else {\n currentWhitespaceAfterLineNumber = this.getAfterLineNumberForWhitespaceIndex(whitespaceIndex) | 0;\n currentWhitespaceHeight = this.getHeightForWhitespaceIndex(whitespaceIndex) | 0;\n }\n }\n if (currentVerticalOffset >= verticalOffset2) {\n // We have covered the entire viewport area, time to stop\n endLineNumber = lineNumber;\n break;\n }\n }\n if (centeredLineNumber === -1) {\n centeredLineNumber = endLineNumber;\n }\n const endLineNumberVerticalOffset = this.getVerticalOffsetForLineNumber(endLineNumber) | 0;\n let completelyVisibleStartLineNumber = startLineNumber;\n let completelyVisibleEndLineNumber = endLineNumber;\n if (completelyVisibleStartLineNumber < completelyVisibleEndLineNumber) {\n if (startLineNumberVerticalOffset < verticalOffset1) {\n completelyVisibleStartLineNumber++;\n }\n }\n if (completelyVisibleStartLineNumber < completelyVisibleEndLineNumber) {\n if (endLineNumberVerticalOffset + lineHeight > verticalOffset2) {\n completelyVisibleEndLineNumber--;\n }\n }\n return {\n bigNumbersDelta: bigNumbersDelta,\n startLineNumber: startLineNumber,\n endLineNumber: endLineNumber,\n relativeVerticalOffset: linesOffsets,\n centeredLineNumber: centeredLineNumber,\n completelyVisibleStartLineNumber: completelyVisibleStartLineNumber,\n completelyVisibleEndLineNumber: completelyVisibleEndLineNumber\n };\n }\n getVerticalOffsetForWhitespaceIndex(whitespaceIndex) {\n this._checkPendingChanges();\n whitespaceIndex = whitespaceIndex | 0;\n const afterLineNumber = this.getAfterLineNumberForWhitespaceIndex(whitespaceIndex);\n let previousLinesHeight;\n if (afterLineNumber >= 1) {\n previousLinesHeight = this._lineHeight * afterLineNumber;\n }\n else {\n previousLinesHeight = 0;\n }\n let previousWhitespacesHeight;\n if (whitespaceIndex > 0) {\n previousWhitespacesHeight = this.getWhitespacesAccumulatedHeight(whitespaceIndex - 1);\n }\n else {\n previousWhitespacesHeight = 0;\n }\n return previousLinesHeight + previousWhitespacesHeight + this._paddingTop;\n }\n getWhitespaceIndexAtOrAfterVerticallOffset(verticalOffset) {\n this._checkPendingChanges();\n verticalOffset = verticalOffset | 0;\n let minWhitespaceIndex = 0;\n let maxWhitespaceIndex = this.getWhitespacesCount() - 1;\n if (maxWhitespaceIndex < 0) {\n return -1;\n }\n // Special case: nothing to be found\n const maxWhitespaceVerticalOffset = this.getVerticalOffsetForWhitespaceIndex(maxWhitespaceIndex);\n const maxWhitespaceHeight = this.getHeightForWhitespaceIndex(maxWhitespaceIndex);\n if (verticalOffset >= maxWhitespaceVerticalOffset + maxWhitespaceHeight) {\n return -1;\n }\n while (minWhitespaceIndex < maxWhitespaceIndex) {\n const midWhitespaceIndex = Math.floor((minWhitespaceIndex + maxWhitespaceIndex) / 2);\n const midWhitespaceVerticalOffset = this.getVerticalOffsetForWhitespaceIndex(midWhitespaceIndex);\n const midWhitespaceHeight = this.getHeightForWhitespaceIndex(midWhitespaceIndex);\n if (verticalOffset >= midWhitespaceVerticalOffset + midWhitespaceHeight) {\n // vertical offset is after whitespace\n minWhitespaceIndex = midWhitespaceIndex + 1;\n }\n else if (verticalOffset >= midWhitespaceVerticalOffset) {\n // Hit\n return midWhitespaceIndex;\n }\n else {\n // vertical offset is before whitespace, but midWhitespaceIndex might still be what we're searching for\n maxWhitespaceIndex = midWhitespaceIndex;\n }\n }\n return minWhitespaceIndex;\n }\n /**\n * Get exactly the whitespace that is layouted at `verticalOffset`.\n *\n * @param verticalOffset The vertical offset.\n * @return Precisely the whitespace that is layouted at `verticaloffset` or null.\n */\n getWhitespaceAtVerticalOffset(verticalOffset) {\n this._checkPendingChanges();\n verticalOffset = verticalOffset | 0;\n const candidateIndex = this.getWhitespaceIndexAtOrAfterVerticallOffset(verticalOffset);\n if (candidateIndex < 0) {\n return null;\n }\n if (candidateIndex >= this.getWhitespacesCount()) {\n return null;\n }\n const candidateTop = this.getVerticalOffsetForWhitespaceIndex(candidateIndex);\n if (candidateTop > verticalOffset) {\n return null;\n }\n const candidateHeight = this.getHeightForWhitespaceIndex(candidateIndex);\n const candidateId = this.getIdForWhitespaceIndex(candidateIndex);\n const candidateAfterLineNumber = this.getAfterLineNumberForWhitespaceIndex(candidateIndex);\n return {\n id: candidateId,\n afterLineNumber: candidateAfterLineNumber,\n verticalOffset: candidateTop,\n height: candidateHeight\n };\n }\n /**\n * Get a list of whitespaces that are positioned between `verticalOffset1` and `verticalOffset2`.\n *\n * @param verticalOffset1 The beginning of the viewport.\n * @param verticalOffset2 The end of the viewport.\n * @return An array with all the whitespaces in the viewport. If no whitespace is in viewport, the array is empty.\n */\n getWhitespaceViewportData(verticalOffset1, verticalOffset2) {\n this._checkPendingChanges();\n verticalOffset1 = verticalOffset1 | 0;\n verticalOffset2 = verticalOffset2 | 0;\n const startIndex = this.getWhitespaceIndexAtOrAfterVerticallOffset(verticalOffset1);\n const endIndex = this.getWhitespacesCount() - 1;\n if (startIndex < 0) {\n return [];\n }\n let result = [];\n for (let i = startIndex; i <= endIndex; i++) {\n const top = this.getVerticalOffsetForWhitespaceIndex(i);\n const height = this.getHeightForWhitespaceIndex(i);\n if (top >= verticalOffset2) {\n break;\n }\n result.push({\n id: this.getIdForWhitespaceIndex(i),\n afterLineNumber: this.getAfterLineNumberForWhitespaceIndex(i),\n verticalOffset: top,\n height: height\n });\n }\n return result;\n }\n /**\n * Get all whitespaces.\n */\n getWhitespaces() {\n this._checkPendingChanges();\n return this._arr.slice(0);\n }\n /**\n * The number of whitespaces.\n */\n getWhitespacesCount() {\n this._checkPendingChanges();\n return this._arr.length;\n }\n /**\n * Get the `id` for whitespace at index `index`.\n *\n * @param index The index of the whitespace.\n * @return `id` of whitespace at `index`.\n */\n getIdForWhitespaceIndex(index) {\n this._checkPendingChanges();\n index = index | 0;\n return this._arr[index].id;\n }\n /**\n * Get the `afterLineNumber` for whitespace at index `index`.\n *\n * @param index The index of the whitespace.\n * @return `afterLineNumber` of whitespace at `index`.\n */\n getAfterLineNumberForWhitespaceIndex(index) {\n this._checkPendingChanges();\n index = index | 0;\n return this._arr[index].afterLineNumber;\n }\n /**\n * Get the `height` for whitespace at index `index`.\n *\n * @param index The index of the whitespace.\n * @return `height` of whitespace at `index`.\n */\n getHeightForWhitespaceIndex(index) {\n this._checkPendingChanges();\n index = index | 0;\n return this._arr[index].height;\n }\n}\nLinesLayout.INSTANCE_COUNT = 0;\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { Scrollable } from '../../../base/common/scrollable.js';\nimport { LinesLayout } from './linesLayout.js';\nimport { Viewport } from '../viewModel/viewModel.js';\nimport { ContentSizeChangedEvent } from '../viewModel/viewModelEventDispatcher.js';\nconst SMOOTH_SCROLLING_TIME = 125;\nclass EditorScrollDimensions {\n constructor(width, contentWidth, height, contentHeight) {\n width = width | 0;\n contentWidth = contentWidth | 0;\n height = height | 0;\n contentHeight = contentHeight | 0;\n if (width < 0) {\n width = 0;\n }\n if (contentWidth < 0) {\n contentWidth = 0;\n }\n if (height < 0) {\n height = 0;\n }\n if (contentHeight < 0) {\n contentHeight = 0;\n }\n this.width = width;\n this.contentWidth = contentWidth;\n this.scrollWidth = Math.max(width, contentWidth);\n this.height = height;\n this.contentHeight = contentHeight;\n this.scrollHeight = Math.max(height, contentHeight);\n }\n equals(other) {\n return (this.width === other.width\n && this.contentWidth === other.contentWidth\n && this.height === other.height\n && this.contentHeight === other.contentHeight);\n }\n}\nclass EditorScrollable extends Disposable {\n constructor(smoothScrollDuration, scheduleAtNextAnimationFrame) {\n super();\n this._onDidContentSizeChange = this._register(new Emitter());\n this.onDidContentSizeChange = this._onDidContentSizeChange.event;\n this._dimensions = new EditorScrollDimensions(0, 0, 0, 0);\n this._scrollable = this._register(new Scrollable(smoothScrollDuration, scheduleAtNextAnimationFrame));\n this.onDidScroll = this._scrollable.onScroll;\n }\n getScrollable() {\n return this._scrollable;\n }\n setSmoothScrollDuration(smoothScrollDuration) {\n this._scrollable.setSmoothScrollDuration(smoothScrollDuration);\n }\n validateScrollPosition(scrollPosition) {\n return this._scrollable.validateScrollPosition(scrollPosition);\n }\n getScrollDimensions() {\n return this._dimensions;\n }\n setScrollDimensions(dimensions) {\n if (this._dimensions.equals(dimensions)) {\n return;\n }\n const oldDimensions = this._dimensions;\n this._dimensions = dimensions;\n this._scrollable.setScrollDimensions({\n width: dimensions.width,\n scrollWidth: dimensions.scrollWidth,\n height: dimensions.height,\n scrollHeight: dimensions.scrollHeight\n }, true);\n const contentWidthChanged = (oldDimensions.contentWidth !== dimensions.contentWidth);\n const contentHeightChanged = (oldDimensions.contentHeight !== dimensions.contentHeight);\n if (contentWidthChanged || contentHeightChanged) {\n this._onDidContentSizeChange.fire(new ContentSizeChangedEvent(oldDimensions.contentWidth, oldDimensions.contentHeight, dimensions.contentWidth, dimensions.contentHeight));\n }\n }\n getFutureScrollPosition() {\n return this._scrollable.getFutureScrollPosition();\n }\n getCurrentScrollPosition() {\n return this._scrollable.getCurrentScrollPosition();\n }\n setScrollPositionNow(update) {\n this._scrollable.setScrollPositionNow(update);\n }\n setScrollPositionSmooth(update) {\n this._scrollable.setScrollPositionSmooth(update);\n }\n}\nexport class ViewLayout extends Disposable {\n constructor(configuration, lineCount, scheduleAtNextAnimationFrame) {\n super();\n this._configuration = configuration;\n const options = this._configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n const padding = options.get(71 /* padding */);\n this._linesLayout = new LinesLayout(lineCount, options.get(55 /* lineHeight */), padding.top, padding.bottom);\n this._scrollable = this._register(new EditorScrollable(0, scheduleAtNextAnimationFrame));\n this._configureSmoothScrollDuration();\n this._scrollable.setScrollDimensions(new EditorScrollDimensions(layoutInfo.contentWidth, 0, layoutInfo.height, 0));\n this.onDidScroll = this._scrollable.onDidScroll;\n this.onDidContentSizeChange = this._scrollable.onDidContentSizeChange;\n this._updateHeight();\n }\n dispose() {\n super.dispose();\n }\n getScrollable() {\n return this._scrollable.getScrollable();\n }\n onHeightMaybeChanged() {\n this._updateHeight();\n }\n _configureSmoothScrollDuration() {\n this._scrollable.setSmoothScrollDuration(this._configuration.options.get(100 /* smoothScrolling */) ? SMOOTH_SCROLLING_TIME : 0);\n }\n // ---- begin view event handlers\n onConfigurationChanged(e) {\n const options = this._configuration.options;\n if (e.hasChanged(55 /* lineHeight */)) {\n this._linesLayout.setLineHeight(options.get(55 /* lineHeight */));\n }\n if (e.hasChanged(71 /* padding */)) {\n const padding = options.get(71 /* padding */);\n this._linesLayout.setPadding(padding.top, padding.bottom);\n }\n if (e.hasChanged(127 /* layoutInfo */)) {\n const layoutInfo = options.get(127 /* layoutInfo */);\n const width = layoutInfo.contentWidth;\n const height = layoutInfo.height;\n const scrollDimensions = this._scrollable.getScrollDimensions();\n const contentWidth = scrollDimensions.contentWidth;\n this._scrollable.setScrollDimensions(new EditorScrollDimensions(width, scrollDimensions.contentWidth, height, this._getContentHeight(width, height, contentWidth)));\n }\n else {\n this._updateHeight();\n }\n if (e.hasChanged(100 /* smoothScrolling */)) {\n this._configureSmoothScrollDuration();\n }\n }\n onFlushed(lineCount) {\n this._linesLayout.onFlushed(lineCount);\n }\n onLinesDeleted(fromLineNumber, toLineNumber) {\n this._linesLayout.onLinesDeleted(fromLineNumber, toLineNumber);\n }\n onLinesInserted(fromLineNumber, toLineNumber) {\n this._linesLayout.onLinesInserted(fromLineNumber, toLineNumber);\n }\n // ---- end view event handlers\n _getHorizontalScrollbarHeight(width, scrollWidth) {\n const options = this._configuration.options;\n const scrollbar = options.get(89 /* scrollbar */);\n if (scrollbar.horizontal === 2 /* Hidden */) {\n // horizontal scrollbar not visible\n return 0;\n }\n if (width >= scrollWidth) {\n // horizontal scrollbar not visible\n return 0;\n }\n return scrollbar.horizontalScrollbarSize;\n }\n _getContentHeight(width, height, contentWidth) {\n const options = this._configuration.options;\n let result = this._linesLayout.getLinesTotalHeight();\n if (options.get(91 /* scrollBeyondLastLine */)) {\n result += Math.max(0, height - options.get(55 /* lineHeight */) - options.get(71 /* padding */).bottom);\n }\n else {\n result += this._getHorizontalScrollbarHeight(width, contentWidth);\n }\n return result;\n }\n _updateHeight() {\n const scrollDimensions = this._scrollable.getScrollDimensions();\n const width = scrollDimensions.width;\n const height = scrollDimensions.height;\n const contentWidth = scrollDimensions.contentWidth;\n this._scrollable.setScrollDimensions(new EditorScrollDimensions(width, scrollDimensions.contentWidth, height, this._getContentHeight(width, height, contentWidth)));\n }\n // ---- Layouting logic\n getCurrentViewport() {\n const scrollDimensions = this._scrollable.getScrollDimensions();\n const currentScrollPosition = this._scrollable.getCurrentScrollPosition();\n return new Viewport(currentScrollPosition.scrollTop, currentScrollPosition.scrollLeft, scrollDimensions.width, scrollDimensions.height);\n }\n getFutureViewport() {\n const scrollDimensions = this._scrollable.getScrollDimensions();\n const currentScrollPosition = this._scrollable.getFutureScrollPosition();\n return new Viewport(currentScrollPosition.scrollTop, currentScrollPosition.scrollLeft, scrollDimensions.width, scrollDimensions.height);\n }\n _computeContentWidth(maxLineWidth) {\n const options = this._configuration.options;\n const wrappingInfo = options.get(128 /* wrappingInfo */);\n const fontInfo = options.get(40 /* fontInfo */);\n if (wrappingInfo.isViewportWrapping) {\n const layoutInfo = options.get(127 /* layoutInfo */);\n const minimap = options.get(61 /* minimap */);\n if (maxLineWidth > layoutInfo.contentWidth + fontInfo.typicalHalfwidthCharacterWidth) {\n // This is a case where viewport wrapping is on, but the line extends above the viewport\n if (minimap.enabled && minimap.side === 'right') {\n // We need to accomodate the scrollbar width\n return maxLineWidth + layoutInfo.verticalScrollbarWidth;\n }\n }\n return maxLineWidth;\n }\n else {\n const extraHorizontalSpace = options.get(90 /* scrollBeyondLastColumn */) * fontInfo.typicalHalfwidthCharacterWidth;\n const whitespaceMinWidth = this._linesLayout.getWhitespaceMinWidth();\n return Math.max(maxLineWidth + extraHorizontalSpace, whitespaceMinWidth);\n }\n }\n setMaxLineWidth(maxLineWidth) {\n const scrollDimensions = this._scrollable.getScrollDimensions();\n // const newScrollWidth = ;\n this._scrollable.setScrollDimensions(new EditorScrollDimensions(scrollDimensions.width, this._computeContentWidth(maxLineWidth), scrollDimensions.height, scrollDimensions.contentHeight));\n // The height might depend on the fact that there is a horizontal scrollbar or not\n this._updateHeight();\n }\n // ---- view state\n saveState() {\n const currentScrollPosition = this._scrollable.getFutureScrollPosition();\n let scrollTop = currentScrollPosition.scrollTop;\n let firstLineNumberInViewport = this._linesLayout.getLineNumberAtOrAfterVerticalOffset(scrollTop);\n let whitespaceAboveFirstLine = this._linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(firstLineNumberInViewport);\n return {\n scrollTop: scrollTop,\n scrollTopWithoutViewZones: scrollTop - whitespaceAboveFirstLine,\n scrollLeft: currentScrollPosition.scrollLeft\n };\n }\n // ---- IVerticalLayoutProvider\n changeWhitespace(callback) {\n const hadAChange = this._linesLayout.changeWhitespace(callback);\n if (hadAChange) {\n this.onHeightMaybeChanged();\n }\n return hadAChange;\n }\n getVerticalOffsetForLineNumber(lineNumber) {\n return this._linesLayout.getVerticalOffsetForLineNumber(lineNumber);\n }\n isAfterLines(verticalOffset) {\n return this._linesLayout.isAfterLines(verticalOffset);\n }\n isInTopPadding(verticalOffset) {\n return this._linesLayout.isInTopPadding(verticalOffset);\n }\n isInBottomPadding(verticalOffset) {\n return this._linesLayout.isInBottomPadding(verticalOffset);\n }\n getLineNumberAtVerticalOffset(verticalOffset) {\n return this._linesLayout.getLineNumberAtOrAfterVerticalOffset(verticalOffset);\n }\n getWhitespaceAtVerticalOffset(verticalOffset) {\n return this._linesLayout.getWhitespaceAtVerticalOffset(verticalOffset);\n }\n getLinesViewportData() {\n const visibleBox = this.getCurrentViewport();\n return this._linesLayout.getLinesViewportData(visibleBox.top, visibleBox.top + visibleBox.height);\n }\n getLinesViewportDataAtScrollTop(scrollTop) {\n // do some minimal validations on scrollTop\n const scrollDimensions = this._scrollable.getScrollDimensions();\n if (scrollTop + scrollDimensions.height > scrollDimensions.scrollHeight) {\n scrollTop = scrollDimensions.scrollHeight - scrollDimensions.height;\n }\n if (scrollTop < 0) {\n scrollTop = 0;\n }\n return this._linesLayout.getLinesViewportData(scrollTop, scrollTop + scrollDimensions.height);\n }\n getWhitespaceViewportData() {\n const visibleBox = this.getCurrentViewport();\n return this._linesLayout.getWhitespaceViewportData(visibleBox.top, visibleBox.top + visibleBox.height);\n }\n getWhitespaces() {\n return this._linesLayout.getWhitespaces();\n }\n // ---- IScrollingProvider\n getContentWidth() {\n const scrollDimensions = this._scrollable.getScrollDimensions();\n return scrollDimensions.contentWidth;\n }\n getScrollWidth() {\n const scrollDimensions = this._scrollable.getScrollDimensions();\n return scrollDimensions.scrollWidth;\n }\n getContentHeight() {\n const scrollDimensions = this._scrollable.getScrollDimensions();\n return scrollDimensions.contentHeight;\n }\n getScrollHeight() {\n const scrollDimensions = this._scrollable.getScrollDimensions();\n return scrollDimensions.scrollHeight;\n }\n getCurrentScrollLeft() {\n const currentScrollPosition = this._scrollable.getCurrentScrollPosition();\n return currentScrollPosition.scrollLeft;\n }\n getCurrentScrollTop() {\n const currentScrollPosition = this._scrollable.getCurrentScrollPosition();\n return currentScrollPosition.scrollTop;\n }\n validateScrollPosition(scrollPosition) {\n return this._scrollable.validateScrollPosition(scrollPosition);\n }\n setScrollPosition(position, type) {\n if (type === 1 /* Immediate */) {\n this._scrollable.setScrollPositionNow(position);\n }\n else {\n this._scrollable.setScrollPositionSmooth(position);\n }\n }\n deltaScrollNow(deltaScrollLeft, deltaScrollTop) {\n const currentScrollPosition = this._scrollable.getCurrentScrollPosition();\n this._scrollable.setScrollPositionNow({\n scrollLeft: currentScrollPosition.scrollLeft + deltaScrollLeft,\n scrollTop: currentScrollPosition.scrollTop + deltaScrollTop\n });\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as arrays from '../../../base/common/arrays.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { ModelDecorationOptions } from '../model/textModel.js';\nimport * as viewEvents from '../view/viewEvents.js';\nimport { PrefixSumIndexOfResult } from './prefixSumComputer.js';\nimport { LineBreakData, ViewLineData } from './viewModel.js';\nexport class CoordinatesConverter {\n constructor(lines) {\n this._lines = lines;\n }\n // View -> Model conversion and related methods\n convertViewPositionToModelPosition(viewPosition) {\n return this._lines.convertViewPositionToModelPosition(viewPosition.lineNumber, viewPosition.column);\n }\n convertViewRangeToModelRange(viewRange) {\n return this._lines.convertViewRangeToModelRange(viewRange);\n }\n validateViewPosition(viewPosition, expectedModelPosition) {\n return this._lines.validateViewPosition(viewPosition.lineNumber, viewPosition.column, expectedModelPosition);\n }\n validateViewRange(viewRange, expectedModelRange) {\n return this._lines.validateViewRange(viewRange, expectedModelRange);\n }\n // Model -> View conversion and related methods\n convertModelPositionToViewPosition(modelPosition) {\n return this._lines.convertModelPositionToViewPosition(modelPosition.lineNumber, modelPosition.column);\n }\n convertModelRangeToViewRange(modelRange) {\n return this._lines.convertModelRangeToViewRange(modelRange);\n }\n modelPositionIsVisible(modelPosition) {\n return this._lines.modelPositionIsVisible(modelPosition.lineNumber, modelPosition.column);\n }\n getModelLineViewLineCount(modelLineNumber) {\n return this._lines.getModelLineViewLineCount(modelLineNumber);\n }\n}\nclass LineNumberMapper {\n constructor(viewLineCounts) {\n this._counts = viewLineCounts;\n this._isValid = false;\n this._validEndIndex = -1;\n this._modelToView = [];\n this._viewToModel = [];\n }\n _invalidate(index) {\n this._isValid = false;\n this._validEndIndex = Math.min(this._validEndIndex, index - 1);\n }\n _ensureValid() {\n if (this._isValid) {\n return;\n }\n for (let i = this._validEndIndex + 1, len = this._counts.length; i < len; i++) {\n const viewLineCount = this._counts[i];\n const viewLinesAbove = (i > 0 ? this._modelToView[i - 1] : 0);\n this._modelToView[i] = viewLinesAbove + viewLineCount;\n for (let j = 0; j < viewLineCount; j++) {\n this._viewToModel[viewLinesAbove + j] = i;\n }\n }\n // trim things\n this._modelToView.length = this._counts.length;\n this._viewToModel.length = this._modelToView[this._modelToView.length - 1];\n // mark as valid\n this._isValid = true;\n this._validEndIndex = this._counts.length - 1;\n }\n changeValue(index, value) {\n if (this._counts[index] === value) {\n // no change\n return;\n }\n this._counts[index] = value;\n this._invalidate(index);\n }\n removeValues(start, deleteCount) {\n this._counts.splice(start, deleteCount);\n this._invalidate(start);\n }\n insertValues(insertIndex, insertArr) {\n this._counts = arrays.arrayInsert(this._counts, insertIndex, insertArr);\n this._invalidate(insertIndex);\n }\n getTotalValue() {\n this._ensureValid();\n return this._viewToModel.length;\n }\n getAccumulatedValue(index) {\n this._ensureValid();\n return this._modelToView[index];\n }\n getIndexOf(accumulatedValue) {\n this._ensureValid();\n const modelLineIndex = this._viewToModel[accumulatedValue];\n const viewLinesAbove = (modelLineIndex > 0 ? this._modelToView[modelLineIndex - 1] : 0);\n return new PrefixSumIndexOfResult(modelLineIndex, accumulatedValue - viewLinesAbove);\n }\n}\nexport class SplitLinesCollection {\n constructor(model, domLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, fontInfo, tabSize, wrappingStrategy, wrappingColumn, wrappingIndent) {\n this.model = model;\n this._validModelVersionId = -1;\n this._domLineBreaksComputerFactory = domLineBreaksComputerFactory;\n this._monospaceLineBreaksComputerFactory = monospaceLineBreaksComputerFactory;\n this.fontInfo = fontInfo;\n this.tabSize = tabSize;\n this.wrappingStrategy = wrappingStrategy;\n this.wrappingColumn = wrappingColumn;\n this.wrappingIndent = wrappingIndent;\n this._constructLines(/*resetHiddenAreas*/ true, null);\n }\n dispose() {\n this.hiddenAreasIds = this.model.deltaDecorations(this.hiddenAreasIds, []);\n }\n createCoordinatesConverter() {\n return new CoordinatesConverter(this);\n }\n _constructLines(resetHiddenAreas, previousLineBreaks) {\n this.lines = [];\n if (resetHiddenAreas) {\n this.hiddenAreasIds = [];\n }\n let linesContent = this.model.getLinesContent();\n const lineCount = linesContent.length;\n const lineBreaksComputer = this.createLineBreaksComputer();\n for (let i = 0; i < lineCount; i++) {\n lineBreaksComputer.addRequest(linesContent[i], previousLineBreaks ? previousLineBreaks[i] : null);\n }\n const linesBreaks = lineBreaksComputer.finalize();\n let values = [];\n let hiddenAreas = this.hiddenAreasIds.map((areaId) => this.model.getDecorationRange(areaId)).sort(Range.compareRangesUsingStarts);\n let hiddenAreaStart = 1, hiddenAreaEnd = 0;\n let hiddenAreaIdx = -1;\n let nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : lineCount + 2;\n for (let i = 0; i < lineCount; i++) {\n let lineNumber = i + 1;\n if (lineNumber === nextLineNumberToUpdateHiddenArea) {\n hiddenAreaIdx++;\n hiddenAreaStart = hiddenAreas[hiddenAreaIdx].startLineNumber;\n hiddenAreaEnd = hiddenAreas[hiddenAreaIdx].endLineNumber;\n nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : lineCount + 2;\n }\n let isInHiddenArea = (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd);\n let line = createSplitLine(linesBreaks[i], !isInHiddenArea);\n values[i] = line.getViewLineCount();\n this.lines[i] = line;\n }\n this._validModelVersionId = this.model.getVersionId();\n this.prefixSumComputer = new LineNumberMapper(values);\n }\n getHiddenAreas() {\n return this.hiddenAreasIds.map((decId) => {\n return this.model.getDecorationRange(decId);\n });\n }\n _reduceRanges(_ranges) {\n if (_ranges.length === 0) {\n return [];\n }\n let ranges = _ranges.map(r => this.model.validateRange(r)).sort(Range.compareRangesUsingStarts);\n let result = [];\n let currentRangeStart = ranges[0].startLineNumber;\n let currentRangeEnd = ranges[0].endLineNumber;\n for (let i = 1, len = ranges.length; i < len; i++) {\n let range = ranges[i];\n if (range.startLineNumber > currentRangeEnd + 1) {\n result.push(new Range(currentRangeStart, 1, currentRangeEnd, 1));\n currentRangeStart = range.startLineNumber;\n currentRangeEnd = range.endLineNumber;\n }\n else if (range.endLineNumber > currentRangeEnd) {\n currentRangeEnd = range.endLineNumber;\n }\n }\n result.push(new Range(currentRangeStart, 1, currentRangeEnd, 1));\n return result;\n }\n setHiddenAreas(_ranges) {\n let newRanges = this._reduceRanges(_ranges);\n // BEGIN TODO@Martin: Please stop calling this method on each model change!\n let oldRanges = this.hiddenAreasIds.map((areaId) => this.model.getDecorationRange(areaId)).sort(Range.compareRangesUsingStarts);\n if (newRanges.length === oldRanges.length) {\n let hasDifference = false;\n for (let i = 0; i < newRanges.length; i++) {\n if (!newRanges[i].equalsRange(oldRanges[i])) {\n hasDifference = true;\n break;\n }\n }\n if (!hasDifference) {\n return false;\n }\n }\n // END TODO@Martin: Please stop calling this method on each model change!\n let newDecorations = [];\n for (const newRange of newRanges) {\n newDecorations.push({\n range: newRange,\n options: ModelDecorationOptions.EMPTY\n });\n }\n this.hiddenAreasIds = this.model.deltaDecorations(this.hiddenAreasIds, newDecorations);\n let hiddenAreas = newRanges;\n let hiddenAreaStart = 1, hiddenAreaEnd = 0;\n let hiddenAreaIdx = -1;\n let nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.lines.length + 2;\n let hasVisibleLine = false;\n for (let i = 0; i < this.lines.length; i++) {\n let lineNumber = i + 1;\n if (lineNumber === nextLineNumberToUpdateHiddenArea) {\n hiddenAreaIdx++;\n hiddenAreaStart = hiddenAreas[hiddenAreaIdx].startLineNumber;\n hiddenAreaEnd = hiddenAreas[hiddenAreaIdx].endLineNumber;\n nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.lines.length + 2;\n }\n let lineChanged = false;\n if (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd) {\n // Line should be hidden\n if (this.lines[i].isVisible()) {\n this.lines[i] = this.lines[i].setVisible(false);\n lineChanged = true;\n }\n }\n else {\n hasVisibleLine = true;\n // Line should be visible\n if (!this.lines[i].isVisible()) {\n this.lines[i] = this.lines[i].setVisible(true);\n lineChanged = true;\n }\n }\n if (lineChanged) {\n let newOutputLineCount = this.lines[i].getViewLineCount();\n this.prefixSumComputer.changeValue(i, newOutputLineCount);\n }\n }\n if (!hasVisibleLine) {\n // Cannot have everything be hidden => reveal everything!\n this.setHiddenAreas([]);\n }\n return true;\n }\n modelPositionIsVisible(modelLineNumber, _modelColumn) {\n if (modelLineNumber < 1 || modelLineNumber > this.lines.length) {\n // invalid arguments\n return false;\n }\n return this.lines[modelLineNumber - 1].isVisible();\n }\n getModelLineViewLineCount(modelLineNumber) {\n if (modelLineNumber < 1 || modelLineNumber > this.lines.length) {\n // invalid arguments\n return 1;\n }\n return this.lines[modelLineNumber - 1].getViewLineCount();\n }\n setTabSize(newTabSize) {\n if (this.tabSize === newTabSize) {\n return false;\n }\n this.tabSize = newTabSize;\n this._constructLines(/*resetHiddenAreas*/ false, null);\n return true;\n }\n setWrappingSettings(fontInfo, wrappingStrategy, wrappingColumn, wrappingIndent) {\n const equalFontInfo = this.fontInfo.equals(fontInfo);\n const equalWrappingStrategy = (this.wrappingStrategy === wrappingStrategy);\n const equalWrappingColumn = (this.wrappingColumn === wrappingColumn);\n const equalWrappingIndent = (this.wrappingIndent === wrappingIndent);\n if (equalFontInfo && equalWrappingStrategy && equalWrappingColumn && equalWrappingIndent) {\n return false;\n }\n const onlyWrappingColumnChanged = (equalFontInfo && equalWrappingStrategy && !equalWrappingColumn && equalWrappingIndent);\n this.fontInfo = fontInfo;\n this.wrappingStrategy = wrappingStrategy;\n this.wrappingColumn = wrappingColumn;\n this.wrappingIndent = wrappingIndent;\n let previousLineBreaks = null;\n if (onlyWrappingColumnChanged) {\n previousLineBreaks = [];\n for (let i = 0, len = this.lines.length; i < len; i++) {\n previousLineBreaks[i] = this.lines[i].getLineBreakData();\n }\n }\n this._constructLines(/*resetHiddenAreas*/ false, previousLineBreaks);\n return true;\n }\n createLineBreaksComputer() {\n const lineBreaksComputerFactory = (this.wrappingStrategy === 'advanced'\n ? this._domLineBreaksComputerFactory\n : this._monospaceLineBreaksComputerFactory);\n return lineBreaksComputerFactory.createLineBreaksComputer(this.fontInfo, this.tabSize, this.wrappingColumn, this.wrappingIndent);\n }\n onModelFlushed() {\n this._constructLines(/*resetHiddenAreas*/ true, null);\n }\n onModelLinesDeleted(versionId, fromLineNumber, toLineNumber) {\n if (versionId <= this._validModelVersionId) {\n // Here we check for versionId in case the lines were reconstructed in the meantime.\n // We don't want to apply stale change events on top of a newer read model state.\n return null;\n }\n let outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(fromLineNumber - 2) + 1);\n let outputToLineNumber = this.prefixSumComputer.getAccumulatedValue(toLineNumber - 1);\n this.lines.splice(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);\n this.prefixSumComputer.removeValues(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);\n return new viewEvents.ViewLinesDeletedEvent(outputFromLineNumber, outputToLineNumber);\n }\n onModelLinesInserted(versionId, fromLineNumber, _toLineNumber, lineBreaks) {\n if (versionId <= this._validModelVersionId) {\n // Here we check for versionId in case the lines were reconstructed in the meantime.\n // We don't want to apply stale change events on top of a newer read model state.\n return null;\n }\n // cannot use this.getHiddenAreas() because those decorations have already seen the effect of this model change\n const isInHiddenArea = (fromLineNumber > 2 && !this.lines[fromLineNumber - 2].isVisible());\n let outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(fromLineNumber - 2) + 1);\n let totalOutputLineCount = 0;\n let insertLines = [];\n let insertPrefixSumValues = [];\n for (let i = 0, len = lineBreaks.length; i < len; i++) {\n let line = createSplitLine(lineBreaks[i], !isInHiddenArea);\n insertLines.push(line);\n let outputLineCount = line.getViewLineCount();\n totalOutputLineCount += outputLineCount;\n insertPrefixSumValues[i] = outputLineCount;\n }\n // TODO@Alex: use arrays.arrayInsert\n this.lines = this.lines.slice(0, fromLineNumber - 1).concat(insertLines).concat(this.lines.slice(fromLineNumber - 1));\n this.prefixSumComputer.insertValues(fromLineNumber - 1, insertPrefixSumValues);\n return new viewEvents.ViewLinesInsertedEvent(outputFromLineNumber, outputFromLineNumber + totalOutputLineCount - 1);\n }\n onModelLineChanged(versionId, lineNumber, lineBreakData) {\n if (versionId <= this._validModelVersionId) {\n // Here we check for versionId in case the lines were reconstructed in the meantime.\n // We don't want to apply stale change events on top of a newer read model state.\n return [false, null, null, null];\n }\n let lineIndex = lineNumber - 1;\n let oldOutputLineCount = this.lines[lineIndex].getViewLineCount();\n let isVisible = this.lines[lineIndex].isVisible();\n let line = createSplitLine(lineBreakData, isVisible);\n this.lines[lineIndex] = line;\n let newOutputLineCount = this.lines[lineIndex].getViewLineCount();\n let lineMappingChanged = false;\n let changeFrom = 0;\n let changeTo = -1;\n let insertFrom = 0;\n let insertTo = -1;\n let deleteFrom = 0;\n let deleteTo = -1;\n if (oldOutputLineCount > newOutputLineCount) {\n changeFrom = (lineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(lineNumber - 2) + 1);\n changeTo = changeFrom + newOutputLineCount - 1;\n deleteFrom = changeTo + 1;\n deleteTo = deleteFrom + (oldOutputLineCount - newOutputLineCount) - 1;\n lineMappingChanged = true;\n }\n else if (oldOutputLineCount < newOutputLineCount) {\n changeFrom = (lineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(lineNumber - 2) + 1);\n changeTo = changeFrom + oldOutputLineCount - 1;\n insertFrom = changeTo + 1;\n insertTo = insertFrom + (newOutputLineCount - oldOutputLineCount) - 1;\n lineMappingChanged = true;\n }\n else {\n changeFrom = (lineNumber === 1 ? 1 : this.prefixSumComputer.getAccumulatedValue(lineNumber - 2) + 1);\n changeTo = changeFrom + newOutputLineCount - 1;\n }\n this.prefixSumComputer.changeValue(lineIndex, newOutputLineCount);\n const viewLinesChangedEvent = (changeFrom <= changeTo ? new viewEvents.ViewLinesChangedEvent(changeFrom, changeTo) : null);\n const viewLinesInsertedEvent = (insertFrom <= insertTo ? new viewEvents.ViewLinesInsertedEvent(insertFrom, insertTo) : null);\n const viewLinesDeletedEvent = (deleteFrom <= deleteTo ? new viewEvents.ViewLinesDeletedEvent(deleteFrom, deleteTo) : null);\n return [lineMappingChanged, viewLinesChangedEvent, viewLinesInsertedEvent, viewLinesDeletedEvent];\n }\n acceptVersionId(versionId) {\n this._validModelVersionId = versionId;\n if (this.lines.length === 1 && !this.lines[0].isVisible()) {\n // At least one line must be visible => reset hidden areas\n this.setHiddenAreas([]);\n }\n }\n getViewLineCount() {\n return this.prefixSumComputer.getTotalValue();\n }\n _toValidViewLineNumber(viewLineNumber) {\n if (viewLineNumber < 1) {\n return 1;\n }\n const viewLineCount = this.getViewLineCount();\n if (viewLineNumber > viewLineCount) {\n return viewLineCount;\n }\n return viewLineNumber | 0;\n }\n getActiveIndentGuide(viewLineNumber, minLineNumber, maxLineNumber) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n minLineNumber = this._toValidViewLineNumber(minLineNumber);\n maxLineNumber = this._toValidViewLineNumber(maxLineNumber);\n const modelPosition = this.convertViewPositionToModelPosition(viewLineNumber, this.getViewLineMinColumn(viewLineNumber));\n const modelMinPosition = this.convertViewPositionToModelPosition(minLineNumber, this.getViewLineMinColumn(minLineNumber));\n const modelMaxPosition = this.convertViewPositionToModelPosition(maxLineNumber, this.getViewLineMinColumn(maxLineNumber));\n const result = this.model.getActiveIndentGuide(modelPosition.lineNumber, modelMinPosition.lineNumber, modelMaxPosition.lineNumber);\n const viewStartPosition = this.convertModelPositionToViewPosition(result.startLineNumber, 1);\n const viewEndPosition = this.convertModelPositionToViewPosition(result.endLineNumber, this.model.getLineMaxColumn(result.endLineNumber));\n return {\n startLineNumber: viewStartPosition.lineNumber,\n endLineNumber: viewEndPosition.lineNumber,\n indent: result.indent\n };\n }\n getViewLinesIndentGuides(viewStartLineNumber, viewEndLineNumber) {\n viewStartLineNumber = this._toValidViewLineNumber(viewStartLineNumber);\n viewEndLineNumber = this._toValidViewLineNumber(viewEndLineNumber);\n const modelStart = this.convertViewPositionToModelPosition(viewStartLineNumber, this.getViewLineMinColumn(viewStartLineNumber));\n const modelEnd = this.convertViewPositionToModelPosition(viewEndLineNumber, this.getViewLineMaxColumn(viewEndLineNumber));\n let result = [];\n let resultRepeatCount = [];\n let resultRepeatOption = [];\n const modelStartLineIndex = modelStart.lineNumber - 1;\n const modelEndLineIndex = modelEnd.lineNumber - 1;\n let reqStart = null;\n for (let modelLineIndex = modelStartLineIndex; modelLineIndex <= modelEndLineIndex; modelLineIndex++) {\n const line = this.lines[modelLineIndex];\n if (line.isVisible()) {\n let viewLineStartIndex = line.getViewLineNumberOfModelPosition(0, modelLineIndex === modelStartLineIndex ? modelStart.column : 1);\n let viewLineEndIndex = line.getViewLineNumberOfModelPosition(0, this.model.getLineMaxColumn(modelLineIndex + 1));\n let count = viewLineEndIndex - viewLineStartIndex + 1;\n let option = 0 /* BlockNone */;\n if (count > 1 && line.getViewLineMinColumn(this.model, modelLineIndex + 1, viewLineEndIndex) === 1) {\n // wrapped lines should block indent guides\n option = (viewLineStartIndex === 0 ? 1 /* BlockSubsequent */ : 2 /* BlockAll */);\n }\n resultRepeatCount.push(count);\n resultRepeatOption.push(option);\n // merge into previous request\n if (reqStart === null) {\n reqStart = new Position(modelLineIndex + 1, 0);\n }\n }\n else {\n // hit invisible line => flush request\n if (reqStart !== null) {\n result = result.concat(this.model.getLinesIndentGuides(reqStart.lineNumber, modelLineIndex));\n reqStart = null;\n }\n }\n }\n if (reqStart !== null) {\n result = result.concat(this.model.getLinesIndentGuides(reqStart.lineNumber, modelEnd.lineNumber));\n reqStart = null;\n }\n const viewLineCount = viewEndLineNumber - viewStartLineNumber + 1;\n let viewIndents = new Array(viewLineCount);\n let currIndex = 0;\n for (let i = 0, len = result.length; i < len; i++) {\n let value = result[i];\n let count = Math.min(viewLineCount - currIndex, resultRepeatCount[i]);\n let option = resultRepeatOption[i];\n let blockAtIndex;\n if (option === 2 /* BlockAll */) {\n blockAtIndex = 0;\n }\n else if (option === 1 /* BlockSubsequent */) {\n blockAtIndex = 1;\n }\n else {\n blockAtIndex = count;\n }\n for (let j = 0; j < count; j++) {\n if (j === blockAtIndex) {\n value = 0;\n }\n viewIndents[currIndex++] = value;\n }\n }\n return viewIndents;\n }\n getViewLineContent(viewLineNumber) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n let r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n let lineIndex = r.index;\n let remainder = r.remainder;\n return this.lines[lineIndex].getViewLineContent(this.model, lineIndex + 1, remainder);\n }\n getViewLineLength(viewLineNumber) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n let r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n let lineIndex = r.index;\n let remainder = r.remainder;\n return this.lines[lineIndex].getViewLineLength(this.model, lineIndex + 1, remainder);\n }\n getViewLineMinColumn(viewLineNumber) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n let r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n let lineIndex = r.index;\n let remainder = r.remainder;\n return this.lines[lineIndex].getViewLineMinColumn(this.model, lineIndex + 1, remainder);\n }\n getViewLineMaxColumn(viewLineNumber) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n let r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n let lineIndex = r.index;\n let remainder = r.remainder;\n return this.lines[lineIndex].getViewLineMaxColumn(this.model, lineIndex + 1, remainder);\n }\n getViewLineData(viewLineNumber) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n let r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n let lineIndex = r.index;\n let remainder = r.remainder;\n return this.lines[lineIndex].getViewLineData(this.model, lineIndex + 1, remainder);\n }\n getViewLinesData(viewStartLineNumber, viewEndLineNumber, needed) {\n viewStartLineNumber = this._toValidViewLineNumber(viewStartLineNumber);\n viewEndLineNumber = this._toValidViewLineNumber(viewEndLineNumber);\n let start = this.prefixSumComputer.getIndexOf(viewStartLineNumber - 1);\n let viewLineNumber = viewStartLineNumber;\n let startModelLineIndex = start.index;\n let startRemainder = start.remainder;\n let result = [];\n for (let modelLineIndex = startModelLineIndex, len = this.model.getLineCount(); modelLineIndex < len; modelLineIndex++) {\n let line = this.lines[modelLineIndex];\n if (!line.isVisible()) {\n continue;\n }\n let fromViewLineIndex = (modelLineIndex === startModelLineIndex ? startRemainder : 0);\n let remainingViewLineCount = line.getViewLineCount() - fromViewLineIndex;\n let lastLine = false;\n if (viewLineNumber + remainingViewLineCount > viewEndLineNumber) {\n lastLine = true;\n remainingViewLineCount = viewEndLineNumber - viewLineNumber + 1;\n }\n let toViewLineIndex = fromViewLineIndex + remainingViewLineCount;\n line.getViewLinesData(this.model, modelLineIndex + 1, fromViewLineIndex, toViewLineIndex, viewLineNumber - viewStartLineNumber, needed, result);\n viewLineNumber += remainingViewLineCount;\n if (lastLine) {\n break;\n }\n }\n return result;\n }\n validateViewPosition(viewLineNumber, viewColumn, expectedModelPosition) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n let r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n let lineIndex = r.index;\n let remainder = r.remainder;\n let line = this.lines[lineIndex];\n let minColumn = line.getViewLineMinColumn(this.model, lineIndex + 1, remainder);\n let maxColumn = line.getViewLineMaxColumn(this.model, lineIndex + 1, remainder);\n if (viewColumn < minColumn) {\n viewColumn = minColumn;\n }\n if (viewColumn > maxColumn) {\n viewColumn = maxColumn;\n }\n let computedModelColumn = line.getModelColumnOfViewPosition(remainder, viewColumn);\n let computedModelPosition = this.model.validatePosition(new Position(lineIndex + 1, computedModelColumn));\n if (computedModelPosition.equals(expectedModelPosition)) {\n return new Position(viewLineNumber, viewColumn);\n }\n return this.convertModelPositionToViewPosition(expectedModelPosition.lineNumber, expectedModelPosition.column);\n }\n validateViewRange(viewRange, expectedModelRange) {\n const validViewStart = this.validateViewPosition(viewRange.startLineNumber, viewRange.startColumn, expectedModelRange.getStartPosition());\n const validViewEnd = this.validateViewPosition(viewRange.endLineNumber, viewRange.endColumn, expectedModelRange.getEndPosition());\n return new Range(validViewStart.lineNumber, validViewStart.column, validViewEnd.lineNumber, validViewEnd.column);\n }\n convertViewPositionToModelPosition(viewLineNumber, viewColumn) {\n viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n let r = this.prefixSumComputer.getIndexOf(viewLineNumber - 1);\n let lineIndex = r.index;\n let remainder = r.remainder;\n let inputColumn = this.lines[lineIndex].getModelColumnOfViewPosition(remainder, viewColumn);\n // console.log('out -> in ' + viewLineNumber + ',' + viewColumn + ' ===> ' + (lineIndex+1) + ',' + inputColumn);\n return this.model.validatePosition(new Position(lineIndex + 1, inputColumn));\n }\n convertViewRangeToModelRange(viewRange) {\n const start = this.convertViewPositionToModelPosition(viewRange.startLineNumber, viewRange.startColumn);\n const end = this.convertViewPositionToModelPosition(viewRange.endLineNumber, viewRange.endColumn);\n return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n convertModelPositionToViewPosition(_modelLineNumber, _modelColumn) {\n const validPosition = this.model.validatePosition(new Position(_modelLineNumber, _modelColumn));\n const inputLineNumber = validPosition.lineNumber;\n const inputColumn = validPosition.column;\n let lineIndex = inputLineNumber - 1, lineIndexChanged = false;\n while (lineIndex > 0 && !this.lines[lineIndex].isVisible()) {\n lineIndex--;\n lineIndexChanged = true;\n }\n if (lineIndex === 0 && !this.lines[lineIndex].isVisible()) {\n // Could not reach a real line\n // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + 1 + ',' + 1);\n return new Position(1, 1);\n }\n const deltaLineNumber = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1));\n let r;\n if (lineIndexChanged) {\n r = this.lines[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1));\n }\n else {\n r = this.lines[inputLineNumber - 1].getViewPositionOfModelPosition(deltaLineNumber, inputColumn);\n }\n // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + r.lineNumber + ',' + r);\n return r;\n }\n convertModelRangeToViewRange(modelRange) {\n let start = this.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn);\n let end = this.convertModelPositionToViewPosition(modelRange.endLineNumber, modelRange.endColumn);\n if (modelRange.startLineNumber === modelRange.endLineNumber && start.lineNumber !== end.lineNumber) {\n // This is a single line range that ends up taking more lines due to wrapping\n if (end.column === this.getViewLineMinColumn(end.lineNumber)) {\n // the end column lands on the first column of the next line\n return new Range(start.lineNumber, start.column, end.lineNumber - 1, this.getViewLineMaxColumn(end.lineNumber - 1));\n }\n }\n return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n _getViewLineNumberForModelPosition(inputLineNumber, inputColumn) {\n let lineIndex = inputLineNumber - 1;\n if (this.lines[lineIndex].isVisible()) {\n // this model line is visible\n const deltaLineNumber = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1));\n return this.lines[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber, inputColumn);\n }\n // this model line is not visible\n while (lineIndex > 0 && !this.lines[lineIndex].isVisible()) {\n lineIndex--;\n }\n if (lineIndex === 0 && !this.lines[lineIndex].isVisible()) {\n // Could not reach a real line\n return 1;\n }\n const deltaLineNumber = 1 + (lineIndex === 0 ? 0 : this.prefixSumComputer.getAccumulatedValue(lineIndex - 1));\n return this.lines[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1));\n }\n getAllOverviewRulerDecorations(ownerId, filterOutValidation, theme) {\n const decorations = this.model.getOverviewRulerDecorations(ownerId, filterOutValidation);\n const result = new OverviewRulerDecorations();\n for (const decoration of decorations) {\n const opts = decoration.options.overviewRuler;\n const lane = opts ? opts.position : 0;\n if (lane === 0) {\n continue;\n }\n const color = opts.getColor(theme);\n const viewStartLineNumber = this._getViewLineNumberForModelPosition(decoration.range.startLineNumber, decoration.range.startColumn);\n const viewEndLineNumber = this._getViewLineNumberForModelPosition(decoration.range.endLineNumber, decoration.range.endColumn);\n result.accept(color, viewStartLineNumber, viewEndLineNumber, lane);\n }\n return result.result;\n }\n getDecorationsInRange(range, ownerId, filterOutValidation) {\n const modelStart = this.convertViewPositionToModelPosition(range.startLineNumber, range.startColumn);\n const modelEnd = this.convertViewPositionToModelPosition(range.endLineNumber, range.endColumn);\n if (modelEnd.lineNumber - modelStart.lineNumber <= range.endLineNumber - range.startLineNumber) {\n // most likely there are no hidden lines => fast path\n // fetch decorations from column 1 to cover the case of wrapped lines that have whole line decorations at column 1\n return this.model.getDecorationsInRange(new Range(modelStart.lineNumber, 1, modelEnd.lineNumber, modelEnd.column), ownerId, filterOutValidation);\n }\n let result = [];\n const modelStartLineIndex = modelStart.lineNumber - 1;\n const modelEndLineIndex = modelEnd.lineNumber - 1;\n let reqStart = null;\n for (let modelLineIndex = modelStartLineIndex; modelLineIndex <= modelEndLineIndex; modelLineIndex++) {\n const line = this.lines[modelLineIndex];\n if (line.isVisible()) {\n // merge into previous request\n if (reqStart === null) {\n reqStart = new Position(modelLineIndex + 1, modelLineIndex === modelStartLineIndex ? modelStart.column : 1);\n }\n }\n else {\n // hit invisible line => flush request\n if (reqStart !== null) {\n const maxLineColumn = this.model.getLineMaxColumn(modelLineIndex);\n result = result.concat(this.model.getDecorationsInRange(new Range(reqStart.lineNumber, reqStart.column, modelLineIndex, maxLineColumn), ownerId, filterOutValidation));\n reqStart = null;\n }\n }\n }\n if (reqStart !== null) {\n result = result.concat(this.model.getDecorationsInRange(new Range(reqStart.lineNumber, reqStart.column, modelEnd.lineNumber, modelEnd.column), ownerId, filterOutValidation));\n reqStart = null;\n }\n result.sort((a, b) => {\n const res = Range.compareRangesUsingStarts(a.range, b.range);\n if (res === 0) {\n if (a.id < b.id) {\n return -1;\n }\n if (a.id > b.id) {\n return 1;\n }\n return 0;\n }\n return res;\n });\n // Eliminate duplicate decorations that might have intersected our visible ranges multiple times\n let finalResult = [], finalResultLen = 0;\n let prevDecId = null;\n for (const dec of result) {\n const decId = dec.id;\n if (prevDecId === decId) {\n // skip\n continue;\n }\n prevDecId = decId;\n finalResult[finalResultLen++] = dec;\n }\n return finalResult;\n }\n}\nclass VisibleIdentitySplitLine {\n constructor() { }\n isVisible() {\n return true;\n }\n setVisible(isVisible) {\n if (isVisible) {\n return this;\n }\n return InvisibleIdentitySplitLine.INSTANCE;\n }\n getLineBreakData() {\n return null;\n }\n getViewLineCount() {\n return 1;\n }\n getViewLineContent(model, modelLineNumber, _outputLineIndex) {\n return model.getLineContent(modelLineNumber);\n }\n getViewLineLength(model, modelLineNumber, _outputLineIndex) {\n return model.getLineLength(modelLineNumber);\n }\n getViewLineMinColumn(model, modelLineNumber, _outputLineIndex) {\n return model.getLineMinColumn(modelLineNumber);\n }\n getViewLineMaxColumn(model, modelLineNumber, _outputLineIndex) {\n return model.getLineMaxColumn(modelLineNumber);\n }\n getViewLineData(model, modelLineNumber, _outputLineIndex) {\n let lineTokens = model.getLineTokens(modelLineNumber);\n let lineContent = lineTokens.getLineContent();\n return new ViewLineData(lineContent, false, 1, lineContent.length + 1, 0, lineTokens.inflate());\n }\n getViewLinesData(model, modelLineNumber, _fromOuputLineIndex, _toOutputLineIndex, globalStartIndex, needed, result) {\n if (!needed[globalStartIndex]) {\n result[globalStartIndex] = null;\n return;\n }\n result[globalStartIndex] = this.getViewLineData(model, modelLineNumber, 0);\n }\n getModelColumnOfViewPosition(_outputLineIndex, outputColumn) {\n return outputColumn;\n }\n getViewPositionOfModelPosition(deltaLineNumber, inputColumn) {\n return new Position(deltaLineNumber, inputColumn);\n }\n getViewLineNumberOfModelPosition(deltaLineNumber, _inputColumn) {\n return deltaLineNumber;\n }\n}\nVisibleIdentitySplitLine.INSTANCE = new VisibleIdentitySplitLine();\nclass InvisibleIdentitySplitLine {\n constructor() { }\n isVisible() {\n return false;\n }\n setVisible(isVisible) {\n if (!isVisible) {\n return this;\n }\n return VisibleIdentitySplitLine.INSTANCE;\n }\n getLineBreakData() {\n return null;\n }\n getViewLineCount() {\n return 0;\n }\n getViewLineContent(_model, _modelLineNumber, _outputLineIndex) {\n throw new Error('Not supported');\n }\n getViewLineLength(_model, _modelLineNumber, _outputLineIndex) {\n throw new Error('Not supported');\n }\n getViewLineMinColumn(_model, _modelLineNumber, _outputLineIndex) {\n throw new Error('Not supported');\n }\n getViewLineMaxColumn(_model, _modelLineNumber, _outputLineIndex) {\n throw new Error('Not supported');\n }\n getViewLineData(_model, _modelLineNumber, _outputLineIndex) {\n throw new Error('Not supported');\n }\n getViewLinesData(_model, _modelLineNumber, _fromOuputLineIndex, _toOutputLineIndex, _globalStartIndex, _needed, _result) {\n throw new Error('Not supported');\n }\n getModelColumnOfViewPosition(_outputLineIndex, _outputColumn) {\n throw new Error('Not supported');\n }\n getViewPositionOfModelPosition(_deltaLineNumber, _inputColumn) {\n throw new Error('Not supported');\n }\n getViewLineNumberOfModelPosition(_deltaLineNumber, _inputColumn) {\n throw new Error('Not supported');\n }\n}\nInvisibleIdentitySplitLine.INSTANCE = new InvisibleIdentitySplitLine();\nexport class SplitLine {\n constructor(lineBreakData, isVisible) {\n this._lineBreakData = lineBreakData;\n this._isVisible = isVisible;\n }\n isVisible() {\n return this._isVisible;\n }\n setVisible(isVisible) {\n this._isVisible = isVisible;\n return this;\n }\n getLineBreakData() {\n return this._lineBreakData;\n }\n getViewLineCount() {\n if (!this._isVisible) {\n return 0;\n }\n return this._lineBreakData.breakOffsets.length;\n }\n getInputStartOffsetOfOutputLineIndex(outputLineIndex) {\n return LineBreakData.getInputOffsetOfOutputPosition(this._lineBreakData.breakOffsets, outputLineIndex, 0);\n }\n getInputEndOffsetOfOutputLineIndex(model, modelLineNumber, outputLineIndex) {\n if (outputLineIndex + 1 === this._lineBreakData.breakOffsets.length) {\n return model.getLineMaxColumn(modelLineNumber) - 1;\n }\n return LineBreakData.getInputOffsetOfOutputPosition(this._lineBreakData.breakOffsets, outputLineIndex + 1, 0);\n }\n getViewLineContent(model, modelLineNumber, outputLineIndex) {\n if (!this._isVisible) {\n throw new Error('Not supported');\n }\n let startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex);\n let endOffset = this.getInputEndOffsetOfOutputLineIndex(model, modelLineNumber, outputLineIndex);\n let r = model.getValueInRange({\n startLineNumber: modelLineNumber,\n startColumn: startOffset + 1,\n endLineNumber: modelLineNumber,\n endColumn: endOffset + 1\n });\n if (outputLineIndex > 0) {\n r = spaces(this._lineBreakData.wrappedTextIndentLength) + r;\n }\n return r;\n }\n getViewLineLength(model, modelLineNumber, outputLineIndex) {\n if (!this._isVisible) {\n throw new Error('Not supported');\n }\n let startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex);\n let endOffset = this.getInputEndOffsetOfOutputLineIndex(model, modelLineNumber, outputLineIndex);\n let r = endOffset - startOffset;\n if (outputLineIndex > 0) {\n r = this._lineBreakData.wrappedTextIndentLength + r;\n }\n return r;\n }\n getViewLineMinColumn(_model, _modelLineNumber, outputLineIndex) {\n if (!this._isVisible) {\n throw new Error('Not supported');\n }\n if (outputLineIndex > 0) {\n return this._lineBreakData.wrappedTextIndentLength + 1;\n }\n return 1;\n }\n getViewLineMaxColumn(model, modelLineNumber, outputLineIndex) {\n if (!this._isVisible) {\n throw new Error('Not supported');\n }\n return this.getViewLineContent(model, modelLineNumber, outputLineIndex).length + 1;\n }\n getViewLineData(model, modelLineNumber, outputLineIndex) {\n if (!this._isVisible) {\n throw new Error('Not supported');\n }\n let startOffset = this.getInputStartOffsetOfOutputLineIndex(outputLineIndex);\n let endOffset = this.getInputEndOffsetOfOutputLineIndex(model, modelLineNumber, outputLineIndex);\n let lineContent = model.getValueInRange({\n startLineNumber: modelLineNumber,\n startColumn: startOffset + 1,\n endLineNumber: modelLineNumber,\n endColumn: endOffset + 1\n });\n if (outputLineIndex > 0) {\n lineContent = spaces(this._lineBreakData.wrappedTextIndentLength) + lineContent;\n }\n let minColumn = (outputLineIndex > 0 ? this._lineBreakData.wrappedTextIndentLength + 1 : 1);\n let maxColumn = lineContent.length + 1;\n let continuesWithWrappedLine = (outputLineIndex + 1 < this.getViewLineCount());\n let deltaStartIndex = 0;\n if (outputLineIndex > 0) {\n deltaStartIndex = this._lineBreakData.wrappedTextIndentLength;\n }\n let lineTokens = model.getLineTokens(modelLineNumber);\n const startVisibleColumn = (outputLineIndex === 0 ? 0 : this._lineBreakData.breakOffsetsVisibleColumn[outputLineIndex - 1]);\n return new ViewLineData(lineContent, continuesWithWrappedLine, minColumn, maxColumn, startVisibleColumn, lineTokens.sliceAndInflate(startOffset, endOffset, deltaStartIndex));\n }\n getViewLinesData(model, modelLineNumber, fromOuputLineIndex, toOutputLineIndex, globalStartIndex, needed, result) {\n if (!this._isVisible) {\n throw new Error('Not supported');\n }\n for (let outputLineIndex = fromOuputLineIndex; outputLineIndex < toOutputLineIndex; outputLineIndex++) {\n let globalIndex = globalStartIndex + outputLineIndex - fromOuputLineIndex;\n if (!needed[globalIndex]) {\n result[globalIndex] = null;\n continue;\n }\n result[globalIndex] = this.getViewLineData(model, modelLineNumber, outputLineIndex);\n }\n }\n getModelColumnOfViewPosition(outputLineIndex, outputColumn) {\n if (!this._isVisible) {\n throw new Error('Not supported');\n }\n let adjustedColumn = outputColumn - 1;\n if (outputLineIndex > 0) {\n if (adjustedColumn < this._lineBreakData.wrappedTextIndentLength) {\n adjustedColumn = 0;\n }\n else {\n adjustedColumn -= this._lineBreakData.wrappedTextIndentLength;\n }\n }\n return LineBreakData.getInputOffsetOfOutputPosition(this._lineBreakData.breakOffsets, outputLineIndex, adjustedColumn) + 1;\n }\n getViewPositionOfModelPosition(deltaLineNumber, inputColumn) {\n if (!this._isVisible) {\n throw new Error('Not supported');\n }\n let r = LineBreakData.getOutputPositionOfInputOffset(this._lineBreakData.breakOffsets, inputColumn - 1);\n let outputLineIndex = r.outputLineIndex;\n let outputColumn = r.outputOffset + 1;\n if (outputLineIndex > 0) {\n outputColumn += this._lineBreakData.wrappedTextIndentLength;\n }\n //\t\tconsole.log('in -> out ' + deltaLineNumber + ',' + inputColumn + ' ===> ' + (deltaLineNumber+outputLineIndex) + ',' + outputColumn);\n return new Position(deltaLineNumber + outputLineIndex, outputColumn);\n }\n getViewLineNumberOfModelPosition(deltaLineNumber, inputColumn) {\n if (!this._isVisible) {\n throw new Error('Not supported');\n }\n const r = LineBreakData.getOutputPositionOfInputOffset(this._lineBreakData.breakOffsets, inputColumn - 1);\n return (deltaLineNumber + r.outputLineIndex);\n }\n}\nlet _spaces = [''];\nfunction spaces(count) {\n if (count >= _spaces.length) {\n for (let i = 1; i <= count; i++) {\n _spaces[i] = _makeSpaces(i);\n }\n }\n return _spaces[count];\n}\nfunction _makeSpaces(count) {\n return new Array(count + 1).join(' ');\n}\nfunction createSplitLine(lineBreakData, isVisible) {\n if (lineBreakData === null) {\n // No mapping needed\n if (isVisible) {\n return VisibleIdentitySplitLine.INSTANCE;\n }\n return InvisibleIdentitySplitLine.INSTANCE;\n }\n else {\n return new SplitLine(lineBreakData, isVisible);\n }\n}\nexport class IdentityCoordinatesConverter {\n constructor(lines) {\n this._lines = lines;\n }\n _validPosition(pos) {\n return this._lines.model.validatePosition(pos);\n }\n _validRange(range) {\n return this._lines.model.validateRange(range);\n }\n // View -> Model conversion and related methods\n convertViewPositionToModelPosition(viewPosition) {\n return this._validPosition(viewPosition);\n }\n convertViewRangeToModelRange(viewRange) {\n return this._validRange(viewRange);\n }\n validateViewPosition(_viewPosition, expectedModelPosition) {\n return this._validPosition(expectedModelPosition);\n }\n validateViewRange(_viewRange, expectedModelRange) {\n return this._validRange(expectedModelRange);\n }\n // Model -> View conversion and related methods\n convertModelPositionToViewPosition(modelPosition) {\n return this._validPosition(modelPosition);\n }\n convertModelRangeToViewRange(modelRange) {\n return this._validRange(modelRange);\n }\n modelPositionIsVisible(modelPosition) {\n const lineCount = this._lines.model.getLineCount();\n if (modelPosition.lineNumber < 1 || modelPosition.lineNumber > lineCount) {\n // invalid arguments\n return false;\n }\n return true;\n }\n getModelLineViewLineCount(modelLineNumber) {\n return 1;\n }\n}\nexport class IdentityLinesCollection {\n constructor(model) {\n this.model = model;\n }\n dispose() {\n }\n createCoordinatesConverter() {\n return new IdentityCoordinatesConverter(this);\n }\n getHiddenAreas() {\n return [];\n }\n setHiddenAreas(_ranges) {\n return false;\n }\n setTabSize(_newTabSize) {\n return false;\n }\n setWrappingSettings(_fontInfo, _wrappingStrategy, _wrappingColumn, _wrappingIndent) {\n return false;\n }\n createLineBreaksComputer() {\n let result = [];\n return {\n addRequest: (lineText, previousLineBreakData) => {\n result.push(null);\n },\n finalize: () => {\n return result;\n }\n };\n }\n onModelFlushed() {\n }\n onModelLinesDeleted(_versionId, fromLineNumber, toLineNumber) {\n return new viewEvents.ViewLinesDeletedEvent(fromLineNumber, toLineNumber);\n }\n onModelLinesInserted(_versionId, fromLineNumber, toLineNumber, lineBreaks) {\n return new viewEvents.ViewLinesInsertedEvent(fromLineNumber, toLineNumber);\n }\n onModelLineChanged(_versionId, lineNumber, lineBreakData) {\n return [false, new viewEvents.ViewLinesChangedEvent(lineNumber, lineNumber), null, null];\n }\n acceptVersionId(_versionId) {\n }\n getViewLineCount() {\n return this.model.getLineCount();\n }\n getActiveIndentGuide(viewLineNumber, _minLineNumber, _maxLineNumber) {\n return {\n startLineNumber: viewLineNumber,\n endLineNumber: viewLineNumber,\n indent: 0\n };\n }\n getViewLinesIndentGuides(viewStartLineNumber, viewEndLineNumber) {\n const viewLineCount = viewEndLineNumber - viewStartLineNumber + 1;\n let result = new Array(viewLineCount);\n for (let i = 0; i < viewLineCount; i++) {\n result[i] = 0;\n }\n return result;\n }\n getViewLineContent(viewLineNumber) {\n return this.model.getLineContent(viewLineNumber);\n }\n getViewLineLength(viewLineNumber) {\n return this.model.getLineLength(viewLineNumber);\n }\n getViewLineMinColumn(viewLineNumber) {\n return this.model.getLineMinColumn(viewLineNumber);\n }\n getViewLineMaxColumn(viewLineNumber) {\n return this.model.getLineMaxColumn(viewLineNumber);\n }\n getViewLineData(viewLineNumber) {\n let lineTokens = this.model.getLineTokens(viewLineNumber);\n let lineContent = lineTokens.getLineContent();\n return new ViewLineData(lineContent, false, 1, lineContent.length + 1, 0, lineTokens.inflate());\n }\n getViewLinesData(viewStartLineNumber, viewEndLineNumber, needed) {\n const lineCount = this.model.getLineCount();\n viewStartLineNumber = Math.min(Math.max(1, viewStartLineNumber), lineCount);\n viewEndLineNumber = Math.min(Math.max(1, viewEndLineNumber), lineCount);\n let result = [];\n for (let lineNumber = viewStartLineNumber; lineNumber <= viewEndLineNumber; lineNumber++) {\n let idx = lineNumber - viewStartLineNumber;\n if (!needed[idx]) {\n result[idx] = null;\n }\n result[idx] = this.getViewLineData(lineNumber);\n }\n return result;\n }\n getAllOverviewRulerDecorations(ownerId, filterOutValidation, theme) {\n const decorations = this.model.getOverviewRulerDecorations(ownerId, filterOutValidation);\n const result = new OverviewRulerDecorations();\n for (const decoration of decorations) {\n const opts = decoration.options.overviewRuler;\n const lane = opts ? opts.position : 0;\n if (lane === 0) {\n continue;\n }\n const color = opts.getColor(theme);\n const viewStartLineNumber = decoration.range.startLineNumber;\n const viewEndLineNumber = decoration.range.endLineNumber;\n result.accept(color, viewStartLineNumber, viewEndLineNumber, lane);\n }\n return result.result;\n }\n getDecorationsInRange(range, ownerId, filterOutValidation) {\n return this.model.getDecorationsInRange(range, ownerId, filterOutValidation);\n }\n}\nclass OverviewRulerDecorations {\n constructor() {\n this.result = Object.create(null);\n }\n accept(color, startLineNumber, endLineNumber, lane) {\n let prev = this.result[color];\n if (prev) {\n const prevLane = prev[prev.length - 3];\n const prevEndLineNumber = prev[prev.length - 1];\n if (prevLane === lane && prevEndLineNumber + 1 >= startLineNumber) {\n // merge into prev\n if (endLineNumber > prevEndLineNumber) {\n prev[prev.length - 1] = endLineNumber;\n }\n return;\n }\n // push\n prev.push(lane, startLineNumber, endLineNumber);\n }\n else {\n this.result[color] = [lane, startLineNumber, endLineNumber];\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { InlineDecoration, ViewModelDecoration } from './viewModel.js';\nimport { filterValidationDecorations } from '../config/editorOptions.js';\nexport class ViewModelDecorations {\n constructor(editorId, model, configuration, linesCollection, coordinatesConverter) {\n this.editorId = editorId;\n this.model = model;\n this.configuration = configuration;\n this._linesCollection = linesCollection;\n this._coordinatesConverter = coordinatesConverter;\n this._decorationsCache = Object.create(null);\n this._cachedModelDecorationsResolver = null;\n this._cachedModelDecorationsResolverViewRange = null;\n }\n _clearCachedModelDecorationsResolver() {\n this._cachedModelDecorationsResolver = null;\n this._cachedModelDecorationsResolverViewRange = null;\n }\n dispose() {\n this._decorationsCache = Object.create(null);\n this._clearCachedModelDecorationsResolver();\n }\n reset() {\n this._decorationsCache = Object.create(null);\n this._clearCachedModelDecorationsResolver();\n }\n onModelDecorationsChanged() {\n this._decorationsCache = Object.create(null);\n this._clearCachedModelDecorationsResolver();\n }\n onLineMappingChanged() {\n this._decorationsCache = Object.create(null);\n this._clearCachedModelDecorationsResolver();\n }\n _getOrCreateViewModelDecoration(modelDecoration) {\n const id = modelDecoration.id;\n let r = this._decorationsCache[id];\n if (!r) {\n const modelRange = modelDecoration.range;\n const options = modelDecoration.options;\n let viewRange;\n if (options.isWholeLine) {\n const start = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.startLineNumber, 1));\n const end = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.endLineNumber, this.model.getLineMaxColumn(modelRange.endLineNumber)));\n viewRange = new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n else {\n viewRange = this._coordinatesConverter.convertModelRangeToViewRange(modelRange);\n }\n r = new ViewModelDecoration(viewRange, options);\n this._decorationsCache[id] = r;\n }\n return r;\n }\n getDecorationsViewportData(viewRange) {\n let cacheIsValid = (this._cachedModelDecorationsResolver !== null);\n cacheIsValid = cacheIsValid && (viewRange.equalsRange(this._cachedModelDecorationsResolverViewRange));\n if (!cacheIsValid) {\n this._cachedModelDecorationsResolver = this._getDecorationsViewportData(viewRange);\n this._cachedModelDecorationsResolverViewRange = viewRange;\n }\n return this._cachedModelDecorationsResolver;\n }\n _getDecorationsViewportData(viewportRange) {\n const modelDecorations = this._linesCollection.getDecorationsInRange(viewportRange, this.editorId, filterValidationDecorations(this.configuration.options));\n const startLineNumber = viewportRange.startLineNumber;\n const endLineNumber = viewportRange.endLineNumber;\n let decorationsInViewport = [], decorationsInViewportLen = 0;\n let inlineDecorations = [];\n for (let j = startLineNumber; j <= endLineNumber; j++) {\n inlineDecorations[j - startLineNumber] = [];\n }\n for (let i = 0, len = modelDecorations.length; i < len; i++) {\n let modelDecoration = modelDecorations[i];\n let decorationOptions = modelDecoration.options;\n let viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);\n let viewRange = viewModelDecoration.range;\n decorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;\n if (decorationOptions.inlineClassName) {\n let inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, decorationOptions.inlineClassNameAffectsLetterSpacing ? 3 /* RegularAffectingLetterSpacing */ : 0 /* Regular */);\n let intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);\n let intersectedEndLineNumber = Math.min(endLineNumber, viewRange.endLineNumber);\n for (let j = intersectedStartLineNumber; j <= intersectedEndLineNumber; j++) {\n inlineDecorations[j - startLineNumber].push(inlineDecoration);\n }\n }\n if (decorationOptions.beforeContentClassName) {\n if (startLineNumber <= viewRange.startLineNumber && viewRange.startLineNumber <= endLineNumber) {\n let inlineDecoration = new InlineDecoration(new Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn), decorationOptions.beforeContentClassName, 1 /* Before */);\n inlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);\n }\n }\n if (decorationOptions.afterContentClassName) {\n if (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber) {\n let inlineDecoration = new InlineDecoration(new Range(viewRange.endLineNumber, viewRange.endColumn, viewRange.endLineNumber, viewRange.endColumn), decorationOptions.afterContentClassName, 2 /* After */);\n inlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);\n }\n }\n }\n return {\n decorations: decorationsInViewport,\n inlineDecorations: inlineDecorations\n };\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Color } from '../../../base/common/color.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { EDITOR_FONT_DEFAULTS, filterValidationDecorations } from '../config/editorOptions.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { TokenizationRegistry } from '../modes.js';\nimport { tokenizeLineToHTML } from '../modes/textToHtmlTokenizer.js';\nimport { MinimapTokensColorTracker } from './minimapTokensColorTracker.js';\nimport * as viewEvents from '../view/viewEvents.js';\nimport { ViewLayout } from '../viewLayout/viewLayout.js';\nimport { IdentityLinesCollection, SplitLinesCollection } from './splitLinesCollection.js';\nimport { MinimapLinesRenderingData, ViewLineRenderingData } from './viewModel.js';\nimport { ViewModelDecorations } from './viewModelDecorations.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { Cursor } from '../controller/cursor.js';\nimport { CursorConfiguration } from '../controller/cursorCommon.js';\nimport { ViewModelEventDispatcher, FocusChangedEvent, ScrollChangedEvent, ViewZonesChangedEvent, ReadOnlyEditAttemptEvent } from './viewModelEventDispatcher.js';\nconst USE_IDENTITY_LINES_COLLECTION = true;\nexport class ViewModel extends Disposable {\n constructor(editorId, configuration, model, domLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, scheduleAtNextAnimationFrame) {\n super();\n this._editorId = editorId;\n this._configuration = configuration;\n this.model = model;\n this._eventDispatcher = new ViewModelEventDispatcher();\n this.onEvent = this._eventDispatcher.onEvent;\n this.cursorConfig = new CursorConfiguration(this.model.getLanguageIdentifier(), this.model.getOptions(), this._configuration);\n this._tokenizeViewportSoon = this._register(new RunOnceScheduler(() => this.tokenizeViewport(), 50));\n this._updateConfigurationViewLineCount = this._register(new RunOnceScheduler(() => this._updateConfigurationViewLineCountNow(), 0));\n this._hasFocus = false;\n this._viewportStartLine = -1;\n this._viewportStartLineTrackedRange = null;\n this._viewportStartLineDelta = 0;\n if (USE_IDENTITY_LINES_COLLECTION && this.model.isTooLargeForTokenization()) {\n this._lines = new IdentityLinesCollection(this.model);\n }\n else {\n const options = this._configuration.options;\n const fontInfo = options.get(40 /* fontInfo */);\n const wrappingStrategy = options.get(121 /* wrappingStrategy */);\n const wrappingInfo = options.get(128 /* wrappingInfo */);\n const wrappingIndent = options.get(120 /* wrappingIndent */);\n this._lines = new SplitLinesCollection(this.model, domLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, fontInfo, this.model.getOptions().tabSize, wrappingStrategy, wrappingInfo.wrappingColumn, wrappingIndent);\n }\n this.coordinatesConverter = this._lines.createCoordinatesConverter();\n this._cursor = this._register(new Cursor(model, this, this.coordinatesConverter, this.cursorConfig));\n this.viewLayout = this._register(new ViewLayout(this._configuration, this.getLineCount(), scheduleAtNextAnimationFrame));\n this._register(this.viewLayout.onDidScroll((e) => {\n if (e.scrollTopChanged) {\n this._tokenizeViewportSoon.schedule();\n }\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewScrollChangedEvent(e));\n this._eventDispatcher.emitOutgoingEvent(new ScrollChangedEvent(e.oldScrollWidth, e.oldScrollLeft, e.oldScrollHeight, e.oldScrollTop, e.scrollWidth, e.scrollLeft, e.scrollHeight, e.scrollTop));\n }));\n this._register(this.viewLayout.onDidContentSizeChange((e) => {\n this._eventDispatcher.emitOutgoingEvent(e);\n }));\n this._decorations = new ViewModelDecorations(this._editorId, this.model, this._configuration, this._lines, this.coordinatesConverter);\n this._registerModelEvents();\n this._register(this._configuration.onDidChangeFast((e) => {\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n this._onConfigurationChanged(eventsCollector, e);\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n }));\n this._register(MinimapTokensColorTracker.getInstance().onDidChange(() => {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewTokensColorsChangedEvent());\n }));\n this._updateConfigurationViewLineCountNow();\n }\n dispose() {\n // First remove listeners, as disposing the lines might end up sending\n // model decoration changed events ... and we no longer care about them ...\n super.dispose();\n this._decorations.dispose();\n this._lines.dispose();\n this.invalidateMinimapColorCache();\n this._viewportStartLineTrackedRange = this.model._setTrackedRange(this._viewportStartLineTrackedRange, null, 1 /* NeverGrowsWhenTypingAtEdges */);\n this._eventDispatcher.dispose();\n }\n createLineBreaksComputer() {\n return this._lines.createLineBreaksComputer();\n }\n addViewEventHandler(eventHandler) {\n this._eventDispatcher.addViewEventHandler(eventHandler);\n }\n removeViewEventHandler(eventHandler) {\n this._eventDispatcher.removeViewEventHandler(eventHandler);\n }\n _updateConfigurationViewLineCountNow() {\n this._configuration.setViewLineCount(this._lines.getViewLineCount());\n }\n tokenizeViewport() {\n const linesViewportData = this.viewLayout.getLinesViewportData();\n const startPosition = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(linesViewportData.startLineNumber, 1));\n const endPosition = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(linesViewportData.endLineNumber, 1));\n this.model.tokenizeViewport(startPosition.lineNumber, endPosition.lineNumber);\n }\n setHasFocus(hasFocus) {\n this._hasFocus = hasFocus;\n this._cursor.setHasFocus(hasFocus);\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewFocusChangedEvent(hasFocus));\n this._eventDispatcher.emitOutgoingEvent(new FocusChangedEvent(!hasFocus, hasFocus));\n }\n onCompositionStart() {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewCompositionStartEvent());\n }\n onCompositionEnd() {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewCompositionEndEvent());\n }\n onDidColorThemeChange() {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewThemeChangedEvent());\n }\n _onConfigurationChanged(eventsCollector, e) {\n // We might need to restore the current centered view range, so save it (if available)\n let previousViewportStartModelPosition = null;\n if (this._viewportStartLine !== -1) {\n let previousViewportStartViewPosition = new Position(this._viewportStartLine, this.getLineMinColumn(this._viewportStartLine));\n previousViewportStartModelPosition = this.coordinatesConverter.convertViewPositionToModelPosition(previousViewportStartViewPosition);\n }\n let restorePreviousViewportStart = false;\n const options = this._configuration.options;\n const fontInfo = options.get(40 /* fontInfo */);\n const wrappingStrategy = options.get(121 /* wrappingStrategy */);\n const wrappingInfo = options.get(128 /* wrappingInfo */);\n const wrappingIndent = options.get(120 /* wrappingIndent */);\n if (this._lines.setWrappingSettings(fontInfo, wrappingStrategy, wrappingInfo.wrappingColumn, wrappingIndent)) {\n eventsCollector.emitViewEvent(new viewEvents.ViewFlushedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewLineMappingChangedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n this._cursor.onLineMappingChanged(eventsCollector);\n this._decorations.onLineMappingChanged();\n this.viewLayout.onFlushed(this.getLineCount());\n if (this.viewLayout.getCurrentScrollTop() !== 0) {\n // Never change the scroll position from 0 to something else...\n restorePreviousViewportStart = true;\n }\n this._updateConfigurationViewLineCount.schedule();\n }\n if (e.hasChanged(77 /* readOnly */)) {\n // Must read again all decorations due to readOnly filtering\n this._decorations.reset();\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n }\n eventsCollector.emitViewEvent(new viewEvents.ViewConfigurationChangedEvent(e));\n this.viewLayout.onConfigurationChanged(e);\n if (restorePreviousViewportStart && previousViewportStartModelPosition) {\n const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(previousViewportStartModelPosition);\n const viewPositionTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\n this.viewLayout.setScrollPosition({ scrollTop: viewPositionTop + this._viewportStartLineDelta }, 1 /* Immediate */);\n }\n if (CursorConfiguration.shouldRecreate(e)) {\n this.cursorConfig = new CursorConfiguration(this.model.getLanguageIdentifier(), this.model.getOptions(), this._configuration);\n this._cursor.updateConfiguration(this.cursorConfig);\n }\n }\n _registerModelEvents() {\n this._register(this.model.onDidChangeRawContentFast((e) => {\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n let hadOtherModelChange = false;\n let hadModelLineChangeThatChangedLineMapping = false;\n const changes = e.changes;\n const versionId = e.versionId;\n // Do a first pass to compute line mappings, and a second pass to actually interpret them\n const lineBreaksComputer = this._lines.createLineBreaksComputer();\n for (const change of changes) {\n switch (change.changeType) {\n case 4 /* LinesInserted */: {\n for (const line of change.detail) {\n lineBreaksComputer.addRequest(line, null);\n }\n break;\n }\n case 2 /* LineChanged */: {\n lineBreaksComputer.addRequest(change.detail, null);\n break;\n }\n }\n }\n const lineBreaks = lineBreaksComputer.finalize();\n let lineBreaksOffset = 0;\n for (const change of changes) {\n switch (change.changeType) {\n case 1 /* Flush */: {\n this._lines.onModelFlushed();\n eventsCollector.emitViewEvent(new viewEvents.ViewFlushedEvent());\n this._decorations.reset();\n this.viewLayout.onFlushed(this.getLineCount());\n hadOtherModelChange = true;\n break;\n }\n case 3 /* LinesDeleted */: {\n const linesDeletedEvent = this._lines.onModelLinesDeleted(versionId, change.fromLineNumber, change.toLineNumber);\n if (linesDeletedEvent !== null) {\n eventsCollector.emitViewEvent(linesDeletedEvent);\n this.viewLayout.onLinesDeleted(linesDeletedEvent.fromLineNumber, linesDeletedEvent.toLineNumber);\n }\n hadOtherModelChange = true;\n break;\n }\n case 4 /* LinesInserted */: {\n const insertedLineBreaks = lineBreaks.slice(lineBreaksOffset, lineBreaksOffset + change.detail.length);\n lineBreaksOffset += change.detail.length;\n const linesInsertedEvent = this._lines.onModelLinesInserted(versionId, change.fromLineNumber, change.toLineNumber, insertedLineBreaks);\n if (linesInsertedEvent !== null) {\n eventsCollector.emitViewEvent(linesInsertedEvent);\n this.viewLayout.onLinesInserted(linesInsertedEvent.fromLineNumber, linesInsertedEvent.toLineNumber);\n }\n hadOtherModelChange = true;\n break;\n }\n case 2 /* LineChanged */: {\n const changedLineBreakData = lineBreaks[lineBreaksOffset];\n lineBreaksOffset++;\n const [lineMappingChanged, linesChangedEvent, linesInsertedEvent, linesDeletedEvent] = this._lines.onModelLineChanged(versionId, change.lineNumber, changedLineBreakData);\n hadModelLineChangeThatChangedLineMapping = lineMappingChanged;\n if (linesChangedEvent) {\n eventsCollector.emitViewEvent(linesChangedEvent);\n }\n if (linesInsertedEvent) {\n eventsCollector.emitViewEvent(linesInsertedEvent);\n this.viewLayout.onLinesInserted(linesInsertedEvent.fromLineNumber, linesInsertedEvent.toLineNumber);\n }\n if (linesDeletedEvent) {\n eventsCollector.emitViewEvent(linesDeletedEvent);\n this.viewLayout.onLinesDeleted(linesDeletedEvent.fromLineNumber, linesDeletedEvent.toLineNumber);\n }\n break;\n }\n case 5 /* EOLChanged */: {\n // Nothing to do. The new version will be accepted below\n break;\n }\n }\n }\n this._lines.acceptVersionId(versionId);\n this.viewLayout.onHeightMaybeChanged();\n if (!hadOtherModelChange && hadModelLineChangeThatChangedLineMapping) {\n eventsCollector.emitViewEvent(new viewEvents.ViewLineMappingChangedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n this._cursor.onLineMappingChanged(eventsCollector);\n this._decorations.onLineMappingChanged();\n }\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n // Update the configuration and reset the centered view line\n this._viewportStartLine = -1;\n this._configuration.setMaxLineNumber(this.model.getLineCount());\n this._updateConfigurationViewLineCountNow();\n // Recover viewport\n if (!this._hasFocus && this.model.getAttachedEditorCount() >= 2 && this._viewportStartLineTrackedRange) {\n const modelRange = this.model._getTrackedRange(this._viewportStartLineTrackedRange);\n if (modelRange) {\n const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(modelRange.getStartPosition());\n const viewPositionTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\n this.viewLayout.setScrollPosition({ scrollTop: viewPositionTop + this._viewportStartLineDelta }, 1 /* Immediate */);\n }\n }\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n this._cursor.onModelContentChanged(eventsCollector, e);\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n }));\n this._register(this.model.onDidChangeTokens((e) => {\n let viewRanges = [];\n for (let j = 0, lenJ = e.ranges.length; j < lenJ; j++) {\n const modelRange = e.ranges[j];\n const viewStartLineNumber = this.coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.fromLineNumber, 1)).lineNumber;\n const viewEndLineNumber = this.coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.toLineNumber, this.model.getLineMaxColumn(modelRange.toLineNumber))).lineNumber;\n viewRanges[j] = {\n fromLineNumber: viewStartLineNumber,\n toLineNumber: viewEndLineNumber\n };\n }\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewTokensChangedEvent(viewRanges));\n if (e.tokenizationSupportChanged) {\n this._tokenizeViewportSoon.schedule();\n }\n }));\n this._register(this.model.onDidChangeLanguageConfiguration((e) => {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewLanguageConfigurationEvent());\n this.cursorConfig = new CursorConfiguration(this.model.getLanguageIdentifier(), this.model.getOptions(), this._configuration);\n this._cursor.updateConfiguration(this.cursorConfig);\n }));\n this._register(this.model.onDidChangeLanguage((e) => {\n this.cursorConfig = new CursorConfiguration(this.model.getLanguageIdentifier(), this.model.getOptions(), this._configuration);\n this._cursor.updateConfiguration(this.cursorConfig);\n }));\n this._register(this.model.onDidChangeOptions((e) => {\n // A tab size change causes a line mapping changed event => all view parts will repaint OK, no further event needed here\n if (this._lines.setTabSize(this.model.getOptions().tabSize)) {\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n eventsCollector.emitViewEvent(new viewEvents.ViewFlushedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewLineMappingChangedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n this._cursor.onLineMappingChanged(eventsCollector);\n this._decorations.onLineMappingChanged();\n this.viewLayout.onFlushed(this.getLineCount());\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n this._updateConfigurationViewLineCount.schedule();\n }\n this.cursorConfig = new CursorConfiguration(this.model.getLanguageIdentifier(), this.model.getOptions(), this._configuration);\n this._cursor.updateConfiguration(this.cursorConfig);\n }));\n this._register(this.model.onDidChangeDecorations((e) => {\n this._decorations.onModelDecorationsChanged();\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewDecorationsChangedEvent(e));\n }));\n }\n setHiddenAreas(ranges) {\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n let lineMappingChanged = this._lines.setHiddenAreas(ranges);\n if (lineMappingChanged) {\n eventsCollector.emitViewEvent(new viewEvents.ViewFlushedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewLineMappingChangedEvent());\n eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n this._cursor.onLineMappingChanged(eventsCollector);\n this._decorations.onLineMappingChanged();\n this.viewLayout.onFlushed(this.getLineCount());\n this.viewLayout.onHeightMaybeChanged();\n }\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n this._updateConfigurationViewLineCount.schedule();\n }\n getVisibleRangesPlusViewportAboveBelow() {\n const layoutInfo = this._configuration.options.get(127 /* layoutInfo */);\n const lineHeight = this._configuration.options.get(55 /* lineHeight */);\n const linesAround = Math.max(20, Math.round(layoutInfo.height / lineHeight));\n const partialData = this.viewLayout.getLinesViewportData();\n const startViewLineNumber = Math.max(1, partialData.completelyVisibleStartLineNumber - linesAround);\n const endViewLineNumber = Math.min(this.getLineCount(), partialData.completelyVisibleEndLineNumber + linesAround);\n return this._toModelVisibleRanges(new Range(startViewLineNumber, this.getLineMinColumn(startViewLineNumber), endViewLineNumber, this.getLineMaxColumn(endViewLineNumber)));\n }\n getVisibleRanges() {\n const visibleViewRange = this.getCompletelyVisibleViewRange();\n return this._toModelVisibleRanges(visibleViewRange);\n }\n _toModelVisibleRanges(visibleViewRange) {\n const visibleRange = this.coordinatesConverter.convertViewRangeToModelRange(visibleViewRange);\n const hiddenAreas = this._lines.getHiddenAreas();\n if (hiddenAreas.length === 0) {\n return [visibleRange];\n }\n let result = [], resultLen = 0;\n let startLineNumber = visibleRange.startLineNumber;\n let startColumn = visibleRange.startColumn;\n let endLineNumber = visibleRange.endLineNumber;\n let endColumn = visibleRange.endColumn;\n for (let i = 0, len = hiddenAreas.length; i < len; i++) {\n const hiddenStartLineNumber = hiddenAreas[i].startLineNumber;\n const hiddenEndLineNumber = hiddenAreas[i].endLineNumber;\n if (hiddenEndLineNumber < startLineNumber) {\n continue;\n }\n if (hiddenStartLineNumber > endLineNumber) {\n continue;\n }\n if (startLineNumber < hiddenStartLineNumber) {\n result[resultLen++] = new Range(startLineNumber, startColumn, hiddenStartLineNumber - 1, this.model.getLineMaxColumn(hiddenStartLineNumber - 1));\n }\n startLineNumber = hiddenEndLineNumber + 1;\n startColumn = 1;\n }\n if (startLineNumber < endLineNumber || (startLineNumber === endLineNumber && startColumn < endColumn)) {\n result[resultLen++] = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n return result;\n }\n getCompletelyVisibleViewRange() {\n const partialData = this.viewLayout.getLinesViewportData();\n const startViewLineNumber = partialData.completelyVisibleStartLineNumber;\n const endViewLineNumber = partialData.completelyVisibleEndLineNumber;\n return new Range(startViewLineNumber, this.getLineMinColumn(startViewLineNumber), endViewLineNumber, this.getLineMaxColumn(endViewLineNumber));\n }\n getCompletelyVisibleViewRangeAtScrollTop(scrollTop) {\n const partialData = this.viewLayout.getLinesViewportDataAtScrollTop(scrollTop);\n const startViewLineNumber = partialData.completelyVisibleStartLineNumber;\n const endViewLineNumber = partialData.completelyVisibleEndLineNumber;\n return new Range(startViewLineNumber, this.getLineMinColumn(startViewLineNumber), endViewLineNumber, this.getLineMaxColumn(endViewLineNumber));\n }\n saveState() {\n const compatViewState = this.viewLayout.saveState();\n const scrollTop = compatViewState.scrollTop;\n const firstViewLineNumber = this.viewLayout.getLineNumberAtVerticalOffset(scrollTop);\n const firstPosition = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(firstViewLineNumber, this.getLineMinColumn(firstViewLineNumber)));\n const firstPositionDeltaTop = this.viewLayout.getVerticalOffsetForLineNumber(firstViewLineNumber) - scrollTop;\n return {\n scrollLeft: compatViewState.scrollLeft,\n firstPosition: firstPosition,\n firstPositionDeltaTop: firstPositionDeltaTop\n };\n }\n reduceRestoreState(state) {\n if (typeof state.firstPosition === 'undefined') {\n // This is a view state serialized by an older version\n return this._reduceRestoreStateCompatibility(state);\n }\n const modelPosition = this.model.validatePosition(state.firstPosition);\n const viewPosition = this.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\n const scrollTop = this.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber) - state.firstPositionDeltaTop;\n return {\n scrollLeft: state.scrollLeft,\n scrollTop: scrollTop\n };\n }\n _reduceRestoreStateCompatibility(state) {\n return {\n scrollLeft: state.scrollLeft,\n scrollTop: state.scrollTopWithoutViewZones\n };\n }\n getTabSize() {\n return this.model.getOptions().tabSize;\n }\n getTextModelOptions() {\n return this.model.getOptions();\n }\n getLineCount() {\n return this._lines.getViewLineCount();\n }\n /**\n * Gives a hint that a lot of requests are about to come in for these line numbers.\n */\n setViewport(startLineNumber, endLineNumber, centeredLineNumber) {\n this._viewportStartLine = startLineNumber;\n let position = this.coordinatesConverter.convertViewPositionToModelPosition(new Position(startLineNumber, this.getLineMinColumn(startLineNumber)));\n this._viewportStartLineTrackedRange = this.model._setTrackedRange(this._viewportStartLineTrackedRange, new Range(position.lineNumber, position.column, position.lineNumber, position.column), 1 /* NeverGrowsWhenTypingAtEdges */);\n const viewportStartLineTop = this.viewLayout.getVerticalOffsetForLineNumber(startLineNumber);\n const scrollTop = this.viewLayout.getCurrentScrollTop();\n this._viewportStartLineDelta = scrollTop - viewportStartLineTop;\n }\n getActiveIndentGuide(lineNumber, minLineNumber, maxLineNumber) {\n return this._lines.getActiveIndentGuide(lineNumber, minLineNumber, maxLineNumber);\n }\n getLinesIndentGuides(startLineNumber, endLineNumber) {\n return this._lines.getViewLinesIndentGuides(startLineNumber, endLineNumber);\n }\n getLineContent(lineNumber) {\n return this._lines.getViewLineContent(lineNumber);\n }\n getLineLength(lineNumber) {\n return this._lines.getViewLineLength(lineNumber);\n }\n getLineMinColumn(lineNumber) {\n return this._lines.getViewLineMinColumn(lineNumber);\n }\n getLineMaxColumn(lineNumber) {\n return this._lines.getViewLineMaxColumn(lineNumber);\n }\n getLineFirstNonWhitespaceColumn(lineNumber) {\n const result = strings.firstNonWhitespaceIndex(this.getLineContent(lineNumber));\n if (result === -1) {\n return 0;\n }\n return result + 1;\n }\n getLineLastNonWhitespaceColumn(lineNumber) {\n const result = strings.lastNonWhitespaceIndex(this.getLineContent(lineNumber));\n if (result === -1) {\n return 0;\n }\n return result + 2;\n }\n getDecorationsInViewport(visibleRange) {\n return this._decorations.getDecorationsViewportData(visibleRange).decorations;\n }\n getViewLineRenderingData(visibleRange, lineNumber) {\n let mightContainRTL = this.model.mightContainRTL();\n let mightContainNonBasicASCII = this.model.mightContainNonBasicASCII();\n let tabSize = this.getTabSize();\n let lineData = this._lines.getViewLineData(lineNumber);\n let allInlineDecorations = this._decorations.getDecorationsViewportData(visibleRange).inlineDecorations;\n let inlineDecorations = allInlineDecorations[lineNumber - visibleRange.startLineNumber];\n return new ViewLineRenderingData(lineData.minColumn, lineData.maxColumn, lineData.content, lineData.continuesWithWrappedLine, mightContainRTL, mightContainNonBasicASCII, lineData.tokens, inlineDecorations, tabSize, lineData.startVisibleColumn);\n }\n getViewLineData(lineNumber) {\n return this._lines.getViewLineData(lineNumber);\n }\n getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed) {\n let result = this._lines.getViewLinesData(startLineNumber, endLineNumber, needed);\n return new MinimapLinesRenderingData(this.getTabSize(), result);\n }\n getAllOverviewRulerDecorations(theme) {\n return this._lines.getAllOverviewRulerDecorations(this._editorId, filterValidationDecorations(this._configuration.options), theme);\n }\n invalidateOverviewRulerColorCache() {\n const decorations = this.model.getOverviewRulerDecorations();\n for (const decoration of decorations) {\n const opts = decoration.options.overviewRuler;\n if (opts) {\n opts.invalidateCachedColor();\n }\n }\n }\n invalidateMinimapColorCache() {\n const decorations = this.model.getAllDecorations();\n for (const decoration of decorations) {\n const opts = decoration.options.minimap;\n if (opts) {\n opts.invalidateCachedColor();\n }\n }\n }\n getValueInRange(range, eol) {\n const modelRange = this.coordinatesConverter.convertViewRangeToModelRange(range);\n return this.model.getValueInRange(modelRange, eol);\n }\n getModelLineMaxColumn(modelLineNumber) {\n return this.model.getLineMaxColumn(modelLineNumber);\n }\n validateModelPosition(position) {\n return this.model.validatePosition(position);\n }\n validateModelRange(range) {\n return this.model.validateRange(range);\n }\n deduceModelPositionRelativeToViewPosition(viewAnchorPosition, deltaOffset, lineFeedCnt) {\n const modelAnchor = this.coordinatesConverter.convertViewPositionToModelPosition(viewAnchorPosition);\n if (this.model.getEOL().length === 2) {\n // This model uses CRLF, so the delta must take that into account\n if (deltaOffset < 0) {\n deltaOffset -= lineFeedCnt;\n }\n else {\n deltaOffset += lineFeedCnt;\n }\n }\n const modelAnchorOffset = this.model.getOffsetAt(modelAnchor);\n const resultOffset = modelAnchorOffset + deltaOffset;\n return this.model.getPositionAt(resultOffset);\n }\n getEOL() {\n return this.model.getEOL();\n }\n getPlainTextToCopy(modelRanges, emptySelectionClipboard, forceCRLF) {\n const newLineCharacter = forceCRLF ? '\\r\\n' : this.model.getEOL();\n modelRanges = modelRanges.slice(0);\n modelRanges.sort(Range.compareRangesUsingStarts);\n let hasEmptyRange = false;\n let hasNonEmptyRange = false;\n for (const range of modelRanges) {\n if (range.isEmpty()) {\n hasEmptyRange = true;\n }\n else {\n hasNonEmptyRange = true;\n }\n }\n if (!hasNonEmptyRange) {\n // all ranges are empty\n if (!emptySelectionClipboard) {\n return '';\n }\n const modelLineNumbers = modelRanges.map((r) => r.startLineNumber);\n let result = '';\n for (let i = 0; i < modelLineNumbers.length; i++) {\n if (i > 0 && modelLineNumbers[i - 1] === modelLineNumbers[i]) {\n continue;\n }\n result += this.model.getLineContent(modelLineNumbers[i]) + newLineCharacter;\n }\n return result;\n }\n if (hasEmptyRange && emptySelectionClipboard) {\n // mixed empty selections and non-empty selections\n let result = [];\n let prevModelLineNumber = 0;\n for (const modelRange of modelRanges) {\n const modelLineNumber = modelRange.startLineNumber;\n if (modelRange.isEmpty()) {\n if (modelLineNumber !== prevModelLineNumber) {\n result.push(this.model.getLineContent(modelLineNumber));\n }\n }\n else {\n result.push(this.model.getValueInRange(modelRange, forceCRLF ? 2 /* CRLF */ : 0 /* TextDefined */));\n }\n prevModelLineNumber = modelLineNumber;\n }\n return result.length === 1 ? result[0] : result;\n }\n let result = [];\n for (const modelRange of modelRanges) {\n if (!modelRange.isEmpty()) {\n result.push(this.model.getValueInRange(modelRange, forceCRLF ? 2 /* CRLF */ : 0 /* TextDefined */));\n }\n }\n return result.length === 1 ? result[0] : result;\n }\n getRichTextToCopy(modelRanges, emptySelectionClipboard) {\n const languageId = this.model.getLanguageIdentifier();\n if (languageId.id === 1 /* PlainText */) {\n return null;\n }\n if (modelRanges.length !== 1) {\n // no multiple selection support at this time\n return null;\n }\n let range = modelRanges[0];\n if (range.isEmpty()) {\n if (!emptySelectionClipboard) {\n // nothing to copy\n return null;\n }\n const lineNumber = range.startLineNumber;\n range = new Range(lineNumber, this.model.getLineMinColumn(lineNumber), lineNumber, this.model.getLineMaxColumn(lineNumber));\n }\n const fontInfo = this._configuration.options.get(40 /* fontInfo */);\n const colorMap = this._getColorMap();\n const hasBadChars = (/[:;\\\\\\/<>]/.test(fontInfo.fontFamily));\n const useDefaultFontFamily = (hasBadChars || fontInfo.fontFamily === EDITOR_FONT_DEFAULTS.fontFamily);\n let fontFamily;\n if (useDefaultFontFamily) {\n fontFamily = EDITOR_FONT_DEFAULTS.fontFamily;\n }\n else {\n fontFamily = fontInfo.fontFamily;\n fontFamily = fontFamily.replace(/\"/g, '\\'');\n const hasQuotesOrIsList = /[,']/.test(fontFamily);\n if (!hasQuotesOrIsList) {\n const needsQuotes = /[+ ]/.test(fontFamily);\n if (needsQuotes) {\n fontFamily = `'${fontFamily}'`;\n }\n }\n fontFamily = `${fontFamily}, ${EDITOR_FONT_DEFAULTS.fontFamily}`;\n }\n return {\n mode: languageId.language,\n html: (`<div style=\"`\n + `color: ${colorMap[1 /* DefaultForeground */]};`\n + `background-color: ${colorMap[2 /* DefaultBackground */]};`\n + `font-family: ${fontFamily};`\n + `font-weight: ${fontInfo.fontWeight};`\n + `font-size: ${fontInfo.fontSize}px;`\n + `line-height: ${fontInfo.lineHeight}px;`\n + `white-space: pre;`\n + `\">`\n + this._getHTMLToCopy(range, colorMap)\n + '</div>')\n };\n }\n _getHTMLToCopy(modelRange, colorMap) {\n const startLineNumber = modelRange.startLineNumber;\n const startColumn = modelRange.startColumn;\n const endLineNumber = modelRange.endLineNumber;\n const endColumn = modelRange.endColumn;\n const tabSize = this.getTabSize();\n let result = '';\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n const lineTokens = this.model.getLineTokens(lineNumber);\n const lineContent = lineTokens.getLineContent();\n const startOffset = (lineNumber === startLineNumber ? startColumn - 1 : 0);\n const endOffset = (lineNumber === endLineNumber ? endColumn - 1 : lineContent.length);\n if (lineContent === '') {\n result += '<br>';\n }\n else {\n result += tokenizeLineToHTML(lineContent, lineTokens.inflate(), colorMap, startOffset, endOffset, tabSize, platform.isWindows);\n }\n }\n return result;\n }\n _getColorMap() {\n let colorMap = TokenizationRegistry.getColorMap();\n let result = ['#000000'];\n if (colorMap) {\n for (let i = 1, len = colorMap.length; i < len; i++) {\n result[i] = Color.Format.CSS.formatHex(colorMap[i]);\n }\n }\n return result;\n }\n //#region model\n pushStackElement() {\n this.model.pushStackElement();\n }\n //#endregion\n //#region cursor operations\n getPrimaryCursorState() {\n return this._cursor.getPrimaryCursorState();\n }\n getLastAddedCursorIndex() {\n return this._cursor.getLastAddedCursorIndex();\n }\n getCursorStates() {\n return this._cursor.getCursorStates();\n }\n setCursorStates(source, reason, states) {\n this._withViewEventsCollector(eventsCollector => this._cursor.setStates(eventsCollector, source, reason, states));\n }\n getCursorColumnSelectData() {\n return this._cursor.getCursorColumnSelectData();\n }\n getCursorAutoClosedCharacters() {\n return this._cursor.getAutoClosedCharacters();\n }\n setCursorColumnSelectData(columnSelectData) {\n this._cursor.setCursorColumnSelectData(columnSelectData);\n }\n getPrevEditOperationType() {\n return this._cursor.getPrevEditOperationType();\n }\n setPrevEditOperationType(type) {\n this._cursor.setPrevEditOperationType(type);\n }\n getSelection() {\n return this._cursor.getSelection();\n }\n getSelections() {\n return this._cursor.getSelections();\n }\n getPosition() {\n return this._cursor.getPrimaryCursorState().modelState.position;\n }\n setSelections(source, selections, reason = 0 /* NotSet */) {\n this._withViewEventsCollector(eventsCollector => this._cursor.setSelections(eventsCollector, source, selections, reason));\n }\n saveCursorState() {\n return this._cursor.saveState();\n }\n restoreCursorState(states) {\n this._withViewEventsCollector(eventsCollector => this._cursor.restoreState(eventsCollector, states));\n }\n _executeCursorEdit(callback) {\n if (this._cursor.context.cursorConfig.readOnly) {\n // we cannot edit when read only...\n this._eventDispatcher.emitOutgoingEvent(new ReadOnlyEditAttemptEvent());\n return;\n }\n this._withViewEventsCollector(callback);\n }\n executeEdits(source, edits, cursorStateComputer) {\n this._executeCursorEdit(eventsCollector => this._cursor.executeEdits(eventsCollector, source, edits, cursorStateComputer));\n }\n startComposition() {\n this._cursor.setIsDoingComposition(true);\n this._executeCursorEdit(eventsCollector => this._cursor.startComposition(eventsCollector));\n }\n endComposition(source) {\n this._cursor.setIsDoingComposition(false);\n this._executeCursorEdit(eventsCollector => this._cursor.endComposition(eventsCollector, source));\n }\n type(text, source) {\n this._executeCursorEdit(eventsCollector => this._cursor.type(eventsCollector, text, source));\n }\n compositionType(text, replacePrevCharCnt, replaceNextCharCnt, positionDelta, source) {\n this._executeCursorEdit(eventsCollector => this._cursor.compositionType(eventsCollector, text, replacePrevCharCnt, replaceNextCharCnt, positionDelta, source));\n }\n paste(text, pasteOnNewLine, multicursorText, source) {\n this._executeCursorEdit(eventsCollector => this._cursor.paste(eventsCollector, text, pasteOnNewLine, multicursorText, source));\n }\n cut(source) {\n this._executeCursorEdit(eventsCollector => this._cursor.cut(eventsCollector, source));\n }\n executeCommand(command, source) {\n this._executeCursorEdit(eventsCollector => this._cursor.executeCommand(eventsCollector, command, source));\n }\n executeCommands(commands, source) {\n this._executeCursorEdit(eventsCollector => this._cursor.executeCommands(eventsCollector, commands, source));\n }\n revealPrimaryCursor(source, revealHorizontal) {\n this._withViewEventsCollector(eventsCollector => this._cursor.revealPrimary(eventsCollector, source, revealHorizontal, 0 /* Smooth */));\n }\n revealTopMostCursor(source) {\n const viewPosition = this._cursor.getTopMostViewPosition();\n const viewRange = new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column);\n this._withViewEventsCollector(eventsCollector => eventsCollector.emitViewEvent(new viewEvents.ViewRevealRangeRequestEvent(source, viewRange, null, 0 /* Simple */, true, 0 /* Smooth */)));\n }\n revealBottomMostCursor(source) {\n const viewPosition = this._cursor.getBottomMostViewPosition();\n const viewRange = new Range(viewPosition.lineNumber, viewPosition.column, viewPosition.lineNumber, viewPosition.column);\n this._withViewEventsCollector(eventsCollector => eventsCollector.emitViewEvent(new viewEvents.ViewRevealRangeRequestEvent(source, viewRange, null, 0 /* Simple */, true, 0 /* Smooth */)));\n }\n revealRange(source, revealHorizontal, viewRange, verticalType, scrollType) {\n this._withViewEventsCollector(eventsCollector => eventsCollector.emitViewEvent(new viewEvents.ViewRevealRangeRequestEvent(source, viewRange, null, verticalType, revealHorizontal, scrollType)));\n }\n //#endregion\n //#region viewLayout\n getVerticalOffsetForLineNumber(viewLineNumber) {\n return this.viewLayout.getVerticalOffsetForLineNumber(viewLineNumber);\n }\n getScrollTop() {\n return this.viewLayout.getCurrentScrollTop();\n }\n setScrollTop(newScrollTop, scrollType) {\n this.viewLayout.setScrollPosition({ scrollTop: newScrollTop }, scrollType);\n }\n setScrollPosition(position, type) {\n this.viewLayout.setScrollPosition(position, type);\n }\n deltaScrollNow(deltaScrollLeft, deltaScrollTop) {\n this.viewLayout.deltaScrollNow(deltaScrollLeft, deltaScrollTop);\n }\n changeWhitespace(callback) {\n const hadAChange = this.viewLayout.changeWhitespace(callback);\n if (hadAChange) {\n this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewZonesChangedEvent());\n this._eventDispatcher.emitOutgoingEvent(new ViewZonesChangedEvent());\n }\n }\n setMaxLineWidth(maxLineWidth) {\n this.viewLayout.setMaxLineWidth(maxLineWidth);\n }\n //#endregion\n _withViewEventsCollector(callback) {\n try {\n const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n callback(eventsCollector);\n }\n finally {\n this._eventDispatcher.endEmitViewEvents();\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { CharacterClassifier } from '../core/characterClassifier.js';\nimport { LineBreakData } from './viewModel.js';\nclass WrappingCharacterClassifier extends CharacterClassifier {\n constructor(BREAK_BEFORE, BREAK_AFTER) {\n super(0 /* NONE */);\n for (let i = 0; i < BREAK_BEFORE.length; i++) {\n this.set(BREAK_BEFORE.charCodeAt(i), 1 /* BREAK_BEFORE */);\n }\n for (let i = 0; i < BREAK_AFTER.length; i++) {\n this.set(BREAK_AFTER.charCodeAt(i), 2 /* BREAK_AFTER */);\n }\n }\n get(charCode) {\n if (charCode >= 0 && charCode < 256) {\n return this._asciiMap[charCode];\n }\n else {\n // Initialize CharacterClass.BREAK_IDEOGRAPHIC for these Unicode ranges:\n // 1. CJK Unified Ideographs (0x4E00 -- 0x9FFF)\n // 2. CJK Unified Ideographs Extension A (0x3400 -- 0x4DBF)\n // 3. Hiragana and Katakana (0x3040 -- 0x30FF)\n if ((charCode >= 0x3040 && charCode <= 0x30FF)\n || (charCode >= 0x3400 && charCode <= 0x4DBF)\n || (charCode >= 0x4E00 && charCode <= 0x9FFF)) {\n return 3 /* BREAK_IDEOGRAPHIC */;\n }\n return (this._map.get(charCode) || this._defaultValue);\n }\n }\n}\nlet arrPool1 = [];\nlet arrPool2 = [];\nexport class MonospaceLineBreaksComputerFactory {\n constructor(breakBeforeChars, breakAfterChars) {\n this.classifier = new WrappingCharacterClassifier(breakBeforeChars, breakAfterChars);\n }\n static create(options) {\n return new MonospaceLineBreaksComputerFactory(options.get(116 /* wordWrapBreakBeforeCharacters */), options.get(115 /* wordWrapBreakAfterCharacters */));\n }\n createLineBreaksComputer(fontInfo, tabSize, wrappingColumn, wrappingIndent) {\n tabSize = tabSize | 0; //@perf\n wrappingColumn = +wrappingColumn; //@perf\n let requests = [];\n let previousBreakingData = [];\n return {\n addRequest: (lineText, previousLineBreakData) => {\n requests.push(lineText);\n previousBreakingData.push(previousLineBreakData);\n },\n finalize: () => {\n const columnsForFullWidthChar = fontInfo.typicalFullwidthCharacterWidth / fontInfo.typicalHalfwidthCharacterWidth; //@perf\n let result = [];\n for (let i = 0, len = requests.length; i < len; i++) {\n const previousLineBreakData = previousBreakingData[i];\n if (previousLineBreakData) {\n result[i] = createLineBreaksFromPreviousLineBreaks(this.classifier, previousLineBreakData, requests[i], tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent);\n }\n else {\n result[i] = createLineBreaks(this.classifier, requests[i], tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent);\n }\n }\n arrPool1.length = 0;\n arrPool2.length = 0;\n return result;\n }\n };\n }\n}\nfunction createLineBreaksFromPreviousLineBreaks(classifier, previousBreakingData, lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent) {\n if (firstLineBreakColumn === -1) {\n return null;\n }\n const len = lineText.length;\n if (len <= 1) {\n return null;\n }\n const prevBreakingOffsets = previousBreakingData.breakOffsets;\n const prevBreakingOffsetsVisibleColumn = previousBreakingData.breakOffsetsVisibleColumn;\n const wrappedTextIndentLength = computeWrappedTextIndentLength(lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent);\n const wrappedLineBreakColumn = firstLineBreakColumn - wrappedTextIndentLength;\n let breakingOffsets = arrPool1;\n let breakingOffsetsVisibleColumn = arrPool2;\n let breakingOffsetsCount = 0;\n let lastBreakingOffset = 0;\n let lastBreakingOffsetVisibleColumn = 0;\n let breakingColumn = firstLineBreakColumn;\n const prevLen = prevBreakingOffsets.length;\n let prevIndex = 0;\n if (prevIndex >= 0) {\n let bestDistance = Math.abs(prevBreakingOffsetsVisibleColumn[prevIndex] - breakingColumn);\n while (prevIndex + 1 < prevLen) {\n const distance = Math.abs(prevBreakingOffsetsVisibleColumn[prevIndex + 1] - breakingColumn);\n if (distance >= bestDistance) {\n break;\n }\n bestDistance = distance;\n prevIndex++;\n }\n }\n while (prevIndex < prevLen) {\n // Allow for prevIndex to be -1 (for the case where we hit a tab when walking backwards from the first break)\n let prevBreakOffset = prevIndex < 0 ? 0 : prevBreakingOffsets[prevIndex];\n let prevBreakOffsetVisibleColumn = prevIndex < 0 ? 0 : prevBreakingOffsetsVisibleColumn[prevIndex];\n if (lastBreakingOffset > prevBreakOffset) {\n prevBreakOffset = lastBreakingOffset;\n prevBreakOffsetVisibleColumn = lastBreakingOffsetVisibleColumn;\n }\n let breakOffset = 0;\n let breakOffsetVisibleColumn = 0;\n let forcedBreakOffset = 0;\n let forcedBreakOffsetVisibleColumn = 0;\n // initially, we search as much as possible to the right (if it fits)\n if (prevBreakOffsetVisibleColumn <= breakingColumn) {\n let visibleColumn = prevBreakOffsetVisibleColumn;\n let prevCharCode = prevBreakOffset === 0 ? 0 /* Null */ : lineText.charCodeAt(prevBreakOffset - 1);\n let prevCharCodeClass = prevBreakOffset === 0 ? 0 /* NONE */ : classifier.get(prevCharCode);\n let entireLineFits = true;\n for (let i = prevBreakOffset; i < len; i++) {\n const charStartOffset = i;\n const charCode = lineText.charCodeAt(i);\n let charCodeClass;\n let charWidth;\n if (strings.isHighSurrogate(charCode)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n i++;\n charCodeClass = 0 /* NONE */;\n charWidth = 2;\n }\n else {\n charCodeClass = classifier.get(charCode);\n charWidth = computeCharWidth(charCode, visibleColumn, tabSize, columnsForFullWidthChar);\n }\n if (charStartOffset > lastBreakingOffset && canBreak(prevCharCode, prevCharCodeClass, charCode, charCodeClass)) {\n breakOffset = charStartOffset;\n breakOffsetVisibleColumn = visibleColumn;\n }\n visibleColumn += charWidth;\n // check if adding character at `i` will go over the breaking column\n if (visibleColumn > breakingColumn) {\n // We need to break at least before character at `i`:\n if (charStartOffset > lastBreakingOffset) {\n forcedBreakOffset = charStartOffset;\n forcedBreakOffsetVisibleColumn = visibleColumn - charWidth;\n }\n else {\n // we need to advance at least by one character\n forcedBreakOffset = i + 1;\n forcedBreakOffsetVisibleColumn = visibleColumn;\n }\n if (visibleColumn - breakOffsetVisibleColumn > wrappedLineBreakColumn) {\n // Cannot break at `breakOffset` => reset it if it was set\n breakOffset = 0;\n }\n entireLineFits = false;\n break;\n }\n prevCharCode = charCode;\n prevCharCodeClass = charCodeClass;\n }\n if (entireLineFits) {\n // there is no more need to break => stop the outer loop!\n if (breakingOffsetsCount > 0) {\n // Add last segment, no need to assign to `lastBreakingOffset` and `lastBreakingOffsetVisibleColumn`\n breakingOffsets[breakingOffsetsCount] = prevBreakingOffsets[prevBreakingOffsets.length - 1];\n breakingOffsetsVisibleColumn[breakingOffsetsCount] = prevBreakingOffsetsVisibleColumn[prevBreakingOffsets.length - 1];\n breakingOffsetsCount++;\n }\n break;\n }\n }\n if (breakOffset === 0) {\n // must search left\n let visibleColumn = prevBreakOffsetVisibleColumn;\n let charCode = lineText.charCodeAt(prevBreakOffset);\n let charCodeClass = classifier.get(charCode);\n let hitATabCharacter = false;\n for (let i = prevBreakOffset - 1; i >= lastBreakingOffset; i--) {\n const charStartOffset = i + 1;\n const prevCharCode = lineText.charCodeAt(i);\n if (prevCharCode === 9 /* Tab */) {\n // cannot determine the width of a tab when going backwards, so we must go forwards\n hitATabCharacter = true;\n break;\n }\n let prevCharCodeClass;\n let prevCharWidth;\n if (strings.isLowSurrogate(prevCharCode)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n i--;\n prevCharCodeClass = 0 /* NONE */;\n prevCharWidth = 2;\n }\n else {\n prevCharCodeClass = classifier.get(prevCharCode);\n prevCharWidth = (strings.isFullWidthCharacter(prevCharCode) ? columnsForFullWidthChar : 1);\n }\n if (visibleColumn <= breakingColumn) {\n if (forcedBreakOffset === 0) {\n forcedBreakOffset = charStartOffset;\n forcedBreakOffsetVisibleColumn = visibleColumn;\n }\n if (visibleColumn <= breakingColumn - wrappedLineBreakColumn) {\n // went too far!\n break;\n }\n if (canBreak(prevCharCode, prevCharCodeClass, charCode, charCodeClass)) {\n breakOffset = charStartOffset;\n breakOffsetVisibleColumn = visibleColumn;\n break;\n }\n }\n visibleColumn -= prevCharWidth;\n charCode = prevCharCode;\n charCodeClass = prevCharCodeClass;\n }\n if (breakOffset !== 0) {\n const remainingWidthOfNextLine = wrappedLineBreakColumn - (forcedBreakOffsetVisibleColumn - breakOffsetVisibleColumn);\n if (remainingWidthOfNextLine <= tabSize) {\n const charCodeAtForcedBreakOffset = lineText.charCodeAt(forcedBreakOffset);\n let charWidth;\n if (strings.isHighSurrogate(charCodeAtForcedBreakOffset)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n charWidth = 2;\n }\n else {\n charWidth = computeCharWidth(charCodeAtForcedBreakOffset, forcedBreakOffsetVisibleColumn, tabSize, columnsForFullWidthChar);\n }\n if (remainingWidthOfNextLine - charWidth < 0) {\n // it is not worth it to break at breakOffset, it just introduces an extra needless line!\n breakOffset = 0;\n }\n }\n }\n if (hitATabCharacter) {\n // cannot determine the width of a tab when going backwards, so we must go forwards from the previous break\n prevIndex--;\n continue;\n }\n }\n if (breakOffset === 0) {\n // Could not find a good breaking point\n breakOffset = forcedBreakOffset;\n breakOffsetVisibleColumn = forcedBreakOffsetVisibleColumn;\n }\n if (breakOffset <= lastBreakingOffset) {\n // Make sure that we are advancing (at least one character)\n const charCode = lineText.charCodeAt(lastBreakingOffset);\n if (strings.isHighSurrogate(charCode)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n breakOffset = lastBreakingOffset + 2;\n breakOffsetVisibleColumn = lastBreakingOffsetVisibleColumn + 2;\n }\n else {\n breakOffset = lastBreakingOffset + 1;\n breakOffsetVisibleColumn = lastBreakingOffsetVisibleColumn + computeCharWidth(charCode, lastBreakingOffsetVisibleColumn, tabSize, columnsForFullWidthChar);\n }\n }\n lastBreakingOffset = breakOffset;\n breakingOffsets[breakingOffsetsCount] = breakOffset;\n lastBreakingOffsetVisibleColumn = breakOffsetVisibleColumn;\n breakingOffsetsVisibleColumn[breakingOffsetsCount] = breakOffsetVisibleColumn;\n breakingOffsetsCount++;\n breakingColumn = breakOffsetVisibleColumn + wrappedLineBreakColumn;\n while (prevIndex < 0 || (prevIndex < prevLen && prevBreakingOffsetsVisibleColumn[prevIndex] < breakOffsetVisibleColumn)) {\n prevIndex++;\n }\n let bestDistance = Math.abs(prevBreakingOffsetsVisibleColumn[prevIndex] - breakingColumn);\n while (prevIndex + 1 < prevLen) {\n const distance = Math.abs(prevBreakingOffsetsVisibleColumn[prevIndex + 1] - breakingColumn);\n if (distance >= bestDistance) {\n break;\n }\n bestDistance = distance;\n prevIndex++;\n }\n }\n if (breakingOffsetsCount === 0) {\n return null;\n }\n // Doing here some object reuse which ends up helping a huge deal with GC pauses!\n breakingOffsets.length = breakingOffsetsCount;\n breakingOffsetsVisibleColumn.length = breakingOffsetsCount;\n arrPool1 = previousBreakingData.breakOffsets;\n arrPool2 = previousBreakingData.breakOffsetsVisibleColumn;\n previousBreakingData.breakOffsets = breakingOffsets;\n previousBreakingData.breakOffsetsVisibleColumn = breakingOffsetsVisibleColumn;\n previousBreakingData.wrappedTextIndentLength = wrappedTextIndentLength;\n return previousBreakingData;\n}\nfunction createLineBreaks(classifier, lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent) {\n if (firstLineBreakColumn === -1) {\n return null;\n }\n const len = lineText.length;\n if (len <= 1) {\n return null;\n }\n const wrappedTextIndentLength = computeWrappedTextIndentLength(lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent);\n const wrappedLineBreakColumn = firstLineBreakColumn - wrappedTextIndentLength;\n let breakingOffsets = [];\n let breakingOffsetsVisibleColumn = [];\n let breakingOffsetsCount = 0;\n let breakOffset = 0;\n let breakOffsetVisibleColumn = 0;\n let breakingColumn = firstLineBreakColumn;\n let prevCharCode = lineText.charCodeAt(0);\n let prevCharCodeClass = classifier.get(prevCharCode);\n let visibleColumn = computeCharWidth(prevCharCode, 0, tabSize, columnsForFullWidthChar);\n let startOffset = 1;\n if (strings.isHighSurrogate(prevCharCode)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n visibleColumn += 1;\n prevCharCode = lineText.charCodeAt(1);\n prevCharCodeClass = classifier.get(prevCharCode);\n startOffset++;\n }\n for (let i = startOffset; i < len; i++) {\n const charStartOffset = i;\n const charCode = lineText.charCodeAt(i);\n let charCodeClass;\n let charWidth;\n if (strings.isHighSurrogate(charCode)) {\n // A surrogate pair must always be considered as a single unit, so it is never to be broken\n i++;\n charCodeClass = 0 /* NONE */;\n charWidth = 2;\n }\n else {\n charCodeClass = classifier.get(charCode);\n charWidth = computeCharWidth(charCode, visibleColumn, tabSize, columnsForFullWidthChar);\n }\n if (canBreak(prevCharCode, prevCharCodeClass, charCode, charCodeClass)) {\n breakOffset = charStartOffset;\n breakOffsetVisibleColumn = visibleColumn;\n }\n visibleColumn += charWidth;\n // check if adding character at `i` will go over the breaking column\n if (visibleColumn > breakingColumn) {\n // We need to break at least before character at `i`:\n if (breakOffset === 0 || visibleColumn - breakOffsetVisibleColumn > wrappedLineBreakColumn) {\n // Cannot break at `breakOffset`, must break at `i`\n breakOffset = charStartOffset;\n breakOffsetVisibleColumn = visibleColumn - charWidth;\n }\n breakingOffsets[breakingOffsetsCount] = breakOffset;\n breakingOffsetsVisibleColumn[breakingOffsetsCount] = breakOffsetVisibleColumn;\n breakingOffsetsCount++;\n breakingColumn = breakOffsetVisibleColumn + wrappedLineBreakColumn;\n breakOffset = 0;\n }\n prevCharCode = charCode;\n prevCharCodeClass = charCodeClass;\n }\n if (breakingOffsetsCount === 0) {\n return null;\n }\n // Add last segment\n breakingOffsets[breakingOffsetsCount] = len;\n breakingOffsetsVisibleColumn[breakingOffsetsCount] = visibleColumn;\n return new LineBreakData(breakingOffsets, breakingOffsetsVisibleColumn, wrappedTextIndentLength);\n}\nfunction computeCharWidth(charCode, visibleColumn, tabSize, columnsForFullWidthChar) {\n if (charCode === 9 /* Tab */) {\n return (tabSize - (visibleColumn % tabSize));\n }\n if (strings.isFullWidthCharacter(charCode)) {\n return columnsForFullWidthChar;\n }\n if (charCode < 32) {\n // when using `editor.renderControlCharacters`, the substitutions are often wide\n return columnsForFullWidthChar;\n }\n return 1;\n}\nfunction tabCharacterWidth(visibleColumn, tabSize) {\n return (tabSize - (visibleColumn % tabSize));\n}\n/**\n * Kinsoku Shori : Don't break after a leading character, like an open bracket\n * Kinsoku Shori : Don't break before a trailing character, like a period\n */\nfunction canBreak(prevCharCode, prevCharCodeClass, charCode, charCodeClass) {\n return (charCode !== 32 /* Space */\n && ((prevCharCodeClass === 2 /* BREAK_AFTER */)\n || (prevCharCodeClass === 3 /* BREAK_IDEOGRAPHIC */ && charCodeClass !== 2 /* BREAK_AFTER */)\n || (charCodeClass === 1 /* BREAK_BEFORE */)\n || (charCodeClass === 3 /* BREAK_IDEOGRAPHIC */ && prevCharCodeClass !== 1 /* BREAK_BEFORE */)));\n}\nfunction computeWrappedTextIndentLength(lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent) {\n let wrappedTextIndentLength = 0;\n if (wrappingIndent !== 0 /* None */) {\n const firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineText);\n if (firstNonWhitespaceIndex !== -1) {\n // Track existing indent\n for (let i = 0; i < firstNonWhitespaceIndex; i++) {\n const charWidth = (lineText.charCodeAt(i) === 9 /* Tab */ ? tabCharacterWidth(wrappedTextIndentLength, tabSize) : 1);\n wrappedTextIndentLength += charWidth;\n }\n // Increase indent of continuation lines, if desired\n const numberOfAdditionalTabs = (wrappingIndent === 3 /* DeepIndent */ ? 2 : wrappingIndent === 2 /* Indent */ ? 1 : 0);\n for (let i = 0; i < numberOfAdditionalTabs; i++) {\n const charWidth = tabCharacterWidth(wrappedTextIndentLength, tabSize);\n wrappedTextIndentLength += charWidth;\n }\n // Force sticking to beginning of line if no character would fit except for the indentation\n if (wrappedTextIndentLength + columnsForFullWidthChar > firstLineBreakColumn) {\n wrappedTextIndentLength = 0;\n }\n }\n }\n return wrappedTextIndentLength;\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 *--------------------------------------------------------------------------------------------*/\nvar _a;\nimport { createStringBuilder } from '../../common/core/stringBuilder.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { Configuration } from '../config/configuration.js';\nimport { LineBreakData } from '../../common/viewModel/viewModel.js';\nconst ttPolicy = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy('domLineBreaksComputer', { createHTML: value => value });\nexport class DOMLineBreaksComputerFactory {\n static create() {\n return new DOMLineBreaksComputerFactory();\n }\n constructor() {\n }\n createLineBreaksComputer(fontInfo, tabSize, wrappingColumn, wrappingIndent) {\n tabSize = tabSize | 0; //@perf\n wrappingColumn = +wrappingColumn; //@perf\n let requests = [];\n return {\n addRequest: (lineText, previousLineBreakData) => {\n requests.push(lineText);\n },\n finalize: () => {\n return createLineBreaks(requests, fontInfo, tabSize, wrappingColumn, wrappingIndent);\n }\n };\n }\n}\nfunction createLineBreaks(requests, fontInfo, tabSize, firstLineBreakColumn, wrappingIndent) {\n var _a;\n if (firstLineBreakColumn === -1) {\n const result = [];\n for (let i = 0, len = requests.length; i < len; i++) {\n result[i] = null;\n }\n return result;\n }\n const overallWidth = Math.round(firstLineBreakColumn * fontInfo.typicalHalfwidthCharacterWidth);\n // Cannot respect WrappingIndent.Indent and WrappingIndent.DeepIndent because that would require\n // two dom layouts, in order to first set the width of the first line, and then set the width of the wrapped lines\n if (wrappingIndent === 2 /* Indent */ || wrappingIndent === 3 /* DeepIndent */) {\n wrappingIndent = 1 /* Same */;\n }\n const containerDomNode = document.createElement('div');\n Configuration.applyFontInfoSlow(containerDomNode, fontInfo);\n const sb = createStringBuilder(10000);\n const firstNonWhitespaceIndices = [];\n const wrappedTextIndentLengths = [];\n const renderLineContents = [];\n const allCharOffsets = [];\n const allVisibleColumns = [];\n for (let i = 0; i < requests.length; i++) {\n const lineContent = requests[i];\n let firstNonWhitespaceIndex = 0;\n let wrappedTextIndentLength = 0;\n let width = overallWidth;\n if (wrappingIndent !== 0 /* None */) {\n firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n if (firstNonWhitespaceIndex === -1) {\n // all whitespace line\n firstNonWhitespaceIndex = 0;\n }\n else {\n // Track existing indent\n for (let i = 0; i < firstNonWhitespaceIndex; i++) {\n const charWidth = (lineContent.charCodeAt(i) === 9 /* Tab */\n ? (tabSize - (wrappedTextIndentLength % tabSize))\n : 1);\n wrappedTextIndentLength += charWidth;\n }\n const indentWidth = Math.ceil(fontInfo.spaceWidth * wrappedTextIndentLength);\n // Force sticking to beginning of line if no character would fit except for the indentation\n if (indentWidth + fontInfo.typicalFullwidthCharacterWidth > overallWidth) {\n firstNonWhitespaceIndex = 0;\n wrappedTextIndentLength = 0;\n }\n else {\n width = overallWidth - indentWidth;\n }\n }\n }\n const renderLineContent = lineContent.substr(firstNonWhitespaceIndex);\n const tmp = renderLine(renderLineContent, wrappedTextIndentLength, tabSize, width, sb);\n firstNonWhitespaceIndices[i] = firstNonWhitespaceIndex;\n wrappedTextIndentLengths[i] = wrappedTextIndentLength;\n renderLineContents[i] = renderLineContent;\n allCharOffsets[i] = tmp[0];\n allVisibleColumns[i] = tmp[1];\n }\n const html = sb.build();\n const trustedhtml = (_a = ttPolicy === null || ttPolicy === void 0 ? void 0 : ttPolicy.createHTML(html)) !== null && _a !== void 0 ? _a : html;\n containerDomNode.innerHTML = trustedhtml;\n containerDomNode.style.position = 'absolute';\n containerDomNode.style.top = '10000';\n containerDomNode.style.wordWrap = 'break-word';\n document.body.appendChild(containerDomNode);\n let range = document.createRange();\n const lineDomNodes = Array.prototype.slice.call(containerDomNode.children, 0);\n let result = [];\n for (let i = 0; i < requests.length; i++) {\n const lineDomNode = lineDomNodes[i];\n const breakOffsets = readLineBreaks(range, lineDomNode, renderLineContents[i], allCharOffsets[i]);\n if (breakOffsets === null) {\n result[i] = null;\n continue;\n }\n const firstNonWhitespaceIndex = firstNonWhitespaceIndices[i];\n const wrappedTextIndentLength = wrappedTextIndentLengths[i];\n const visibleColumns = allVisibleColumns[i];\n const breakOffsetsVisibleColumn = [];\n for (let j = 0, len = breakOffsets.length; j < len; j++) {\n breakOffsetsVisibleColumn[j] = visibleColumns[breakOffsets[j]];\n }\n if (firstNonWhitespaceIndex !== 0) {\n // All break offsets are relative to the renderLineContent, make them absolute again\n for (let j = 0, len = breakOffsets.length; j < len; j++) {\n breakOffsets[j] += firstNonWhitespaceIndex;\n }\n }\n result[i] = new LineBreakData(breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength);\n }\n document.body.removeChild(containerDomNode);\n return result;\n}\nfunction renderLine(lineContent, initialVisibleColumn, tabSize, width, sb) {\n sb.appendASCIIString('<div style=\"width:');\n sb.appendASCIIString(String(width));\n sb.appendASCIIString('px;\">');\n // if (containsRTL) {\n // \tsb.appendASCIIString('\" dir=\"ltr');\n // }\n const len = lineContent.length;\n let visibleColumn = initialVisibleColumn;\n let charOffset = 0;\n let charOffsets = [];\n let visibleColumns = [];\n let nextCharCode = (0 < len ? lineContent.charCodeAt(0) : 0 /* Null */);\n sb.appendASCIIString('<span>');\n for (let charIndex = 0; charIndex < len; charIndex++) {\n if (charIndex !== 0 && charIndex % 16384 /* SPAN_MODULO_LIMIT */ === 0) {\n sb.appendASCIIString('</span><span>');\n }\n charOffsets[charIndex] = charOffset;\n visibleColumns[charIndex] = visibleColumn;\n const charCode = nextCharCode;\n nextCharCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : 0 /* Null */);\n let producedCharacters = 1;\n let charWidth = 1;\n switch (charCode) {\n case 9 /* Tab */:\n producedCharacters = (tabSize - (visibleColumn % tabSize));\n charWidth = producedCharacters;\n for (let space = 1; space <= producedCharacters; space++) {\n if (space < producedCharacters) {\n sb.write1(0xA0); // &nbsp;\n }\n else {\n sb.appendASCII(32 /* Space */);\n }\n }\n break;\n case 32 /* Space */:\n if (nextCharCode === 32 /* Space */) {\n sb.write1(0xA0); // &nbsp;\n }\n else {\n sb.appendASCII(32 /* Space */);\n }\n break;\n case 60 /* LessThan */:\n sb.appendASCIIString('&lt;');\n break;\n case 62 /* GreaterThan */:\n sb.appendASCIIString('&gt;');\n break;\n case 38 /* Ampersand */:\n sb.appendASCIIString('&amp;');\n break;\n case 0 /* Null */:\n sb.appendASCIIString('&#00;');\n break;\n case 65279 /* UTF8_BOM */:\n case 8232 /* LINE_SEPARATOR */:\n case 8233 /* PARAGRAPH_SEPARATOR */:\n case 133 /* NEXT_LINE */:\n sb.write1(0xFFFD);\n break;\n default:\n if (strings.isFullWidthCharacter(charCode)) {\n charWidth++;\n }\n if (charCode < 32) {\n sb.write1(9216 + charCode);\n }\n else {\n sb.write1(charCode);\n }\n }\n charOffset += producedCharacters;\n visibleColumn += charWidth;\n }\n sb.appendASCIIString('</span>');\n charOffsets[lineContent.length] = charOffset;\n visibleColumns[lineContent.length] = visibleColumn;\n sb.appendASCIIString('</div>');\n return [charOffsets, visibleColumns];\n}\nfunction readLineBreaks(range, lineDomNode, lineContent, charOffsets) {\n if (lineContent.length <= 1) {\n return null;\n }\n const spans = Array.prototype.slice.call(lineDomNode.children, 0);\n const breakOffsets = [];\n try {\n discoverBreaks(range, spans, charOffsets, 0, null, lineContent.length - 1, null, breakOffsets);\n }\n catch (err) {\n console.log(err);\n return null;\n }\n if (breakOffsets.length === 0) {\n return null;\n }\n breakOffsets.push(lineContent.length);\n return breakOffsets;\n}\nfunction discoverBreaks(range, spans, charOffsets, low, lowRects, high, highRects, result) {\n if (low === high) {\n return;\n }\n lowRects = lowRects || readClientRect(range, spans, charOffsets[low], charOffsets[low + 1]);\n highRects = highRects || readClientRect(range, spans, charOffsets[high], charOffsets[high + 1]);\n if (Math.abs(lowRects[0].top - highRects[0].top) <= 0.1) {\n // same line\n return;\n }\n // there is at least one line break between these two offsets\n if (low + 1 === high) {\n // the two characters are adjacent, so the line break must be exactly between them\n result.push(high);\n return;\n }\n const mid = low + ((high - low) / 2) | 0;\n const midRects = readClientRect(range, spans, charOffsets[mid], charOffsets[mid + 1]);\n discoverBreaks(range, spans, charOffsets, low, lowRects, mid, midRects, result);\n discoverBreaks(range, spans, charOffsets, mid, midRects, high, highRects, result);\n}\nfunction readClientRect(range, spans, startOffset, endOffset) {\n range.setStart(spans[(startOffset / 16384 /* SPAN_MODULO_LIMIT */) | 0].firstChild, startOffset % 16384 /* SPAN_MODULO_LIMIT */);\n range.setEnd(spans[(endOffset / 16384 /* SPAN_MODULO_LIMIT */) | 0].firstChild, endOffset % 16384 /* SPAN_MODULO_LIMIT */);\n return range.getClientRects();\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport '../services/markerDecorations.js';\nimport './media/editor.css';\nimport * as nls from '../../../nls.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable, dispose } from '../../../base/common/lifecycle.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { Configuration } from '../config/configuration.js';\nimport { EditorExtensionsRegistry } from '../editorExtensions.js';\nimport { ICodeEditorService } from '../services/codeEditorService.js';\nimport { View } from '../view/viewImpl.js';\nimport { ViewUserInputEvents } from '../view/viewUserInputEvents.js';\nimport { filterValidationDecorations } from '../../common/config/editorOptions.js';\nimport { Cursor } from '../../common/controller/cursor.js';\nimport { CursorColumns } from '../../common/controller/cursorCommon.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { InternalEditorAction } from '../../common/editorAction.js';\nimport * as editorCommon from '../../common/editorCommon.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport * as modes from '../../common/modes.js';\nimport { editorUnnecessaryCodeBorder, editorUnnecessaryCodeOpacity } from '../../common/view/editorColorRegistry.js';\nimport { editorErrorBorder, editorErrorForeground, editorHintBorder, editorHintForeground, editorInfoBorder, editorInfoForeground, editorWarningBorder, editorWarningForeground, editorForeground, editorErrorBackground, editorInfoBackground, editorWarningBackground } from '../../../platform/theme/common/colorRegistry.js';\nimport { ViewModel } from '../../common/viewModel/viewModelImpl.js';\nimport { ICommandService } from '../../../platform/commands/common/commands.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { IThemeService, registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { withNullAsUndefined } from '../../../base/common/types.js';\nimport { MonospaceLineBreaksComputerFactory } from '../../common/viewModel/monospaceLineBreaksComputer.js';\nimport { DOMLineBreaksComputerFactory } from '../view/domLineBreaksComputer.js';\nimport { WordOperations } from '../../common/controller/cursorWordOperations.js';\nlet EDITOR_ID = 0;\nclass ModelData {\n constructor(model, viewModel, view, hasRealView, listenersToRemove) {\n this.model = model;\n this.viewModel = viewModel;\n this.view = view;\n this.hasRealView = hasRealView;\n this.listenersToRemove = listenersToRemove;\n }\n dispose() {\n dispose(this.listenersToRemove);\n this.model.onBeforeDetached();\n if (this.hasRealView) {\n this.view.dispose();\n }\n this.viewModel.dispose();\n }\n}\nlet CodeEditorWidget = class CodeEditorWidget extends Disposable {\n constructor(domElement, _options, codeEditorWidgetOptions, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService) {\n super();\n //#region Eventing\n this._onDidDispose = this._register(new Emitter());\n this.onDidDispose = this._onDidDispose.event;\n this._onDidChangeModelContent = this._register(new Emitter());\n this.onDidChangeModelContent = this._onDidChangeModelContent.event;\n this._onDidChangeModelLanguage = this._register(new Emitter());\n this.onDidChangeModelLanguage = this._onDidChangeModelLanguage.event;\n this._onDidChangeModelLanguageConfiguration = this._register(new Emitter());\n this.onDidChangeModelLanguageConfiguration = this._onDidChangeModelLanguageConfiguration.event;\n this._onDidChangeModelOptions = this._register(new Emitter());\n this.onDidChangeModelOptions = this._onDidChangeModelOptions.event;\n this._onDidChangeModelDecorations = this._register(new Emitter());\n this.onDidChangeModelDecorations = this._onDidChangeModelDecorations.event;\n this._onDidChangeConfiguration = this._register(new Emitter());\n this.onDidChangeConfiguration = this._onDidChangeConfiguration.event;\n this._onDidChangeModel = this._register(new Emitter());\n this.onDidChangeModel = this._onDidChangeModel.event;\n this._onDidChangeCursorPosition = this._register(new Emitter());\n this.onDidChangeCursorPosition = this._onDidChangeCursorPosition.event;\n this._onDidChangeCursorSelection = this._register(new Emitter());\n this.onDidChangeCursorSelection = this._onDidChangeCursorSelection.event;\n this._onDidAttemptReadOnlyEdit = this._register(new Emitter());\n this.onDidAttemptReadOnlyEdit = this._onDidAttemptReadOnlyEdit.event;\n this._onDidLayoutChange = this._register(new Emitter());\n this.onDidLayoutChange = this._onDidLayoutChange.event;\n this._editorTextFocus = this._register(new BooleanEventEmitter());\n this.onDidFocusEditorText = this._editorTextFocus.onDidChangeToTrue;\n this.onDidBlurEditorText = this._editorTextFocus.onDidChangeToFalse;\n this._editorWidgetFocus = this._register(new BooleanEventEmitter());\n this.onDidFocusEditorWidget = this._editorWidgetFocus.onDidChangeToTrue;\n this.onDidBlurEditorWidget = this._editorWidgetFocus.onDidChangeToFalse;\n this._onWillType = this._register(new Emitter());\n this.onWillType = this._onWillType.event;\n this._onDidType = this._register(new Emitter());\n this.onDidType = this._onDidType.event;\n this._onDidCompositionStart = this._register(new Emitter());\n this.onDidCompositionStart = this._onDidCompositionStart.event;\n this._onDidCompositionEnd = this._register(new Emitter());\n this.onDidCompositionEnd = this._onDidCompositionEnd.event;\n this._onDidPaste = this._register(new Emitter());\n this.onDidPaste = this._onDidPaste.event;\n this._onMouseUp = this._register(new Emitter());\n this.onMouseUp = this._onMouseUp.event;\n this._onMouseDown = this._register(new Emitter());\n this.onMouseDown = this._onMouseDown.event;\n this._onMouseDrag = this._register(new Emitter());\n this.onMouseDrag = this._onMouseDrag.event;\n this._onMouseDrop = this._register(new Emitter());\n this.onMouseDrop = this._onMouseDrop.event;\n this._onMouseDropCanceled = this._register(new Emitter());\n this.onMouseDropCanceled = this._onMouseDropCanceled.event;\n this._onContextMenu = this._register(new Emitter());\n this.onContextMenu = this._onContextMenu.event;\n this._onMouseMove = this._register(new Emitter());\n this.onMouseMove = this._onMouseMove.event;\n this._onMouseLeave = this._register(new Emitter());\n this.onMouseLeave = this._onMouseLeave.event;\n this._onMouseWheel = this._register(new Emitter());\n this.onMouseWheel = this._onMouseWheel.event;\n this._onKeyUp = this._register(new Emitter());\n this.onKeyUp = this._onKeyUp.event;\n this._onKeyDown = this._register(new Emitter());\n this.onKeyDown = this._onKeyDown.event;\n this._onDidContentSizeChange = this._register(new Emitter());\n this.onDidContentSizeChange = this._onDidContentSizeChange.event;\n this._onDidScrollChange = this._register(new Emitter());\n this.onDidScrollChange = this._onDidScrollChange.event;\n this._onDidChangeViewZones = this._register(new Emitter());\n this.onDidChangeViewZones = this._onDidChangeViewZones.event;\n const options = Object.assign({}, _options);\n this._domElement = domElement;\n this._overflowWidgetsDomNode = options.overflowWidgetsDomNode;\n delete options.overflowWidgetsDomNode;\n this._id = (++EDITOR_ID);\n this._decorationTypeKeysToIds = {};\n this._decorationTypeSubtypes = {};\n this.isSimpleWidget = codeEditorWidgetOptions.isSimpleWidget || false;\n this._telemetryData = codeEditorWidgetOptions.telemetryData;\n this._configuration = this._register(this._createConfiguration(options, accessibilityService));\n this._register(this._configuration.onDidChange((e) => {\n this._onDidChangeConfiguration.fire(e);\n const options = this._configuration.options;\n if (e.hasChanged(127 /* layoutInfo */)) {\n const layoutInfo = options.get(127 /* layoutInfo */);\n this._onDidLayoutChange.fire(layoutInfo);\n }\n }));\n this._contextKeyService = this._register(contextKeyService.createScoped(this._domElement));\n this._notificationService = notificationService;\n this._codeEditorService = codeEditorService;\n this._commandService = commandService;\n this._themeService = themeService;\n this._register(new EditorContextKeysManager(this, this._contextKeyService));\n this._register(new EditorModeContext(this, this._contextKeyService));\n this._instantiationService = instantiationService.createChild(new ServiceCollection([IContextKeyService, this._contextKeyService]));\n this._modelData = null;\n this._contributions = {};\n this._actions = {};\n this._focusTracker = new CodeEditorWidgetFocusTracker(domElement);\n this._focusTracker.onChange(() => {\n this._editorWidgetFocus.setValue(this._focusTracker.hasFocus());\n });\n this._contentWidgets = {};\n this._overlayWidgets = {};\n let contributions;\n if (Array.isArray(codeEditorWidgetOptions.contributions)) {\n contributions = codeEditorWidgetOptions.contributions;\n }\n else {\n contributions = EditorExtensionsRegistry.getEditorContributions();\n }\n for (const desc of contributions) {\n try {\n const contribution = this._instantiationService.createInstance(desc.ctor, this);\n this._contributions[desc.id] = contribution;\n }\n catch (err) {\n onUnexpectedError(err);\n }\n }\n EditorExtensionsRegistry.getEditorActions().forEach((action) => {\n const internalAction = new InternalEditorAction(action.id, action.label, action.alias, withNullAsUndefined(action.precondition), () => {\n return this._instantiationService.invokeFunction((accessor) => {\n return Promise.resolve(action.runEditorCommand(accessor, this, null));\n });\n }, this._contextKeyService);\n this._actions[internalAction.id] = internalAction;\n });\n this._codeEditorService.addCodeEditor(this);\n }\n _createConfiguration(options, accessibilityService) {\n return new Configuration(this.isSimpleWidget, options, this._domElement, accessibilityService);\n }\n getId() {\n return this.getEditorType() + ':' + this._id;\n }\n getEditorType() {\n return editorCommon.EditorType.ICodeEditor;\n }\n dispose() {\n this._codeEditorService.removeCodeEditor(this);\n this._focusTracker.dispose();\n const keys = Object.keys(this._contributions);\n for (let i = 0, len = keys.length; i < len; i++) {\n const contributionId = keys[i];\n this._contributions[contributionId].dispose();\n }\n this._removeDecorationTypes();\n this._postDetachModelCleanup(this._detachModel());\n this._onDidDispose.fire();\n super.dispose();\n }\n invokeWithinContext(fn) {\n return this._instantiationService.invokeFunction(fn);\n }\n updateOptions(newOptions) {\n this._configuration.updateOptions(newOptions);\n }\n getOptions() {\n return this._configuration.options;\n }\n getOption(id) {\n return this._configuration.options.get(id);\n }\n getRawOptions() {\n return this._configuration.getRawOptions();\n }\n getOverflowWidgetsDomNode() {\n return this._overflowWidgetsDomNode;\n }\n getConfiguredWordAtPosition(position) {\n if (!this._modelData) {\n return null;\n }\n return WordOperations.getWordAtPosition(this._modelData.model, this._configuration.options.get(113 /* wordSeparators */), position);\n }\n getValue(options = null) {\n if (!this._modelData) {\n return '';\n }\n const preserveBOM = (options && options.preserveBOM) ? true : false;\n let eolPreference = 0 /* TextDefined */;\n if (options && options.lineEnding && options.lineEnding === '\\n') {\n eolPreference = 1 /* LF */;\n }\n else if (options && options.lineEnding && options.lineEnding === '\\r\\n') {\n eolPreference = 2 /* CRLF */;\n }\n return this._modelData.model.getValue(eolPreference, preserveBOM);\n }\n setValue(newValue) {\n if (!this._modelData) {\n return;\n }\n this._modelData.model.setValue(newValue);\n }\n getModel() {\n if (!this._modelData) {\n return null;\n }\n return this._modelData.model;\n }\n setModel(_model = null) {\n const model = _model;\n if (this._modelData === null && model === null) {\n // Current model is the new model\n return;\n }\n if (this._modelData && this._modelData.model === model) {\n // Current model is the new model\n return;\n }\n const hasTextFocus = this.hasTextFocus();\n const detachedModel = this._detachModel();\n this._attachModel(model);\n if (hasTextFocus && this.hasModel()) {\n this.focus();\n }\n const e = {\n oldModelUrl: detachedModel ? detachedModel.uri : null,\n newModelUrl: model ? model.uri : null\n };\n this._removeDecorationTypes();\n this._onDidChangeModel.fire(e);\n this._postDetachModelCleanup(detachedModel);\n }\n _removeDecorationTypes() {\n this._decorationTypeKeysToIds = {};\n if (this._decorationTypeSubtypes) {\n for (let decorationType in this._decorationTypeSubtypes) {\n const subTypes = this._decorationTypeSubtypes[decorationType];\n for (let subType in subTypes) {\n this._removeDecorationType(decorationType + '-' + subType);\n }\n }\n this._decorationTypeSubtypes = {};\n }\n }\n getVisibleRanges() {\n if (!this._modelData) {\n return [];\n }\n return this._modelData.viewModel.getVisibleRanges();\n }\n getVisibleRangesPlusViewportAboveBelow() {\n if (!this._modelData) {\n return [];\n }\n return this._modelData.viewModel.getVisibleRangesPlusViewportAboveBelow();\n }\n getWhitespaces() {\n if (!this._modelData) {\n return [];\n }\n return this._modelData.viewModel.viewLayout.getWhitespaces();\n }\n static _getVerticalOffsetForPosition(modelData, modelLineNumber, modelColumn) {\n const modelPosition = modelData.model.validatePosition({\n lineNumber: modelLineNumber,\n column: modelColumn\n });\n const viewPosition = modelData.viewModel.coordinatesConverter.convertModelPositionToViewPosition(modelPosition);\n return modelData.viewModel.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\n }\n getTopForLineNumber(lineNumber) {\n if (!this._modelData) {\n return -1;\n }\n return CodeEditorWidget._getVerticalOffsetForPosition(this._modelData, lineNumber, 1);\n }\n getTopForPosition(lineNumber, column) {\n if (!this._modelData) {\n return -1;\n }\n return CodeEditorWidget._getVerticalOffsetForPosition(this._modelData, lineNumber, column);\n }\n setHiddenAreas(ranges) {\n if (this._modelData) {\n this._modelData.viewModel.setHiddenAreas(ranges.map(r => Range.lift(r)));\n }\n }\n getVisibleColumnFromPosition(rawPosition) {\n if (!this._modelData) {\n return rawPosition.column;\n }\n const position = this._modelData.model.validatePosition(rawPosition);\n const tabSize = this._modelData.model.getOptions().tabSize;\n return CursorColumns.visibleColumnFromColumn(this._modelData.model.getLineContent(position.lineNumber), position.column, tabSize) + 1;\n }\n getPosition() {\n if (!this._modelData) {\n return null;\n }\n return this._modelData.viewModel.getPosition();\n }\n setPosition(position) {\n if (!this._modelData) {\n return;\n }\n if (!Position.isIPosition(position)) {\n throw new Error('Invalid arguments');\n }\n this._modelData.viewModel.setSelections('api', [{\n selectionStartLineNumber: position.lineNumber,\n selectionStartColumn: position.column,\n positionLineNumber: position.lineNumber,\n positionColumn: position.column\n }]);\n }\n _sendRevealRange(modelRange, verticalType, revealHorizontal, scrollType) {\n if (!this._modelData) {\n return;\n }\n if (!Range.isIRange(modelRange)) {\n throw new Error('Invalid arguments');\n }\n const validatedModelRange = this._modelData.model.validateRange(modelRange);\n const viewRange = this._modelData.viewModel.coordinatesConverter.convertModelRangeToViewRange(validatedModelRange);\n this._modelData.viewModel.revealRange('api', revealHorizontal, viewRange, verticalType, scrollType);\n }\n revealLine(lineNumber, scrollType = 0 /* Smooth */) {\n this._revealLine(lineNumber, 0 /* Simple */, scrollType);\n }\n revealLineInCenter(lineNumber, scrollType = 0 /* Smooth */) {\n this._revealLine(lineNumber, 1 /* Center */, scrollType);\n }\n revealLineInCenterIfOutsideViewport(lineNumber, scrollType = 0 /* Smooth */) {\n this._revealLine(lineNumber, 2 /* CenterIfOutsideViewport */, scrollType);\n }\n revealLineNearTop(lineNumber, scrollType = 0 /* Smooth */) {\n this._revealLine(lineNumber, 5 /* NearTop */, scrollType);\n }\n _revealLine(lineNumber, revealType, scrollType) {\n if (typeof lineNumber !== 'number') {\n throw new Error('Invalid arguments');\n }\n this._sendRevealRange(new Range(lineNumber, 1, lineNumber, 1), revealType, false, scrollType);\n }\n revealPosition(position, scrollType = 0 /* Smooth */) {\n this._revealPosition(position, 0 /* Simple */, true, scrollType);\n }\n revealPositionInCenter(position, scrollType = 0 /* Smooth */) {\n this._revealPosition(position, 1 /* Center */, true, scrollType);\n }\n revealPositionInCenterIfOutsideViewport(position, scrollType = 0 /* Smooth */) {\n this._revealPosition(position, 2 /* CenterIfOutsideViewport */, true, scrollType);\n }\n revealPositionNearTop(position, scrollType = 0 /* Smooth */) {\n this._revealPosition(position, 5 /* NearTop */, true, scrollType);\n }\n _revealPosition(position, verticalType, revealHorizontal, scrollType) {\n if (!Position.isIPosition(position)) {\n throw new Error('Invalid arguments');\n }\n this._sendRevealRange(new Range(position.lineNumber, position.column, position.lineNumber, position.column), verticalType, revealHorizontal, scrollType);\n }\n getSelection() {\n if (!this._modelData) {\n return null;\n }\n return this._modelData.viewModel.getSelection();\n }\n getSelections() {\n if (!this._modelData) {\n return null;\n }\n return this._modelData.viewModel.getSelections();\n }\n setSelection(something) {\n const isSelection = Selection.isISelection(something);\n const isRange = Range.isIRange(something);\n if (!isSelection && !isRange) {\n throw new Error('Invalid arguments');\n }\n if (isSelection) {\n this._setSelectionImpl(something);\n }\n else if (isRange) {\n // act as if it was an IRange\n const selection = {\n selectionStartLineNumber: something.startLineNumber,\n selectionStartColumn: something.startColumn,\n positionLineNumber: something.endLineNumber,\n positionColumn: something.endColumn\n };\n this._setSelectionImpl(selection);\n }\n }\n _setSelectionImpl(sel) {\n if (!this._modelData) {\n return;\n }\n const selection = new Selection(sel.selectionStartLineNumber, sel.selectionStartColumn, sel.positionLineNumber, sel.positionColumn);\n this._modelData.viewModel.setSelections('api', [selection]);\n }\n revealLines(startLineNumber, endLineNumber, scrollType = 0 /* Smooth */) {\n this._revealLines(startLineNumber, endLineNumber, 0 /* Simple */, scrollType);\n }\n revealLinesInCenter(startLineNumber, endLineNumber, scrollType = 0 /* Smooth */) {\n this._revealLines(startLineNumber, endLineNumber, 1 /* Center */, scrollType);\n }\n revealLinesInCenterIfOutsideViewport(startLineNumber, endLineNumber, scrollType = 0 /* Smooth */) {\n this._revealLines(startLineNumber, endLineNumber, 2 /* CenterIfOutsideViewport */, scrollType);\n }\n revealLinesNearTop(startLineNumber, endLineNumber, scrollType = 0 /* Smooth */) {\n this._revealLines(startLineNumber, endLineNumber, 5 /* NearTop */, scrollType);\n }\n _revealLines(startLineNumber, endLineNumber, verticalType, scrollType) {\n if (typeof startLineNumber !== 'number' || typeof endLineNumber !== 'number') {\n throw new Error('Invalid arguments');\n }\n this._sendRevealRange(new Range(startLineNumber, 1, endLineNumber, 1), verticalType, false, scrollType);\n }\n revealRange(range, scrollType = 0 /* Smooth */, revealVerticalInCenter = false, revealHorizontal = true) {\n this._revealRange(range, revealVerticalInCenter ? 1 /* Center */ : 0 /* Simple */, revealHorizontal, scrollType);\n }\n revealRangeInCenter(range, scrollType = 0 /* Smooth */) {\n this._revealRange(range, 1 /* Center */, true, scrollType);\n }\n revealRangeInCenterIfOutsideViewport(range, scrollType = 0 /* Smooth */) {\n this._revealRange(range, 2 /* CenterIfOutsideViewport */, true, scrollType);\n }\n revealRangeNearTop(range, scrollType = 0 /* Smooth */) {\n this._revealRange(range, 5 /* NearTop */, true, scrollType);\n }\n revealRangeNearTopIfOutsideViewport(range, scrollType = 0 /* Smooth */) {\n this._revealRange(range, 6 /* NearTopIfOutsideViewport */, true, scrollType);\n }\n revealRangeAtTop(range, scrollType = 0 /* Smooth */) {\n this._revealRange(range, 3 /* Top */, true, scrollType);\n }\n _revealRange(range, verticalType, revealHorizontal, scrollType) {\n if (!Range.isIRange(range)) {\n throw new Error('Invalid arguments');\n }\n this._sendRevealRange(Range.lift(range), verticalType, revealHorizontal, scrollType);\n }\n setSelections(ranges, source = 'api', reason = 0 /* NotSet */) {\n if (!this._modelData) {\n return;\n }\n if (!ranges || ranges.length === 0) {\n throw new Error('Invalid arguments');\n }\n for (let i = 0, len = ranges.length; i < len; i++) {\n if (!Selection.isISelection(ranges[i])) {\n throw new Error('Invalid arguments');\n }\n }\n this._modelData.viewModel.setSelections(source, ranges, reason);\n }\n getContentWidth() {\n if (!this._modelData) {\n return -1;\n }\n return this._modelData.viewModel.viewLayout.getContentWidth();\n }\n getScrollWidth() {\n if (!this._modelData) {\n return -1;\n }\n return this._modelData.viewModel.viewLayout.getScrollWidth();\n }\n getScrollLeft() {\n if (!this._modelData) {\n return -1;\n }\n return this._modelData.viewModel.viewLayout.getCurrentScrollLeft();\n }\n getContentHeight() {\n if (!this._modelData) {\n return -1;\n }\n return this._modelData.viewModel.viewLayout.getContentHeight();\n }\n getScrollHeight() {\n if (!this._modelData) {\n return -1;\n }\n return this._modelData.viewModel.viewLayout.getScrollHeight();\n }\n getScrollTop() {\n if (!this._modelData) {\n return -1;\n }\n return this._modelData.viewModel.viewLayout.getCurrentScrollTop();\n }\n setScrollLeft(newScrollLeft, scrollType = 1 /* Immediate */) {\n if (!this._modelData) {\n return;\n }\n if (typeof newScrollLeft !== 'number') {\n throw new Error('Invalid arguments');\n }\n this._modelData.viewModel.setScrollPosition({\n scrollLeft: newScrollLeft\n }, scrollType);\n }\n setScrollTop(newScrollTop, scrollType = 1 /* Immediate */) {\n if (!this._modelData) {\n return;\n }\n if (typeof newScrollTop !== 'number') {\n throw new Error('Invalid arguments');\n }\n this._modelData.viewModel.setScrollPosition({\n scrollTop: newScrollTop\n }, scrollType);\n }\n setScrollPosition(position, scrollType = 1 /* Immediate */) {\n if (!this._modelData) {\n return;\n }\n this._modelData.viewModel.setScrollPosition(position, scrollType);\n }\n saveViewState() {\n if (!this._modelData) {\n return null;\n }\n const contributionsState = {};\n const keys = Object.keys(this._contributions);\n for (const id of keys) {\n const contribution = this._contributions[id];\n if (typeof contribution.saveViewState === 'function') {\n contributionsState[id] = contribution.saveViewState();\n }\n }\n const cursorState = this._modelData.viewModel.saveCursorState();\n const viewState = this._modelData.viewModel.saveState();\n return {\n cursorState: cursorState,\n viewState: viewState,\n contributionsState: contributionsState\n };\n }\n restoreViewState(s) {\n if (!this._modelData || !this._modelData.hasRealView) {\n return;\n }\n const codeEditorState = s;\n if (codeEditorState && codeEditorState.cursorState && codeEditorState.viewState) {\n const cursorState = codeEditorState.cursorState;\n if (Array.isArray(cursorState)) {\n this._modelData.viewModel.restoreCursorState(cursorState);\n }\n else {\n // Backwards compatibility\n this._modelData.viewModel.restoreCursorState([cursorState]);\n }\n const contributionsState = codeEditorState.contributionsState || {};\n const keys = Object.keys(this._contributions);\n for (let i = 0, len = keys.length; i < len; i++) {\n const id = keys[i];\n const contribution = this._contributions[id];\n if (typeof contribution.restoreViewState === 'function') {\n contribution.restoreViewState(contributionsState[id]);\n }\n }\n const reducedState = this._modelData.viewModel.reduceRestoreState(codeEditorState.viewState);\n this._modelData.view.restoreState(reducedState);\n }\n }\n getContribution(id) {\n return (this._contributions[id] || null);\n }\n getActions() {\n const result = [];\n const keys = Object.keys(this._actions);\n for (let i = 0, len = keys.length; i < len; i++) {\n const id = keys[i];\n result.push(this._actions[id]);\n }\n return result;\n }\n getSupportedActions() {\n let result = this.getActions();\n result = result.filter(action => action.isSupported());\n return result;\n }\n getAction(id) {\n return this._actions[id] || null;\n }\n trigger(source, handlerId, payload) {\n payload = payload || {};\n switch (handlerId) {\n case \"compositionStart\" /* CompositionStart */:\n this._startComposition();\n return;\n case \"compositionEnd\" /* CompositionEnd */:\n this._endComposition(source);\n return;\n case \"type\" /* Type */: {\n const args = payload;\n this._type(source, args.text || '');\n return;\n }\n case \"replacePreviousChar\" /* ReplacePreviousChar */: {\n const args = payload;\n this._compositionType(source, args.text || '', args.replaceCharCnt || 0, 0, 0);\n return;\n }\n case \"compositionType\" /* CompositionType */: {\n const args = payload;\n this._compositionType(source, args.text || '', args.replacePrevCharCnt || 0, args.replaceNextCharCnt || 0, args.positionDelta || 0);\n return;\n }\n case \"paste\" /* Paste */: {\n const args = payload;\n this._paste(source, args.text || '', args.pasteOnNewLine || false, args.multicursorText || null, args.mode || null);\n return;\n }\n case \"cut\" /* Cut */:\n this._cut(source);\n return;\n }\n const action = this.getAction(handlerId);\n if (action) {\n Promise.resolve(action.run()).then(undefined, onUnexpectedError);\n return;\n }\n if (!this._modelData) {\n return;\n }\n if (this._triggerEditorCommand(source, handlerId, payload)) {\n return;\n }\n this._triggerCommand(handlerId, payload);\n }\n _triggerCommand(handlerId, payload) {\n this._commandService.executeCommand(handlerId, payload);\n }\n _startComposition() {\n if (!this._modelData) {\n return;\n }\n this._modelData.viewModel.startComposition();\n this._onDidCompositionStart.fire();\n }\n _endComposition(source) {\n if (!this._modelData) {\n return;\n }\n this._modelData.viewModel.endComposition(source);\n this._onDidCompositionEnd.fire();\n }\n _type(source, text) {\n if (!this._modelData || text.length === 0) {\n return;\n }\n if (source === 'keyboard') {\n this._onWillType.fire(text);\n }\n this._modelData.viewModel.type(text, source);\n if (source === 'keyboard') {\n this._onDidType.fire(text);\n }\n }\n _compositionType(source, text, replacePrevCharCnt, replaceNextCharCnt, positionDelta) {\n if (!this._modelData) {\n return;\n }\n this._modelData.viewModel.compositionType(text, replacePrevCharCnt, replaceNextCharCnt, positionDelta, source);\n }\n _paste(source, text, pasteOnNewLine, multicursorText, mode) {\n if (!this._modelData || text.length === 0) {\n return;\n }\n const startPosition = this._modelData.viewModel.getSelection().getStartPosition();\n this._modelData.viewModel.paste(text, pasteOnNewLine, multicursorText, source);\n const endPosition = this._modelData.viewModel.getSelection().getStartPosition();\n if (source === 'keyboard') {\n this._onDidPaste.fire({\n range: new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column),\n mode: mode\n });\n }\n }\n _cut(source) {\n if (!this._modelData) {\n return;\n }\n this._modelData.viewModel.cut(source);\n }\n _triggerEditorCommand(source, handlerId, payload) {\n const command = EditorExtensionsRegistry.getEditorCommand(handlerId);\n if (command) {\n payload = payload || {};\n payload.source = source;\n this._instantiationService.invokeFunction((accessor) => {\n Promise.resolve(command.runEditorCommand(accessor, this, payload)).then(undefined, onUnexpectedError);\n });\n return true;\n }\n return false;\n }\n _getViewModel() {\n if (!this._modelData) {\n return null;\n }\n return this._modelData.viewModel;\n }\n pushUndoStop() {\n if (!this._modelData) {\n return false;\n }\n if (this._configuration.options.get(77 /* readOnly */)) {\n // read only editor => sorry!\n return false;\n }\n this._modelData.model.pushStackElement();\n return true;\n }\n popUndoStop() {\n if (!this._modelData) {\n return false;\n }\n if (this._configuration.options.get(77 /* readOnly */)) {\n // read only editor => sorry!\n return false;\n }\n this._modelData.model.popStackElement();\n return true;\n }\n executeEdits(source, edits, endCursorState) {\n if (!this._modelData) {\n return false;\n }\n if (this._configuration.options.get(77 /* readOnly */)) {\n // read only editor => sorry!\n return false;\n }\n let cursorStateComputer;\n if (!endCursorState) {\n cursorStateComputer = () => null;\n }\n else if (Array.isArray(endCursorState)) {\n cursorStateComputer = () => endCursorState;\n }\n else {\n cursorStateComputer = endCursorState;\n }\n this._modelData.viewModel.executeEdits(source, edits, cursorStateComputer);\n return true;\n }\n executeCommand(source, command) {\n if (!this._modelData) {\n return;\n }\n this._modelData.viewModel.executeCommand(command, source);\n }\n executeCommands(source, commands) {\n if (!this._modelData) {\n return;\n }\n this._modelData.viewModel.executeCommands(commands, source);\n }\n changeDecorations(callback) {\n if (!this._modelData) {\n // callback will not be called\n return null;\n }\n return this._modelData.model.changeDecorations(callback, this._id);\n }\n getLineDecorations(lineNumber) {\n if (!this._modelData) {\n return null;\n }\n return this._modelData.model.getLineDecorations(lineNumber, this._id, filterValidationDecorations(this._configuration.options));\n }\n deltaDecorations(oldDecorations, newDecorations) {\n if (!this._modelData) {\n return [];\n }\n if (oldDecorations.length === 0 && newDecorations.length === 0) {\n return oldDecorations;\n }\n return this._modelData.model.deltaDecorations(oldDecorations, newDecorations, this._id);\n }\n removeDecorations(decorationTypeKey) {\n // remove decorations for type and sub type\n const oldDecorationsIds = this._decorationTypeKeysToIds[decorationTypeKey];\n if (oldDecorationsIds) {\n this.deltaDecorations(oldDecorationsIds, []);\n }\n if (this._decorationTypeKeysToIds.hasOwnProperty(decorationTypeKey)) {\n delete this._decorationTypeKeysToIds[decorationTypeKey];\n }\n if (this._decorationTypeSubtypes.hasOwnProperty(decorationTypeKey)) {\n delete this._decorationTypeSubtypes[decorationTypeKey];\n }\n }\n getLayoutInfo() {\n const options = this._configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n return layoutInfo;\n }\n createOverviewRuler(cssClassName) {\n if (!this._modelData || !this._modelData.hasRealView) {\n return null;\n }\n return this._modelData.view.createOverviewRuler(cssClassName);\n }\n getContainerDomNode() {\n return this._domElement;\n }\n getDomNode() {\n if (!this._modelData || !this._modelData.hasRealView) {\n return null;\n }\n return this._modelData.view.domNode.domNode;\n }\n delegateVerticalScrollbarMouseDown(browserEvent) {\n if (!this._modelData || !this._modelData.hasRealView) {\n return;\n }\n this._modelData.view.delegateVerticalScrollbarMouseDown(browserEvent);\n }\n layout(dimension) {\n this._configuration.observeReferenceElement(dimension);\n this.render();\n }\n focus() {\n if (!this._modelData || !this._modelData.hasRealView) {\n return;\n }\n this._modelData.view.focus();\n }\n hasTextFocus() {\n if (!this._modelData || !this._modelData.hasRealView) {\n return false;\n }\n return this._modelData.view.isFocused();\n }\n hasWidgetFocus() {\n return this._focusTracker && this._focusTracker.hasFocus();\n }\n addContentWidget(widget) {\n const widgetData = {\n widget: widget,\n position: widget.getPosition()\n };\n if (this._contentWidgets.hasOwnProperty(widget.getId())) {\n console.warn('Overwriting a content widget with the same id.');\n }\n this._contentWidgets[widget.getId()] = widgetData;\n if (this._modelData && this._modelData.hasRealView) {\n this._modelData.view.addContentWidget(widgetData);\n }\n }\n layoutContentWidget(widget) {\n const widgetId = widget.getId();\n if (this._contentWidgets.hasOwnProperty(widgetId)) {\n const widgetData = this._contentWidgets[widgetId];\n widgetData.position = widget.getPosition();\n if (this._modelData && this._modelData.hasRealView) {\n this._modelData.view.layoutContentWidget(widgetData);\n }\n }\n }\n removeContentWidget(widget) {\n const widgetId = widget.getId();\n if (this._contentWidgets.hasOwnProperty(widgetId)) {\n const widgetData = this._contentWidgets[widgetId];\n delete this._contentWidgets[widgetId];\n if (this._modelData && this._modelData.hasRealView) {\n this._modelData.view.removeContentWidget(widgetData);\n }\n }\n }\n addOverlayWidget(widget) {\n const widgetData = {\n widget: widget,\n position: widget.getPosition()\n };\n if (this._overlayWidgets.hasOwnProperty(widget.getId())) {\n console.warn('Overwriting an overlay widget with the same id.');\n }\n this._overlayWidgets[widget.getId()] = widgetData;\n if (this._modelData && this._modelData.hasRealView) {\n this._modelData.view.addOverlayWidget(widgetData);\n }\n }\n layoutOverlayWidget(widget) {\n const widgetId = widget.getId();\n if (this._overlayWidgets.hasOwnProperty(widgetId)) {\n const widgetData = this._overlayWidgets[widgetId];\n widgetData.position = widget.getPosition();\n if (this._modelData && this._modelData.hasRealView) {\n this._modelData.view.layoutOverlayWidget(widgetData);\n }\n }\n }\n removeOverlayWidget(widget) {\n const widgetId = widget.getId();\n if (this._overlayWidgets.hasOwnProperty(widgetId)) {\n const widgetData = this._overlayWidgets[widgetId];\n delete this._overlayWidgets[widgetId];\n if (this._modelData && this._modelData.hasRealView) {\n this._modelData.view.removeOverlayWidget(widgetData);\n }\n }\n }\n changeViewZones(callback) {\n if (!this._modelData || !this._modelData.hasRealView) {\n return;\n }\n this._modelData.view.change(callback);\n }\n getTargetAtClientPoint(clientX, clientY) {\n if (!this._modelData || !this._modelData.hasRealView) {\n return null;\n }\n return this._modelData.view.getTargetAtClientPoint(clientX, clientY);\n }\n getScrolledVisiblePosition(rawPosition) {\n if (!this._modelData || !this._modelData.hasRealView) {\n return null;\n }\n const position = this._modelData.model.validatePosition(rawPosition);\n const options = this._configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n const top = CodeEditorWidget._getVerticalOffsetForPosition(this._modelData, position.lineNumber, position.column) - this.getScrollTop();\n const left = this._modelData.view.getOffsetForColumn(position.lineNumber, position.column) + layoutInfo.glyphMarginWidth + layoutInfo.lineNumbersWidth + layoutInfo.decorationsWidth - this.getScrollLeft();\n return {\n top: top,\n left: left,\n height: options.get(55 /* lineHeight */)\n };\n }\n getOffsetForColumn(lineNumber, column) {\n if (!this._modelData || !this._modelData.hasRealView) {\n return -1;\n }\n return this._modelData.view.getOffsetForColumn(lineNumber, column);\n }\n render(forceRedraw = false) {\n if (!this._modelData || !this._modelData.hasRealView) {\n return;\n }\n this._modelData.view.render(true, forceRedraw);\n }\n setAriaOptions(options) {\n if (!this._modelData || !this._modelData.hasRealView) {\n return;\n }\n this._modelData.view.setAriaOptions(options);\n }\n applyFontInfo(target) {\n Configuration.applyFontInfoSlow(target, this._configuration.options.get(40 /* fontInfo */));\n }\n _attachModel(model) {\n if (!model) {\n this._modelData = null;\n return;\n }\n const listenersToRemove = [];\n this._domElement.setAttribute('data-mode-id', model.getLanguageIdentifier().language);\n this._configuration.setIsDominatedByLongLines(model.isDominatedByLongLines());\n this._configuration.setMaxLineNumber(model.getLineCount());\n model.onBeforeAttached();\n const viewModel = new ViewModel(this._id, this._configuration, model, DOMLineBreaksComputerFactory.create(), MonospaceLineBreaksComputerFactory.create(this._configuration.options), (callback) => dom.scheduleAtNextAnimationFrame(callback));\n listenersToRemove.push(model.onDidChangeDecorations((e) => this._onDidChangeModelDecorations.fire(e)));\n listenersToRemove.push(model.onDidChangeLanguage((e) => {\n this._domElement.setAttribute('data-mode-id', model.getLanguageIdentifier().language);\n this._onDidChangeModelLanguage.fire(e);\n }));\n listenersToRemove.push(model.onDidChangeLanguageConfiguration((e) => this._onDidChangeModelLanguageConfiguration.fire(e)));\n listenersToRemove.push(model.onDidChangeContent((e) => this._onDidChangeModelContent.fire(e)));\n listenersToRemove.push(model.onDidChangeOptions((e) => this._onDidChangeModelOptions.fire(e)));\n // Someone might destroy the model from under the editor, so prevent any exceptions by setting a null model\n listenersToRemove.push(model.onWillDispose(() => this.setModel(null)));\n listenersToRemove.push(viewModel.onEvent((e) => {\n switch (e.kind) {\n case 0 /* ContentSizeChanged */:\n this._onDidContentSizeChange.fire(e);\n break;\n case 1 /* FocusChanged */:\n this._editorTextFocus.setValue(e.hasFocus);\n break;\n case 2 /* ScrollChanged */:\n this._onDidScrollChange.fire(e);\n break;\n case 3 /* ViewZonesChanged */:\n this._onDidChangeViewZones.fire();\n break;\n case 4 /* ReadOnlyEditAttempt */:\n this._onDidAttemptReadOnlyEdit.fire();\n break;\n case 5 /* CursorStateChanged */: {\n if (e.reachedMaxCursorCount) {\n this._notificationService.warn(nls.localize('cursors.maximum', \"The number of cursors has been limited to {0}.\", Cursor.MAX_CURSOR_COUNT));\n }\n const positions = [];\n for (let i = 0, len = e.selections.length; i < len; i++) {\n positions[i] = e.selections[i].getPosition();\n }\n const e1 = {\n position: positions[0],\n secondaryPositions: positions.slice(1),\n reason: e.reason,\n source: e.source\n };\n this._onDidChangeCursorPosition.fire(e1);\n const e2 = {\n selection: e.selections[0],\n secondarySelections: e.selections.slice(1),\n modelVersionId: e.modelVersionId,\n oldSelections: e.oldSelections,\n oldModelVersionId: e.oldModelVersionId,\n source: e.source,\n reason: e.reason\n };\n this._onDidChangeCursorSelection.fire(e2);\n break;\n }\n }\n }));\n const [view, hasRealView] = this._createView(viewModel);\n if (hasRealView) {\n this._domElement.appendChild(view.domNode.domNode);\n let keys = Object.keys(this._contentWidgets);\n for (let i = 0, len = keys.length; i < len; i++) {\n const widgetId = keys[i];\n view.addContentWidget(this._contentWidgets[widgetId]);\n }\n keys = Object.keys(this._overlayWidgets);\n for (let i = 0, len = keys.length; i < len; i++) {\n const widgetId = keys[i];\n view.addOverlayWidget(this._overlayWidgets[widgetId]);\n }\n view.render(false, true);\n view.domNode.domNode.setAttribute('data-uri', model.uri.toString());\n }\n this._modelData = new ModelData(model, viewModel, view, hasRealView, listenersToRemove);\n }\n _createView(viewModel) {\n let commandDelegate;\n if (this.isSimpleWidget) {\n commandDelegate = {\n paste: (text, pasteOnNewLine, multicursorText, mode) => {\n this._paste('keyboard', text, pasteOnNewLine, multicursorText, mode);\n },\n type: (text) => {\n this._type('keyboard', text);\n },\n compositionType: (text, replacePrevCharCnt, replaceNextCharCnt, positionDelta) => {\n this._compositionType('keyboard', text, replacePrevCharCnt, replaceNextCharCnt, positionDelta);\n },\n startComposition: () => {\n this._startComposition();\n },\n endComposition: () => {\n this._endComposition('keyboard');\n },\n cut: () => {\n this._cut('keyboard');\n }\n };\n }\n else {\n commandDelegate = {\n paste: (text, pasteOnNewLine, multicursorText, mode) => {\n const payload = { text, pasteOnNewLine, multicursorText, mode };\n this._commandService.executeCommand(\"paste\" /* Paste */, payload);\n },\n type: (text) => {\n const payload = { text };\n this._commandService.executeCommand(\"type\" /* Type */, payload);\n },\n compositionType: (text, replacePrevCharCnt, replaceNextCharCnt, positionDelta) => {\n // Try if possible to go through the existing `replacePreviousChar` command\n if (replaceNextCharCnt || positionDelta) {\n // must be handled through the new command\n const payload = { text, replacePrevCharCnt, replaceNextCharCnt, positionDelta };\n this._commandService.executeCommand(\"compositionType\" /* CompositionType */, payload);\n }\n else {\n const payload = { text, replaceCharCnt: replacePrevCharCnt };\n this._commandService.executeCommand(\"replacePreviousChar\" /* ReplacePreviousChar */, payload);\n }\n },\n startComposition: () => {\n this._commandService.executeCommand(\"compositionStart\" /* CompositionStart */, {});\n },\n endComposition: () => {\n this._commandService.executeCommand(\"compositionEnd\" /* CompositionEnd */, {});\n },\n cut: () => {\n this._commandService.executeCommand(\"cut\" /* Cut */, {});\n }\n };\n }\n const viewUserInputEvents = new ViewUserInputEvents(viewModel.coordinatesConverter);\n viewUserInputEvents.onKeyDown = (e) => this._onKeyDown.fire(e);\n viewUserInputEvents.onKeyUp = (e) => this._onKeyUp.fire(e);\n viewUserInputEvents.onContextMenu = (e) => this._onContextMenu.fire(e);\n viewUserInputEvents.onMouseMove = (e) => this._onMouseMove.fire(e);\n viewUserInputEvents.onMouseLeave = (e) => this._onMouseLeave.fire(e);\n viewUserInputEvents.onMouseDown = (e) => this._onMouseDown.fire(e);\n viewUserInputEvents.onMouseUp = (e) => this._onMouseUp.fire(e);\n viewUserInputEvents.onMouseDrag = (e) => this._onMouseDrag.fire(e);\n viewUserInputEvents.onMouseDrop = (e) => this._onMouseDrop.fire(e);\n viewUserInputEvents.onMouseDropCanceled = (e) => this._onMouseDropCanceled.fire(e);\n viewUserInputEvents.onMouseWheel = (e) => this._onMouseWheel.fire(e);\n const view = new View(commandDelegate, this._configuration, this._themeService, viewModel, viewUserInputEvents, this._overflowWidgetsDomNode);\n return [view, true];\n }\n _postDetachModelCleanup(detachedModel) {\n if (detachedModel) {\n detachedModel.removeAllDecorationsWithOwnerId(this._id);\n }\n }\n _detachModel() {\n if (!this._modelData) {\n return null;\n }\n const model = this._modelData.model;\n const removeDomNode = this._modelData.hasRealView ? this._modelData.view.domNode.domNode : null;\n this._modelData.dispose();\n this._modelData = null;\n this._domElement.removeAttribute('data-mode-id');\n if (removeDomNode && this._domElement.contains(removeDomNode)) {\n this._domElement.removeChild(removeDomNode);\n }\n return model;\n }\n _removeDecorationType(key) {\n this._codeEditorService.removeDecorationType(key);\n }\n hasModel() {\n return (this._modelData !== null);\n }\n};\nCodeEditorWidget = __decorate([\n __param(3, IInstantiationService),\n __param(4, ICodeEditorService),\n __param(5, ICommandService),\n __param(6, IContextKeyService),\n __param(7, IThemeService),\n __param(8, INotificationService),\n __param(9, IAccessibilityService)\n], CodeEditorWidget);\nexport { CodeEditorWidget };\nexport class BooleanEventEmitter extends Disposable {\n constructor() {\n super();\n this._onDidChangeToTrue = this._register(new Emitter());\n this.onDidChangeToTrue = this._onDidChangeToTrue.event;\n this._onDidChangeToFalse = this._register(new Emitter());\n this.onDidChangeToFalse = this._onDidChangeToFalse.event;\n this._value = 0 /* NotSet */;\n }\n setValue(_value) {\n const value = (_value ? 2 /* True */ : 1 /* False */);\n if (this._value === value) {\n return;\n }\n this._value = value;\n if (this._value === 2 /* True */) {\n this._onDidChangeToTrue.fire();\n }\n else if (this._value === 1 /* False */) {\n this._onDidChangeToFalse.fire();\n }\n }\n}\nclass EditorContextKeysManager extends Disposable {\n constructor(editor, contextKeyService) {\n super();\n this._editor = editor;\n contextKeyService.createKey('editorId', editor.getId());\n this._editorSimpleInput = EditorContextKeys.editorSimpleInput.bindTo(contextKeyService);\n this._editorFocus = EditorContextKeys.focus.bindTo(contextKeyService);\n this._textInputFocus = EditorContextKeys.textInputFocus.bindTo(contextKeyService);\n this._editorTextFocus = EditorContextKeys.editorTextFocus.bindTo(contextKeyService);\n this._editorTabMovesFocus = EditorContextKeys.tabMovesFocus.bindTo(contextKeyService);\n this._editorReadonly = EditorContextKeys.readOnly.bindTo(contextKeyService);\n this._inDiffEditor = EditorContextKeys.inDiffEditor.bindTo(contextKeyService);\n this._editorColumnSelection = EditorContextKeys.columnSelection.bindTo(contextKeyService);\n this._hasMultipleSelections = EditorContextKeys.hasMultipleSelections.bindTo(contextKeyService);\n this._hasNonEmptySelection = EditorContextKeys.hasNonEmptySelection.bindTo(contextKeyService);\n this._canUndo = EditorContextKeys.canUndo.bindTo(contextKeyService);\n this._canRedo = EditorContextKeys.canRedo.bindTo(contextKeyService);\n this._register(this._editor.onDidChangeConfiguration(() => this._updateFromConfig()));\n this._register(this._editor.onDidChangeCursorSelection(() => this._updateFromSelection()));\n this._register(this._editor.onDidFocusEditorWidget(() => this._updateFromFocus()));\n this._register(this._editor.onDidBlurEditorWidget(() => this._updateFromFocus()));\n this._register(this._editor.onDidFocusEditorText(() => this._updateFromFocus()));\n this._register(this._editor.onDidBlurEditorText(() => this._updateFromFocus()));\n this._register(this._editor.onDidChangeModel(() => this._updateFromModel()));\n this._register(this._editor.onDidChangeConfiguration(() => this._updateFromModel()));\n this._updateFromConfig();\n this._updateFromSelection();\n this._updateFromFocus();\n this._updateFromModel();\n this._editorSimpleInput.set(this._editor.isSimpleWidget);\n }\n _updateFromConfig() {\n const options = this._editor.getOptions();\n this._editorTabMovesFocus.set(options.get(126 /* tabFocusMode */));\n this._editorReadonly.set(options.get(77 /* readOnly */));\n this._inDiffEditor.set(options.get(51 /* inDiffEditor */));\n this._editorColumnSelection.set(options.get(16 /* columnSelection */));\n }\n _updateFromSelection() {\n const selections = this._editor.getSelections();\n if (!selections) {\n this._hasMultipleSelections.reset();\n this._hasNonEmptySelection.reset();\n }\n else {\n this._hasMultipleSelections.set(selections.length > 1);\n this._hasNonEmptySelection.set(selections.some(s => !s.isEmpty()));\n }\n }\n _updateFromFocus() {\n this._editorFocus.set(this._editor.hasWidgetFocus() && !this._editor.isSimpleWidget);\n this._editorTextFocus.set(this._editor.hasTextFocus() && !this._editor.isSimpleWidget);\n this._textInputFocus.set(this._editor.hasTextFocus());\n }\n _updateFromModel() {\n const model = this._editor.getModel();\n this._canUndo.set(Boolean(model && model.canUndo()));\n this._canRedo.set(Boolean(model && model.canRedo()));\n }\n}\nexport class EditorModeContext extends Disposable {\n constructor(_editor, _contextKeyService) {\n super();\n this._editor = _editor;\n this._contextKeyService = _contextKeyService;\n this._langId = EditorContextKeys.languageId.bindTo(_contextKeyService);\n this._hasCompletionItemProvider = EditorContextKeys.hasCompletionItemProvider.bindTo(_contextKeyService);\n this._hasCodeActionsProvider = EditorContextKeys.hasCodeActionsProvider.bindTo(_contextKeyService);\n this._hasCodeLensProvider = EditorContextKeys.hasCodeLensProvider.bindTo(_contextKeyService);\n this._hasDefinitionProvider = EditorContextKeys.hasDefinitionProvider.bindTo(_contextKeyService);\n this._hasDeclarationProvider = EditorContextKeys.hasDeclarationProvider.bindTo(_contextKeyService);\n this._hasImplementationProvider = EditorContextKeys.hasImplementationProvider.bindTo(_contextKeyService);\n this._hasTypeDefinitionProvider = EditorContextKeys.hasTypeDefinitionProvider.bindTo(_contextKeyService);\n this._hasHoverProvider = EditorContextKeys.hasHoverProvider.bindTo(_contextKeyService);\n this._hasDocumentHighlightProvider = EditorContextKeys.hasDocumentHighlightProvider.bindTo(_contextKeyService);\n this._hasDocumentSymbolProvider = EditorContextKeys.hasDocumentSymbolProvider.bindTo(_contextKeyService);\n this._hasReferenceProvider = EditorContextKeys.hasReferenceProvider.bindTo(_contextKeyService);\n this._hasRenameProvider = EditorContextKeys.hasRenameProvider.bindTo(_contextKeyService);\n this._hasSignatureHelpProvider = EditorContextKeys.hasSignatureHelpProvider.bindTo(_contextKeyService);\n this._hasInlineHintsProvider = EditorContextKeys.hasInlineHintsProvider.bindTo(_contextKeyService);\n this._hasDocumentFormattingProvider = EditorContextKeys.hasDocumentFormattingProvider.bindTo(_contextKeyService);\n this._hasDocumentSelectionFormattingProvider = EditorContextKeys.hasDocumentSelectionFormattingProvider.bindTo(_contextKeyService);\n this._hasMultipleDocumentFormattingProvider = EditorContextKeys.hasMultipleDocumentFormattingProvider.bindTo(_contextKeyService);\n this._hasMultipleDocumentSelectionFormattingProvider = EditorContextKeys.hasMultipleDocumentSelectionFormattingProvider.bindTo(_contextKeyService);\n this._isInWalkThrough = EditorContextKeys.isInWalkThroughSnippet.bindTo(_contextKeyService);\n const update = () => this._update();\n // update when model/mode changes\n this._register(_editor.onDidChangeModel(update));\n this._register(_editor.onDidChangeModelLanguage(update));\n // update when registries change\n this._register(modes.CompletionProviderRegistry.onDidChange(update));\n this._register(modes.CodeActionProviderRegistry.onDidChange(update));\n this._register(modes.CodeLensProviderRegistry.onDidChange(update));\n this._register(modes.DefinitionProviderRegistry.onDidChange(update));\n this._register(modes.DeclarationProviderRegistry.onDidChange(update));\n this._register(modes.ImplementationProviderRegistry.onDidChange(update));\n this._register(modes.TypeDefinitionProviderRegistry.onDidChange(update));\n this._register(modes.HoverProviderRegistry.onDidChange(update));\n this._register(modes.DocumentHighlightProviderRegistry.onDidChange(update));\n this._register(modes.DocumentSymbolProviderRegistry.onDidChange(update));\n this._register(modes.ReferenceProviderRegistry.onDidChange(update));\n this._register(modes.RenameProviderRegistry.onDidChange(update));\n this._register(modes.DocumentFormattingEditProviderRegistry.onDidChange(update));\n this._register(modes.DocumentRangeFormattingEditProviderRegistry.onDidChange(update));\n this._register(modes.SignatureHelpProviderRegistry.onDidChange(update));\n this._register(modes.InlineHintsProviderRegistry.onDidChange(update));\n update();\n }\n dispose() {\n super.dispose();\n }\n reset() {\n this._contextKeyService.bufferChangeEvents(() => {\n this._langId.reset();\n this._hasCompletionItemProvider.reset();\n this._hasCodeActionsProvider.reset();\n this._hasCodeLensProvider.reset();\n this._hasDefinitionProvider.reset();\n this._hasDeclarationProvider.reset();\n this._hasImplementationProvider.reset();\n this._hasTypeDefinitionProvider.reset();\n this._hasHoverProvider.reset();\n this._hasDocumentHighlightProvider.reset();\n this._hasDocumentSymbolProvider.reset();\n this._hasReferenceProvider.reset();\n this._hasRenameProvider.reset();\n this._hasDocumentFormattingProvider.reset();\n this._hasDocumentSelectionFormattingProvider.reset();\n this._hasSignatureHelpProvider.reset();\n this._isInWalkThrough.reset();\n });\n }\n _update() {\n const model = this._editor.getModel();\n if (!model) {\n this.reset();\n return;\n }\n this._contextKeyService.bufferChangeEvents(() => {\n this._langId.set(model.getLanguageIdentifier().language);\n this._hasCompletionItemProvider.set(modes.CompletionProviderRegistry.has(model));\n this._hasCodeActionsProvider.set(modes.CodeActionProviderRegistry.has(model));\n this._hasCodeLensProvider.set(modes.CodeLensProviderRegistry.has(model));\n this._hasDefinitionProvider.set(modes.DefinitionProviderRegistry.has(model));\n this._hasDeclarationProvider.set(modes.DeclarationProviderRegistry.has(model));\n this._hasImplementationProvider.set(modes.ImplementationProviderRegistry.has(model));\n this._hasTypeDefinitionProvider.set(modes.TypeDefinitionProviderRegistry.has(model));\n this._hasHoverProvider.set(modes.HoverProviderRegistry.has(model));\n this._hasDocumentHighlightProvider.set(modes.DocumentHighlightProviderRegistry.has(model));\n this._hasDocumentSymbolProvider.set(modes.DocumentSymbolProviderRegistry.has(model));\n this._hasReferenceProvider.set(modes.ReferenceProviderRegistry.has(model));\n this._hasRenameProvider.set(modes.RenameProviderRegistry.has(model));\n this._hasSignatureHelpProvider.set(modes.SignatureHelpProviderRegistry.has(model));\n this._hasInlineHintsProvider.set(modes.InlineHintsProviderRegistry.has(model));\n this._hasDocumentFormattingProvider.set(modes.DocumentFormattingEditProviderRegistry.has(model) || modes.DocumentRangeFormattingEditProviderRegistry.has(model));\n this._hasDocumentSelectionFormattingProvider.set(modes.DocumentRangeFormattingEditProviderRegistry.has(model));\n this._hasMultipleDocumentFormattingProvider.set(modes.DocumentFormattingEditProviderRegistry.all(model).length + modes.DocumentRangeFormattingEditProviderRegistry.all(model).length > 1);\n this._hasMultipleDocumentSelectionFormattingProvider.set(modes.DocumentRangeFormattingEditProviderRegistry.all(model).length > 1);\n this._isInWalkThrough.set(model.uri.scheme === Schemas.walkThroughSnippet);\n });\n }\n}\nclass CodeEditorWidgetFocusTracker extends Disposable {\n constructor(domElement) {\n super();\n this._onChange = this._register(new Emitter());\n this.onChange = this._onChange.event;\n this._hasFocus = false;\n this._domFocusTracker = this._register(dom.trackFocus(domElement));\n this._register(this._domFocusTracker.onDidFocus(() => {\n this._hasFocus = true;\n this._onChange.fire(undefined);\n }));\n this._register(this._domFocusTracker.onDidBlur(() => {\n this._hasFocus = false;\n this._onChange.fire(undefined);\n }));\n }\n hasFocus() {\n return this._hasFocus;\n }\n}\nconst squigglyStart = encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 6 3' enable-background='new 0 0 6 3' height='3' width='6'><g fill='`);\nconst squigglyEnd = encodeURIComponent(`'><polygon points='5.5,0 2.5,3 1.1,3 4.1,0'/><polygon points='4,0 6,2 6,0.6 5.4,0'/><polygon points='0,2 1,3 2.4,3 0,0.6'/></g></svg>`);\nfunction getSquigglySVGData(color) {\n return squigglyStart + encodeURIComponent(color.toString()) + squigglyEnd;\n}\nconst dotdotdotStart = encodeURIComponent(`<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"3\" width=\"12\"><g fill=\"`);\nconst dotdotdotEnd = encodeURIComponent(`\"><circle cx=\"1\" cy=\"1\" r=\"1\"/><circle cx=\"5\" cy=\"1\" r=\"1\"/><circle cx=\"9\" cy=\"1\" r=\"1\"/></g></svg>`);\nfunction getDotDotDotSVGData(color) {\n return dotdotdotStart + encodeURIComponent(color.toString()) + dotdotdotEnd;\n}\nregisterThemingParticipant((theme, collector) => {\n const errorBorderColor = theme.getColor(editorErrorBorder);\n if (errorBorderColor) {\n collector.addRule(`.monaco-editor .${\"squiggly-error\" /* EditorErrorDecoration */} { border-bottom: 4px double ${errorBorderColor}; }`);\n }\n const errorForeground = theme.getColor(editorErrorForeground);\n if (errorForeground) {\n collector.addRule(`.monaco-editor .${\"squiggly-error\" /* EditorErrorDecoration */} { background: url(\"data:image/svg+xml,${getSquigglySVGData(errorForeground)}\") repeat-x bottom left; }`);\n }\n const errorBackground = theme.getColor(editorErrorBackground);\n if (errorBackground) {\n collector.addRule(`.monaco-editor .${\"squiggly-error\" /* EditorErrorDecoration */}::before { display: block; content: ''; width: 100%; height: 100%; background: ${errorBackground}; }`);\n }\n const warningBorderColor = theme.getColor(editorWarningBorder);\n if (warningBorderColor) {\n collector.addRule(`.monaco-editor .${\"squiggly-warning\" /* EditorWarningDecoration */} { border-bottom: 4px double ${warningBorderColor}; }`);\n }\n const warningForeground = theme.getColor(editorWarningForeground);\n if (warningForeground) {\n collector.addRule(`.monaco-editor .${\"squiggly-warning\" /* EditorWarningDecoration */} { background: url(\"data:image/svg+xml,${getSquigglySVGData(warningForeground)}\") repeat-x bottom left; }`);\n }\n const warningBackground = theme.getColor(editorWarningBackground);\n if (warningBackground) {\n collector.addRule(`.monaco-editor .${\"squiggly-warning\" /* EditorWarningDecoration */}::before { display: block; content: ''; width: 100%; height: 100%; background: ${warningBackground}; }`);\n }\n const infoBorderColor = theme.getColor(editorInfoBorder);\n if (infoBorderColor) {\n collector.addRule(`.monaco-editor .${\"squiggly-info\" /* EditorInfoDecoration */} { border-bottom: 4px double ${infoBorderColor}; }`);\n }\n const infoForeground = theme.getColor(editorInfoForeground);\n if (infoForeground) {\n collector.addRule(`.monaco-editor .${\"squiggly-info\" /* EditorInfoDecoration */} { background: url(\"data:image/svg+xml,${getSquigglySVGData(infoForeground)}\") repeat-x bottom left; }`);\n }\n const infoBackground = theme.getColor(editorInfoBackground);\n if (infoBackground) {\n collector.addRule(`.monaco-editor .${\"squiggly-info\" /* EditorInfoDecoration */}::before { display: block; content: ''; width: 100%; height: 100%; background: ${infoBackground}; }`);\n }\n const hintBorderColor = theme.getColor(editorHintBorder);\n if (hintBorderColor) {\n collector.addRule(`.monaco-editor .${\"squiggly-hint\" /* EditorHintDecoration */} { border-bottom: 2px dotted ${hintBorderColor}; }`);\n }\n const hintForeground = theme.getColor(editorHintForeground);\n if (hintForeground) {\n collector.addRule(`.monaco-editor .${\"squiggly-hint\" /* EditorHintDecoration */} { background: url(\"data:image/svg+xml,${getDotDotDotSVGData(hintForeground)}\") no-repeat bottom left; }`);\n }\n const unnecessaryForeground = theme.getColor(editorUnnecessaryCodeOpacity);\n if (unnecessaryForeground) {\n collector.addRule(`.monaco-editor.showUnused .${\"squiggly-inline-unnecessary\" /* EditorUnnecessaryInlineDecoration */} { opacity: ${unnecessaryForeground.rgba.a}; }`);\n }\n const unnecessaryBorder = theme.getColor(editorUnnecessaryCodeBorder);\n if (unnecessaryBorder) {\n collector.addRule(`.monaco-editor.showUnused .${\"squiggly-unnecessary\" /* EditorUnnecessaryDecoration */} { border-bottom: 2px dashed ${unnecessaryBorder}; }`);\n }\n const deprecatedForeground = theme.getColor(editorForeground) || 'inherit';\n collector.addRule(`.monaco-editor.showDeprecated .${\"squiggly-inline-deprecated\" /* EditorDeprecatedInlineDecoration */} { text-decoration: line-through; text-decoration-color: ${deprecatedForeground}}`);\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar _a;\nimport './media/diffReview.css';\nimport * as nls from '../../../nls.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';\nimport { DomScrollableElement } from '../../../base/browser/ui/scrollbar/scrollableElement.js';\nimport { Action } from '../../../base/common/actions.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { Configuration } from '../config/configuration.js';\nimport { EditorAction, registerEditorAction } from '../editorExtensions.js';\nimport { ICodeEditorService } from '../services/codeEditorService.js';\nimport { EditorFontLigatures } from '../../common/config/editorOptions.js';\nimport { LineTokens } from '../../common/core/lineTokens.js';\nimport { Position } from '../../common/core/position.js';\nimport { editorLineNumbers } from '../../common/view/editorColorRegistry.js';\nimport { RenderLineInput, renderViewLine2 as renderViewLine } from '../../common/viewLayout/viewLineRenderer.js';\nimport { ViewLineRenderingData } from '../../common/viewModel/viewModel.js';\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\nimport { scrollbarShadow } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant, ThemeIcon } from '../../../platform/theme/common/themeService.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { registerIcon } from '../../../platform/theme/common/iconRegistry.js';\nconst DIFF_LINES_PADDING = 3;\nclass DiffEntry {\n constructor(originalLineStart, originalLineEnd, modifiedLineStart, modifiedLineEnd) {\n this.originalLineStart = originalLineStart;\n this.originalLineEnd = originalLineEnd;\n this.modifiedLineStart = modifiedLineStart;\n this.modifiedLineEnd = modifiedLineEnd;\n }\n getType() {\n if (this.originalLineStart === 0) {\n return 1 /* Insert */;\n }\n if (this.modifiedLineStart === 0) {\n return 2 /* Delete */;\n }\n return 0 /* Equal */;\n }\n}\nclass Diff {\n constructor(entries) {\n this.entries = entries;\n }\n}\nconst diffReviewInsertIcon = registerIcon('diff-review-insert', Codicon.add, nls.localize('diffReviewInsertIcon', 'Icon for \\'Insert\\' in diff review.'));\nconst diffReviewRemoveIcon = registerIcon('diff-review-remove', Codicon.remove, nls.localize('diffReviewRemoveIcon', 'Icon for \\'Remove\\' in diff review.'));\nconst diffReviewCloseIcon = registerIcon('diff-review-close', Codicon.close, nls.localize('diffReviewCloseIcon', 'Icon for \\'Close\\' in diff review.'));\nexport class DiffReview extends Disposable {\n constructor(diffEditor) {\n super();\n this._width = 0;\n this._diffEditor = diffEditor;\n this._isVisible = false;\n this.shadow = createFastDomNode(document.createElement('div'));\n this.shadow.setClassName('diff-review-shadow');\n this.actionBarContainer = createFastDomNode(document.createElement('div'));\n this.actionBarContainer.setClassName('diff-review-actions');\n this._actionBar = this._register(new ActionBar(this.actionBarContainer.domNode));\n this._actionBar.push(new Action('diffreview.close', nls.localize('label.close', \"Close\"), 'close-diff-review ' + ThemeIcon.asClassName(diffReviewCloseIcon), true, () => __awaiter(this, void 0, void 0, function* () { return this.hide(); })), { label: false, icon: true });\n this.domNode = createFastDomNode(document.createElement('div'));\n this.domNode.setClassName('diff-review monaco-editor-background');\n this._content = createFastDomNode(document.createElement('div'));\n this._content.setClassName('diff-review-content');\n this._content.setAttribute('role', 'code');\n this.scrollbar = this._register(new DomScrollableElement(this._content.domNode, {}));\n this.domNode.domNode.appendChild(this.scrollbar.getDomNode());\n this._register(diffEditor.onDidUpdateDiff(() => {\n if (!this._isVisible) {\n return;\n }\n this._diffs = this._compute();\n this._render();\n }));\n this._register(diffEditor.getModifiedEditor().onDidChangeCursorPosition(() => {\n if (!this._isVisible) {\n return;\n }\n this._render();\n }));\n this._register(dom.addStandardDisposableListener(this.domNode.domNode, 'click', (e) => {\n e.preventDefault();\n let row = dom.findParentWithClass(e.target, 'diff-review-row');\n if (row) {\n this._goToRow(row);\n }\n }));\n this._register(dom.addStandardDisposableListener(this.domNode.domNode, 'keydown', (e) => {\n if (e.equals(18 /* DownArrow */)\n || e.equals(2048 /* CtrlCmd */ | 18 /* DownArrow */)\n || e.equals(512 /* Alt */ | 18 /* DownArrow */)) {\n e.preventDefault();\n this._goToRow(this._getNextRow());\n }\n if (e.equals(16 /* UpArrow */)\n || e.equals(2048 /* CtrlCmd */ | 16 /* UpArrow */)\n || e.equals(512 /* Alt */ | 16 /* UpArrow */)) {\n e.preventDefault();\n this._goToRow(this._getPrevRow());\n }\n if (e.equals(9 /* Escape */)\n || e.equals(2048 /* CtrlCmd */ | 9 /* Escape */)\n || e.equals(512 /* Alt */ | 9 /* Escape */)\n || e.equals(1024 /* Shift */ | 9 /* Escape */)) {\n e.preventDefault();\n this.hide();\n }\n if (e.equals(10 /* Space */)\n || e.equals(3 /* Enter */)) {\n e.preventDefault();\n this.accept();\n }\n }));\n this._diffs = [];\n this._currentDiff = null;\n }\n prev() {\n let index = 0;\n if (!this._isVisible) {\n this._diffs = this._compute();\n }\n if (this._isVisible) {\n let currentIndex = -1;\n for (let i = 0, len = this._diffs.length; i < len; i++) {\n if (this._diffs[i] === this._currentDiff) {\n currentIndex = i;\n break;\n }\n }\n index = (this._diffs.length + currentIndex - 1);\n }\n else {\n index = this._findDiffIndex(this._diffEditor.getPosition());\n }\n if (this._diffs.length === 0) {\n // Nothing to do\n return;\n }\n index = index % this._diffs.length;\n const entries = this._diffs[index].entries;\n this._diffEditor.setPosition(new Position(entries[0].modifiedLineStart, 1));\n this._diffEditor.setSelection({ startColumn: 1, startLineNumber: entries[0].modifiedLineStart, endColumn: 1073741824 /* MAX_SAFE_SMALL_INTEGER */, endLineNumber: entries[entries.length - 1].modifiedLineEnd });\n this._isVisible = true;\n this._diffEditor.doLayout();\n this._render();\n this._goToRow(this._getNextRow());\n }\n next() {\n let index = 0;\n if (!this._isVisible) {\n this._diffs = this._compute();\n }\n if (this._isVisible) {\n let currentIndex = -1;\n for (let i = 0, len = this._diffs.length; i < len; i++) {\n if (this._diffs[i] === this._currentDiff) {\n currentIndex = i;\n break;\n }\n }\n index = (currentIndex + 1);\n }\n else {\n index = this._findDiffIndex(this._diffEditor.getPosition());\n }\n if (this._diffs.length === 0) {\n // Nothing to do\n return;\n }\n index = index % this._diffs.length;\n const entries = this._diffs[index].entries;\n this._diffEditor.setPosition(new Position(entries[0].modifiedLineStart, 1));\n this._diffEditor.setSelection({ startColumn: 1, startLineNumber: entries[0].modifiedLineStart, endColumn: 1073741824 /* MAX_SAFE_SMALL_INTEGER */, endLineNumber: entries[entries.length - 1].modifiedLineEnd });\n this._isVisible = true;\n this._diffEditor.doLayout();\n this._render();\n this._goToRow(this._getNextRow());\n }\n accept() {\n let jumpToLineNumber = -1;\n let current = this._getCurrentFocusedRow();\n if (current) {\n let lineNumber = parseInt(current.getAttribute('data-line'), 10);\n if (!isNaN(lineNumber)) {\n jumpToLineNumber = lineNumber;\n }\n }\n this.hide();\n if (jumpToLineNumber !== -1) {\n this._diffEditor.setPosition(new Position(jumpToLineNumber, 1));\n this._diffEditor.revealPosition(new Position(jumpToLineNumber, 1), 1 /* Immediate */);\n }\n }\n hide() {\n this._isVisible = false;\n this._diffEditor.updateOptions({ readOnly: false });\n this._diffEditor.focus();\n this._diffEditor.doLayout();\n this._render();\n }\n _getPrevRow() {\n let current = this._getCurrentFocusedRow();\n if (!current) {\n return this._getFirstRow();\n }\n if (current.previousElementSibling) {\n return current.previousElementSibling;\n }\n return current;\n }\n _getNextRow() {\n let current = this._getCurrentFocusedRow();\n if (!current) {\n return this._getFirstRow();\n }\n if (current.nextElementSibling) {\n return current.nextElementSibling;\n }\n return current;\n }\n _getFirstRow() {\n return this.domNode.domNode.querySelector('.diff-review-row');\n }\n _getCurrentFocusedRow() {\n let result = document.activeElement;\n if (result && /diff-review-row/.test(result.className)) {\n return result;\n }\n return null;\n }\n _goToRow(row) {\n let prev = this._getCurrentFocusedRow();\n row.tabIndex = 0;\n row.focus();\n if (prev && prev !== row) {\n prev.tabIndex = -1;\n }\n this.scrollbar.scanDomNode();\n }\n isVisible() {\n return this._isVisible;\n }\n layout(top, width, height) {\n this._width = width;\n this.shadow.setTop(top - 6);\n this.shadow.setWidth(width);\n this.shadow.setHeight(this._isVisible ? 6 : 0);\n this.domNode.setTop(top);\n this.domNode.setWidth(width);\n this.domNode.setHeight(height);\n this._content.setHeight(height);\n this._content.setWidth(width);\n if (this._isVisible) {\n this.actionBarContainer.setAttribute('aria-hidden', 'false');\n this.actionBarContainer.setDisplay('block');\n }\n else {\n this.actionBarContainer.setAttribute('aria-hidden', 'true');\n this.actionBarContainer.setDisplay('none');\n }\n }\n _compute() {\n const lineChanges = this._diffEditor.getLineChanges();\n if (!lineChanges || lineChanges.length === 0) {\n return [];\n }\n const originalModel = this._diffEditor.getOriginalEditor().getModel();\n const modifiedModel = this._diffEditor.getModifiedEditor().getModel();\n if (!originalModel || !modifiedModel) {\n return [];\n }\n return DiffReview._mergeAdjacent(lineChanges, originalModel.getLineCount(), modifiedModel.getLineCount());\n }\n static _mergeAdjacent(lineChanges, originalLineCount, modifiedLineCount) {\n if (!lineChanges || lineChanges.length === 0) {\n return [];\n }\n let diffs = [], diffsLength = 0;\n for (let i = 0, len = lineChanges.length; i < len; i++) {\n const lineChange = lineChanges[i];\n const originalStart = lineChange.originalStartLineNumber;\n const originalEnd = lineChange.originalEndLineNumber;\n const modifiedStart = lineChange.modifiedStartLineNumber;\n const modifiedEnd = lineChange.modifiedEndLineNumber;\n let r = [], rLength = 0;\n // Emit before anchors\n {\n const originalEqualAbove = (originalEnd === 0 ? originalStart : originalStart - 1);\n const modifiedEqualAbove = (modifiedEnd === 0 ? modifiedStart : modifiedStart - 1);\n // Make sure we don't step into the previous diff\n let minOriginal = 1;\n let minModified = 1;\n if (i > 0) {\n const prevLineChange = lineChanges[i - 1];\n if (prevLineChange.originalEndLineNumber === 0) {\n minOriginal = prevLineChange.originalStartLineNumber + 1;\n }\n else {\n minOriginal = prevLineChange.originalEndLineNumber + 1;\n }\n if (prevLineChange.modifiedEndLineNumber === 0) {\n minModified = prevLineChange.modifiedStartLineNumber + 1;\n }\n else {\n minModified = prevLineChange.modifiedEndLineNumber + 1;\n }\n }\n let fromOriginal = originalEqualAbove - DIFF_LINES_PADDING + 1;\n let fromModified = modifiedEqualAbove - DIFF_LINES_PADDING + 1;\n if (fromOriginal < minOriginal) {\n const delta = minOriginal - fromOriginal;\n fromOriginal = fromOriginal + delta;\n fromModified = fromModified + delta;\n }\n if (fromModified < minModified) {\n const delta = minModified - fromModified;\n fromOriginal = fromOriginal + delta;\n fromModified = fromModified + delta;\n }\n r[rLength++] = new DiffEntry(fromOriginal, originalEqualAbove, fromModified, modifiedEqualAbove);\n }\n // Emit deleted lines\n {\n if (originalEnd !== 0) {\n r[rLength++] = new DiffEntry(originalStart, originalEnd, 0, 0);\n }\n }\n // Emit inserted lines\n {\n if (modifiedEnd !== 0) {\n r[rLength++] = new DiffEntry(0, 0, modifiedStart, modifiedEnd);\n }\n }\n // Emit after anchors\n {\n const originalEqualBelow = (originalEnd === 0 ? originalStart + 1 : originalEnd + 1);\n const modifiedEqualBelow = (modifiedEnd === 0 ? modifiedStart + 1 : modifiedEnd + 1);\n // Make sure we don't step into the next diff\n let maxOriginal = originalLineCount;\n let maxModified = modifiedLineCount;\n if (i + 1 < len) {\n const nextLineChange = lineChanges[i + 1];\n if (nextLineChange.originalEndLineNumber === 0) {\n maxOriginal = nextLineChange.originalStartLineNumber;\n }\n else {\n maxOriginal = nextLineChange.originalStartLineNumber - 1;\n }\n if (nextLineChange.modifiedEndLineNumber === 0) {\n maxModified = nextLineChange.modifiedStartLineNumber;\n }\n else {\n maxModified = nextLineChange.modifiedStartLineNumber - 1;\n }\n }\n let toOriginal = originalEqualBelow + DIFF_LINES_PADDING - 1;\n let toModified = modifiedEqualBelow + DIFF_LINES_PADDING - 1;\n if (toOriginal > maxOriginal) {\n const delta = maxOriginal - toOriginal;\n toOriginal = toOriginal + delta;\n toModified = toModified + delta;\n }\n if (toModified > maxModified) {\n const delta = maxModified - toModified;\n toOriginal = toOriginal + delta;\n toModified = toModified + delta;\n }\n r[rLength++] = new DiffEntry(originalEqualBelow, toOriginal, modifiedEqualBelow, toModified);\n }\n diffs[diffsLength++] = new Diff(r);\n }\n // Merge adjacent diffs\n let curr = diffs[0].entries;\n let r = [], rLength = 0;\n for (let i = 1, len = diffs.length; i < len; i++) {\n const thisDiff = diffs[i].entries;\n const currLast = curr[curr.length - 1];\n const thisFirst = thisDiff[0];\n if (currLast.getType() === 0 /* Equal */\n && thisFirst.getType() === 0 /* Equal */\n && thisFirst.originalLineStart <= currLast.originalLineEnd) {\n // We are dealing with equal lines that overlap\n curr[curr.length - 1] = new DiffEntry(currLast.originalLineStart, thisFirst.originalLineEnd, currLast.modifiedLineStart, thisFirst.modifiedLineEnd);\n curr = curr.concat(thisDiff.slice(1));\n continue;\n }\n r[rLength++] = new Diff(curr);\n curr = thisDiff;\n }\n r[rLength++] = new Diff(curr);\n return r;\n }\n _findDiffIndex(pos) {\n const lineNumber = pos.lineNumber;\n for (let i = 0, len = this._diffs.length; i < len; i++) {\n const diff = this._diffs[i].entries;\n const lastModifiedLine = diff[diff.length - 1].modifiedLineEnd;\n if (lineNumber <= lastModifiedLine) {\n return i;\n }\n }\n return 0;\n }\n _render() {\n const originalOptions = this._diffEditor.getOriginalEditor().getOptions();\n const modifiedOptions = this._diffEditor.getModifiedEditor().getOptions();\n const originalModel = this._diffEditor.getOriginalEditor().getModel();\n const modifiedModel = this._diffEditor.getModifiedEditor().getModel();\n const originalModelOpts = originalModel.getOptions();\n const modifiedModelOpts = modifiedModel.getOptions();\n if (!this._isVisible || !originalModel || !modifiedModel) {\n dom.clearNode(this._content.domNode);\n this._currentDiff = null;\n this.scrollbar.scanDomNode();\n return;\n }\n this._diffEditor.updateOptions({ readOnly: true });\n const diffIndex = this._findDiffIndex(this._diffEditor.getPosition());\n if (this._diffs[diffIndex] === this._currentDiff) {\n return;\n }\n this._currentDiff = this._diffs[diffIndex];\n const diffs = this._diffs[diffIndex].entries;\n let container = document.createElement('div');\n container.className = 'diff-review-table';\n container.setAttribute('role', 'list');\n container.setAttribute('aria-label', 'Difference review. Use \"Stage | Unstage | Revert Selected Ranges\" commands');\n Configuration.applyFontInfoSlow(container, modifiedOptions.get(40 /* fontInfo */));\n let minOriginalLine = 0;\n let maxOriginalLine = 0;\n let minModifiedLine = 0;\n let maxModifiedLine = 0;\n for (let i = 0, len = diffs.length; i < len; i++) {\n const diffEntry = diffs[i];\n const originalLineStart = diffEntry.originalLineStart;\n const originalLineEnd = diffEntry.originalLineEnd;\n const modifiedLineStart = diffEntry.modifiedLineStart;\n const modifiedLineEnd = diffEntry.modifiedLineEnd;\n if (originalLineStart !== 0 && ((minOriginalLine === 0 || originalLineStart < minOriginalLine))) {\n minOriginalLine = originalLineStart;\n }\n if (originalLineEnd !== 0 && ((maxOriginalLine === 0 || originalLineEnd > maxOriginalLine))) {\n maxOriginalLine = originalLineEnd;\n }\n if (modifiedLineStart !== 0 && ((minModifiedLine === 0 || modifiedLineStart < minModifiedLine))) {\n minModifiedLine = modifiedLineStart;\n }\n if (modifiedLineEnd !== 0 && ((maxModifiedLine === 0 || modifiedLineEnd > maxModifiedLine))) {\n maxModifiedLine = modifiedLineEnd;\n }\n }\n let header = document.createElement('div');\n header.className = 'diff-review-row';\n let cell = document.createElement('div');\n cell.className = 'diff-review-cell diff-review-summary';\n const originalChangedLinesCnt = maxOriginalLine - minOriginalLine + 1;\n const modifiedChangedLinesCnt = maxModifiedLine - minModifiedLine + 1;\n cell.appendChild(document.createTextNode(`${diffIndex + 1}/${this._diffs.length}: @@ -${minOriginalLine},${originalChangedLinesCnt} +${minModifiedLine},${modifiedChangedLinesCnt} @@`));\n header.setAttribute('data-line', String(minModifiedLine));\n const getAriaLines = (lines) => {\n if (lines === 0) {\n return nls.localize('no_lines_changed', \"no lines changed\");\n }\n else if (lines === 1) {\n return nls.localize('one_line_changed', \"1 line changed\");\n }\n else {\n return nls.localize('more_lines_changed', \"{0} lines changed\", lines);\n }\n };\n const originalChangedLinesCntAria = getAriaLines(originalChangedLinesCnt);\n const modifiedChangedLinesCntAria = getAriaLines(modifiedChangedLinesCnt);\n header.setAttribute('aria-label', nls.localize({\n key: 'header',\n comment: [\n 'This is the ARIA label for a git diff header.',\n 'A git diff header looks like this: @@ -154,12 +159,39 @@.',\n 'That encodes that at original line 154 (which is now line 159), 12 lines were removed/changed with 39 lines.',\n 'Variables 0 and 1 refer to the diff index out of total number of diffs.',\n 'Variables 2 and 4 will be numbers (a line number).',\n 'Variables 3 and 5 will be \"no lines changed\", \"1 line changed\" or \"X lines changed\", localized separately.'\n ]\n }, \"Difference {0} of {1}: original line {2}, {3}, modified line {4}, {5}\", (diffIndex + 1), this._diffs.length, minOriginalLine, originalChangedLinesCntAria, minModifiedLine, modifiedChangedLinesCntAria));\n header.appendChild(cell);\n // @@ -504,7 +517,7 @@\n header.setAttribute('role', 'listitem');\n container.appendChild(header);\n const lineHeight = modifiedOptions.get(55 /* lineHeight */);\n let modLine = minModifiedLine;\n for (let i = 0, len = diffs.length; i < len; i++) {\n const diffEntry = diffs[i];\n DiffReview._renderSection(container, diffEntry, modLine, lineHeight, this._width, originalOptions, originalModel, originalModelOpts, modifiedOptions, modifiedModel, modifiedModelOpts);\n if (diffEntry.modifiedLineStart !== 0) {\n modLine = diffEntry.modifiedLineEnd;\n }\n }\n dom.clearNode(this._content.domNode);\n this._content.domNode.appendChild(container);\n this.scrollbar.scanDomNode();\n }\n static _renderSection(dest, diffEntry, modLine, lineHeight, width, originalOptions, originalModel, originalModelOpts, modifiedOptions, modifiedModel, modifiedModelOpts) {\n const type = diffEntry.getType();\n let rowClassName = 'diff-review-row';\n let lineNumbersExtraClassName = '';\n const spacerClassName = 'diff-review-spacer';\n let spacerIcon = null;\n switch (type) {\n case 1 /* Insert */:\n rowClassName = 'diff-review-row line-insert';\n lineNumbersExtraClassName = ' char-insert';\n spacerIcon = diffReviewInsertIcon;\n break;\n case 2 /* Delete */:\n rowClassName = 'diff-review-row line-delete';\n lineNumbersExtraClassName = ' char-delete';\n spacerIcon = diffReviewRemoveIcon;\n break;\n }\n const originalLineStart = diffEntry.originalLineStart;\n const originalLineEnd = diffEntry.originalLineEnd;\n const modifiedLineStart = diffEntry.modifiedLineStart;\n const modifiedLineEnd = diffEntry.modifiedLineEnd;\n const cnt = Math.max(modifiedLineEnd - modifiedLineStart, originalLineEnd - originalLineStart);\n const originalLayoutInfo = originalOptions.get(127 /* layoutInfo */);\n const originalLineNumbersWidth = originalLayoutInfo.glyphMarginWidth + originalLayoutInfo.lineNumbersWidth;\n const modifiedLayoutInfo = modifiedOptions.get(127 /* layoutInfo */);\n const modifiedLineNumbersWidth = 10 + modifiedLayoutInfo.glyphMarginWidth + modifiedLayoutInfo.lineNumbersWidth;\n for (let i = 0; i <= cnt; i++) {\n const originalLine = (originalLineStart === 0 ? 0 : originalLineStart + i);\n const modifiedLine = (modifiedLineStart === 0 ? 0 : modifiedLineStart + i);\n const row = document.createElement('div');\n row.style.minWidth = width + 'px';\n row.className = rowClassName;\n row.setAttribute('role', 'listitem');\n if (modifiedLine !== 0) {\n modLine = modifiedLine;\n }\n row.setAttribute('data-line', String(modLine));\n let cell = document.createElement('div');\n cell.className = 'diff-review-cell';\n cell.style.height = `${lineHeight}px`;\n row.appendChild(cell);\n const originalLineNumber = document.createElement('span');\n originalLineNumber.style.width = (originalLineNumbersWidth + 'px');\n originalLineNumber.style.minWidth = (originalLineNumbersWidth + 'px');\n originalLineNumber.className = 'diff-review-line-number' + lineNumbersExtraClassName;\n if (originalLine !== 0) {\n originalLineNumber.appendChild(document.createTextNode(String(originalLine)));\n }\n else {\n originalLineNumber.innerText = '\\u00a0';\n }\n cell.appendChild(originalLineNumber);\n const modifiedLineNumber = document.createElement('span');\n modifiedLineNumber.style.width = (modifiedLineNumbersWidth + 'px');\n modifiedLineNumber.style.minWidth = (modifiedLineNumbersWidth + 'px');\n modifiedLineNumber.style.paddingRight = '10px';\n modifiedLineNumber.className = 'diff-review-line-number' + lineNumbersExtraClassName;\n if (modifiedLine !== 0) {\n modifiedLineNumber.appendChild(document.createTextNode(String(modifiedLine)));\n }\n else {\n modifiedLineNumber.innerText = '\\u00a0';\n }\n cell.appendChild(modifiedLineNumber);\n const spacer = document.createElement('span');\n spacer.className = spacerClassName;\n if (spacerIcon) {\n const spacerCodicon = document.createElement('span');\n spacerCodicon.className = ThemeIcon.asClassName(spacerIcon);\n spacerCodicon.innerText = '\\u00a0\\u00a0';\n spacer.appendChild(spacerCodicon);\n }\n else {\n spacer.innerText = '\\u00a0\\u00a0';\n }\n cell.appendChild(spacer);\n let lineContent;\n if (modifiedLine !== 0) {\n let html = this._renderLine(modifiedModel, modifiedOptions, modifiedModelOpts.tabSize, modifiedLine);\n if (DiffReview._ttPolicy) {\n html = DiffReview._ttPolicy.createHTML(html);\n }\n cell.insertAdjacentHTML('beforeend', html);\n lineContent = modifiedModel.getLineContent(modifiedLine);\n }\n else {\n let html = this._renderLine(originalModel, originalOptions, originalModelOpts.tabSize, originalLine);\n if (DiffReview._ttPolicy) {\n html = DiffReview._ttPolicy.createHTML(html);\n }\n cell.insertAdjacentHTML('beforeend', html);\n lineContent = originalModel.getLineContent(originalLine);\n }\n if (lineContent.length === 0) {\n lineContent = nls.localize('blankLine', \"blank\");\n }\n let ariaLabel = '';\n switch (type) {\n case 0 /* Equal */:\n if (originalLine === modifiedLine) {\n ariaLabel = nls.localize({ key: 'unchangedLine', comment: ['The placeholders are contents of the line and should not be translated.'] }, \"{0} unchanged line {1}\", lineContent, originalLine);\n }\n else {\n ariaLabel = nls.localize('equalLine', \"{0} original line {1} modified line {2}\", lineContent, originalLine, modifiedLine);\n }\n break;\n case 1 /* Insert */:\n ariaLabel = nls.localize('insertLine', \"+ {0} modified line {1}\", lineContent, modifiedLine);\n break;\n case 2 /* Delete */:\n ariaLabel = nls.localize('deleteLine', \"- {0} original line {1}\", lineContent, originalLine);\n break;\n }\n row.setAttribute('aria-label', ariaLabel);\n dest.appendChild(row);\n }\n }\n static _renderLine(model, options, tabSize, lineNumber) {\n const lineContent = model.getLineContent(lineNumber);\n const fontInfo = options.get(40 /* fontInfo */);\n const defaultMetadata = ((0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\n const tokens = new Uint32Array(2);\n tokens[0] = lineContent.length;\n tokens[1] = defaultMetadata;\n const lineTokens = new LineTokens(tokens, lineContent);\n const isBasicASCII = ViewLineRenderingData.isBasicASCII(lineContent, model.mightContainNonBasicASCII());\n const containsRTL = ViewLineRenderingData.containsRTL(lineContent, isBasicASCII, model.mightContainRTL());\n const r = renderViewLine(new RenderLineInput((fontInfo.isMonospace && !options.get(27 /* disableMonospaceOptimizations */)), fontInfo.canUseHalfwidthRightwardsArrow, lineContent, false, isBasicASCII, containsRTL, 0, lineTokens, [], tabSize, 0, fontInfo.spaceWidth, fontInfo.middotWidth, fontInfo.wsmiddotWidth, options.get(102 /* stopRenderingLineAfter */), options.get(85 /* renderWhitespace */), options.get(79 /* renderControlCharacters */), options.get(41 /* fontLigatures */) !== EditorFontLigatures.OFF, null));\n return r.html;\n }\n}\nDiffReview._ttPolicy = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy('diffReview', { createHTML: value => value });\n// theming\nregisterThemingParticipant((theme, collector) => {\n const lineNumbers = theme.getColor(editorLineNumbers);\n if (lineNumbers) {\n collector.addRule(`.monaco-diff-editor .diff-review-line-number { color: ${lineNumbers}; }`);\n }\n const shadow = theme.getColor(scrollbarShadow);\n if (shadow) {\n collector.addRule(`.monaco-diff-editor .diff-review-shadow { box-shadow: ${shadow} 0 -6px 6px -6px inset; }`);\n }\n});\nclass DiffReviewNext extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.diffReview.next',\n label: nls.localize('editor.action.diffReview.next', \"Go to Next Difference\"),\n alias: 'Go to Next Difference',\n precondition: ContextKeyExpr.has('isInDiffEditor'),\n kbOpts: {\n kbExpr: null,\n primary: 65 /* F7 */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n const diffEditor = findFocusedDiffEditor(accessor);\n if (diffEditor) {\n diffEditor.diffReviewNext();\n }\n }\n}\nclass DiffReviewPrev extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.diffReview.prev',\n label: nls.localize('editor.action.diffReview.prev', \"Go to Previous Difference\"),\n alias: 'Go to Previous Difference',\n precondition: ContextKeyExpr.has('isInDiffEditor'),\n kbOpts: {\n kbExpr: null,\n primary: 1024 /* Shift */ | 65 /* F7 */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n const diffEditor = findFocusedDiffEditor(accessor);\n if (diffEditor) {\n diffEditor.diffReviewPrev();\n }\n }\n}\nfunction findFocusedDiffEditor(accessor) {\n const codeEditorService = accessor.get(ICodeEditorService);\n const diffEditors = codeEditorService.listDiffEditors();\n const activeCodeEditor = codeEditorService.getActiveCodeEditor();\n if (!activeCodeEditor) {\n return null;\n }\n for (let i = 0, len = diffEditors.length; i < len; i++) {\n const diffEditor = diffEditors[i];\n if (diffEditor.getModifiedEditor().getId() === activeCodeEditor.getId() || diffEditor.getOriginalEditor().getId() === activeCodeEditor.getId()) {\n return diffEditor;\n }\n }\n return null;\n}\nregisterEditorAction(DiffReviewNext);\nregisterEditorAction(DiffReviewPrev);\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../../nls.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { Action } from '../../../base/common/actions.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { Range } from '../../common/core/range.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nexport class InlineDiffMargin extends Disposable {\n constructor(_viewZoneId, _marginDomNode, editor, diff, _contextMenuService, _clipboardService) {\n super();\n this._viewZoneId = _viewZoneId;\n this._marginDomNode = _marginDomNode;\n this.editor = editor;\n this.diff = diff;\n this._contextMenuService = _contextMenuService;\n this._clipboardService = _clipboardService;\n this._visibility = false;\n // make sure the diff margin shows above overlay.\n this._marginDomNode.style.zIndex = '10';\n this._diffActions = document.createElement('div');\n this._diffActions.className = Codicon.lightBulb.classNames + ' lightbulb-glyph';\n this._diffActions.style.position = 'absolute';\n const lineHeight = editor.getOption(55 /* lineHeight */);\n const lineFeed = editor.getModel().getEOL();\n this._diffActions.style.right = '0px';\n this._diffActions.style.visibility = 'hidden';\n this._diffActions.style.height = `${lineHeight}px`;\n this._diffActions.style.lineHeight = `${lineHeight}px`;\n this._marginDomNode.appendChild(this._diffActions);\n const actions = [];\n // default action\n actions.push(new Action('diff.clipboard.copyDeletedContent', diff.originalEndLineNumber > diff.modifiedStartLineNumber\n ? nls.localize('diff.clipboard.copyDeletedLinesContent.label', \"Copy deleted lines\")\n : nls.localize('diff.clipboard.copyDeletedLinesContent.single.label', \"Copy deleted line\"), undefined, true, () => __awaiter(this, void 0, void 0, function* () {\n const range = new Range(diff.originalStartLineNumber, 1, diff.originalEndLineNumber + 1, 1);\n const deletedText = diff.originalModel.getValueInRange(range);\n yield this._clipboardService.writeText(deletedText);\n })));\n let currentLineNumberOffset = 0;\n let copyLineAction = undefined;\n if (diff.originalEndLineNumber > diff.modifiedStartLineNumber) {\n copyLineAction = new Action('diff.clipboard.copyDeletedLineContent', nls.localize('diff.clipboard.copyDeletedLineContent.label', \"Copy deleted line ({0})\", diff.originalStartLineNumber), undefined, true, () => __awaiter(this, void 0, void 0, function* () {\n const lineContent = diff.originalModel.getLineContent(diff.originalStartLineNumber + currentLineNumberOffset);\n yield this._clipboardService.writeText(lineContent);\n }));\n actions.push(copyLineAction);\n }\n const readOnly = editor.getOption(77 /* readOnly */);\n if (!readOnly) {\n actions.push(new Action('diff.inline.revertChange', nls.localize('diff.inline.revertChange.label', \"Revert this change\"), undefined, true, () => __awaiter(this, void 0, void 0, function* () {\n const range = new Range(diff.originalStartLineNumber, 1, diff.originalEndLineNumber, diff.originalModel.getLineMaxColumn(diff.originalEndLineNumber));\n const deletedText = diff.originalModel.getValueInRange(range);\n if (diff.modifiedEndLineNumber === 0) {\n // deletion only\n const column = editor.getModel().getLineMaxColumn(diff.modifiedStartLineNumber);\n editor.executeEdits('diffEditor', [\n {\n range: new Range(diff.modifiedStartLineNumber, column, diff.modifiedStartLineNumber, column),\n text: lineFeed + deletedText\n }\n ]);\n }\n else {\n const column = editor.getModel().getLineMaxColumn(diff.modifiedEndLineNumber);\n editor.executeEdits('diffEditor', [\n {\n range: new Range(diff.modifiedStartLineNumber, 1, diff.modifiedEndLineNumber, column),\n text: deletedText\n }\n ]);\n }\n })));\n }\n const showContextMenu = (x, y) => {\n this._contextMenuService.showContextMenu({\n getAnchor: () => {\n return {\n x,\n y\n };\n },\n getActions: () => {\n if (copyLineAction) {\n copyLineAction.label = nls.localize('diff.clipboard.copyDeletedLineContent.label', \"Copy deleted line ({0})\", diff.originalStartLineNumber + currentLineNumberOffset);\n }\n return actions;\n },\n autoSelectFirstItem: true\n });\n };\n this._register(dom.addStandardDisposableListener(this._diffActions, 'mousedown', e => {\n const { top, height } = dom.getDomNodePagePosition(this._diffActions);\n let pad = Math.floor(lineHeight / 3);\n e.preventDefault();\n showContextMenu(e.posx, top + height + pad);\n }));\n this._register(editor.onMouseMove((e) => {\n if (e.target.type === 8 /* CONTENT_VIEW_ZONE */ || e.target.type === 5 /* GUTTER_VIEW_ZONE */) {\n const viewZoneId = e.target.detail.viewZoneId;\n if (viewZoneId === this._viewZoneId) {\n this.visibility = true;\n currentLineNumberOffset = this._updateLightBulbPosition(this._marginDomNode, e.event.browserEvent.y, lineHeight);\n }\n else {\n this.visibility = false;\n }\n }\n else {\n this.visibility = false;\n }\n }));\n this._register(editor.onMouseDown((e) => {\n if (!e.event.rightButton) {\n return;\n }\n if (e.target.type === 8 /* CONTENT_VIEW_ZONE */ || e.target.type === 5 /* GUTTER_VIEW_ZONE */) {\n const viewZoneId = e.target.detail.viewZoneId;\n if (viewZoneId === this._viewZoneId) {\n e.event.preventDefault();\n currentLineNumberOffset = this._updateLightBulbPosition(this._marginDomNode, e.event.browserEvent.y, lineHeight);\n showContextMenu(e.event.posx, e.event.posy + lineHeight);\n }\n }\n }));\n }\n get visibility() {\n return this._visibility;\n }\n set visibility(_visibility) {\n if (this._visibility !== _visibility) {\n this._visibility = _visibility;\n if (_visibility) {\n this._diffActions.style.visibility = 'visible';\n }\n else {\n this._diffActions.style.visibility = 'hidden';\n }\n }\n }\n _updateLightBulbPosition(marginDomNode, y, lineHeight) {\n const { top } = dom.getDomNodePagePosition(marginDomNode);\n const offset = y - top;\n const lineNumberOffset = Math.floor(offset / lineHeight);\n const newTop = lineNumberOffset * lineHeight;\n this._diffActions.style.top = `${newTop}px`;\n if (this.diff.viewLineCounts) {\n let acc = 0;\n for (let i = 0; i < this.diff.viewLineCounts.length; i++) {\n acc += this.diff.viewLineCounts[i];\n if (lineNumberOffset < acc) {\n return i;\n }\n }\n }\n return lineNumberOffset;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar _a;\nimport './media/diffEditor.css';\nimport * as nls from '../../../nls.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { Sash } from '../../../base/browser/ui/sash/sash.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { Configuration } from '../config/configuration.js';\nimport { StableEditorScrollState } from '../core/editorState.js';\nimport { ICodeEditorService } from '../services/codeEditorService.js';\nimport { CodeEditorWidget } from './codeEditorWidget.js';\nimport { DiffReview } from './diffReview.js';\nimport { EditorOptions, EditorFontLigatures, stringSet as validateStringSetOption, boolean as validateBooleanOption } from '../../common/config/editorOptions.js';\nimport { Range } from '../../common/core/range.js';\nimport { createStringBuilder } from '../../common/core/stringBuilder.js';\nimport * as editorCommon from '../../common/editorCommon.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\nimport { OverviewRulerZone } from '../../common/view/overviewZoneManager.js';\nimport { LineDecoration } from '../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine } from '../../common/viewLayout/viewLineRenderer.js';\nimport { InlineDecoration, ViewLineRenderingData } from '../../common/viewModel/viewModel.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { defaultInsertColor, defaultRemoveColor, diffBorder, diffInserted, diffInsertedOutline, diffRemoved, diffRemovedOutline, scrollbarShadow, scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground, diffDiagonalFill } from '../../../platform/theme/common/colorRegistry.js';\nimport { IThemeService, getThemeTypeSelector, registerThemingParticipant, ThemeIcon } from '../../../platform/theme/common/themeService.js';\nimport { IContextMenuService } from '../../../platform/contextview/browser/contextView.js';\nimport { InlineDiffMargin } from './inlineDiffMargin.js';\nimport { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js';\nimport { EditorExtensionsRegistry } from '../editorExtensions.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\nimport { ElementSizeObserver } from '../config/elementSizeObserver.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../base/browser/ui/mouseCursor/mouseCursor.js';\nimport { registerIcon } from '../../../platform/theme/common/iconRegistry.js';\nclass VisualEditorState {\n constructor(_contextMenuService, _clipboardService) {\n this._contextMenuService = _contextMenuService;\n this._clipboardService = _clipboardService;\n this._zones = [];\n this._inlineDiffMargins = [];\n this._zonesMap = {};\n this._decorations = [];\n }\n getForeignViewZones(allViewZones) {\n return allViewZones.filter((z) => !this._zonesMap[String(z.id)]);\n }\n clean(editor) {\n // (1) View zones\n if (this._zones.length > 0) {\n editor.changeViewZones((viewChangeAccessor) => {\n for (const zoneId of this._zones) {\n viewChangeAccessor.removeZone(zoneId);\n }\n });\n }\n this._zones = [];\n this._zonesMap = {};\n // (2) Model decorations\n this._decorations = editor.deltaDecorations(this._decorations, []);\n }\n apply(editor, overviewRuler, newDecorations, restoreScrollState) {\n const scrollState = restoreScrollState ? StableEditorScrollState.capture(editor) : null;\n // view zones\n editor.changeViewZones((viewChangeAccessor) => {\n for (const zoneId of this._zones) {\n viewChangeAccessor.removeZone(zoneId);\n }\n for (const inlineDiffMargin of this._inlineDiffMargins) {\n inlineDiffMargin.dispose();\n }\n this._zones = [];\n this._zonesMap = {};\n this._inlineDiffMargins = [];\n for (let i = 0, length = newDecorations.zones.length; i < length; i++) {\n const viewZone = newDecorations.zones[i];\n viewZone.suppressMouseDown = true;\n const zoneId = viewChangeAccessor.addZone(viewZone);\n this._zones.push(zoneId);\n this._zonesMap[String(zoneId)] = true;\n if (newDecorations.zones[i].diff && viewZone.marginDomNode) {\n viewZone.suppressMouseDown = false;\n this._inlineDiffMargins.push(new InlineDiffMargin(zoneId, viewZone.marginDomNode, editor, newDecorations.zones[i].diff, this._contextMenuService, this._clipboardService));\n }\n }\n });\n if (scrollState) {\n scrollState.restore(editor);\n }\n // decorations\n this._decorations = editor.deltaDecorations(this._decorations, newDecorations.decorations);\n // overview ruler\n if (overviewRuler) {\n overviewRuler.setZones(newDecorations.overviewZones);\n }\n }\n}\nlet DIFF_EDITOR_ID = 0;\nconst diffInsertIcon = registerIcon('diff-insert', Codicon.add, nls.localize('diffInsertIcon', 'Line decoration for inserts in the diff editor.'));\nconst diffRemoveIcon = registerIcon('diff-remove', Codicon.remove, nls.localize('diffRemoveIcon', 'Line decoration for removals in the diff editor.'));\nconst ttPolicy = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy('diffEditorWidget', { createHTML: value => value });\nlet DiffEditorWidget = class DiffEditorWidget extends Disposable {\n constructor(domElement, options, codeEditorWidgetOptions, clipboardService, editorWorkerService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService, contextMenuService, _editorProgressService) {\n super();\n this._editorProgressService = _editorProgressService;\n this._onDidDispose = this._register(new Emitter());\n this.onDidDispose = this._onDidDispose.event;\n this._onDidUpdateDiff = this._register(new Emitter());\n this.onDidUpdateDiff = this._onDidUpdateDiff.event;\n this._onDidContentSizeChange = this._register(new Emitter());\n this._lastOriginalWarning = null;\n this._lastModifiedWarning = null;\n this._editorWorkerService = editorWorkerService;\n this._codeEditorService = codeEditorService;\n this._contextKeyService = this._register(contextKeyService.createScoped(domElement));\n this._instantiationService = instantiationService.createChild(new ServiceCollection([IContextKeyService, this._contextKeyService]));\n this._contextKeyService.createKey('isInDiffEditor', true);\n this._themeService = themeService;\n this._notificationService = notificationService;\n this._id = (++DIFF_EDITOR_ID);\n this._state = 0 /* Idle */;\n this._updatingDiffProgress = null;\n this._domElement = domElement;\n options = options || {};\n // renderSideBySide\n this._renderSideBySide = true;\n if (typeof options.renderSideBySide !== 'undefined') {\n this._renderSideBySide = options.renderSideBySide;\n }\n // maxComputationTime\n this._maxComputationTime = 5000;\n if (typeof options.maxComputationTime !== 'undefined') {\n this._maxComputationTime = options.maxComputationTime;\n }\n // ignoreTrimWhitespace\n this._ignoreTrimWhitespace = true;\n if (typeof options.ignoreTrimWhitespace !== 'undefined') {\n this._ignoreTrimWhitespace = options.ignoreTrimWhitespace;\n }\n // renderIndicators\n this._renderIndicators = true;\n if (typeof options.renderIndicators !== 'undefined') {\n this._renderIndicators = options.renderIndicators;\n }\n this._originalIsEditable = validateBooleanOption(options.originalEditable, false);\n this._diffCodeLens = validateBooleanOption(options.diffCodeLens, false);\n this._diffWordWrap = validateDiffWordWrap(options.diffWordWrap, 'inherit');\n if (typeof options.isInEmbeddedEditor !== 'undefined') {\n this._contextKeyService.createKey('isInEmbeddedDiffEditor', options.isInEmbeddedEditor);\n }\n else {\n this._contextKeyService.createKey('isInEmbeddedDiffEditor', false);\n }\n this._renderOverviewRuler = true;\n if (typeof options.renderOverviewRuler !== 'undefined') {\n this._renderOverviewRuler = Boolean(options.renderOverviewRuler);\n }\n this._updateDecorationsRunner = this._register(new RunOnceScheduler(() => this._updateDecorations(), 0));\n this._containerDomElement = document.createElement('div');\n this._containerDomElement.className = DiffEditorWidget._getClassName(this._themeService.getColorTheme(), this._renderSideBySide);\n this._containerDomElement.style.position = 'relative';\n this._containerDomElement.style.height = '100%';\n this._domElement.appendChild(this._containerDomElement);\n this._overviewViewportDomElement = createFastDomNode(document.createElement('div'));\n this._overviewViewportDomElement.setClassName('diffViewport');\n this._overviewViewportDomElement.setPosition('absolute');\n this._overviewDomElement = document.createElement('div');\n this._overviewDomElement.className = 'diffOverview';\n this._overviewDomElement.style.position = 'absolute';\n this._overviewDomElement.appendChild(this._overviewViewportDomElement.domNode);\n this._register(dom.addStandardDisposableListener(this._overviewDomElement, 'mousedown', (e) => {\n this._modifiedEditor.delegateVerticalScrollbarMouseDown(e);\n }));\n if (this._renderOverviewRuler) {\n this._containerDomElement.appendChild(this._overviewDomElement);\n }\n // Create left side\n this._originalDomNode = document.createElement('div');\n this._originalDomNode.className = 'editor original';\n this._originalDomNode.style.position = 'absolute';\n this._originalDomNode.style.height = '100%';\n this._containerDomElement.appendChild(this._originalDomNode);\n // Create right side\n this._modifiedDomNode = document.createElement('div');\n this._modifiedDomNode.className = 'editor modified';\n this._modifiedDomNode.style.position = 'absolute';\n this._modifiedDomNode.style.height = '100%';\n this._containerDomElement.appendChild(this._modifiedDomNode);\n this._beginUpdateDecorationsTimeout = -1;\n this._currentlyChangingViewZones = false;\n this._diffComputationToken = 0;\n this._originalEditorState = new VisualEditorState(contextMenuService, clipboardService);\n this._modifiedEditorState = new VisualEditorState(contextMenuService, clipboardService);\n this._isVisible = true;\n this._isHandlingScrollEvent = false;\n this._elementSizeObserver = this._register(new ElementSizeObserver(this._containerDomElement, options.dimension, () => this._onDidContainerSizeChanged()));\n if (options.automaticLayout) {\n this._elementSizeObserver.startObserving();\n }\n this._diffComputationResult = null;\n this._originalEditor = this._createLeftHandSideEditor(options, codeEditorWidgetOptions.originalEditor || {});\n this._modifiedEditor = this._createRightHandSideEditor(options, codeEditorWidgetOptions.modifiedEditor || {});\n this._originalOverviewRuler = null;\n this._modifiedOverviewRuler = null;\n this._reviewPane = new DiffReview(this);\n this._containerDomElement.appendChild(this._reviewPane.domNode.domNode);\n this._containerDomElement.appendChild(this._reviewPane.shadow.domNode);\n this._containerDomElement.appendChild(this._reviewPane.actionBarContainer.domNode);\n // enableSplitViewResizing\n this._enableSplitViewResizing = true;\n if (typeof options.enableSplitViewResizing !== 'undefined') {\n this._enableSplitViewResizing = options.enableSplitViewResizing;\n }\n if (this._renderSideBySide) {\n this._setStrategy(new DiffEditorWidgetSideBySide(this._createDataSource(), this._enableSplitViewResizing));\n }\n else {\n this._setStrategy(new DiffEditorWidgetInline(this._createDataSource(), this._enableSplitViewResizing));\n }\n this._register(themeService.onDidColorThemeChange(t => {\n if (this._strategy && this._strategy.applyColors(t)) {\n this._updateDecorationsRunner.schedule();\n }\n this._containerDomElement.className = DiffEditorWidget._getClassName(this._themeService.getColorTheme(), this._renderSideBySide);\n }));\n const contributions = EditorExtensionsRegistry.getDiffEditorContributions();\n for (const desc of contributions) {\n try {\n this._register(instantiationService.createInstance(desc.ctor, this));\n }\n catch (err) {\n onUnexpectedError(err);\n }\n }\n this._codeEditorService.addDiffEditor(this);\n }\n _setState(newState) {\n if (this._state === newState) {\n return;\n }\n this._state = newState;\n if (this._updatingDiffProgress) {\n this._updatingDiffProgress.done();\n this._updatingDiffProgress = null;\n }\n if (this._state === 1 /* ComputingDiff */) {\n this._updatingDiffProgress = this._editorProgressService.show(true, 1000);\n }\n }\n diffReviewNext() {\n this._reviewPane.next();\n }\n diffReviewPrev() {\n this._reviewPane.prev();\n }\n static _getClassName(theme, renderSideBySide) {\n let result = 'monaco-diff-editor monaco-editor-background ';\n if (renderSideBySide) {\n result += 'side-by-side ';\n }\n result += getThemeTypeSelector(theme.type);\n return result;\n }\n _recreateOverviewRulers() {\n if (!this._renderOverviewRuler) {\n return;\n }\n if (this._originalOverviewRuler) {\n this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode());\n this._originalOverviewRuler.dispose();\n }\n if (this._originalEditor.hasModel()) {\n this._originalOverviewRuler = this._originalEditor.createOverviewRuler('original diffOverviewRuler');\n this._overviewDomElement.appendChild(this._originalOverviewRuler.getDomNode());\n }\n if (this._modifiedOverviewRuler) {\n this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode());\n this._modifiedOverviewRuler.dispose();\n }\n if (this._modifiedEditor.hasModel()) {\n this._modifiedOverviewRuler = this._modifiedEditor.createOverviewRuler('modified diffOverviewRuler');\n this._overviewDomElement.appendChild(this._modifiedOverviewRuler.getDomNode());\n }\n this._layoutOverviewRulers();\n }\n _createLeftHandSideEditor(options, codeEditorWidgetOptions) {\n const editor = this._createInnerEditor(this._instantiationService, this._originalDomNode, this._adjustOptionsForLeftHandSide(options), codeEditorWidgetOptions);\n this._register(editor.onDidScrollChange((e) => {\n if (this._isHandlingScrollEvent) {\n return;\n }\n if (!e.scrollTopChanged && !e.scrollLeftChanged && !e.scrollHeightChanged) {\n return;\n }\n this._isHandlingScrollEvent = true;\n this._modifiedEditor.setScrollPosition({\n scrollLeft: e.scrollLeft,\n scrollTop: e.scrollTop\n });\n this._isHandlingScrollEvent = false;\n this._layoutOverviewViewport();\n }));\n this._register(editor.onDidChangeViewZones(() => {\n this._onViewZonesChanged();\n }));\n this._register(editor.onDidChangeConfiguration((e) => {\n if (!editor.getModel()) {\n return;\n }\n if (e.hasChanged(40 /* fontInfo */)) {\n this._updateDecorationsRunner.schedule();\n }\n if (e.hasChanged(128 /* wrappingInfo */)) {\n this._updateDecorationsRunner.cancel();\n this._updateDecorations();\n }\n }));\n this._register(editor.onDidChangeModelContent(() => {\n if (this._isVisible) {\n this._beginUpdateDecorationsSoon();\n }\n }));\n const isInDiffLeftEditorKey = this._contextKeyService.createKey('isInDiffLeftEditor', editor.hasWidgetFocus());\n this._register(editor.onDidFocusEditorWidget(() => isInDiffLeftEditorKey.set(true)));\n this._register(editor.onDidBlurEditorWidget(() => isInDiffLeftEditorKey.set(false)));\n this._register(editor.onDidContentSizeChange(e => {\n const width = this._originalEditor.getContentWidth() + this._modifiedEditor.getContentWidth() + DiffEditorWidget.ONE_OVERVIEW_WIDTH;\n const height = Math.max(this._modifiedEditor.getContentHeight(), this._originalEditor.getContentHeight());\n this._onDidContentSizeChange.fire({\n contentHeight: height,\n contentWidth: width,\n contentHeightChanged: e.contentHeightChanged,\n contentWidthChanged: e.contentWidthChanged\n });\n }));\n return editor;\n }\n _createRightHandSideEditor(options, codeEditorWidgetOptions) {\n const editor = this._createInnerEditor(this._instantiationService, this._modifiedDomNode, this._adjustOptionsForRightHandSide(options), codeEditorWidgetOptions);\n this._register(editor.onDidScrollChange((e) => {\n if (this._isHandlingScrollEvent) {\n return;\n }\n if (!e.scrollTopChanged && !e.scrollLeftChanged && !e.scrollHeightChanged) {\n return;\n }\n this._isHandlingScrollEvent = true;\n this._originalEditor.setScrollPosition({\n scrollLeft: e.scrollLeft,\n scrollTop: e.scrollTop\n });\n this._isHandlingScrollEvent = false;\n this._layoutOverviewViewport();\n }));\n this._register(editor.onDidChangeViewZones(() => {\n this._onViewZonesChanged();\n }));\n this._register(editor.onDidChangeConfiguration((e) => {\n if (!editor.getModel()) {\n return;\n }\n if (e.hasChanged(40 /* fontInfo */)) {\n this._updateDecorationsRunner.schedule();\n }\n if (e.hasChanged(128 /* wrappingInfo */)) {\n this._updateDecorationsRunner.cancel();\n this._updateDecorations();\n }\n }));\n this._register(editor.onDidChangeModelContent(() => {\n if (this._isVisible) {\n this._beginUpdateDecorationsSoon();\n }\n }));\n this._register(editor.onDidChangeModelOptions((e) => {\n if (e.tabSize) {\n this._updateDecorationsRunner.schedule();\n }\n }));\n const isInDiffRightEditorKey = this._contextKeyService.createKey('isInDiffRightEditor', editor.hasWidgetFocus());\n this._register(editor.onDidFocusEditorWidget(() => isInDiffRightEditorKey.set(true)));\n this._register(editor.onDidBlurEditorWidget(() => isInDiffRightEditorKey.set(false)));\n this._register(editor.onDidContentSizeChange(e => {\n const width = this._originalEditor.getContentWidth() + this._modifiedEditor.getContentWidth() + DiffEditorWidget.ONE_OVERVIEW_WIDTH;\n const height = Math.max(this._modifiedEditor.getContentHeight(), this._originalEditor.getContentHeight());\n this._onDidContentSizeChange.fire({\n contentHeight: height,\n contentWidth: width,\n contentHeightChanged: e.contentHeightChanged,\n contentWidthChanged: e.contentWidthChanged\n });\n }));\n return editor;\n }\n _createInnerEditor(instantiationService, container, options, editorWidgetOptions) {\n return instantiationService.createInstance(CodeEditorWidget, container, options, editorWidgetOptions);\n }\n dispose() {\n this._codeEditorService.removeDiffEditor(this);\n if (this._beginUpdateDecorationsTimeout !== -1) {\n window.clearTimeout(this._beginUpdateDecorationsTimeout);\n this._beginUpdateDecorationsTimeout = -1;\n }\n this._cleanViewZonesAndDecorations();\n if (this._originalOverviewRuler) {\n this._overviewDomElement.removeChild(this._originalOverviewRuler.getDomNode());\n this._originalOverviewRuler.dispose();\n }\n if (this._modifiedOverviewRuler) {\n this._overviewDomElement.removeChild(this._modifiedOverviewRuler.getDomNode());\n this._modifiedOverviewRuler.dispose();\n }\n this._overviewDomElement.removeChild(this._overviewViewportDomElement.domNode);\n if (this._renderOverviewRuler) {\n this._containerDomElement.removeChild(this._overviewDomElement);\n }\n this._containerDomElement.removeChild(this._originalDomNode);\n this._originalEditor.dispose();\n this._containerDomElement.removeChild(this._modifiedDomNode);\n this._modifiedEditor.dispose();\n this._strategy.dispose();\n this._containerDomElement.removeChild(this._reviewPane.domNode.domNode);\n this._containerDomElement.removeChild(this._reviewPane.shadow.domNode);\n this._containerDomElement.removeChild(this._reviewPane.actionBarContainer.domNode);\n this._reviewPane.dispose();\n this._domElement.removeChild(this._containerDomElement);\n this._onDidDispose.fire();\n super.dispose();\n }\n //------------ begin IDiffEditor methods\n getId() {\n return this.getEditorType() + ':' + this._id;\n }\n getEditorType() {\n return editorCommon.EditorType.IDiffEditor;\n }\n getLineChanges() {\n if (!this._diffComputationResult) {\n return null;\n }\n return this._diffComputationResult.changes;\n }\n getOriginalEditor() {\n return this._originalEditor;\n }\n getModifiedEditor() {\n return this._modifiedEditor;\n }\n updateOptions(newOptions) {\n // Handle side by side\n let renderSideBySideChanged = false;\n if (typeof newOptions.renderSideBySide !== 'undefined') {\n if (this._renderSideBySide !== newOptions.renderSideBySide) {\n this._renderSideBySide = newOptions.renderSideBySide;\n renderSideBySideChanged = true;\n }\n }\n if (typeof newOptions.maxComputationTime !== 'undefined') {\n this._maxComputationTime = newOptions.maxComputationTime;\n if (this._isVisible) {\n this._beginUpdateDecorationsSoon();\n }\n }\n let beginUpdateDecorations = false;\n if (typeof newOptions.ignoreTrimWhitespace !== 'undefined') {\n if (this._ignoreTrimWhitespace !== newOptions.ignoreTrimWhitespace) {\n this._ignoreTrimWhitespace = newOptions.ignoreTrimWhitespace;\n // Begin comparing\n beginUpdateDecorations = true;\n }\n }\n if (typeof newOptions.renderIndicators !== 'undefined') {\n if (this._renderIndicators !== newOptions.renderIndicators) {\n this._renderIndicators = newOptions.renderIndicators;\n beginUpdateDecorations = true;\n }\n }\n if (beginUpdateDecorations) {\n this._beginUpdateDecorations();\n }\n this._originalIsEditable = validateBooleanOption(newOptions.originalEditable, this._originalIsEditable);\n this._diffCodeLens = validateBooleanOption(newOptions.diffCodeLens, this._diffCodeLens);\n this._diffWordWrap = validateDiffWordWrap(newOptions.diffWordWrap, this._diffWordWrap);\n this._modifiedEditor.updateOptions(this._adjustOptionsForRightHandSide(newOptions));\n this._originalEditor.updateOptions(this._adjustOptionsForLeftHandSide(newOptions));\n // enableSplitViewResizing\n if (typeof newOptions.enableSplitViewResizing !== 'undefined') {\n this._enableSplitViewResizing = newOptions.enableSplitViewResizing;\n }\n this._strategy.setEnableSplitViewResizing(this._enableSplitViewResizing);\n // renderSideBySide\n if (renderSideBySideChanged) {\n if (this._renderSideBySide) {\n this._setStrategy(new DiffEditorWidgetSideBySide(this._createDataSource(), this._enableSplitViewResizing));\n }\n else {\n this._setStrategy(new DiffEditorWidgetInline(this._createDataSource(), this._enableSplitViewResizing));\n }\n // Update class name\n this._containerDomElement.className = DiffEditorWidget._getClassName(this._themeService.getColorTheme(), this._renderSideBySide);\n }\n // renderOverviewRuler\n if (typeof newOptions.renderOverviewRuler !== 'undefined' && this._renderOverviewRuler !== newOptions.renderOverviewRuler) {\n this._renderOverviewRuler = newOptions.renderOverviewRuler;\n if (this._renderOverviewRuler) {\n this._containerDomElement.appendChild(this._overviewDomElement);\n }\n else {\n this._containerDomElement.removeChild(this._overviewDomElement);\n }\n }\n }\n getModel() {\n return {\n original: this._originalEditor.getModel(),\n modified: this._modifiedEditor.getModel()\n };\n }\n setModel(model) {\n // Guard us against partial null model\n if (model && (!model.original || !model.modified)) {\n throw new Error(!model.original ? 'DiffEditorWidget.setModel: Original model is null' : 'DiffEditorWidget.setModel: Modified model is null');\n }\n // Remove all view zones & decorations\n this._cleanViewZonesAndDecorations();\n // Update code editor models\n this._originalEditor.setModel(model ? model.original : null);\n this._modifiedEditor.setModel(model ? model.modified : null);\n this._updateDecorationsRunner.cancel();\n // this.originalEditor.onDidChangeModelOptions\n if (model) {\n this._originalEditor.setScrollTop(0);\n this._modifiedEditor.setScrollTop(0);\n }\n // Disable any diff computations that will come in\n this._diffComputationResult = null;\n this._diffComputationToken++;\n this._setState(0 /* Idle */);\n if (model) {\n this._recreateOverviewRulers();\n // Begin comparing\n this._beginUpdateDecorations();\n }\n this._layoutOverviewViewport();\n }\n getDomNode() {\n return this._domElement;\n }\n getVisibleColumnFromPosition(position) {\n return this._modifiedEditor.getVisibleColumnFromPosition(position);\n }\n getPosition() {\n return this._modifiedEditor.getPosition();\n }\n setPosition(position) {\n this._modifiedEditor.setPosition(position);\n }\n revealLine(lineNumber, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealLine(lineNumber, scrollType);\n }\n revealLineInCenter(lineNumber, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealLineInCenter(lineNumber, scrollType);\n }\n revealLineInCenterIfOutsideViewport(lineNumber, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealLineInCenterIfOutsideViewport(lineNumber, scrollType);\n }\n revealLineNearTop(lineNumber, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealLineNearTop(lineNumber, scrollType);\n }\n revealPosition(position, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealPosition(position, scrollType);\n }\n revealPositionInCenter(position, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealPositionInCenter(position, scrollType);\n }\n revealPositionInCenterIfOutsideViewport(position, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealPositionInCenterIfOutsideViewport(position, scrollType);\n }\n revealPositionNearTop(position, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealPositionNearTop(position, scrollType);\n }\n getSelection() {\n return this._modifiedEditor.getSelection();\n }\n getSelections() {\n return this._modifiedEditor.getSelections();\n }\n setSelection(something) {\n this._modifiedEditor.setSelection(something);\n }\n setSelections(ranges) {\n this._modifiedEditor.setSelections(ranges);\n }\n revealLines(startLineNumber, endLineNumber, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealLines(startLineNumber, endLineNumber, scrollType);\n }\n revealLinesInCenter(startLineNumber, endLineNumber, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealLinesInCenter(startLineNumber, endLineNumber, scrollType);\n }\n revealLinesInCenterIfOutsideViewport(startLineNumber, endLineNumber, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealLinesInCenterIfOutsideViewport(startLineNumber, endLineNumber, scrollType);\n }\n revealLinesNearTop(startLineNumber, endLineNumber, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealLinesNearTop(startLineNumber, endLineNumber, scrollType);\n }\n revealRange(range, scrollType = 0 /* Smooth */, revealVerticalInCenter = false, revealHorizontal = true) {\n this._modifiedEditor.revealRange(range, scrollType, revealVerticalInCenter, revealHorizontal);\n }\n revealRangeInCenter(range, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealRangeInCenter(range, scrollType);\n }\n revealRangeInCenterIfOutsideViewport(range, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealRangeInCenterIfOutsideViewport(range, scrollType);\n }\n revealRangeNearTop(range, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealRangeNearTop(range, scrollType);\n }\n revealRangeNearTopIfOutsideViewport(range, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealRangeNearTopIfOutsideViewport(range, scrollType);\n }\n revealRangeAtTop(range, scrollType = 0 /* Smooth */) {\n this._modifiedEditor.revealRangeAtTop(range, scrollType);\n }\n getSupportedActions() {\n return this._modifiedEditor.getSupportedActions();\n }\n saveViewState() {\n const originalViewState = this._originalEditor.saveViewState();\n const modifiedViewState = this._modifiedEditor.saveViewState();\n return {\n original: originalViewState,\n modified: modifiedViewState\n };\n }\n restoreViewState(s) {\n if (s && s.original && s.modified) {\n const diffEditorState = s;\n this._originalEditor.restoreViewState(diffEditorState.original);\n this._modifiedEditor.restoreViewState(diffEditorState.modified);\n }\n }\n layout(dimension) {\n this._elementSizeObserver.observe(dimension);\n }\n focus() {\n this._modifiedEditor.focus();\n }\n hasTextFocus() {\n return this._originalEditor.hasTextFocus() || this._modifiedEditor.hasTextFocus();\n }\n trigger(source, handlerId, payload) {\n this._modifiedEditor.trigger(source, handlerId, payload);\n }\n changeDecorations(callback) {\n return this._modifiedEditor.changeDecorations(callback);\n }\n //------------ end IDiffEditor methods\n //------------ begin layouting methods\n _onDidContainerSizeChanged() {\n this._doLayout();\n }\n _getReviewHeight() {\n return this._reviewPane.isVisible() ? this._elementSizeObserver.getHeight() : 0;\n }\n _layoutOverviewRulers() {\n if (!this._renderOverviewRuler) {\n return;\n }\n if (!this._originalOverviewRuler || !this._modifiedOverviewRuler) {\n return;\n }\n const height = this._elementSizeObserver.getHeight();\n const reviewHeight = this._getReviewHeight();\n const freeSpace = DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH - 2 * DiffEditorWidget.ONE_OVERVIEW_WIDTH;\n const layoutInfo = this._modifiedEditor.getLayoutInfo();\n if (layoutInfo) {\n this._originalOverviewRuler.setLayout({\n top: 0,\n width: DiffEditorWidget.ONE_OVERVIEW_WIDTH,\n right: freeSpace + DiffEditorWidget.ONE_OVERVIEW_WIDTH,\n height: (height - reviewHeight)\n });\n this._modifiedOverviewRuler.setLayout({\n top: 0,\n right: 0,\n width: DiffEditorWidget.ONE_OVERVIEW_WIDTH,\n height: (height - reviewHeight)\n });\n }\n }\n //------------ end layouting methods\n _onViewZonesChanged() {\n if (this._currentlyChangingViewZones) {\n return;\n }\n this._updateDecorationsRunner.schedule();\n }\n _beginUpdateDecorationsSoon() {\n // Clear previous timeout if necessary\n if (this._beginUpdateDecorationsTimeout !== -1) {\n window.clearTimeout(this._beginUpdateDecorationsTimeout);\n this._beginUpdateDecorationsTimeout = -1;\n }\n this._beginUpdateDecorationsTimeout = window.setTimeout(() => this._beginUpdateDecorations(), DiffEditorWidget.UPDATE_DIFF_DECORATIONS_DELAY);\n }\n static _equals(a, b) {\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n return (a.toString() === b.toString());\n }\n _beginUpdateDecorations() {\n this._beginUpdateDecorationsTimeout = -1;\n const currentOriginalModel = this._originalEditor.getModel();\n const currentModifiedModel = this._modifiedEditor.getModel();\n if (!currentOriginalModel || !currentModifiedModel) {\n return;\n }\n // Prevent old diff requests to come if a new request has been initiated\n // The best method would be to call cancel on the Promise, but this is not\n // yet supported, so using tokens for now.\n this._diffComputationToken++;\n const currentToken = this._diffComputationToken;\n this._setState(1 /* ComputingDiff */);\n if (!this._editorWorkerService.canComputeDiff(currentOriginalModel.uri, currentModifiedModel.uri)) {\n if (!DiffEditorWidget._equals(currentOriginalModel.uri, this._lastOriginalWarning)\n || !DiffEditorWidget._equals(currentModifiedModel.uri, this._lastModifiedWarning)) {\n this._lastOriginalWarning = currentOriginalModel.uri;\n this._lastModifiedWarning = currentModifiedModel.uri;\n this._notificationService.warn(nls.localize(\"diff.tooLarge\", \"Cannot compare files because one file is too large.\"));\n }\n return;\n }\n this._editorWorkerService.computeDiff(currentOriginalModel.uri, currentModifiedModel.uri, this._ignoreTrimWhitespace, this._maxComputationTime).then((result) => {\n if (currentToken === this._diffComputationToken\n && currentOriginalModel === this._originalEditor.getModel()\n && currentModifiedModel === this._modifiedEditor.getModel()) {\n this._setState(2 /* DiffComputed */);\n this._diffComputationResult = result;\n this._updateDecorationsRunner.schedule();\n this._onDidUpdateDiff.fire();\n }\n }, (error) => {\n if (currentToken === this._diffComputationToken\n && currentOriginalModel === this._originalEditor.getModel()\n && currentModifiedModel === this._modifiedEditor.getModel()) {\n this._setState(2 /* DiffComputed */);\n this._diffComputationResult = null;\n this._updateDecorationsRunner.schedule();\n }\n });\n }\n _cleanViewZonesAndDecorations() {\n this._originalEditorState.clean(this._originalEditor);\n this._modifiedEditorState.clean(this._modifiedEditor);\n }\n _updateDecorations() {\n if (!this._originalEditor.getModel() || !this._modifiedEditor.getModel()) {\n return;\n }\n const lineChanges = (this._diffComputationResult ? this._diffComputationResult.changes : []);\n const foreignOriginal = this._originalEditorState.getForeignViewZones(this._originalEditor.getWhitespaces());\n const foreignModified = this._modifiedEditorState.getForeignViewZones(this._modifiedEditor.getWhitespaces());\n const diffDecorations = this._strategy.getEditorsDiffDecorations(lineChanges, this._ignoreTrimWhitespace, this._renderIndicators, foreignOriginal, foreignModified);\n try {\n this._currentlyChangingViewZones = true;\n this._originalEditorState.apply(this._originalEditor, this._originalOverviewRuler, diffDecorations.original, false);\n this._modifiedEditorState.apply(this._modifiedEditor, this._modifiedOverviewRuler, diffDecorations.modified, true);\n }\n finally {\n this._currentlyChangingViewZones = false;\n }\n }\n _adjustOptionsForSubEditor(options) {\n const clonedOptions = Object.assign({}, options);\n clonedOptions.inDiffEditor = true;\n clonedOptions.automaticLayout = false;\n // Clone scrollbar options before changing them\n clonedOptions.scrollbar = Object.assign({}, (clonedOptions.scrollbar || {}));\n clonedOptions.scrollbar.vertical = 'visible';\n clonedOptions.folding = false;\n clonedOptions.codeLens = this._diffCodeLens;\n clonedOptions.fixedOverflowWidgets = true;\n // clonedOptions.lineDecorationsWidth = '2ch';\n // Clone minimap options before changing them\n clonedOptions.minimap = Object.assign({}, (clonedOptions.minimap || {}));\n clonedOptions.minimap.enabled = false;\n return clonedOptions;\n }\n _adjustOptionsForLeftHandSide(options) {\n const result = this._adjustOptionsForSubEditor(options);\n if (!this._renderSideBySide) {\n // never wrap hidden editor\n result.wordWrapOverride1 = 'off';\n }\n else {\n result.wordWrapOverride1 = this._diffWordWrap;\n }\n if (options.originalAriaLabel) {\n result.ariaLabel = options.originalAriaLabel;\n }\n result.readOnly = !this._originalIsEditable;\n result.extraEditorClassName = 'original-in-monaco-diff-editor';\n return Object.assign(Object.assign({}, result), { dimension: {\n height: 0,\n width: 0\n } });\n }\n _adjustOptionsForRightHandSide(options) {\n const result = this._adjustOptionsForSubEditor(options);\n if (options.modifiedAriaLabel) {\n result.ariaLabel = options.modifiedAriaLabel;\n }\n result.wordWrapOverride1 = this._diffWordWrap;\n result.revealHorizontalRightPadding = EditorOptions.revealHorizontalRightPadding.defaultValue + DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH;\n result.scrollbar.verticalHasArrows = false;\n result.extraEditorClassName = 'modified-in-monaco-diff-editor';\n return Object.assign(Object.assign({}, result), { dimension: {\n height: 0,\n width: 0\n } });\n }\n doLayout() {\n this._elementSizeObserver.observe();\n this._doLayout();\n }\n _doLayout() {\n const width = this._elementSizeObserver.getWidth();\n const height = this._elementSizeObserver.getHeight();\n const reviewHeight = this._getReviewHeight();\n const splitPoint = this._strategy.layout();\n this._originalDomNode.style.width = splitPoint + 'px';\n this._originalDomNode.style.left = '0px';\n this._modifiedDomNode.style.width = (width - splitPoint) + 'px';\n this._modifiedDomNode.style.left = splitPoint + 'px';\n this._overviewDomElement.style.top = '0px';\n this._overviewDomElement.style.height = (height - reviewHeight) + 'px';\n this._overviewDomElement.style.width = DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH + 'px';\n this._overviewDomElement.style.left = (width - DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH) + 'px';\n this._overviewViewportDomElement.setWidth(DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH);\n this._overviewViewportDomElement.setHeight(30);\n this._originalEditor.layout({ width: splitPoint, height: (height - reviewHeight) });\n this._modifiedEditor.layout({ width: width - splitPoint - (this._renderOverviewRuler ? DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH : 0), height: (height - reviewHeight) });\n if (this._originalOverviewRuler || this._modifiedOverviewRuler) {\n this._layoutOverviewRulers();\n }\n this._reviewPane.layout(height - reviewHeight, width, reviewHeight);\n this._layoutOverviewViewport();\n }\n _layoutOverviewViewport() {\n const layout = this._computeOverviewViewport();\n if (!layout) {\n this._overviewViewportDomElement.setTop(0);\n this._overviewViewportDomElement.setHeight(0);\n }\n else {\n this._overviewViewportDomElement.setTop(layout.top);\n this._overviewViewportDomElement.setHeight(layout.height);\n }\n }\n _computeOverviewViewport() {\n const layoutInfo = this._modifiedEditor.getLayoutInfo();\n if (!layoutInfo) {\n return null;\n }\n const scrollTop = this._modifiedEditor.getScrollTop();\n const scrollHeight = this._modifiedEditor.getScrollHeight();\n const computedAvailableSize = Math.max(0, layoutInfo.height);\n const computedRepresentableSize = Math.max(0, computedAvailableSize - 2 * 0);\n const computedRatio = scrollHeight > 0 ? (computedRepresentableSize / scrollHeight) : 0;\n const computedSliderSize = Math.max(0, Math.floor(layoutInfo.height * computedRatio));\n const computedSliderPosition = Math.floor(scrollTop * computedRatio);\n return {\n height: computedSliderSize,\n top: computedSliderPosition\n };\n }\n _createDataSource() {\n return {\n getWidth: () => {\n return this._elementSizeObserver.getWidth();\n },\n getHeight: () => {\n return (this._elementSizeObserver.getHeight() - this._getReviewHeight());\n },\n getOptions: () => {\n return {\n renderOverviewRuler: this._renderOverviewRuler\n };\n },\n getContainerDomNode: () => {\n return this._containerDomElement;\n },\n relayoutEditors: () => {\n this._doLayout();\n },\n getOriginalEditor: () => {\n return this._originalEditor;\n },\n getModifiedEditor: () => {\n return this._modifiedEditor;\n }\n };\n }\n _setStrategy(newStrategy) {\n if (this._strategy) {\n this._strategy.dispose();\n }\n this._strategy = newStrategy;\n newStrategy.applyColors(this._themeService.getColorTheme());\n if (this._diffComputationResult) {\n this._updateDecorations();\n }\n // Just do a layout, the strategy might need it\n this._doLayout();\n }\n _getLineChangeAtOrBeforeLineNumber(lineNumber, startLineNumberExtractor) {\n const lineChanges = (this._diffComputationResult ? this._diffComputationResult.changes : []);\n if (lineChanges.length === 0 || lineNumber < startLineNumberExtractor(lineChanges[0])) {\n // There are no changes or `lineNumber` is before the first change\n return null;\n }\n let min = 0;\n let max = lineChanges.length - 1;\n while (min < max) {\n const mid = Math.floor((min + max) / 2);\n const midStart = startLineNumberExtractor(lineChanges[mid]);\n const midEnd = (mid + 1 <= max ? startLineNumberExtractor(lineChanges[mid + 1]) : 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\n if (lineNumber < midStart) {\n max = mid - 1;\n }\n else if (lineNumber >= midEnd) {\n min = mid + 1;\n }\n else {\n // HIT!\n min = mid;\n max = mid;\n }\n }\n return lineChanges[min];\n }\n _getEquivalentLineForOriginalLineNumber(lineNumber) {\n const lineChange = this._getLineChangeAtOrBeforeLineNumber(lineNumber, (lineChange) => lineChange.originalStartLineNumber);\n if (!lineChange) {\n return lineNumber;\n }\n const originalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0);\n const modifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0);\n const lineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? (lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1) : 0);\n const lineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? (lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1) : 0);\n const delta = lineNumber - originalEquivalentLineNumber;\n if (delta <= lineChangeOriginalLength) {\n return modifiedEquivalentLineNumber + Math.min(delta, lineChangeModifiedLength);\n }\n return modifiedEquivalentLineNumber + lineChangeModifiedLength - lineChangeOriginalLength + delta;\n }\n _getEquivalentLineForModifiedLineNumber(lineNumber) {\n const lineChange = this._getLineChangeAtOrBeforeLineNumber(lineNumber, (lineChange) => lineChange.modifiedStartLineNumber);\n if (!lineChange) {\n return lineNumber;\n }\n const originalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0);\n const modifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0);\n const lineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? (lineChange.originalEndLineNumber - lineChange.originalStartLineNumber + 1) : 0);\n const lineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? (lineChange.modifiedEndLineNumber - lineChange.modifiedStartLineNumber + 1) : 0);\n const delta = lineNumber - modifiedEquivalentLineNumber;\n if (delta <= lineChangeModifiedLength) {\n return originalEquivalentLineNumber + Math.min(delta, lineChangeOriginalLength);\n }\n return originalEquivalentLineNumber + lineChangeOriginalLength - lineChangeModifiedLength + delta;\n }\n getDiffLineInformationForOriginal(lineNumber) {\n if (!this._diffComputationResult) {\n // Cannot answer that which I don't know\n return null;\n }\n return {\n equivalentLineNumber: this._getEquivalentLineForOriginalLineNumber(lineNumber)\n };\n }\n getDiffLineInformationForModified(lineNumber) {\n if (!this._diffComputationResult) {\n // Cannot answer that which I don't know\n return null;\n }\n return {\n equivalentLineNumber: this._getEquivalentLineForModifiedLineNumber(lineNumber)\n };\n }\n};\nDiffEditorWidget.ONE_OVERVIEW_WIDTH = 15;\nDiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH = 30;\nDiffEditorWidget.UPDATE_DIFF_DECORATIONS_DELAY = 200; // ms\nDiffEditorWidget = __decorate([\n __param(3, IClipboardService),\n __param(4, IEditorWorkerService),\n __param(5, IContextKeyService),\n __param(6, IInstantiationService),\n __param(7, ICodeEditorService),\n __param(8, IThemeService),\n __param(9, INotificationService),\n __param(10, IContextMenuService),\n __param(11, IEditorProgressService)\n], DiffEditorWidget);\nexport { DiffEditorWidget };\nclass DiffEditorWidgetStyle extends Disposable {\n constructor(dataSource) {\n super();\n this._dataSource = dataSource;\n this._insertColor = null;\n this._removeColor = null;\n }\n applyColors(theme) {\n const newInsertColor = (theme.getColor(diffInserted) || defaultInsertColor).transparent(2);\n const newRemoveColor = (theme.getColor(diffRemoved) || defaultRemoveColor).transparent(2);\n const hasChanges = !newInsertColor.equals(this._insertColor) || !newRemoveColor.equals(this._removeColor);\n this._insertColor = newInsertColor;\n this._removeColor = newRemoveColor;\n return hasChanges;\n }\n getEditorsDiffDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators, originalWhitespaces, modifiedWhitespaces) {\n // Get view zones\n modifiedWhitespaces = modifiedWhitespaces.sort((a, b) => {\n return a.afterLineNumber - b.afterLineNumber;\n });\n originalWhitespaces = originalWhitespaces.sort((a, b) => {\n return a.afterLineNumber - b.afterLineNumber;\n });\n const zones = this._getViewZones(lineChanges, originalWhitespaces, modifiedWhitespaces, renderIndicators);\n // Get decorations & overview ruler zones\n const originalDecorations = this._getOriginalEditorDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators);\n const modifiedDecorations = this._getModifiedEditorDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators);\n return {\n original: {\n decorations: originalDecorations.decorations,\n overviewZones: originalDecorations.overviewZones,\n zones: zones.original\n },\n modified: {\n decorations: modifiedDecorations.decorations,\n overviewZones: modifiedDecorations.overviewZones,\n zones: zones.modified\n }\n };\n }\n}\nclass ForeignViewZonesIterator {\n constructor(source) {\n this._source = source;\n this._index = -1;\n this.current = null;\n this.advance();\n }\n advance() {\n this._index++;\n if (this._index < this._source.length) {\n this.current = this._source[this._index];\n }\n else {\n this.current = null;\n }\n }\n}\nclass ViewZonesComputer {\n constructor(_lineChanges, _originalForeignVZ, _modifiedForeignVZ, _originalEditor, _modifiedEditor) {\n this._lineChanges = _lineChanges;\n this._originalForeignVZ = _originalForeignVZ;\n this._modifiedForeignVZ = _modifiedForeignVZ;\n this._originalEditor = _originalEditor;\n this._modifiedEditor = _modifiedEditor;\n }\n static _getViewLineCount(editor, startLineNumber, endLineNumber) {\n const model = editor.getModel();\n const viewModel = editor._getViewModel();\n if (model && viewModel) {\n const viewRange = getViewRange(model, viewModel, startLineNumber, endLineNumber);\n return (viewRange.endLineNumber - viewRange.startLineNumber + 1);\n }\n return (endLineNumber - startLineNumber + 1);\n }\n getViewZones() {\n const originalLineHeight = this._originalEditor.getOption(55 /* lineHeight */);\n const modifiedLineHeight = this._modifiedEditor.getOption(55 /* lineHeight */);\n const originalHasWrapping = (this._originalEditor.getOption(128 /* wrappingInfo */).wrappingColumn !== -1);\n const modifiedHasWrapping = (this._modifiedEditor.getOption(128 /* wrappingInfo */).wrappingColumn !== -1);\n const hasWrapping = (originalHasWrapping || modifiedHasWrapping);\n const originalModel = this._originalEditor.getModel();\n const originalCoordinatesConverter = this._originalEditor._getViewModel().coordinatesConverter;\n const modifiedCoordinatesConverter = this._modifiedEditor._getViewModel().coordinatesConverter;\n const result = {\n original: [],\n modified: []\n };\n let lineChangeModifiedLength = 0;\n let lineChangeOriginalLength = 0;\n let originalEquivalentLineNumber = 0;\n let modifiedEquivalentLineNumber = 0;\n let originalEndEquivalentLineNumber = 0;\n let modifiedEndEquivalentLineNumber = 0;\n const sortMyViewZones = (a, b) => {\n return a.afterLineNumber - b.afterLineNumber;\n };\n const addAndCombineIfPossible = (destination, item) => {\n if (item.domNode === null && destination.length > 0) {\n const lastItem = destination[destination.length - 1];\n if (lastItem.afterLineNumber === item.afterLineNumber && lastItem.domNode === null) {\n lastItem.heightInLines += item.heightInLines;\n return;\n }\n }\n destination.push(item);\n };\n const modifiedForeignVZ = new ForeignViewZonesIterator(this._modifiedForeignVZ);\n const originalForeignVZ = new ForeignViewZonesIterator(this._originalForeignVZ);\n let lastOriginalLineNumber = 1;\n let lastModifiedLineNumber = 1;\n // In order to include foreign view zones after the last line change, the for loop will iterate once more after the end of the `lineChanges` array\n for (let i = 0, length = this._lineChanges.length; i <= length; i++) {\n const lineChange = (i < length ? this._lineChanges[i] : null);\n if (lineChange !== null) {\n originalEquivalentLineNumber = lineChange.originalStartLineNumber + (lineChange.originalEndLineNumber > 0 ? -1 : 0);\n modifiedEquivalentLineNumber = lineChange.modifiedStartLineNumber + (lineChange.modifiedEndLineNumber > 0 ? -1 : 0);\n lineChangeOriginalLength = (lineChange.originalEndLineNumber > 0 ? ViewZonesComputer._getViewLineCount(this._originalEditor, lineChange.originalStartLineNumber, lineChange.originalEndLineNumber) : 0);\n lineChangeModifiedLength = (lineChange.modifiedEndLineNumber > 0 ? ViewZonesComputer._getViewLineCount(this._modifiedEditor, lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber) : 0);\n originalEndEquivalentLineNumber = Math.max(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber);\n modifiedEndEquivalentLineNumber = Math.max(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber);\n }\n else {\n // Increase to very large value to get the producing tests of foreign view zones running\n originalEquivalentLineNumber += 10000000 + lineChangeOriginalLength;\n modifiedEquivalentLineNumber += 10000000 + lineChangeModifiedLength;\n originalEndEquivalentLineNumber = originalEquivalentLineNumber;\n modifiedEndEquivalentLineNumber = modifiedEquivalentLineNumber;\n }\n // Each step produces view zones, and after producing them, we try to cancel them out, to avoid empty-empty view zone cases\n let stepOriginal = [];\n let stepModified = [];\n // ---------------------------- PRODUCE VIEW ZONES\n // [PRODUCE] View zones due to line mapping differences (equal lines but wrapped differently)\n if (hasWrapping) {\n let count;\n if (lineChange) {\n if (lineChange.originalEndLineNumber > 0) {\n count = lineChange.originalStartLineNumber - lastOriginalLineNumber;\n }\n else {\n count = lineChange.modifiedStartLineNumber - lastModifiedLineNumber;\n }\n }\n else {\n count = originalModel.getLineCount() - lastOriginalLineNumber;\n }\n for (let i = 0; i < count; i++) {\n const originalLineNumber = lastOriginalLineNumber + i;\n const modifiedLineNumber = lastModifiedLineNumber + i;\n const originalViewLineCount = originalCoordinatesConverter.getModelLineViewLineCount(originalLineNumber);\n const modifiedViewLineCount = modifiedCoordinatesConverter.getModelLineViewLineCount(modifiedLineNumber);\n if (originalViewLineCount < modifiedViewLineCount) {\n stepOriginal.push({\n afterLineNumber: originalLineNumber,\n heightInLines: modifiedViewLineCount - originalViewLineCount,\n domNode: null,\n marginDomNode: null\n });\n }\n else if (originalViewLineCount > modifiedViewLineCount) {\n stepModified.push({\n afterLineNumber: modifiedLineNumber,\n heightInLines: originalViewLineCount - modifiedViewLineCount,\n domNode: null,\n marginDomNode: null\n });\n }\n }\n if (lineChange) {\n lastOriginalLineNumber = (lineChange.originalEndLineNumber > 0 ? lineChange.originalEndLineNumber : lineChange.originalStartLineNumber) + 1;\n lastModifiedLineNumber = (lineChange.modifiedEndLineNumber > 0 ? lineChange.modifiedEndLineNumber : lineChange.modifiedStartLineNumber) + 1;\n }\n }\n // [PRODUCE] View zone(s) in original-side due to foreign view zone(s) in modified-side\n while (modifiedForeignVZ.current && modifiedForeignVZ.current.afterLineNumber <= modifiedEndEquivalentLineNumber) {\n let viewZoneLineNumber;\n if (modifiedForeignVZ.current.afterLineNumber <= modifiedEquivalentLineNumber) {\n viewZoneLineNumber = originalEquivalentLineNumber - modifiedEquivalentLineNumber + modifiedForeignVZ.current.afterLineNumber;\n }\n else {\n viewZoneLineNumber = originalEndEquivalentLineNumber;\n }\n let marginDomNode = null;\n if (lineChange && lineChange.modifiedStartLineNumber <= modifiedForeignVZ.current.afterLineNumber && modifiedForeignVZ.current.afterLineNumber <= lineChange.modifiedEndLineNumber) {\n marginDomNode = this._createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion();\n }\n stepOriginal.push({\n afterLineNumber: viewZoneLineNumber,\n heightInLines: modifiedForeignVZ.current.height / modifiedLineHeight,\n domNode: null,\n marginDomNode: marginDomNode\n });\n modifiedForeignVZ.advance();\n }\n // [PRODUCE] View zone(s) in modified-side due to foreign view zone(s) in original-side\n while (originalForeignVZ.current && originalForeignVZ.current.afterLineNumber <= originalEndEquivalentLineNumber) {\n let viewZoneLineNumber;\n if (originalForeignVZ.current.afterLineNumber <= originalEquivalentLineNumber) {\n viewZoneLineNumber = modifiedEquivalentLineNumber - originalEquivalentLineNumber + originalForeignVZ.current.afterLineNumber;\n }\n else {\n viewZoneLineNumber = modifiedEndEquivalentLineNumber;\n }\n stepModified.push({\n afterLineNumber: viewZoneLineNumber,\n heightInLines: originalForeignVZ.current.height / originalLineHeight,\n domNode: null\n });\n originalForeignVZ.advance();\n }\n if (lineChange !== null && isChangeOrInsert(lineChange)) {\n const r = this._produceOriginalFromDiff(lineChange, lineChangeOriginalLength, lineChangeModifiedLength);\n if (r) {\n stepOriginal.push(r);\n }\n }\n if (lineChange !== null && isChangeOrDelete(lineChange)) {\n const r = this._produceModifiedFromDiff(lineChange, lineChangeOriginalLength, lineChangeModifiedLength);\n if (r) {\n stepModified.push(r);\n }\n }\n // ---------------------------- END PRODUCE VIEW ZONES\n // ---------------------------- EMIT MINIMAL VIEW ZONES\n // [CANCEL & EMIT] Try to cancel view zones out\n let stepOriginalIndex = 0;\n let stepModifiedIndex = 0;\n stepOriginal = stepOriginal.sort(sortMyViewZones);\n stepModified = stepModified.sort(sortMyViewZones);\n while (stepOriginalIndex < stepOriginal.length && stepModifiedIndex < stepModified.length) {\n const original = stepOriginal[stepOriginalIndex];\n const modified = stepModified[stepModifiedIndex];\n const originalDelta = original.afterLineNumber - originalEquivalentLineNumber;\n const modifiedDelta = modified.afterLineNumber - modifiedEquivalentLineNumber;\n if (originalDelta < modifiedDelta) {\n addAndCombineIfPossible(result.original, original);\n stepOriginalIndex++;\n }\n else if (modifiedDelta < originalDelta) {\n addAndCombineIfPossible(result.modified, modified);\n stepModifiedIndex++;\n }\n else if (original.shouldNotShrink) {\n addAndCombineIfPossible(result.original, original);\n stepOriginalIndex++;\n }\n else if (modified.shouldNotShrink) {\n addAndCombineIfPossible(result.modified, modified);\n stepModifiedIndex++;\n }\n else {\n if (original.heightInLines >= modified.heightInLines) {\n // modified view zone gets removed\n original.heightInLines -= modified.heightInLines;\n stepModifiedIndex++;\n }\n else {\n // original view zone gets removed\n modified.heightInLines -= original.heightInLines;\n stepOriginalIndex++;\n }\n }\n }\n // [EMIT] Remaining original view zones\n while (stepOriginalIndex < stepOriginal.length) {\n addAndCombineIfPossible(result.original, stepOriginal[stepOriginalIndex]);\n stepOriginalIndex++;\n }\n // [EMIT] Remaining modified view zones\n while (stepModifiedIndex < stepModified.length) {\n addAndCombineIfPossible(result.modified, stepModified[stepModifiedIndex]);\n stepModifiedIndex++;\n }\n // ---------------------------- END EMIT MINIMAL VIEW ZONES\n }\n return {\n original: ViewZonesComputer._ensureDomNodes(result.original),\n modified: ViewZonesComputer._ensureDomNodes(result.modified),\n };\n }\n static _ensureDomNodes(zones) {\n return zones.map((z) => {\n if (!z.domNode) {\n z.domNode = createFakeLinesDiv();\n }\n return z;\n });\n }\n}\nfunction createDecoration(startLineNumber, startColumn, endLineNumber, endColumn, options) {\n return {\n range: new Range(startLineNumber, startColumn, endLineNumber, endColumn),\n options: options\n };\n}\nconst DECORATIONS = {\n charDelete: ModelDecorationOptions.register({\n className: 'char-delete'\n }),\n charDeleteWholeLine: ModelDecorationOptions.register({\n className: 'char-delete',\n isWholeLine: true\n }),\n charInsert: ModelDecorationOptions.register({\n className: 'char-insert'\n }),\n charInsertWholeLine: ModelDecorationOptions.register({\n className: 'char-insert',\n isWholeLine: true\n }),\n lineInsert: ModelDecorationOptions.register({\n className: 'line-insert',\n marginClassName: 'line-insert',\n isWholeLine: true\n }),\n lineInsertWithSign: ModelDecorationOptions.register({\n className: 'line-insert',\n linesDecorationsClassName: 'insert-sign ' + ThemeIcon.asClassName(diffInsertIcon),\n marginClassName: 'line-insert',\n isWholeLine: true\n }),\n lineDelete: ModelDecorationOptions.register({\n className: 'line-delete',\n marginClassName: 'line-delete',\n isWholeLine: true\n }),\n lineDeleteWithSign: ModelDecorationOptions.register({\n className: 'line-delete',\n linesDecorationsClassName: 'delete-sign ' + ThemeIcon.asClassName(diffRemoveIcon),\n marginClassName: 'line-delete',\n isWholeLine: true\n }),\n lineDeleteMargin: ModelDecorationOptions.register({\n marginClassName: 'line-delete',\n })\n};\nclass DiffEditorWidgetSideBySide extends DiffEditorWidgetStyle {\n constructor(dataSource, enableSplitViewResizing) {\n super(dataSource);\n this._disableSash = (enableSplitViewResizing === false);\n this._sashRatio = null;\n this._sashPosition = null;\n this._startSashPosition = null;\n this._sash = this._register(new Sash(this._dataSource.getContainerDomNode(), this, { orientation: 0 /* VERTICAL */ }));\n if (this._disableSash) {\n this._sash.state = 0 /* Disabled */;\n }\n this._sash.onDidStart(() => this._onSashDragStart());\n this._sash.onDidChange((e) => this._onSashDrag(e));\n this._sash.onDidEnd(() => this._onSashDragEnd());\n this._sash.onDidReset(() => this._onSashReset());\n }\n setEnableSplitViewResizing(enableSplitViewResizing) {\n const newDisableSash = (enableSplitViewResizing === false);\n if (this._disableSash !== newDisableSash) {\n this._disableSash = newDisableSash;\n this._sash.state = this._disableSash ? 0 /* Disabled */ : 3 /* Enabled */;\n }\n }\n layout(sashRatio = this._sashRatio) {\n const w = this._dataSource.getWidth();\n const contentWidth = w - (this._dataSource.getOptions().renderOverviewRuler ? DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH : 0);\n let sashPosition = Math.floor((sashRatio || 0.5) * contentWidth);\n const midPoint = Math.floor(0.5 * contentWidth);\n sashPosition = this._disableSash ? midPoint : sashPosition || midPoint;\n if (contentWidth > DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH * 2) {\n if (sashPosition < DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH) {\n sashPosition = DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH;\n }\n if (sashPosition > contentWidth - DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH) {\n sashPosition = contentWidth - DiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH;\n }\n }\n else {\n sashPosition = midPoint;\n }\n if (this._sashPosition !== sashPosition) {\n this._sashPosition = sashPosition;\n this._sash.layout();\n }\n return this._sashPosition;\n }\n _onSashDragStart() {\n this._startSashPosition = this._sashPosition;\n }\n _onSashDrag(e) {\n const w = this._dataSource.getWidth();\n const contentWidth = w - (this._dataSource.getOptions().renderOverviewRuler ? DiffEditorWidget.ENTIRE_DIFF_OVERVIEW_WIDTH : 0);\n const sashPosition = this.layout((this._startSashPosition + (e.currentX - e.startX)) / contentWidth);\n this._sashRatio = sashPosition / contentWidth;\n this._dataSource.relayoutEditors();\n }\n _onSashDragEnd() {\n this._sash.layout();\n }\n _onSashReset() {\n this._sashRatio = 0.5;\n this._dataSource.relayoutEditors();\n this._sash.layout();\n }\n getVerticalSashTop(sash) {\n return 0;\n }\n getVerticalSashLeft(sash) {\n return this._sashPosition;\n }\n getVerticalSashHeight(sash) {\n return this._dataSource.getHeight();\n }\n _getViewZones(lineChanges, originalForeignVZ, modifiedForeignVZ) {\n const originalEditor = this._dataSource.getOriginalEditor();\n const modifiedEditor = this._dataSource.getModifiedEditor();\n const c = new SideBySideViewZonesComputer(lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor);\n return c.getViewZones();\n }\n _getOriginalEditorDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators) {\n const originalEditor = this._dataSource.getOriginalEditor();\n const overviewZoneColor = String(this._removeColor);\n const result = {\n decorations: [],\n overviewZones: []\n };\n const originalModel = originalEditor.getModel();\n const originalViewModel = originalEditor._getViewModel();\n for (const lineChange of lineChanges) {\n if (isChangeOrDelete(lineChange)) {\n result.decorations.push({\n range: new Range(lineChange.originalStartLineNumber, 1, lineChange.originalEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */),\n options: (renderIndicators ? DECORATIONS.lineDeleteWithSign : DECORATIONS.lineDelete)\n });\n if (!isChangeOrInsert(lineChange) || !lineChange.charChanges) {\n result.decorations.push(createDecoration(lineChange.originalStartLineNumber, 1, lineChange.originalEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, DECORATIONS.charDeleteWholeLine));\n }\n const viewRange = getViewRange(originalModel, originalViewModel, lineChange.originalStartLineNumber, lineChange.originalEndLineNumber);\n result.overviewZones.push(new OverviewRulerZone(viewRange.startLineNumber, viewRange.endLineNumber, overviewZoneColor));\n if (lineChange.charChanges) {\n for (const charChange of lineChange.charChanges) {\n if (isChangeOrDelete(charChange)) {\n if (ignoreTrimWhitespace) {\n for (let lineNumber = charChange.originalStartLineNumber; lineNumber <= charChange.originalEndLineNumber; lineNumber++) {\n let startColumn;\n let endColumn;\n if (lineNumber === charChange.originalStartLineNumber) {\n startColumn = charChange.originalStartColumn;\n }\n else {\n startColumn = originalModel.getLineFirstNonWhitespaceColumn(lineNumber);\n }\n if (lineNumber === charChange.originalEndLineNumber) {\n endColumn = charChange.originalEndColumn;\n }\n else {\n endColumn = originalModel.getLineLastNonWhitespaceColumn(lineNumber);\n }\n result.decorations.push(createDecoration(lineNumber, startColumn, lineNumber, endColumn, DECORATIONS.charDelete));\n }\n }\n else {\n result.decorations.push(createDecoration(charChange.originalStartLineNumber, charChange.originalStartColumn, charChange.originalEndLineNumber, charChange.originalEndColumn, DECORATIONS.charDelete));\n }\n }\n }\n }\n }\n }\n return result;\n }\n _getModifiedEditorDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators) {\n const modifiedEditor = this._dataSource.getModifiedEditor();\n const overviewZoneColor = String(this._insertColor);\n const result = {\n decorations: [],\n overviewZones: []\n };\n const modifiedModel = modifiedEditor.getModel();\n const modifiedViewModel = modifiedEditor._getViewModel();\n for (const lineChange of lineChanges) {\n if (isChangeOrInsert(lineChange)) {\n result.decorations.push({\n range: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */),\n options: (renderIndicators ? DECORATIONS.lineInsertWithSign : DECORATIONS.lineInsert)\n });\n if (!isChangeOrDelete(lineChange) || !lineChange.charChanges) {\n result.decorations.push(createDecoration(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, DECORATIONS.charInsertWholeLine));\n }\n const viewRange = getViewRange(modifiedModel, modifiedViewModel, lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber);\n result.overviewZones.push(new OverviewRulerZone(viewRange.startLineNumber, viewRange.endLineNumber, overviewZoneColor));\n if (lineChange.charChanges) {\n for (const charChange of lineChange.charChanges) {\n if (isChangeOrInsert(charChange)) {\n if (ignoreTrimWhitespace) {\n for (let lineNumber = charChange.modifiedStartLineNumber; lineNumber <= charChange.modifiedEndLineNumber; lineNumber++) {\n let startColumn;\n let endColumn;\n if (lineNumber === charChange.modifiedStartLineNumber) {\n startColumn = charChange.modifiedStartColumn;\n }\n else {\n startColumn = modifiedModel.getLineFirstNonWhitespaceColumn(lineNumber);\n }\n if (lineNumber === charChange.modifiedEndLineNumber) {\n endColumn = charChange.modifiedEndColumn;\n }\n else {\n endColumn = modifiedModel.getLineLastNonWhitespaceColumn(lineNumber);\n }\n result.decorations.push(createDecoration(lineNumber, startColumn, lineNumber, endColumn, DECORATIONS.charInsert));\n }\n }\n else {\n result.decorations.push(createDecoration(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn, DECORATIONS.charInsert));\n }\n }\n }\n }\n }\n }\n return result;\n }\n}\nDiffEditorWidgetSideBySide.MINIMUM_EDITOR_WIDTH = 100;\nclass SideBySideViewZonesComputer extends ViewZonesComputer {\n constructor(lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor) {\n super(lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor);\n }\n _createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion() {\n return null;\n }\n _produceOriginalFromDiff(lineChange, lineChangeOriginalLength, lineChangeModifiedLength) {\n if (lineChangeModifiedLength > lineChangeOriginalLength) {\n return {\n afterLineNumber: Math.max(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber),\n heightInLines: (lineChangeModifiedLength - lineChangeOriginalLength),\n domNode: null\n };\n }\n return null;\n }\n _produceModifiedFromDiff(lineChange, lineChangeOriginalLength, lineChangeModifiedLength) {\n if (lineChangeOriginalLength > lineChangeModifiedLength) {\n return {\n afterLineNumber: Math.max(lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber),\n heightInLines: (lineChangeOriginalLength - lineChangeModifiedLength),\n domNode: null\n };\n }\n return null;\n }\n}\nclass DiffEditorWidgetInline extends DiffEditorWidgetStyle {\n constructor(dataSource, enableSplitViewResizing) {\n super(dataSource);\n this._decorationsLeft = dataSource.getOriginalEditor().getLayoutInfo().decorationsLeft;\n this._register(dataSource.getOriginalEditor().onDidLayoutChange((layoutInfo) => {\n if (this._decorationsLeft !== layoutInfo.decorationsLeft) {\n this._decorationsLeft = layoutInfo.decorationsLeft;\n dataSource.relayoutEditors();\n }\n }));\n }\n setEnableSplitViewResizing(enableSplitViewResizing) {\n // Nothing to do..\n }\n _getViewZones(lineChanges, originalForeignVZ, modifiedForeignVZ, renderIndicators) {\n const originalEditor = this._dataSource.getOriginalEditor();\n const modifiedEditor = this._dataSource.getModifiedEditor();\n const computer = new InlineViewZonesComputer(lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor, renderIndicators);\n return computer.getViewZones();\n }\n _getOriginalEditorDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators) {\n const overviewZoneColor = String(this._removeColor);\n const result = {\n decorations: [],\n overviewZones: []\n };\n const originalEditor = this._dataSource.getOriginalEditor();\n const originalModel = originalEditor.getModel();\n const originalViewModel = originalEditor._getViewModel();\n for (const lineChange of lineChanges) {\n // Add overview zones in the overview ruler\n if (isChangeOrDelete(lineChange)) {\n result.decorations.push({\n range: new Range(lineChange.originalStartLineNumber, 1, lineChange.originalEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */),\n options: DECORATIONS.lineDeleteMargin\n });\n const viewRange = getViewRange(originalModel, originalViewModel, lineChange.originalStartLineNumber, lineChange.originalEndLineNumber);\n result.overviewZones.push(new OverviewRulerZone(viewRange.startLineNumber, viewRange.endLineNumber, overviewZoneColor));\n }\n }\n return result;\n }\n _getModifiedEditorDecorations(lineChanges, ignoreTrimWhitespace, renderIndicators) {\n const modifiedEditor = this._dataSource.getModifiedEditor();\n const overviewZoneColor = String(this._insertColor);\n const result = {\n decorations: [],\n overviewZones: []\n };\n const modifiedModel = modifiedEditor.getModel();\n const modifiedViewModel = modifiedEditor._getViewModel();\n for (const lineChange of lineChanges) {\n // Add decorations & overview zones\n if (isChangeOrInsert(lineChange)) {\n result.decorations.push({\n range: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */),\n options: (renderIndicators ? DECORATIONS.lineInsertWithSign : DECORATIONS.lineInsert)\n });\n const viewRange = getViewRange(modifiedModel, modifiedViewModel, lineChange.modifiedStartLineNumber, lineChange.modifiedEndLineNumber);\n result.overviewZones.push(new OverviewRulerZone(viewRange.startLineNumber, viewRange.endLineNumber, overviewZoneColor));\n if (lineChange.charChanges) {\n for (const charChange of lineChange.charChanges) {\n if (isChangeOrInsert(charChange)) {\n if (ignoreTrimWhitespace) {\n for (let lineNumber = charChange.modifiedStartLineNumber; lineNumber <= charChange.modifiedEndLineNumber; lineNumber++) {\n let startColumn;\n let endColumn;\n if (lineNumber === charChange.modifiedStartLineNumber) {\n startColumn = charChange.modifiedStartColumn;\n }\n else {\n startColumn = modifiedModel.getLineFirstNonWhitespaceColumn(lineNumber);\n }\n if (lineNumber === charChange.modifiedEndLineNumber) {\n endColumn = charChange.modifiedEndColumn;\n }\n else {\n endColumn = modifiedModel.getLineLastNonWhitespaceColumn(lineNumber);\n }\n result.decorations.push(createDecoration(lineNumber, startColumn, lineNumber, endColumn, DECORATIONS.charInsert));\n }\n }\n else {\n result.decorations.push(createDecoration(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn, DECORATIONS.charInsert));\n }\n }\n }\n }\n else {\n result.decorations.push(createDecoration(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedEndLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, DECORATIONS.charInsertWholeLine));\n }\n }\n }\n return result;\n }\n layout() {\n // An editor should not be smaller than 5px\n return Math.max(5, this._decorationsLeft);\n }\n}\nclass InlineViewZonesComputer extends ViewZonesComputer {\n constructor(lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor, renderIndicators) {\n super(lineChanges, originalForeignVZ, modifiedForeignVZ, originalEditor, modifiedEditor);\n this._originalModel = originalEditor.getModel();\n this._renderIndicators = renderIndicators;\n this._pendingLineChange = [];\n this._pendingViewZones = [];\n this._lineBreaksComputer = this._modifiedEditor._getViewModel().createLineBreaksComputer();\n }\n getViewZones() {\n const result = super.getViewZones();\n this._finalize(result);\n return result;\n }\n _createOriginalMarginDomNodeForModifiedForeignViewZoneInAddedRegion() {\n const result = document.createElement('div');\n result.className = 'inline-added-margin-view-zone';\n return result;\n }\n _produceOriginalFromDiff(lineChange, lineChangeOriginalLength, lineChangeModifiedLength) {\n const marginDomNode = document.createElement('div');\n marginDomNode.className = 'inline-added-margin-view-zone';\n return {\n afterLineNumber: Math.max(lineChange.originalStartLineNumber, lineChange.originalEndLineNumber),\n heightInLines: lineChangeModifiedLength,\n domNode: document.createElement('div'),\n marginDomNode: marginDomNode\n };\n }\n _produceModifiedFromDiff(lineChange, lineChangeOriginalLength, lineChangeModifiedLength) {\n const domNode = document.createElement('div');\n domNode.className = `view-lines line-delete ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`;\n const marginDomNode = document.createElement('div');\n marginDomNode.className = 'inline-deleted-margin-view-zone';\n const viewZone = {\n shouldNotShrink: true,\n afterLineNumber: (lineChange.modifiedEndLineNumber === 0 ? lineChange.modifiedStartLineNumber : lineChange.modifiedStartLineNumber - 1),\n heightInLines: lineChangeOriginalLength,\n minWidthInPx: 0,\n domNode: domNode,\n marginDomNode: marginDomNode,\n diff: {\n originalStartLineNumber: lineChange.originalStartLineNumber,\n originalEndLineNumber: lineChange.originalEndLineNumber,\n modifiedStartLineNumber: lineChange.modifiedStartLineNumber,\n modifiedEndLineNumber: lineChange.modifiedEndLineNumber,\n originalModel: this._originalModel,\n viewLineCounts: null,\n }\n };\n for (let lineNumber = lineChange.originalStartLineNumber; lineNumber <= lineChange.originalEndLineNumber; lineNumber++) {\n this._lineBreaksComputer.addRequest(this._originalModel.getLineContent(lineNumber), null);\n }\n this._pendingLineChange.push(lineChange);\n this._pendingViewZones.push(viewZone);\n return viewZone;\n }\n _finalize(result) {\n const modifiedEditorOptions = this._modifiedEditor.getOptions();\n const tabSize = this._modifiedEditor.getModel().getOptions().tabSize;\n const fontInfo = modifiedEditorOptions.get(40 /* fontInfo */);\n const disableMonospaceOptimizations = modifiedEditorOptions.get(27 /* disableMonospaceOptimizations */);\n const typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n const scrollBeyondLastColumn = modifiedEditorOptions.get(90 /* scrollBeyondLastColumn */);\n const mightContainNonBasicASCII = this._originalModel.mightContainNonBasicASCII();\n const mightContainRTL = this._originalModel.mightContainRTL();\n const lineHeight = modifiedEditorOptions.get(55 /* lineHeight */);\n const layoutInfo = modifiedEditorOptions.get(127 /* layoutInfo */);\n const lineDecorationsWidth = layoutInfo.decorationsWidth;\n const stopRenderingLineAfter = modifiedEditorOptions.get(102 /* stopRenderingLineAfter */);\n const renderWhitespace = modifiedEditorOptions.get(85 /* renderWhitespace */);\n const renderControlCharacters = modifiedEditorOptions.get(79 /* renderControlCharacters */);\n const fontLigatures = modifiedEditorOptions.get(41 /* fontLigatures */);\n const lineBreaks = this._lineBreaksComputer.finalize();\n let lineBreakIndex = 0;\n for (let i = 0; i < this._pendingLineChange.length; i++) {\n const lineChange = this._pendingLineChange[i];\n const viewZone = this._pendingViewZones[i];\n const domNode = viewZone.domNode;\n Configuration.applyFontInfoSlow(domNode, fontInfo);\n const marginDomNode = viewZone.marginDomNode;\n Configuration.applyFontInfoSlow(marginDomNode, fontInfo);\n const decorations = [];\n if (lineChange.charChanges) {\n for (const charChange of lineChange.charChanges) {\n if (isChangeOrDelete(charChange)) {\n decorations.push(new InlineDecoration(new Range(charChange.originalStartLineNumber, charChange.originalStartColumn, charChange.originalEndLineNumber, charChange.originalEndColumn), 'char-delete', 0 /* Regular */));\n }\n }\n }\n const hasCharChanges = (decorations.length > 0);\n const sb = createStringBuilder(10000);\n let maxCharsPerLine = 0;\n let renderedLineCount = 0;\n let viewLineCounts = null;\n for (let lineNumber = lineChange.originalStartLineNumber; lineNumber <= lineChange.originalEndLineNumber; lineNumber++) {\n const lineIndex = lineNumber - lineChange.originalStartLineNumber;\n const lineTokens = this._originalModel.getLineTokens(lineNumber);\n const lineContent = lineTokens.getLineContent();\n const lineBreakData = lineBreaks[lineBreakIndex++];\n const actualDecorations = LineDecoration.filter(decorations, lineNumber, 1, lineContent.length + 1);\n if (lineBreakData) {\n let lastBreakOffset = 0;\n for (const breakOffset of lineBreakData.breakOffsets) {\n const viewLineTokens = lineTokens.sliceAndInflate(lastBreakOffset, breakOffset, 0);\n const viewLineContent = lineContent.substring(lastBreakOffset, breakOffset);\n maxCharsPerLine = Math.max(maxCharsPerLine, this._renderOriginalLine(renderedLineCount++, viewLineContent, viewLineTokens, LineDecoration.extractWrapped(actualDecorations, lastBreakOffset, breakOffset), hasCharChanges, mightContainNonBasicASCII, mightContainRTL, fontInfo, disableMonospaceOptimizations, lineHeight, lineDecorationsWidth, stopRenderingLineAfter, renderWhitespace, renderControlCharacters, fontLigatures, tabSize, sb, marginDomNode));\n lastBreakOffset = breakOffset;\n }\n if (!viewLineCounts) {\n viewLineCounts = [];\n }\n // make sure all lines before this one have an entry in `viewLineCounts`\n while (viewLineCounts.length < lineIndex) {\n viewLineCounts[viewLineCounts.length] = 1;\n }\n viewLineCounts[lineIndex] = lineBreakData.breakOffsets.length;\n viewZone.heightInLines += (lineBreakData.breakOffsets.length - 1);\n const marginDomNode2 = document.createElement('div');\n marginDomNode2.className = 'line-delete';\n result.original.push({\n afterLineNumber: lineNumber,\n afterColumn: 0,\n heightInLines: lineBreakData.breakOffsets.length - 1,\n domNode: createFakeLinesDiv(),\n marginDomNode: marginDomNode2\n });\n }\n else {\n maxCharsPerLine = Math.max(maxCharsPerLine, this._renderOriginalLine(renderedLineCount++, lineContent, lineTokens, actualDecorations, hasCharChanges, mightContainNonBasicASCII, mightContainRTL, fontInfo, disableMonospaceOptimizations, lineHeight, lineDecorationsWidth, stopRenderingLineAfter, renderWhitespace, renderControlCharacters, fontLigatures, tabSize, sb, marginDomNode));\n }\n }\n maxCharsPerLine += scrollBeyondLastColumn;\n const html = sb.build();\n const trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html;\n domNode.innerHTML = trustedhtml;\n viewZone.minWidthInPx = (maxCharsPerLine * typicalHalfwidthCharacterWidth);\n if (viewLineCounts) {\n // make sure all lines have an entry in `viewLineCounts`\n const cnt = lineChange.originalEndLineNumber - lineChange.originalStartLineNumber;\n while (viewLineCounts.length <= cnt) {\n viewLineCounts[viewLineCounts.length] = 1;\n }\n }\n viewZone.diff.viewLineCounts = viewLineCounts;\n }\n result.original.sort((a, b) => {\n return a.afterLineNumber - b.afterLineNumber;\n });\n }\n _renderOriginalLine(renderedLineCount, lineContent, lineTokens, decorations, hasCharChanges, mightContainNonBasicASCII, mightContainRTL, fontInfo, disableMonospaceOptimizations, lineHeight, lineDecorationsWidth, stopRenderingLineAfter, renderWhitespace, renderControlCharacters, fontLigatures, tabSize, sb, marginDomNode) {\n sb.appendASCIIString('<div class=\"view-line');\n if (!hasCharChanges) {\n // No char changes\n sb.appendASCIIString(' char-delete');\n }\n sb.appendASCIIString('\" style=\"top:');\n sb.appendASCIIString(String(renderedLineCount * lineHeight));\n sb.appendASCIIString('px;width:1000000px;\">');\n const isBasicASCII = ViewLineRenderingData.isBasicASCII(lineContent, mightContainNonBasicASCII);\n const containsRTL = ViewLineRenderingData.containsRTL(lineContent, isBasicASCII, mightContainRTL);\n const output = renderViewLine(new RenderLineInput((fontInfo.isMonospace && !disableMonospaceOptimizations), fontInfo.canUseHalfwidthRightwardsArrow, lineContent, false, isBasicASCII, containsRTL, 0, lineTokens, decorations, tabSize, 0, fontInfo.spaceWidth, fontInfo.middotWidth, fontInfo.wsmiddotWidth, stopRenderingLineAfter, renderWhitespace, renderControlCharacters, fontLigatures !== EditorFontLigatures.OFF, null // Send no selections, original line cannot be selected\n ), sb);\n sb.appendASCIIString('</div>');\n if (this._renderIndicators) {\n const marginElement = document.createElement('div');\n marginElement.className = `delete-sign ${ThemeIcon.asClassName(diffRemoveIcon)}`;\n marginElement.setAttribute('style', `position:absolute;top:${renderedLineCount * lineHeight}px;width:${lineDecorationsWidth}px;height:${lineHeight}px;right:0;`);\n marginDomNode.appendChild(marginElement);\n }\n const absoluteOffsets = output.characterMapping.getAbsoluteOffsets();\n return absoluteOffsets.length > 0 ? absoluteOffsets[absoluteOffsets.length - 1] : 0;\n }\n}\nfunction validateDiffWordWrap(value, defaultValue) {\n return validateStringSetOption(value, defaultValue, ['off', 'on', 'inherit']);\n}\nfunction isChangeOrInsert(lineChange) {\n return lineChange.modifiedEndLineNumber > 0;\n}\nfunction isChangeOrDelete(lineChange) {\n return lineChange.originalEndLineNumber > 0;\n}\nfunction createFakeLinesDiv() {\n const r = document.createElement('div');\n r.className = 'diagonal-fill';\n return r;\n}\nfunction getViewRange(model, viewModel, startLineNumber, endLineNumber) {\n const lineCount = model.getLineCount();\n startLineNumber = Math.min(lineCount, Math.max(1, startLineNumber));\n endLineNumber = Math.min(lineCount, Math.max(1, endLineNumber));\n return viewModel.coordinatesConverter.convertModelRangeToViewRange(new Range(startLineNumber, model.getLineMinColumn(startLineNumber), endLineNumber, model.getLineMaxColumn(endLineNumber)));\n}\nregisterThemingParticipant((theme, collector) => {\n const added = theme.getColor(diffInserted);\n if (added) {\n collector.addRule(`.monaco-editor .line-insert, .monaco-editor .char-insert { background-color: ${added}; }`);\n collector.addRule(`.monaco-diff-editor .line-insert, .monaco-diff-editor .char-insert { background-color: ${added}; }`);\n collector.addRule(`.monaco-editor .inline-added-margin-view-zone { background-color: ${added}; }`);\n }\n const removed = theme.getColor(diffRemoved);\n if (removed) {\n collector.addRule(`.monaco-editor .line-delete, .monaco-editor .char-delete { background-color: ${removed}; }`);\n collector.addRule(`.monaco-diff-editor .line-delete, .monaco-diff-editor .char-delete { background-color: ${removed}; }`);\n collector.addRule(`.monaco-editor .inline-deleted-margin-view-zone { background-color: ${removed}; }`);\n }\n const addedOutline = theme.getColor(diffInsertedOutline);\n if (addedOutline) {\n collector.addRule(`.monaco-editor .line-insert, .monaco-editor .char-insert { border: 1px ${theme.type === 'hc' ? 'dashed' : 'solid'} ${addedOutline}; }`);\n }\n const removedOutline = theme.getColor(diffRemovedOutline);\n if (removedOutline) {\n collector.addRule(`.monaco-editor .line-delete, .monaco-editor .char-delete { border: 1px ${theme.type === 'hc' ? 'dashed' : 'solid'} ${removedOutline}; }`);\n }\n const shadow = theme.getColor(scrollbarShadow);\n if (shadow) {\n collector.addRule(`.monaco-diff-editor.side-by-side .editor.modified { box-shadow: -6px 0 5px -5px ${shadow}; }`);\n }\n const border = theme.getColor(diffBorder);\n if (border) {\n collector.addRule(`.monaco-diff-editor.side-by-side .editor.modified { border-left: 1px solid ${border}; }`);\n }\n const scrollbarSliderBackgroundColor = theme.getColor(scrollbarSliderBackground);\n if (scrollbarSliderBackgroundColor) {\n collector.addRule(`\n\t\t\t.monaco-diff-editor .diffViewport {\n\t\t\t\tbackground: ${scrollbarSliderBackgroundColor};\n\t\t\t}\n\t\t`);\n }\n const scrollbarSliderHoverBackgroundColor = theme.getColor(scrollbarSliderHoverBackground);\n if (scrollbarSliderHoverBackgroundColor) {\n collector.addRule(`\n\t\t\t.monaco-diff-editor .diffViewport:hover {\n\t\t\t\tbackground: ${scrollbarSliderHoverBackgroundColor};\n\t\t\t}\n\t\t`);\n }\n const scrollbarSliderActiveBackgroundColor = theme.getColor(scrollbarSliderActiveBackground);\n if (scrollbarSliderActiveBackgroundColor) {\n collector.addRule(`\n\t\t\t.monaco-diff-editor .diffViewport:active {\n\t\t\t\tbackground: ${scrollbarSliderActiveBackgroundColor};\n\t\t\t}\n\t\t`);\n }\n const diffDiagonalFillColor = theme.getColor(diffDiagonalFill);\n collector.addRule(`\n\t.monaco-editor .diagonal-fill {\n\t\tbackground-image: linear-gradient(\n\t\t\t-45deg,\n\t\t\t${diffDiagonalFillColor} 12.5%,\n\t\t\t#0000 12.5%, #0000 50%,\n\t\t\t${diffDiagonalFillColor} 50%, ${diffDiagonalFillColor} 62.5%,\n\t\t\t#0000 62.5%, #0000 100%\n\t\t);\n\t\tbackground-size: 8px 8px;\n\t}\n\t`);\n});\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport * as assert from '../../../base/common/assert.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as objects from '../../../base/common/objects.js';\nimport { Range } from '../../common/core/range.js';\nconst defaultOptions = {\n followsCaret: true,\n ignoreCharChanges: true,\n alwaysRevealFirst: true\n};\n/**\n * Create a new diff navigator for the provided diff editor.\n */\nexport class DiffNavigator extends Disposable {\n constructor(editor, options = {}) {\n super();\n this._onDidUpdate = this._register(new Emitter());\n this._editor = editor;\n this._options = objects.mixin(options, defaultOptions, false);\n this.disposed = false;\n this.nextIdx = -1;\n this.ranges = [];\n this.ignoreSelectionChange = false;\n this.revealFirst = Boolean(this._options.alwaysRevealFirst);\n // hook up to diff editor for diff, disposal, and caret move\n this._register(this._editor.onDidDispose(() => this.dispose()));\n this._register(this._editor.onDidUpdateDiff(() => this._onDiffUpdated()));\n if (this._options.followsCaret) {\n this._register(this._editor.getModifiedEditor().onDidChangeCursorPosition((e) => {\n if (this.ignoreSelectionChange) {\n return;\n }\n this.nextIdx = -1;\n }));\n }\n if (this._options.alwaysRevealFirst) {\n this._register(this._editor.getModifiedEditor().onDidChangeModel((e) => {\n this.revealFirst = true;\n }));\n }\n // init things\n this._init();\n }\n _init() {\n let changes = this._editor.getLineChanges();\n if (!changes) {\n return;\n }\n }\n _onDiffUpdated() {\n this._init();\n this._compute(this._editor.getLineChanges());\n if (this.revealFirst) {\n // Only reveal first on first non-null changes\n if (this._editor.getLineChanges() !== null) {\n this.revealFirst = false;\n this.nextIdx = -1;\n this.next(1 /* Immediate */);\n }\n }\n }\n _compute(lineChanges) {\n // new ranges\n this.ranges = [];\n if (lineChanges) {\n // create ranges from changes\n lineChanges.forEach((lineChange) => {\n if (!this._options.ignoreCharChanges && lineChange.charChanges) {\n lineChange.charChanges.forEach((charChange) => {\n this.ranges.push({\n rhs: true,\n range: new Range(charChange.modifiedStartLineNumber, charChange.modifiedStartColumn, charChange.modifiedEndLineNumber, charChange.modifiedEndColumn)\n });\n });\n }\n else {\n this.ranges.push({\n rhs: true,\n range: new Range(lineChange.modifiedStartLineNumber, 1, lineChange.modifiedStartLineNumber, 1)\n });\n }\n });\n }\n // sort\n this.ranges.sort((left, right) => {\n if (left.range.getStartPosition().isBeforeOrEqual(right.range.getStartPosition())) {\n return -1;\n }\n else if (right.range.getStartPosition().isBeforeOrEqual(left.range.getStartPosition())) {\n return 1;\n }\n else {\n return 0;\n }\n });\n this._onDidUpdate.fire(this);\n }\n _initIdx(fwd) {\n let found = false;\n let position = this._editor.getPosition();\n if (!position) {\n this.nextIdx = 0;\n return;\n }\n for (let i = 0, len = this.ranges.length; i < len && !found; i++) {\n let range = this.ranges[i].range;\n if (position.isBeforeOrEqual(range.getStartPosition())) {\n this.nextIdx = i + (fwd ? 0 : -1);\n found = true;\n }\n }\n if (!found) {\n // after the last change\n this.nextIdx = fwd ? 0 : this.ranges.length - 1;\n }\n if (this.nextIdx < 0) {\n this.nextIdx = this.ranges.length - 1;\n }\n }\n _move(fwd, scrollType) {\n assert.ok(!this.disposed, 'Illegal State - diff navigator has been disposed');\n if (!this.canNavigate()) {\n return;\n }\n if (this.nextIdx === -1) {\n this._initIdx(fwd);\n }\n else if (fwd) {\n this.nextIdx += 1;\n if (this.nextIdx >= this.ranges.length) {\n this.nextIdx = 0;\n }\n }\n else {\n this.nextIdx -= 1;\n if (this.nextIdx < 0) {\n this.nextIdx = this.ranges.length - 1;\n }\n }\n let info = this.ranges[this.nextIdx];\n this.ignoreSelectionChange = true;\n try {\n let pos = info.range.getStartPosition();\n this._editor.setPosition(pos);\n this._editor.revealPositionInCenter(pos, scrollType);\n }\n finally {\n this.ignoreSelectionChange = false;\n }\n }\n canNavigate() {\n return this.ranges && this.ranges.length > 0;\n }\n next(scrollType = 0 /* Smooth */) {\n this._move(true, scrollType);\n }\n previous(scrollType = 0 /* Smooth */) {\n this._move(false, scrollType);\n }\n dispose() {\n super.dispose();\n this.ranges = [];\n this.disposed = true;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Selection } from '../core/selection.js';\nexport class ReplaceCommand {\n constructor(range, text, insertsAutoWhitespace = false) {\n this._range = range;\n this._text = text;\n this.insertsAutoWhitespace = insertsAutoWhitespace;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._range, this._text);\n }\n computeCursorState(model, helper) {\n let inverseEditOperations = helper.getInverseEditOperations();\n let srcRange = inverseEditOperations[0].range;\n return new Selection(srcRange.endLineNumber, srcRange.endColumn, srcRange.endLineNumber, srcRange.endColumn);\n }\n}\nexport class ReplaceCommandThatSelectsText {\n constructor(range, text) {\n this._range = range;\n this._text = text;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._range, this._text);\n }\n computeCursorState(model, helper) {\n const inverseEditOperations = helper.getInverseEditOperations();\n const srcRange = inverseEditOperations[0].range;\n return new Selection(srcRange.startLineNumber, srcRange.startColumn, srcRange.endLineNumber, srcRange.endColumn);\n }\n}\nexport class ReplaceCommandWithoutChangingPosition {\n constructor(range, text, insertsAutoWhitespace = false) {\n this._range = range;\n this._text = text;\n this.insertsAutoWhitespace = insertsAutoWhitespace;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._range, this._text);\n }\n computeCursorState(model, helper) {\n let inverseEditOperations = helper.getInverseEditOperations();\n let srcRange = inverseEditOperations[0].range;\n return new Selection(srcRange.startLineNumber, srcRange.startColumn, srcRange.startLineNumber, srcRange.startColumn);\n }\n}\nexport class ReplaceCommandWithOffsetCursorState {\n constructor(range, text, lineNumberDeltaOffset, columnDeltaOffset, insertsAutoWhitespace = false) {\n this._range = range;\n this._text = text;\n this._columnDeltaOffset = columnDeltaOffset;\n this._lineNumberDeltaOffset = lineNumberDeltaOffset;\n this.insertsAutoWhitespace = insertsAutoWhitespace;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._range, this._text);\n }\n computeCursorState(model, helper) {\n let inverseEditOperations = helper.getInverseEditOperations();\n let srcRange = inverseEditOperations[0].range;\n return new Selection(srcRange.endLineNumber + this._lineNumberDeltaOffset, srcRange.endColumn + this._columnDeltaOffset, srcRange.endLineNumber + this._lineNumberDeltaOffset, srcRange.endColumn + this._columnDeltaOffset);\n }\n}\nexport class ReplaceCommandThatPreservesSelection {\n constructor(editRange, text, initialSelection, forceMoveMarkers = false) {\n this._range = editRange;\n this._text = text;\n this._initialSelection = initialSelection;\n this._forceMoveMarkers = forceMoveMarkers;\n this._selectionId = null;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._range, this._text, this._forceMoveMarkers);\n this._selectionId = builder.trackSelection(this._initialSelection);\n }\n computeCursorState(model, helper) {\n return helper.getTrackedSelection(this._selectionId);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { CursorColumns } from '../controller/cursorCommon.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\nconst repeatCache = Object.create(null);\nexport function cachedStringRepeat(str, count) {\n if (count <= 0) {\n return '';\n }\n if (!repeatCache[str]) {\n repeatCache[str] = ['', str];\n }\n const cache = repeatCache[str];\n for (let i = cache.length; i <= count; i++) {\n cache[i] = cache[i - 1] + str;\n }\n return cache[count];\n}\nexport class ShiftCommand {\n constructor(range, opts) {\n this._opts = opts;\n this._selection = range;\n this._selectionId = null;\n this._useLastEditRangeForCursorEndPosition = false;\n this._selectionStartColumnStaysPut = false;\n }\n static unshiftIndent(line, column, tabSize, indentSize, insertSpaces) {\n // Determine the visible column where the content starts\n const contentStartVisibleColumn = CursorColumns.visibleColumnFromColumn(line, column, tabSize);\n if (insertSpaces) {\n const indent = cachedStringRepeat(' ', indentSize);\n const desiredTabStop = CursorColumns.prevIndentTabStop(contentStartVisibleColumn, indentSize);\n const indentCount = desiredTabStop / indentSize; // will be an integer\n return cachedStringRepeat(indent, indentCount);\n }\n else {\n const indent = '\\t';\n const desiredTabStop = CursorColumns.prevRenderTabStop(contentStartVisibleColumn, tabSize);\n const indentCount = desiredTabStop / tabSize; // will be an integer\n return cachedStringRepeat(indent, indentCount);\n }\n }\n static shiftIndent(line, column, tabSize, indentSize, insertSpaces) {\n // Determine the visible column where the content starts\n const contentStartVisibleColumn = CursorColumns.visibleColumnFromColumn(line, column, tabSize);\n if (insertSpaces) {\n const indent = cachedStringRepeat(' ', indentSize);\n const desiredTabStop = CursorColumns.nextIndentTabStop(contentStartVisibleColumn, indentSize);\n const indentCount = desiredTabStop / indentSize; // will be an integer\n return cachedStringRepeat(indent, indentCount);\n }\n else {\n const indent = '\\t';\n const desiredTabStop = CursorColumns.nextRenderTabStop(contentStartVisibleColumn, tabSize);\n const indentCount = desiredTabStop / tabSize; // will be an integer\n return cachedStringRepeat(indent, indentCount);\n }\n }\n _addEditOperation(builder, range, text) {\n if (this._useLastEditRangeForCursorEndPosition) {\n builder.addTrackedEditOperation(range, text);\n }\n else {\n builder.addEditOperation(range, text);\n }\n }\n getEditOperations(model, builder) {\n const startLine = this._selection.startLineNumber;\n let endLine = this._selection.endLineNumber;\n if (this._selection.endColumn === 1 && startLine !== endLine) {\n endLine = endLine - 1;\n }\n const { tabSize, indentSize, insertSpaces } = this._opts;\n const shouldIndentEmptyLines = (startLine === endLine);\n if (this._opts.useTabStops) {\n // if indenting or outdenting on a whitespace only line\n if (this._selection.isEmpty()) {\n if (/^\\s*$/.test(model.getLineContent(startLine))) {\n this._useLastEditRangeForCursorEndPosition = true;\n }\n }\n // keep track of previous line's \"miss-alignment\"\n let previousLineExtraSpaces = 0, extraSpaces = 0;\n for (let lineNumber = startLine; lineNumber <= endLine; lineNumber++, previousLineExtraSpaces = extraSpaces) {\n extraSpaces = 0;\n let lineText = model.getLineContent(lineNumber);\n let indentationEndIndex = strings.firstNonWhitespaceIndex(lineText);\n if (this._opts.isUnshift && (lineText.length === 0 || indentationEndIndex === 0)) {\n // empty line or line with no leading whitespace => nothing to do\n continue;\n }\n if (!shouldIndentEmptyLines && !this._opts.isUnshift && lineText.length === 0) {\n // do not indent empty lines => nothing to do\n continue;\n }\n if (indentationEndIndex === -1) {\n // the entire line is whitespace\n indentationEndIndex = lineText.length;\n }\n if (lineNumber > 1) {\n let contentStartVisibleColumn = CursorColumns.visibleColumnFromColumn(lineText, indentationEndIndex + 1, tabSize);\n if (contentStartVisibleColumn % indentSize !== 0) {\n // The current line is \"miss-aligned\", so let's see if this is expected...\n // This can only happen when it has trailing commas in the indent\n if (model.isCheapToTokenize(lineNumber - 1)) {\n let enterAction = LanguageConfigurationRegistry.getEnterAction(this._opts.autoIndent, model, new Range(lineNumber - 1, model.getLineMaxColumn(lineNumber - 1), lineNumber - 1, model.getLineMaxColumn(lineNumber - 1)));\n if (enterAction) {\n extraSpaces = previousLineExtraSpaces;\n if (enterAction.appendText) {\n for (let j = 0, lenJ = enterAction.appendText.length; j < lenJ && extraSpaces < indentSize; j++) {\n if (enterAction.appendText.charCodeAt(j) === 32 /* Space */) {\n extraSpaces++;\n }\n else {\n break;\n }\n }\n }\n if (enterAction.removeText) {\n extraSpaces = Math.max(0, extraSpaces - enterAction.removeText);\n }\n // Act as if `prefixSpaces` is not part of the indentation\n for (let j = 0; j < extraSpaces; j++) {\n if (indentationEndIndex === 0 || lineText.charCodeAt(indentationEndIndex - 1) !== 32 /* Space */) {\n break;\n }\n indentationEndIndex--;\n }\n }\n }\n }\n }\n if (this._opts.isUnshift && indentationEndIndex === 0) {\n // line with no leading whitespace => nothing to do\n continue;\n }\n let desiredIndent;\n if (this._opts.isUnshift) {\n desiredIndent = ShiftCommand.unshiftIndent(lineText, indentationEndIndex + 1, tabSize, indentSize, insertSpaces);\n }\n else {\n desiredIndent = ShiftCommand.shiftIndent(lineText, indentationEndIndex + 1, tabSize, indentSize, insertSpaces);\n }\n this._addEditOperation(builder, new Range(lineNumber, 1, lineNumber, indentationEndIndex + 1), desiredIndent);\n if (lineNumber === startLine && !this._selection.isEmpty()) {\n // Force the startColumn to stay put because we're inserting after it\n this._selectionStartColumnStaysPut = (this._selection.startColumn <= indentationEndIndex + 1);\n }\n }\n }\n else {\n // if indenting or outdenting on a whitespace only line\n if (!this._opts.isUnshift && this._selection.isEmpty() && model.getLineLength(startLine) === 0) {\n this._useLastEditRangeForCursorEndPosition = true;\n }\n const oneIndent = (insertSpaces ? cachedStringRepeat(' ', indentSize) : '\\t');\n for (let lineNumber = startLine; lineNumber <= endLine; lineNumber++) {\n const lineText = model.getLineContent(lineNumber);\n let indentationEndIndex = strings.firstNonWhitespaceIndex(lineText);\n if (this._opts.isUnshift && (lineText.length === 0 || indentationEndIndex === 0)) {\n // empty line or line with no leading whitespace => nothing to do\n continue;\n }\n if (!shouldIndentEmptyLines && !this._opts.isUnshift && lineText.length === 0) {\n // do not indent empty lines => nothing to do\n continue;\n }\n if (indentationEndIndex === -1) {\n // the entire line is whitespace\n indentationEndIndex = lineText.length;\n }\n if (this._opts.isUnshift && indentationEndIndex === 0) {\n // line with no leading whitespace => nothing to do\n continue;\n }\n if (this._opts.isUnshift) {\n indentationEndIndex = Math.min(indentationEndIndex, indentSize);\n for (let i = 0; i < indentationEndIndex; i++) {\n const chr = lineText.charCodeAt(i);\n if (chr === 9 /* Tab */) {\n indentationEndIndex = i + 1;\n break;\n }\n }\n this._addEditOperation(builder, new Range(lineNumber, 1, lineNumber, indentationEndIndex + 1), '');\n }\n else {\n this._addEditOperation(builder, new Range(lineNumber, 1, lineNumber, 1), oneIndent);\n if (lineNumber === startLine && !this._selection.isEmpty()) {\n // Force the startColumn to stay put because we're inserting after it\n this._selectionStartColumnStaysPut = (this._selection.startColumn === 1);\n }\n }\n }\n }\n this._selectionId = builder.trackSelection(this._selection);\n }\n computeCursorState(model, helper) {\n if (this._useLastEditRangeForCursorEndPosition) {\n let lastOp = helper.getInverseEditOperations()[0];\n return new Selection(lastOp.range.endLineNumber, lastOp.range.endColumn, lastOp.range.endLineNumber, lastOp.range.endColumn);\n }\n const result = helper.getTrackedSelection(this._selectionId);\n if (this._selectionStartColumnStaysPut) {\n // The selection start should not move\n let initialStartColumn = this._selection.startColumn;\n let resultStartColumn = result.startColumn;\n if (resultStartColumn <= initialStartColumn) {\n return result;\n }\n if (result.getDirection() === 0 /* LTR */) {\n return new Selection(result.startLineNumber, initialStartColumn, result.endLineNumber, result.endColumn);\n }\n return new Selection(result.endLineNumber, result.endColumn, result.startLineNumber, initialStartColumn);\n }\n return result;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as objects from '../../../base/common/objects.js';\nimport * as arrays from '../../../base/common/arrays.js';\nimport { editorOptionsRegistry, ValidatedEditorOptions, ConfigurationChangedEvent, EDITOR_MODEL_DEFAULTS, ComputeOptionsMemory } from './editorOptions.js';\nimport { EditorZoom } from './editorZoom.js';\nimport { BareFontInfo } from './fontInfo.js';\nimport { Extensions } from '../../../platform/configuration/common/configurationRegistry.js';\nimport { Registry } from '../../../platform/registry/common/platform.js';\nimport { forEach } from '../../../base/common/collections.js';\nexport const TabFocus = new class {\n constructor() {\n this._tabFocus = false;\n this._onDidChangeTabFocus = new Emitter();\n this.onDidChangeTabFocus = this._onDidChangeTabFocus.event;\n }\n getTabFocusMode() {\n return this._tabFocus;\n }\n setTabFocusMode(tabFocusMode) {\n if (this._tabFocus === tabFocusMode) {\n return;\n }\n this._tabFocus = tabFocusMode;\n this._onDidChangeTabFocus.fire(this._tabFocus);\n }\n};\nconst hasOwnProperty = Object.hasOwnProperty;\nexport class ComputedEditorOptions {\n constructor() {\n this._values = [];\n }\n _read(id) {\n return this._values[id];\n }\n get(id) {\n return this._values[id];\n }\n _write(id, value) {\n this._values[id] = value;\n }\n}\nclass RawEditorOptions {\n constructor() {\n this._values = [];\n }\n _read(id) {\n return this._values[id];\n }\n _write(id, value) {\n this._values[id] = value;\n }\n}\nclass EditorConfiguration2 {\n static readOptions(_options) {\n const options = _options;\n const result = new RawEditorOptions();\n for (const editorOption of editorOptionsRegistry) {\n const value = (editorOption.name === '_never_' ? undefined : options[editorOption.name]);\n result._write(editorOption.id, value);\n }\n return result;\n }\n static validateOptions(options) {\n const result = new ValidatedEditorOptions();\n for (const editorOption of editorOptionsRegistry) {\n result._write(editorOption.id, editorOption.validate(options._read(editorOption.id)));\n }\n return result;\n }\n static computeOptions(options, env) {\n const result = new ComputedEditorOptions();\n for (const editorOption of editorOptionsRegistry) {\n result._write(editorOption.id, editorOption.compute(env, result, options._read(editorOption.id)));\n }\n return result;\n }\n static _deepEquals(a, b) {\n if (typeof a !== 'object' || typeof b !== 'object') {\n return (a === b);\n }\n if (Array.isArray(a) || Array.isArray(b)) {\n return (Array.isArray(a) && Array.isArray(b) ? arrays.equals(a, b) : false);\n }\n for (let key in a) {\n if (!EditorConfiguration2._deepEquals(a[key], b[key])) {\n return false;\n }\n }\n return true;\n }\n static checkEquals(a, b) {\n const result = [];\n let somethingChanged = false;\n for (const editorOption of editorOptionsRegistry) {\n const changed = !EditorConfiguration2._deepEquals(a._read(editorOption.id), b._read(editorOption.id));\n result[editorOption.id] = changed;\n if (changed) {\n somethingChanged = true;\n }\n }\n return (somethingChanged ? new ConfigurationChangedEvent(result) : null);\n }\n}\n/**\n * Compatibility with old options\n */\nfunction migrateOptions(options) {\n const wordWrap = options.wordWrap;\n if (wordWrap === true) {\n options.wordWrap = 'on';\n }\n else if (wordWrap === false) {\n options.wordWrap = 'off';\n }\n const lineNumbers = options.lineNumbers;\n if (lineNumbers === true) {\n options.lineNumbers = 'on';\n }\n else if (lineNumbers === false) {\n options.lineNumbers = 'off';\n }\n const autoClosingBrackets = options.autoClosingBrackets;\n if (autoClosingBrackets === false) {\n options.autoClosingBrackets = 'never';\n options.autoClosingQuotes = 'never';\n options.autoSurround = 'never';\n }\n const cursorBlinking = options.cursorBlinking;\n if (cursorBlinking === 'visible') {\n options.cursorBlinking = 'solid';\n }\n const renderWhitespace = options.renderWhitespace;\n if (renderWhitespace === true) {\n options.renderWhitespace = 'boundary';\n }\n else if (renderWhitespace === false) {\n options.renderWhitespace = 'none';\n }\n const renderLineHighlight = options.renderLineHighlight;\n if (renderLineHighlight === true) {\n options.renderLineHighlight = 'line';\n }\n else if (renderLineHighlight === false) {\n options.renderLineHighlight = 'none';\n }\n const acceptSuggestionOnEnter = options.acceptSuggestionOnEnter;\n if (acceptSuggestionOnEnter === true) {\n options.acceptSuggestionOnEnter = 'on';\n }\n else if (acceptSuggestionOnEnter === false) {\n options.acceptSuggestionOnEnter = 'off';\n }\n const tabCompletion = options.tabCompletion;\n if (tabCompletion === false) {\n options.tabCompletion = 'off';\n }\n else if (tabCompletion === true) {\n options.tabCompletion = 'onlySnippets';\n }\n const suggest = options.suggest;\n if (suggest && typeof suggest.filteredTypes === 'object' && suggest.filteredTypes) {\n const mapping = {};\n mapping['method'] = 'showMethods';\n mapping['function'] = 'showFunctions';\n mapping['constructor'] = 'showConstructors';\n mapping['field'] = 'showFields';\n mapping['variable'] = 'showVariables';\n mapping['class'] = 'showClasses';\n mapping['struct'] = 'showStructs';\n mapping['interface'] = 'showInterfaces';\n mapping['module'] = 'showModules';\n mapping['property'] = 'showProperties';\n mapping['event'] = 'showEvents';\n mapping['operator'] = 'showOperators';\n mapping['unit'] = 'showUnits';\n mapping['value'] = 'showValues';\n mapping['constant'] = 'showConstants';\n mapping['enum'] = 'showEnums';\n mapping['enumMember'] = 'showEnumMembers';\n mapping['keyword'] = 'showKeywords';\n mapping['text'] = 'showWords';\n mapping['color'] = 'showColors';\n mapping['file'] = 'showFiles';\n mapping['reference'] = 'showReferences';\n mapping['folder'] = 'showFolders';\n mapping['typeParameter'] = 'showTypeParameters';\n mapping['snippet'] = 'showSnippets';\n forEach(mapping, entry => {\n const value = suggest.filteredTypes[entry.key];\n if (value === false) {\n suggest[entry.value] = value;\n }\n });\n // delete (<any>suggest).filteredTypes;\n }\n const hover = options.hover;\n if (hover === true) {\n options.hover = {\n enabled: true\n };\n }\n else if (hover === false) {\n options.hover = {\n enabled: false\n };\n }\n const parameterHints = options.parameterHints;\n if (parameterHints === true) {\n options.parameterHints = {\n enabled: true\n };\n }\n else if (parameterHints === false) {\n options.parameterHints = {\n enabled: false\n };\n }\n const autoIndent = options.autoIndent;\n if (autoIndent === true) {\n options.autoIndent = 'full';\n }\n else if (autoIndent === false) {\n options.autoIndent = 'advanced';\n }\n const matchBrackets = options.matchBrackets;\n if (matchBrackets === true) {\n options.matchBrackets = 'always';\n }\n else if (matchBrackets === false) {\n options.matchBrackets = 'never';\n }\n}\nfunction deepCloneAndMigrateOptions(_options) {\n const options = objects.deepClone(_options);\n migrateOptions(options);\n return options;\n}\nexport class CommonEditorConfiguration extends Disposable {\n constructor(isSimpleWidget, _options) {\n super();\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._onDidChangeFast = this._register(new Emitter());\n this.onDidChangeFast = this._onDidChangeFast.event;\n this.isSimpleWidget = isSimpleWidget;\n this._isDominatedByLongLines = false;\n this._computeOptionsMemory = new ComputeOptionsMemory();\n this._viewLineCount = 1;\n this._lineNumbersDigitCount = 1;\n this._rawOptions = deepCloneAndMigrateOptions(_options);\n this._readOptions = EditorConfiguration2.readOptions(this._rawOptions);\n this._validatedOptions = EditorConfiguration2.validateOptions(this._readOptions);\n this._register(EditorZoom.onDidChangeZoomLevel(_ => this._recomputeOptions()));\n this._register(TabFocus.onDidChangeTabFocus(_ => this._recomputeOptions()));\n }\n observeReferenceElement(dimension) {\n }\n updatePixelRatio() {\n }\n _recomputeOptions() {\n const oldOptions = this.options;\n const newOptions = this._computeInternalOptions();\n if (!oldOptions) {\n this.options = newOptions;\n }\n else {\n const changeEvent = EditorConfiguration2.checkEquals(oldOptions, newOptions);\n if (changeEvent === null) {\n // nothing changed!\n return;\n }\n this.options = newOptions;\n this._onDidChangeFast.fire(changeEvent);\n this._onDidChange.fire(changeEvent);\n }\n }\n getRawOptions() {\n return this._rawOptions;\n }\n _computeInternalOptions() {\n const partialEnv = this._getEnvConfiguration();\n const bareFontInfo = BareFontInfo.createFromValidatedSettings(this._validatedOptions, partialEnv.zoomLevel, partialEnv.pixelRatio, this.isSimpleWidget);\n const env = {\n memory: this._computeOptionsMemory,\n outerWidth: partialEnv.outerWidth,\n outerHeight: partialEnv.outerHeight,\n fontInfo: this.readConfiguration(bareFontInfo),\n extraEditorClassName: partialEnv.extraEditorClassName,\n isDominatedByLongLines: this._isDominatedByLongLines,\n viewLineCount: this._viewLineCount,\n lineNumbersDigitCount: this._lineNumbersDigitCount,\n emptySelectionClipboard: partialEnv.emptySelectionClipboard,\n pixelRatio: partialEnv.pixelRatio,\n tabFocusMode: TabFocus.getTabFocusMode(),\n accessibilitySupport: partialEnv.accessibilitySupport\n };\n return EditorConfiguration2.computeOptions(this._validatedOptions, env);\n }\n static _subsetEquals(base, subset) {\n for (const key in subset) {\n if (hasOwnProperty.call(subset, key)) {\n const subsetValue = subset[key];\n const baseValue = base[key];\n if (baseValue === subsetValue) {\n continue;\n }\n if (Array.isArray(baseValue) && Array.isArray(subsetValue)) {\n if (!arrays.equals(baseValue, subsetValue)) {\n return false;\n }\n continue;\n }\n if (baseValue && typeof baseValue === 'object' && subsetValue && typeof subsetValue === 'object') {\n if (!this._subsetEquals(baseValue, subsetValue)) {\n return false;\n }\n continue;\n }\n return false;\n }\n }\n return true;\n }\n updateOptions(_newOptions) {\n if (typeof _newOptions === 'undefined') {\n return;\n }\n const newOptions = deepCloneAndMigrateOptions(_newOptions);\n if (CommonEditorConfiguration._subsetEquals(this._rawOptions, newOptions)) {\n return;\n }\n this._rawOptions = objects.mixin(this._rawOptions, newOptions || {});\n this._readOptions = EditorConfiguration2.readOptions(this._rawOptions);\n this._validatedOptions = EditorConfiguration2.validateOptions(this._readOptions);\n this._recomputeOptions();\n }\n setIsDominatedByLongLines(isDominatedByLongLines) {\n this._isDominatedByLongLines = isDominatedByLongLines;\n this._recomputeOptions();\n }\n setMaxLineNumber(maxLineNumber) {\n const lineNumbersDigitCount = CommonEditorConfiguration._digitCount(maxLineNumber);\n if (this._lineNumbersDigitCount === lineNumbersDigitCount) {\n return;\n }\n this._lineNumbersDigitCount = lineNumbersDigitCount;\n this._recomputeOptions();\n }\n setViewLineCount(viewLineCount) {\n if (this._viewLineCount === viewLineCount) {\n return;\n }\n this._viewLineCount = viewLineCount;\n this._recomputeOptions();\n }\n static _digitCount(n) {\n let r = 0;\n while (n) {\n n = Math.floor(n / 10);\n r++;\n }\n return r ? r : 1;\n }\n}\nexport const editorConfigurationBaseNode = Object.freeze({\n id: 'editor',\n order: 5,\n type: 'object',\n title: nls.localize('editorConfigurationTitle', \"Editor\"),\n scope: 5 /* LANGUAGE_OVERRIDABLE */,\n});\nconst configurationRegistry = Registry.as(Extensions.Configuration);\nconst editorConfiguration = Object.assign(Object.assign({}, editorConfigurationBaseNode), { properties: {\n 'editor.tabSize': {\n type: 'number',\n default: EDITOR_MODEL_DEFAULTS.tabSize,\n minimum: 1,\n markdownDescription: nls.localize('tabSize', \"The number of spaces a tab is equal to. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.\")\n },\n // 'editor.indentSize': {\n // \t'anyOf': [\n // \t\t{\n // \t\t\ttype: 'string',\n // \t\t\tenum: ['tabSize']\n // \t\t},\n // \t\t{\n // \t\t\ttype: 'number',\n // \t\t\tminimum: 1\n // \t\t}\n // \t],\n // \tdefault: 'tabSize',\n // \tmarkdownDescription: nls.localize('indentSize', \"The number of spaces used for indentation or 'tabSize' to use the value from `#editor.tabSize#`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.\")\n // },\n 'editor.insertSpaces': {\n type: 'boolean',\n default: EDITOR_MODEL_DEFAULTS.insertSpaces,\n markdownDescription: nls.localize('insertSpaces', \"Insert spaces when pressing `Tab`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.\")\n },\n 'editor.detectIndentation': {\n type: 'boolean',\n default: EDITOR_MODEL_DEFAULTS.detectIndentation,\n markdownDescription: nls.localize('detectIndentation', \"Controls whether `#editor.tabSize#` and `#editor.insertSpaces#` will be automatically detected when a file is opened based on the file contents.\")\n },\n 'editor.trimAutoWhitespace': {\n type: 'boolean',\n default: EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,\n description: nls.localize('trimAutoWhitespace', \"Remove trailing auto inserted whitespace.\")\n },\n 'editor.largeFileOptimizations': {\n type: 'boolean',\n default: EDITOR_MODEL_DEFAULTS.largeFileOptimizations,\n description: nls.localize('largeFileOptimizations', \"Special handling for large files to disable certain memory intensive features.\")\n },\n 'editor.wordBasedSuggestions': {\n type: 'boolean',\n default: true,\n description: nls.localize('wordBasedSuggestions', \"Controls whether completions should be computed based on words in the document.\")\n },\n 'editor.wordBasedSuggestionsMode': {\n enum: ['currentDocument', 'matchingDocuments', 'allDocuments'],\n default: 'matchingDocuments',\n enumDescriptions: [\n nls.localize('wordBasedSuggestionsMode.currentDocument', 'Only suggest words from the active document.'),\n nls.localize('wordBasedSuggestionsMode.matchingDocuments', 'Suggest words from all open documents of the same language.'),\n nls.localize('wordBasedSuggestionsMode.allDocuments', 'Suggest words from all open documents.')\n ],\n description: nls.localize('wordBasedSuggestionsMode', \"Controls from which documents word based completions are computed.\")\n },\n 'editor.semanticHighlighting.enabled': {\n enum: [true, false, 'configuredByTheme'],\n enumDescriptions: [\n nls.localize('semanticHighlighting.true', 'Semantic highlighting enabled for all color themes.'),\n nls.localize('semanticHighlighting.false', 'Semantic highlighting disabled for all color themes.'),\n nls.localize('semanticHighlighting.configuredByTheme', 'Semantic highlighting is configured by the current color theme\\'s `semanticHighlighting` setting.')\n ],\n default: 'configuredByTheme',\n description: nls.localize('semanticHighlighting.enabled', \"Controls whether the semanticHighlighting is shown for the languages that support it.\")\n },\n 'editor.stablePeek': {\n type: 'boolean',\n default: false,\n markdownDescription: nls.localize('stablePeek', \"Keep peek editors open even when double clicking their content or when hitting `Escape`.\")\n },\n 'editor.maxTokenizationLineLength': {\n type: 'integer',\n default: 20000,\n description: nls.localize('maxTokenizationLineLength', \"Lines above this length will not be tokenized for performance reasons\")\n },\n 'diffEditor.maxComputationTime': {\n type: 'number',\n default: 5000,\n description: nls.localize('maxComputationTime', \"Timeout in milliseconds after which diff computation is cancelled. Use 0 for no timeout.\")\n },\n 'diffEditor.renderSideBySide': {\n type: 'boolean',\n default: true,\n description: nls.localize('sideBySide', \"Controls whether the diff editor shows the diff side by side or inline.\")\n },\n 'diffEditor.ignoreTrimWhitespace': {\n type: 'boolean',\n default: true,\n description: nls.localize('ignoreTrimWhitespace', \"When enabled, the diff editor ignores changes in leading or trailing whitespace.\")\n },\n 'diffEditor.renderIndicators': {\n type: 'boolean',\n default: true,\n description: nls.localize('renderIndicators', \"Controls whether the diff editor shows +/- indicators for added/removed changes.\")\n },\n 'diffEditor.codeLens': {\n type: 'boolean',\n default: false,\n description: nls.localize('codeLens', \"Controls whether the editor shows CodeLens.\")\n },\n 'diffEditor.wordWrap': {\n type: 'string',\n enum: ['off', 'on', 'inherit'],\n default: 'inherit',\n markdownEnumDescriptions: [\n nls.localize('wordWrap.off', \"Lines will never wrap.\"),\n nls.localize('wordWrap.on', \"Lines will wrap at the viewport width.\"),\n nls.localize('wordWrap.inherit', \"Lines will wrap according to the `#editor.wordWrap#` setting.\"),\n ]\n }\n } });\nfunction isConfigurationPropertySchema(x) {\n return (typeof x.type !== 'undefined' || typeof x.anyOf !== 'undefined');\n}\n// Add properties from the Editor Option Registry\nfor (const editorOption of editorOptionsRegistry) {\n const schema = editorOption.schema;\n if (typeof schema !== 'undefined') {\n if (isConfigurationPropertySchema(schema)) {\n // This is a single schema contribution\n editorConfiguration.properties[`editor.${editorOption.name}`] = schema;\n }\n else {\n for (let key in schema) {\n if (hasOwnProperty.call(schema, key)) {\n editorConfiguration.properties[key] = schema[key];\n }\n }\n }\n }\n}\nlet cachedEditorConfigurationKeys = null;\nfunction getEditorConfigurationKeys() {\n if (cachedEditorConfigurationKeys === null) {\n cachedEditorConfigurationKeys = Object.create(null);\n Object.keys(editorConfiguration.properties).forEach((prop) => {\n cachedEditorConfigurationKeys[prop] = true;\n });\n }\n return cachedEditorConfigurationKeys;\n}\nexport function isEditorConfigurationKey(key) {\n const editorConfigurationKeys = getEditorConfigurationKeys();\n return (editorConfigurationKeys[`editor.${key}`] || false);\n}\nexport function isDiffEditorConfigurationKey(key) {\n const editorConfigurationKeys = getEditorConfigurationKeys();\n return (editorConfigurationKeys[`diffEditor.${key}`] || false);\n}\nconfigurationRegistry.registerConfiguration(editorConfiguration);\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { USUAL_WORD_SEPARATORS } from '../model/wordHelper.js';\n/**\n * @internal\n * The width of the minimap gutter, in pixels.\n */\nexport const MINIMAP_GUTTER_WIDTH = 8;\n//#endregion\n/**\n * An event describing that the configuration of the editor has changed.\n */\nexport class ConfigurationChangedEvent {\n /**\n * @internal\n */\n constructor(values) {\n this._values = values;\n }\n hasChanged(id) {\n return this._values[id];\n }\n}\n/**\n * @internal\n */\nexport class ValidatedEditorOptions {\n constructor() {\n this._values = [];\n }\n _read(option) {\n return this._values[option];\n }\n get(id) {\n return this._values[id];\n }\n _write(option, value) {\n this._values[option] = value;\n }\n}\n/**\n * @internal\n */\nexport class ComputeOptionsMemory {\n constructor() {\n this.stableMinimapLayoutInput = null;\n this.stableFitMaxMinimapScale = 0;\n this.stableFitRemainingWidth = 0;\n }\n}\n/**\n * @internal\n */\nclass BaseEditorOption {\n constructor(id, name, defaultValue, schema) {\n this.id = id;\n this.name = name;\n this.defaultValue = defaultValue;\n this.schema = schema;\n }\n compute(env, options, value) {\n return value;\n }\n}\n/**\n * @internal\n */\nclass ComputedEditorOption {\n constructor(id, deps = null) {\n this.schema = undefined;\n this.id = id;\n this.name = '_never_';\n this.defaultValue = undefined;\n this.deps = deps;\n }\n validate(input) {\n return this.defaultValue;\n }\n}\nclass SimpleEditorOption {\n constructor(id, name, defaultValue, schema) {\n this.id = id;\n this.name = name;\n this.defaultValue = defaultValue;\n this.schema = schema;\n }\n validate(input) {\n if (typeof input === 'undefined') {\n return this.defaultValue;\n }\n return input;\n }\n compute(env, options, value) {\n return value;\n }\n}\n/**\n * @internal\n */\nexport function boolean(value, defaultValue) {\n if (typeof value === 'undefined') {\n return defaultValue;\n }\n if (value === 'false') {\n // treat the string 'false' as false\n return false;\n }\n return Boolean(value);\n}\nclass EditorBooleanOption extends SimpleEditorOption {\n constructor(id, name, defaultValue, schema = undefined) {\n if (typeof schema !== 'undefined') {\n schema.type = 'boolean';\n schema.default = defaultValue;\n }\n super(id, name, defaultValue, schema);\n }\n validate(input) {\n return boolean(input, this.defaultValue);\n }\n}\nclass EditorIntOption extends SimpleEditorOption {\n constructor(id, name, defaultValue, minimum, maximum, schema = undefined) {\n if (typeof schema !== 'undefined') {\n schema.type = 'integer';\n schema.default = defaultValue;\n schema.minimum = minimum;\n schema.maximum = maximum;\n }\n super(id, name, defaultValue, schema);\n this.minimum = minimum;\n this.maximum = maximum;\n }\n static clampedInt(value, defaultValue, minimum, maximum) {\n if (typeof value === 'undefined') {\n return defaultValue;\n }\n let r = parseInt(value, 10);\n if (isNaN(r)) {\n return defaultValue;\n }\n r = Math.max(minimum, r);\n r = Math.min(maximum, r);\n return r | 0;\n }\n validate(input) {\n return EditorIntOption.clampedInt(input, this.defaultValue, this.minimum, this.maximum);\n }\n}\nclass EditorFloatOption extends SimpleEditorOption {\n constructor(id, name, defaultValue, validationFn, schema) {\n if (typeof schema !== 'undefined') {\n schema.type = 'number';\n schema.default = defaultValue;\n }\n super(id, name, defaultValue, schema);\n this.validationFn = validationFn;\n }\n static clamp(n, min, max) {\n if (n < min) {\n return min;\n }\n if (n > max) {\n return max;\n }\n return n;\n }\n static float(value, defaultValue) {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'undefined') {\n return defaultValue;\n }\n const r = parseFloat(value);\n return (isNaN(r) ? defaultValue : r);\n }\n validate(input) {\n return this.validationFn(EditorFloatOption.float(input, this.defaultValue));\n }\n}\nclass EditorStringOption extends SimpleEditorOption {\n static string(value, defaultValue) {\n if (typeof value !== 'string') {\n return defaultValue;\n }\n return value;\n }\n constructor(id, name, defaultValue, schema = undefined) {\n if (typeof schema !== 'undefined') {\n schema.type = 'string';\n schema.default = defaultValue;\n }\n super(id, name, defaultValue, schema);\n }\n validate(input) {\n return EditorStringOption.string(input, this.defaultValue);\n }\n}\n/**\n * @internal\n */\nexport function stringSet(value, defaultValue, allowedValues) {\n if (typeof value !== 'string') {\n return defaultValue;\n }\n if (allowedValues.indexOf(value) === -1) {\n return defaultValue;\n }\n return value;\n}\nclass EditorStringEnumOption extends SimpleEditorOption {\n constructor(id, name, defaultValue, allowedValues, schema = undefined) {\n if (typeof schema !== 'undefined') {\n schema.type = 'string';\n schema.enum = allowedValues;\n schema.default = defaultValue;\n }\n super(id, name, defaultValue, schema);\n this._allowedValues = allowedValues;\n }\n validate(input) {\n return stringSet(input, this.defaultValue, this._allowedValues);\n }\n}\nclass EditorEnumOption extends BaseEditorOption {\n constructor(id, name, defaultValue, defaultStringValue, allowedValues, convert, schema = undefined) {\n if (typeof schema !== 'undefined') {\n schema.type = 'string';\n schema.enum = allowedValues;\n schema.default = defaultStringValue;\n }\n super(id, name, defaultValue, schema);\n this._allowedValues = allowedValues;\n this._convert = convert;\n }\n validate(input) {\n if (typeof input !== 'string') {\n return this.defaultValue;\n }\n if (this._allowedValues.indexOf(input) === -1) {\n return this.defaultValue;\n }\n return this._convert(input);\n }\n}\n//#endregion\n//#region autoIndent\nfunction _autoIndentFromString(autoIndent) {\n switch (autoIndent) {\n case 'none': return 0 /* None */;\n case 'keep': return 1 /* Keep */;\n case 'brackets': return 2 /* Brackets */;\n case 'advanced': return 3 /* Advanced */;\n case 'full': return 4 /* Full */;\n }\n}\n//#endregion\n//#region accessibilitySupport\nclass EditorAccessibilitySupport extends BaseEditorOption {\n constructor() {\n super(2 /* accessibilitySupport */, 'accessibilitySupport', 0 /* Unknown */, {\n type: 'string',\n enum: ['auto', 'on', 'off'],\n enumDescriptions: [\n nls.localize('accessibilitySupport.auto', \"The editor will use platform APIs to detect when a Screen Reader is attached.\"),\n nls.localize('accessibilitySupport.on', \"The editor will be permanently optimized for usage with a Screen Reader. Word wrapping will be disabled.\"),\n nls.localize('accessibilitySupport.off', \"The editor will never be optimized for usage with a Screen Reader.\"),\n ],\n default: 'auto',\n description: nls.localize('accessibilitySupport', \"Controls whether the editor should run in a mode where it is optimized for screen readers. Setting to on will disable word wrapping.\")\n });\n }\n validate(input) {\n switch (input) {\n case 'auto': return 0 /* Unknown */;\n case 'off': return 1 /* Disabled */;\n case 'on': return 2 /* Enabled */;\n }\n return this.defaultValue;\n }\n compute(env, options, value) {\n if (value === 0 /* Unknown */) {\n // The editor reads the `accessibilitySupport` from the environment\n return env.accessibilitySupport;\n }\n return value;\n }\n}\nclass EditorComments extends BaseEditorOption {\n constructor() {\n const defaults = {\n insertSpace: true,\n ignoreEmptyLines: true,\n };\n super(17 /* comments */, 'comments', defaults, {\n 'editor.comments.insertSpace': {\n type: 'boolean',\n default: defaults.insertSpace,\n description: nls.localize('comments.insertSpace', \"Controls whether a space character is inserted when commenting.\")\n },\n 'editor.comments.ignoreEmptyLines': {\n type: 'boolean',\n default: defaults.ignoreEmptyLines,\n description: nls.localize('comments.ignoreEmptyLines', 'Controls if empty lines should be ignored with toggle, add or remove actions for line comments.')\n },\n });\n }\n validate(_input) {\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n return {\n insertSpace: boolean(input.insertSpace, this.defaultValue.insertSpace),\n ignoreEmptyLines: boolean(input.ignoreEmptyLines, this.defaultValue.ignoreEmptyLines),\n };\n }\n}\nfunction _cursorBlinkingStyleFromString(cursorBlinkingStyle) {\n switch (cursorBlinkingStyle) {\n case 'blink': return 1 /* Blink */;\n case 'smooth': return 2 /* Smooth */;\n case 'phase': return 3 /* Phase */;\n case 'expand': return 4 /* Expand */;\n case 'solid': return 5 /* Solid */;\n }\n}\n//#endregion\n//#region cursorStyle\n/**\n * The style in which the editor's cursor should be rendered.\n */\nexport var TextEditorCursorStyle;\n(function (TextEditorCursorStyle) {\n /**\n * As a vertical line (sitting between two characters).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Line\"] = 1] = \"Line\";\n /**\n * As a block (sitting on top of a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Block\"] = 2] = \"Block\";\n /**\n * As a horizontal line (sitting under a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Underline\"] = 3] = \"Underline\";\n /**\n * As a thin vertical line (sitting between two characters).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"LineThin\"] = 4] = \"LineThin\";\n /**\n * As an outlined block (sitting on top of a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"BlockOutline\"] = 5] = \"BlockOutline\";\n /**\n * As a thin horizontal line (sitting under a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"UnderlineThin\"] = 6] = \"UnderlineThin\";\n})(TextEditorCursorStyle || (TextEditorCursorStyle = {}));\nfunction _cursorStyleFromString(cursorStyle) {\n switch (cursorStyle) {\n case 'line': return TextEditorCursorStyle.Line;\n case 'block': return TextEditorCursorStyle.Block;\n case 'underline': return TextEditorCursorStyle.Underline;\n case 'line-thin': return TextEditorCursorStyle.LineThin;\n case 'block-outline': return TextEditorCursorStyle.BlockOutline;\n case 'underline-thin': return TextEditorCursorStyle.UnderlineThin;\n }\n}\n//#endregion\n//#region editorClassName\nclass EditorClassName extends ComputedEditorOption {\n constructor() {\n super(124 /* editorClassName */, [62 /* mouseStyle */, 31 /* extraEditorClassName */]);\n }\n compute(env, options, _) {\n const classNames = ['monaco-editor'];\n if (options.get(31 /* extraEditorClassName */)) {\n classNames.push(options.get(31 /* extraEditorClassName */));\n }\n if (env.extraEditorClassName) {\n classNames.push(env.extraEditorClassName);\n }\n if (options.get(62 /* mouseStyle */) === 'default') {\n classNames.push('mouse-default');\n }\n else if (options.get(62 /* mouseStyle */) === 'copy') {\n classNames.push('mouse-copy');\n }\n if (options.get(97 /* showUnused */)) {\n classNames.push('showUnused');\n }\n if (options.get(122 /* showDeprecated */)) {\n classNames.push('showDeprecated');\n }\n return classNames.join(' ');\n }\n}\n//#endregion\n//#region emptySelectionClipboard\nclass EditorEmptySelectionClipboard extends EditorBooleanOption {\n constructor() {\n super(30 /* emptySelectionClipboard */, 'emptySelectionClipboard', true, { description: nls.localize('emptySelectionClipboard', \"Controls whether copying without a selection copies the current line.\") });\n }\n compute(env, options, value) {\n return value && env.emptySelectionClipboard;\n }\n}\nclass EditorFind extends BaseEditorOption {\n constructor() {\n const defaults = {\n cursorMoveOnType: true,\n seedSearchStringFromSelection: true,\n autoFindInSelection: 'never',\n globalFindClipboard: false,\n addExtraSpaceOnTop: true,\n loop: true\n };\n super(33 /* find */, 'find', defaults, {\n 'editor.find.cursorMoveOnType': {\n type: 'boolean',\n default: defaults.cursorMoveOnType,\n description: nls.localize('find.cursorMoveOnType', \"Controls whether the cursor should jump to find matches while typing.\")\n },\n 'editor.find.seedSearchStringFromSelection': {\n type: 'boolean',\n default: defaults.seedSearchStringFromSelection,\n description: nls.localize('find.seedSearchStringFromSelection', \"Controls whether the search string in the Find Widget is seeded from the editor selection.\")\n },\n 'editor.find.autoFindInSelection': {\n type: 'string',\n enum: ['never', 'always', 'multiline'],\n default: defaults.autoFindInSelection,\n enumDescriptions: [\n nls.localize('editor.find.autoFindInSelection.never', 'Never turn on Find in selection automatically (default).'),\n nls.localize('editor.find.autoFindInSelection.always', 'Always turn on Find in selection automatically.'),\n nls.localize('editor.find.autoFindInSelection.multiline', 'Turn on Find in selection automatically when multiple lines of content are selected.')\n ],\n description: nls.localize('find.autoFindInSelection', \"Controls the condition for turning on find in selection automatically.\")\n },\n 'editor.find.globalFindClipboard': {\n type: 'boolean',\n default: defaults.globalFindClipboard,\n description: nls.localize('find.globalFindClipboard', \"Controls whether the Find Widget should read or modify the shared find clipboard on macOS.\"),\n included: platform.isMacintosh\n },\n 'editor.find.addExtraSpaceOnTop': {\n type: 'boolean',\n default: defaults.addExtraSpaceOnTop,\n description: nls.localize('find.addExtraSpaceOnTop', \"Controls whether the Find Widget should add extra lines on top of the editor. When true, you can scroll beyond the first line when the Find Widget is visible.\")\n },\n 'editor.find.loop': {\n type: 'boolean',\n default: defaults.loop,\n description: nls.localize('find.loop', \"Controls whether the search automatically restarts from the beginning (or the end) when no further matches can be found.\")\n },\n });\n }\n validate(_input) {\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n return {\n cursorMoveOnType: boolean(input.cursorMoveOnType, this.defaultValue.cursorMoveOnType),\n seedSearchStringFromSelection: boolean(input.seedSearchStringFromSelection, this.defaultValue.seedSearchStringFromSelection),\n autoFindInSelection: typeof _input.autoFindInSelection === 'boolean'\n ? (_input.autoFindInSelection ? 'always' : 'never')\n : stringSet(input.autoFindInSelection, this.defaultValue.autoFindInSelection, ['never', 'always', 'multiline']),\n globalFindClipboard: boolean(input.globalFindClipboard, this.defaultValue.globalFindClipboard),\n addExtraSpaceOnTop: boolean(input.addExtraSpaceOnTop, this.defaultValue.addExtraSpaceOnTop),\n loop: boolean(input.loop, this.defaultValue.loop),\n };\n }\n}\n//#endregion\n//#region fontLigatures\n/**\n * @internal\n */\nexport class EditorFontLigatures extends BaseEditorOption {\n constructor() {\n super(41 /* fontLigatures */, 'fontLigatures', EditorFontLigatures.OFF, {\n anyOf: [\n {\n type: 'boolean',\n description: nls.localize('fontLigatures', \"Enables/Disables font ligatures ('calt' and 'liga' font features). Change this to a string for fine-grained control of the 'font-feature-settings' CSS property.\"),\n },\n {\n type: 'string',\n description: nls.localize('fontFeatureSettings', \"Explicit 'font-feature-settings' CSS property. A boolean can be passed instead if one only needs to turn on/off ligatures.\")\n }\n ],\n description: nls.localize('fontLigaturesGeneral', \"Configures font ligatures or font features. Can be either a boolean to enable/disable ligatures or a string for the value of the CSS 'font-feature-settings' property.\"),\n default: false\n });\n }\n validate(input) {\n if (typeof input === 'undefined') {\n return this.defaultValue;\n }\n if (typeof input === 'string') {\n if (input === 'false') {\n return EditorFontLigatures.OFF;\n }\n if (input === 'true') {\n return EditorFontLigatures.ON;\n }\n return input;\n }\n if (Boolean(input)) {\n return EditorFontLigatures.ON;\n }\n return EditorFontLigatures.OFF;\n }\n}\nEditorFontLigatures.OFF = '\"liga\" off, \"calt\" off';\nEditorFontLigatures.ON = '\"liga\" on, \"calt\" on';\n//#endregion\n//#region fontInfo\nclass EditorFontInfo extends ComputedEditorOption {\n constructor() {\n super(40 /* fontInfo */);\n }\n compute(env, options, _) {\n return env.fontInfo;\n }\n}\n//#endregion\n//#region fontSize\nclass EditorFontSize extends SimpleEditorOption {\n constructor() {\n super(42 /* fontSize */, 'fontSize', EDITOR_FONT_DEFAULTS.fontSize, {\n type: 'number',\n minimum: 6,\n maximum: 100,\n default: EDITOR_FONT_DEFAULTS.fontSize,\n description: nls.localize('fontSize', \"Controls the font size in pixels.\")\n });\n }\n validate(input) {\n let r = EditorFloatOption.float(input, this.defaultValue);\n if (r === 0) {\n return EDITOR_FONT_DEFAULTS.fontSize;\n }\n return EditorFloatOption.clamp(r, 6, 100);\n }\n compute(env, options, value) {\n // The final fontSize respects the editor zoom level.\n // So take the result from env.fontInfo\n return env.fontInfo.fontSize;\n }\n}\n//#endregion\n//#region fontWeight\nclass EditorFontWeight extends BaseEditorOption {\n constructor() {\n super(43 /* fontWeight */, 'fontWeight', EDITOR_FONT_DEFAULTS.fontWeight, {\n anyOf: [\n {\n type: 'number',\n minimum: EditorFontWeight.MINIMUM_VALUE,\n maximum: EditorFontWeight.MAXIMUM_VALUE,\n errorMessage: nls.localize('fontWeightErrorMessage', \"Only \\\"normal\\\" and \\\"bold\\\" keywords or numbers between 1 and 1000 are allowed.\")\n },\n {\n type: 'string',\n pattern: '^(normal|bold|1000|[1-9][0-9]{0,2})$'\n },\n {\n enum: EditorFontWeight.SUGGESTION_VALUES\n }\n ],\n default: EDITOR_FONT_DEFAULTS.fontWeight,\n description: nls.localize('fontWeight', \"Controls the font weight. Accepts \\\"normal\\\" and \\\"bold\\\" keywords or numbers between 1 and 1000.\")\n });\n }\n validate(input) {\n if (input === 'normal' || input === 'bold') {\n return input;\n }\n return String(EditorIntOption.clampedInt(input, EDITOR_FONT_DEFAULTS.fontWeight, EditorFontWeight.MINIMUM_VALUE, EditorFontWeight.MAXIMUM_VALUE));\n }\n}\nEditorFontWeight.SUGGESTION_VALUES = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];\nEditorFontWeight.MINIMUM_VALUE = 1;\nEditorFontWeight.MAXIMUM_VALUE = 1000;\nclass EditorGoToLocation extends BaseEditorOption {\n constructor() {\n const defaults = {\n multiple: 'peek',\n multipleDefinitions: 'peek',\n multipleTypeDefinitions: 'peek',\n multipleDeclarations: 'peek',\n multipleImplementations: 'peek',\n multipleReferences: 'peek',\n alternativeDefinitionCommand: 'editor.action.goToReferences',\n alternativeTypeDefinitionCommand: 'editor.action.goToReferences',\n alternativeDeclarationCommand: 'editor.action.goToReferences',\n alternativeImplementationCommand: '',\n alternativeReferenceCommand: '',\n };\n const jsonSubset = {\n type: 'string',\n enum: ['peek', 'gotoAndPeek', 'goto'],\n default: defaults.multiple,\n enumDescriptions: [\n nls.localize('editor.gotoLocation.multiple.peek', 'Show peek view of the results (default)'),\n nls.localize('editor.gotoLocation.multiple.gotoAndPeek', 'Go to the primary result and show a peek view'),\n nls.localize('editor.gotoLocation.multiple.goto', 'Go to the primary result and enable peek-less navigation to others')\n ]\n };\n const alternativeCommandOptions = ['', 'editor.action.referenceSearch.trigger', 'editor.action.goToReferences', 'editor.action.peekImplementation', 'editor.action.goToImplementation', 'editor.action.peekTypeDefinition', 'editor.action.goToTypeDefinition', 'editor.action.peekDeclaration', 'editor.action.revealDeclaration', 'editor.action.peekDefinition', 'editor.action.revealDefinitionAside', 'editor.action.revealDefinition'];\n super(47 /* gotoLocation */, 'gotoLocation', defaults, {\n 'editor.gotoLocation.multiple': {\n deprecationMessage: nls.localize('editor.gotoLocation.multiple.deprecated', \"This setting is deprecated, please use separate settings like 'editor.editor.gotoLocation.multipleDefinitions' or 'editor.editor.gotoLocation.multipleImplementations' instead.\"),\n },\n 'editor.gotoLocation.multipleDefinitions': Object.assign({ description: nls.localize('editor.editor.gotoLocation.multipleDefinitions', \"Controls the behavior the 'Go to Definition'-command when multiple target locations exist.\") }, jsonSubset),\n 'editor.gotoLocation.multipleTypeDefinitions': Object.assign({ description: nls.localize('editor.editor.gotoLocation.multipleTypeDefinitions', \"Controls the behavior the 'Go to Type Definition'-command when multiple target locations exist.\") }, jsonSubset),\n 'editor.gotoLocation.multipleDeclarations': Object.assign({ description: nls.localize('editor.editor.gotoLocation.multipleDeclarations', \"Controls the behavior the 'Go to Declaration'-command when multiple target locations exist.\") }, jsonSubset),\n 'editor.gotoLocation.multipleImplementations': Object.assign({ description: nls.localize('editor.editor.gotoLocation.multipleImplemenattions', \"Controls the behavior the 'Go to Implementations'-command when multiple target locations exist.\") }, jsonSubset),\n 'editor.gotoLocation.multipleReferences': Object.assign({ description: nls.localize('editor.editor.gotoLocation.multipleReferences', \"Controls the behavior the 'Go to References'-command when multiple target locations exist.\") }, jsonSubset),\n 'editor.gotoLocation.alternativeDefinitionCommand': {\n type: 'string',\n default: defaults.alternativeDefinitionCommand,\n enum: alternativeCommandOptions,\n description: nls.localize('alternativeDefinitionCommand', \"Alternative command id that is being executed when the result of 'Go to Definition' is the current location.\")\n },\n 'editor.gotoLocation.alternativeTypeDefinitionCommand': {\n type: 'string',\n default: defaults.alternativeTypeDefinitionCommand,\n enum: alternativeCommandOptions,\n description: nls.localize('alternativeTypeDefinitionCommand', \"Alternative command id that is being executed when the result of 'Go to Type Definition' is the current location.\")\n },\n 'editor.gotoLocation.alternativeDeclarationCommand': {\n type: 'string',\n default: defaults.alternativeDeclarationCommand,\n enum: alternativeCommandOptions,\n description: nls.localize('alternativeDeclarationCommand', \"Alternative command id that is being executed when the result of 'Go to Declaration' is the current location.\")\n },\n 'editor.gotoLocation.alternativeImplementationCommand': {\n type: 'string',\n default: defaults.alternativeImplementationCommand,\n enum: alternativeCommandOptions,\n description: nls.localize('alternativeImplementationCommand', \"Alternative command id that is being executed when the result of 'Go to Implementation' is the current location.\")\n },\n 'editor.gotoLocation.alternativeReferenceCommand': {\n type: 'string',\n default: defaults.alternativeReferenceCommand,\n enum: alternativeCommandOptions,\n description: nls.localize('alternativeReferenceCommand', \"Alternative command id that is being executed when the result of 'Go to Reference' is the current location.\")\n },\n });\n }\n validate(_input) {\n var _a, _b, _c, _d, _e;\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n return {\n multiple: stringSet(input.multiple, this.defaultValue.multiple, ['peek', 'gotoAndPeek', 'goto']),\n multipleDefinitions: (_a = input.multipleDefinitions) !== null && _a !== void 0 ? _a : stringSet(input.multipleDefinitions, 'peek', ['peek', 'gotoAndPeek', 'goto']),\n multipleTypeDefinitions: (_b = input.multipleTypeDefinitions) !== null && _b !== void 0 ? _b : stringSet(input.multipleTypeDefinitions, 'peek', ['peek', 'gotoAndPeek', 'goto']),\n multipleDeclarations: (_c = input.multipleDeclarations) !== null && _c !== void 0 ? _c : stringSet(input.multipleDeclarations, 'peek', ['peek', 'gotoAndPeek', 'goto']),\n multipleImplementations: (_d = input.multipleImplementations) !== null && _d !== void 0 ? _d : stringSet(input.multipleImplementations, 'peek', ['peek', 'gotoAndPeek', 'goto']),\n multipleReferences: (_e = input.multipleReferences) !== null && _e !== void 0 ? _e : stringSet(input.multipleReferences, 'peek', ['peek', 'gotoAndPeek', 'goto']),\n alternativeDefinitionCommand: EditorStringOption.string(input.alternativeDefinitionCommand, this.defaultValue.alternativeDefinitionCommand),\n alternativeTypeDefinitionCommand: EditorStringOption.string(input.alternativeTypeDefinitionCommand, this.defaultValue.alternativeTypeDefinitionCommand),\n alternativeDeclarationCommand: EditorStringOption.string(input.alternativeDeclarationCommand, this.defaultValue.alternativeDeclarationCommand),\n alternativeImplementationCommand: EditorStringOption.string(input.alternativeImplementationCommand, this.defaultValue.alternativeImplementationCommand),\n alternativeReferenceCommand: EditorStringOption.string(input.alternativeReferenceCommand, this.defaultValue.alternativeReferenceCommand),\n };\n }\n}\nclass EditorHover extends BaseEditorOption {\n constructor() {\n const defaults = {\n enabled: true,\n delay: 300,\n sticky: true\n };\n super(50 /* hover */, 'hover', defaults, {\n 'editor.hover.enabled': {\n type: 'boolean',\n default: defaults.enabled,\n description: nls.localize('hover.enabled', \"Controls whether the hover is shown.\")\n },\n 'editor.hover.delay': {\n type: 'number',\n default: defaults.delay,\n description: nls.localize('hover.delay', \"Controls the delay in milliseconds after which the hover is shown.\")\n },\n 'editor.hover.sticky': {\n type: 'boolean',\n default: defaults.sticky,\n description: nls.localize('hover.sticky', \"Controls whether the hover should remain visible when mouse is moved over it.\")\n },\n });\n }\n validate(_input) {\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n return {\n enabled: boolean(input.enabled, this.defaultValue.enabled),\n delay: EditorIntOption.clampedInt(input.delay, this.defaultValue.delay, 0, 10000),\n sticky: boolean(input.sticky, this.defaultValue.sticky)\n };\n }\n}\n/**\n * @internal\n */\nexport class EditorLayoutInfoComputer extends ComputedEditorOption {\n constructor() {\n super(127 /* layoutInfo */, [\n 46 /* glyphMargin */, 54 /* lineDecorationsWidth */, 35 /* folding */,\n 61 /* minimap */, 89 /* scrollbar */, 56 /* lineNumbers */,\n 57 /* lineNumbersMinChars */, 91 /* scrollBeyondLastLine */,\n 114 /* wordWrap */, 117 /* wordWrapColumn */, 118 /* wordWrapOverride1 */, 119 /* wordWrapOverride2 */,\n 2 /* accessibilitySupport */\n ]);\n }\n compute(env, options, _) {\n return EditorLayoutInfoComputer.computeLayout(options, {\n memory: env.memory,\n outerWidth: env.outerWidth,\n outerHeight: env.outerHeight,\n isDominatedByLongLines: env.isDominatedByLongLines,\n lineHeight: env.fontInfo.lineHeight,\n viewLineCount: env.viewLineCount,\n lineNumbersDigitCount: env.lineNumbersDigitCount,\n typicalHalfwidthCharacterWidth: env.fontInfo.typicalHalfwidthCharacterWidth,\n maxDigitWidth: env.fontInfo.maxDigitWidth,\n pixelRatio: env.pixelRatio\n });\n }\n static computeContainedMinimapLineCount(input) {\n const typicalViewportLineCount = input.height / input.lineHeight;\n const extraLinesBeyondLastLine = input.scrollBeyondLastLine ? (typicalViewportLineCount - 1) : 0;\n const desiredRatio = (input.viewLineCount + extraLinesBeyondLastLine) / (input.pixelRatio * input.height);\n const minimapLineCount = Math.floor(input.viewLineCount / desiredRatio);\n return { typicalViewportLineCount, extraLinesBeyondLastLine, desiredRatio, minimapLineCount };\n }\n static _computeMinimapLayout(input, memory) {\n const outerWidth = input.outerWidth;\n const outerHeight = input.outerHeight;\n const pixelRatio = input.pixelRatio;\n if (!input.minimap.enabled) {\n return {\n renderMinimap: 0 /* None */,\n minimapLeft: 0,\n minimapWidth: 0,\n minimapHeightIsEditorHeight: false,\n minimapIsSampling: false,\n minimapScale: 1,\n minimapLineHeight: 1,\n minimapCanvasInnerWidth: 0,\n minimapCanvasInnerHeight: Math.floor(pixelRatio * outerHeight),\n minimapCanvasOuterWidth: 0,\n minimapCanvasOuterHeight: outerHeight,\n };\n }\n // Can use memory if only the `viewLineCount` and `remainingWidth` have changed\n const stableMinimapLayoutInput = memory.stableMinimapLayoutInput;\n const couldUseMemory = (stableMinimapLayoutInput\n // && input.outerWidth === lastMinimapLayoutInput.outerWidth !!! INTENTIONAL OMITTED\n && input.outerHeight === stableMinimapLayoutInput.outerHeight\n && input.lineHeight === stableMinimapLayoutInput.lineHeight\n && input.typicalHalfwidthCharacterWidth === stableMinimapLayoutInput.typicalHalfwidthCharacterWidth\n && input.pixelRatio === stableMinimapLayoutInput.pixelRatio\n && input.scrollBeyondLastLine === stableMinimapLayoutInput.scrollBeyondLastLine\n && input.minimap.enabled === stableMinimapLayoutInput.minimap.enabled\n && input.minimap.side === stableMinimapLayoutInput.minimap.side\n && input.minimap.size === stableMinimapLayoutInput.minimap.size\n && input.minimap.showSlider === stableMinimapLayoutInput.minimap.showSlider\n && input.minimap.renderCharacters === stableMinimapLayoutInput.minimap.renderCharacters\n && input.minimap.maxColumn === stableMinimapLayoutInput.minimap.maxColumn\n && input.minimap.scale === stableMinimapLayoutInput.minimap.scale\n && input.verticalScrollbarWidth === stableMinimapLayoutInput.verticalScrollbarWidth\n // && input.viewLineCount === lastMinimapLayoutInput.viewLineCount !!! INTENTIONAL OMITTED\n // && input.remainingWidth === lastMinimapLayoutInput.remainingWidth !!! INTENTIONAL OMITTED\n && input.isViewportWrapping === stableMinimapLayoutInput.isViewportWrapping);\n const lineHeight = input.lineHeight;\n const typicalHalfwidthCharacterWidth = input.typicalHalfwidthCharacterWidth;\n const scrollBeyondLastLine = input.scrollBeyondLastLine;\n const minimapRenderCharacters = input.minimap.renderCharacters;\n let minimapScale = (pixelRatio >= 2 ? Math.round(input.minimap.scale * 2) : input.minimap.scale);\n const minimapMaxColumn = input.minimap.maxColumn;\n const minimapSize = input.minimap.size;\n const minimapSide = input.minimap.side;\n const verticalScrollbarWidth = input.verticalScrollbarWidth;\n const viewLineCount = input.viewLineCount;\n const remainingWidth = input.remainingWidth;\n const isViewportWrapping = input.isViewportWrapping;\n const baseCharHeight = minimapRenderCharacters ? 2 : 3;\n let minimapCanvasInnerHeight = Math.floor(pixelRatio * outerHeight);\n const minimapCanvasOuterHeight = minimapCanvasInnerHeight / pixelRatio;\n let minimapHeightIsEditorHeight = false;\n let minimapIsSampling = false;\n let minimapLineHeight = baseCharHeight * minimapScale;\n let minimapCharWidth = minimapScale / pixelRatio;\n let minimapWidthMultiplier = 1;\n if (minimapSize === 'fill' || minimapSize === 'fit') {\n const { typicalViewportLineCount, extraLinesBeyondLastLine, desiredRatio, minimapLineCount } = EditorLayoutInfoComputer.computeContainedMinimapLineCount({\n viewLineCount: viewLineCount,\n scrollBeyondLastLine: scrollBeyondLastLine,\n height: outerHeight,\n lineHeight: lineHeight,\n pixelRatio: pixelRatio\n });\n // ratio is intentionally not part of the layout to avoid the layout changing all the time\n // when doing sampling\n const ratio = viewLineCount / minimapLineCount;\n if (ratio > 1) {\n minimapHeightIsEditorHeight = true;\n minimapIsSampling = true;\n minimapScale = 1;\n minimapLineHeight = 1;\n minimapCharWidth = minimapScale / pixelRatio;\n }\n else {\n let fitBecomesFill = false;\n let maxMinimapScale = minimapScale + 1;\n if (minimapSize === 'fit') {\n const effectiveMinimapHeight = Math.ceil((viewLineCount + extraLinesBeyondLastLine) * minimapLineHeight);\n if (isViewportWrapping && couldUseMemory && remainingWidth <= memory.stableFitRemainingWidth) {\n // There is a loop when using `fit` and viewport wrapping:\n // - view line count impacts minimap layout\n // - minimap layout impacts viewport width\n // - viewport width impacts view line count\n // To break the loop, once we go to a smaller minimap scale, we try to stick with it.\n fitBecomesFill = true;\n maxMinimapScale = memory.stableFitMaxMinimapScale;\n }\n else {\n fitBecomesFill = (effectiveMinimapHeight > minimapCanvasInnerHeight);\n if (isViewportWrapping && fitBecomesFill) {\n // remember for next time\n memory.stableMinimapLayoutInput = input;\n memory.stableFitRemainingWidth = remainingWidth;\n }\n else {\n memory.stableMinimapLayoutInput = null;\n memory.stableFitRemainingWidth = 0;\n }\n }\n }\n if (minimapSize === 'fill' || fitBecomesFill) {\n minimapHeightIsEditorHeight = true;\n const configuredMinimapScale = minimapScale;\n minimapLineHeight = Math.min(lineHeight * pixelRatio, Math.max(1, Math.floor(1 / desiredRatio)));\n minimapScale = Math.min(maxMinimapScale, Math.max(1, Math.floor(minimapLineHeight / baseCharHeight)));\n if (minimapScale > configuredMinimapScale) {\n minimapWidthMultiplier = Math.min(2, minimapScale / configuredMinimapScale);\n }\n minimapCharWidth = minimapScale / pixelRatio / minimapWidthMultiplier;\n minimapCanvasInnerHeight = Math.ceil((Math.max(typicalViewportLineCount, viewLineCount + extraLinesBeyondLastLine)) * minimapLineHeight);\n if (isViewportWrapping && fitBecomesFill) {\n memory.stableFitMaxMinimapScale = minimapScale;\n }\n }\n }\n }\n // Given:\n // (leaving 2px for the cursor to have space after the last character)\n // viewportColumn = (contentWidth - verticalScrollbarWidth - 2) / typicalHalfwidthCharacterWidth\n // minimapWidth = viewportColumn * minimapCharWidth\n // contentWidth = remainingWidth - minimapWidth\n // What are good values for contentWidth and minimapWidth ?\n // minimapWidth = ((contentWidth - verticalScrollbarWidth - 2) / typicalHalfwidthCharacterWidth) * minimapCharWidth\n // typicalHalfwidthCharacterWidth * minimapWidth = (contentWidth - verticalScrollbarWidth - 2) * minimapCharWidth\n // typicalHalfwidthCharacterWidth * minimapWidth = (remainingWidth - minimapWidth - verticalScrollbarWidth - 2) * minimapCharWidth\n // (typicalHalfwidthCharacterWidth + minimapCharWidth) * minimapWidth = (remainingWidth - verticalScrollbarWidth - 2) * minimapCharWidth\n // minimapWidth = ((remainingWidth - verticalScrollbarWidth - 2) * minimapCharWidth) / (typicalHalfwidthCharacterWidth + minimapCharWidth)\n const minimapMaxWidth = Math.floor(minimapMaxColumn * minimapCharWidth);\n const minimapWidth = Math.min(minimapMaxWidth, Math.max(0, Math.floor(((remainingWidth - verticalScrollbarWidth - 2) * minimapCharWidth) / (typicalHalfwidthCharacterWidth + minimapCharWidth))) + MINIMAP_GUTTER_WIDTH);\n let minimapCanvasInnerWidth = Math.floor(pixelRatio * minimapWidth);\n const minimapCanvasOuterWidth = minimapCanvasInnerWidth / pixelRatio;\n minimapCanvasInnerWidth = Math.floor(minimapCanvasInnerWidth * minimapWidthMultiplier);\n const renderMinimap = (minimapRenderCharacters ? 1 /* Text */ : 2 /* Blocks */);\n const minimapLeft = (minimapSide === 'left' ? 0 : (outerWidth - minimapWidth - verticalScrollbarWidth));\n return {\n renderMinimap,\n minimapLeft,\n minimapWidth,\n minimapHeightIsEditorHeight,\n minimapIsSampling,\n minimapScale,\n minimapLineHeight,\n minimapCanvasInnerWidth,\n minimapCanvasInnerHeight,\n minimapCanvasOuterWidth,\n minimapCanvasOuterHeight,\n };\n }\n static computeLayout(options, env) {\n const outerWidth = env.outerWidth | 0;\n const outerHeight = env.outerHeight | 0;\n const lineHeight = env.lineHeight | 0;\n const lineNumbersDigitCount = env.lineNumbersDigitCount | 0;\n const typicalHalfwidthCharacterWidth = env.typicalHalfwidthCharacterWidth;\n const maxDigitWidth = env.maxDigitWidth;\n const pixelRatio = env.pixelRatio;\n const viewLineCount = env.viewLineCount;\n const wordWrapOverride2 = options.get(119 /* wordWrapOverride2 */);\n const wordWrapOverride1 = (wordWrapOverride2 === 'inherit' ? options.get(118 /* wordWrapOverride1 */) : wordWrapOverride2);\n const wordWrap = (wordWrapOverride1 === 'inherit' ? options.get(114 /* wordWrap */) : wordWrapOverride1);\n const wordWrapColumn = options.get(117 /* wordWrapColumn */);\n const accessibilitySupport = options.get(2 /* accessibilitySupport */);\n const isDominatedByLongLines = env.isDominatedByLongLines;\n const showGlyphMargin = options.get(46 /* glyphMargin */);\n const showLineNumbers = (options.get(56 /* lineNumbers */).renderType !== 0 /* Off */);\n const lineNumbersMinChars = options.get(57 /* lineNumbersMinChars */);\n const scrollBeyondLastLine = options.get(91 /* scrollBeyondLastLine */);\n const minimap = options.get(61 /* minimap */);\n const scrollbar = options.get(89 /* scrollbar */);\n const verticalScrollbarWidth = scrollbar.verticalScrollbarSize;\n const verticalScrollbarHasArrows = scrollbar.verticalHasArrows;\n const scrollbarArrowSize = scrollbar.arrowSize;\n const horizontalScrollbarHeight = scrollbar.horizontalScrollbarSize;\n const rawLineDecorationsWidth = options.get(54 /* lineDecorationsWidth */);\n const folding = options.get(35 /* folding */);\n let lineDecorationsWidth;\n if (typeof rawLineDecorationsWidth === 'string' && /^\\d+(\\.\\d+)?ch$/.test(rawLineDecorationsWidth)) {\n const multiple = parseFloat(rawLineDecorationsWidth.substr(0, rawLineDecorationsWidth.length - 2));\n lineDecorationsWidth = EditorIntOption.clampedInt(multiple * typicalHalfwidthCharacterWidth, 0, 0, 1000);\n }\n else {\n lineDecorationsWidth = EditorIntOption.clampedInt(rawLineDecorationsWidth, 0, 0, 1000);\n }\n if (folding) {\n lineDecorationsWidth += 16;\n }\n let lineNumbersWidth = 0;\n if (showLineNumbers) {\n const digitCount = Math.max(lineNumbersDigitCount, lineNumbersMinChars);\n lineNumbersWidth = Math.round(digitCount * maxDigitWidth);\n }\n let glyphMarginWidth = 0;\n if (showGlyphMargin) {\n glyphMarginWidth = lineHeight;\n }\n let glyphMarginLeft = 0;\n let lineNumbersLeft = glyphMarginLeft + glyphMarginWidth;\n let decorationsLeft = lineNumbersLeft + lineNumbersWidth;\n let contentLeft = decorationsLeft + lineDecorationsWidth;\n const remainingWidth = outerWidth - glyphMarginWidth - lineNumbersWidth - lineDecorationsWidth;\n let isWordWrapMinified = false;\n let isViewportWrapping = false;\n let wrappingColumn = -1;\n if (accessibilitySupport !== 2 /* Enabled */) {\n // See https://github.com/microsoft/vscode/issues/27766\n // Never enable wrapping when a screen reader is attached\n // because arrow down etc. will not move the cursor in the way\n // a screen reader expects.\n if (wordWrapOverride1 === 'inherit' && isDominatedByLongLines) {\n // Force viewport width wrapping if model is dominated by long lines\n isWordWrapMinified = true;\n isViewportWrapping = true;\n }\n else if (wordWrap === 'on' || wordWrap === 'bounded') {\n isViewportWrapping = true;\n }\n else if (wordWrap === 'wordWrapColumn') {\n wrappingColumn = wordWrapColumn;\n }\n }\n const minimapLayout = EditorLayoutInfoComputer._computeMinimapLayout({\n outerWidth: outerWidth,\n outerHeight: outerHeight,\n lineHeight: lineHeight,\n typicalHalfwidthCharacterWidth: typicalHalfwidthCharacterWidth,\n pixelRatio: pixelRatio,\n scrollBeyondLastLine: scrollBeyondLastLine,\n minimap: minimap,\n verticalScrollbarWidth: verticalScrollbarWidth,\n viewLineCount: viewLineCount,\n remainingWidth: remainingWidth,\n isViewportWrapping: isViewportWrapping,\n }, env.memory || new ComputeOptionsMemory());\n if (minimapLayout.renderMinimap !== 0 /* None */ && minimapLayout.minimapLeft === 0) {\n // the minimap is rendered to the left, so move everything to the right\n glyphMarginLeft += minimapLayout.minimapWidth;\n lineNumbersLeft += minimapLayout.minimapWidth;\n decorationsLeft += minimapLayout.minimapWidth;\n contentLeft += minimapLayout.minimapWidth;\n }\n const contentWidth = remainingWidth - minimapLayout.minimapWidth;\n // (leaving 2px for the cursor to have space after the last character)\n const viewportColumn = Math.max(1, Math.floor((contentWidth - verticalScrollbarWidth - 2) / typicalHalfwidthCharacterWidth));\n const verticalArrowSize = (verticalScrollbarHasArrows ? scrollbarArrowSize : 0);\n if (isViewportWrapping) {\n // compute the actual wrappingColumn\n wrappingColumn = Math.max(1, viewportColumn);\n if (wordWrap === 'bounded') {\n wrappingColumn = Math.min(wrappingColumn, wordWrapColumn);\n }\n }\n return {\n width: outerWidth,\n height: outerHeight,\n glyphMarginLeft: glyphMarginLeft,\n glyphMarginWidth: glyphMarginWidth,\n lineNumbersLeft: lineNumbersLeft,\n lineNumbersWidth: lineNumbersWidth,\n decorationsLeft: decorationsLeft,\n decorationsWidth: lineDecorationsWidth,\n contentLeft: contentLeft,\n contentWidth: contentWidth,\n minimap: minimapLayout,\n viewportColumn: viewportColumn,\n isWordWrapMinified: isWordWrapMinified,\n isViewportWrapping: isViewportWrapping,\n wrappingColumn: wrappingColumn,\n verticalScrollbarWidth: verticalScrollbarWidth,\n horizontalScrollbarHeight: horizontalScrollbarHeight,\n overviewRuler: {\n top: verticalArrowSize,\n width: verticalScrollbarWidth,\n height: (outerHeight - 2 * verticalArrowSize),\n right: 0\n }\n };\n }\n}\nclass EditorLightbulb extends BaseEditorOption {\n constructor() {\n const defaults = { enabled: true };\n super(53 /* lightbulb */, 'lightbulb', defaults, {\n 'editor.lightbulb.enabled': {\n type: 'boolean',\n default: defaults.enabled,\n description: nls.localize('codeActions', \"Enables the code action lightbulb in the editor.\")\n },\n });\n }\n validate(_input) {\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n return {\n enabled: boolean(input.enabled, this.defaultValue.enabled)\n };\n }\n}\nclass EditorInlineHints extends BaseEditorOption {\n constructor() {\n const defaults = { enabled: true, fontSize: 0, fontFamily: EDITOR_FONT_DEFAULTS.fontFamily };\n super(123 /* inlineHints */, 'inlineHints', defaults, {\n 'editor.inlineHints.enabled': {\n type: 'boolean',\n default: defaults.enabled,\n description: nls.localize('inlineHints.enable', \"Enables the inline hints in the editor.\")\n },\n 'editor.inlineHints.fontSize': {\n type: 'number',\n default: defaults.fontSize,\n description: nls.localize('inlineHints.fontSize', \"Controls font size of inline hints in the editor. When set to `0`, the 90% of `#editor.fontSize#` is used.\")\n },\n 'editor.inlineHints.fontFamily': {\n type: 'string',\n default: defaults.fontFamily,\n description: nls.localize('inlineHints.fontFamily', \"Controls font family of inline hints in the editor.\")\n },\n });\n }\n validate(_input) {\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n return {\n enabled: boolean(input.enabled, this.defaultValue.enabled),\n fontSize: EditorIntOption.clampedInt(input.fontSize, this.defaultValue.fontSize, 0, 100),\n fontFamily: EditorStringOption.string(input.fontFamily, this.defaultValue.fontFamily)\n };\n }\n}\n//#endregion\n//#region lineHeight\nclass EditorLineHeight extends EditorIntOption {\n constructor() {\n super(55 /* lineHeight */, 'lineHeight', EDITOR_FONT_DEFAULTS.lineHeight, 0, 150, { description: nls.localize('lineHeight', \"Controls the line height. Use 0 to compute the line height from the font size.\") });\n }\n compute(env, options, value) {\n // The lineHeight is computed from the fontSize if it is 0.\n // Moreover, the final lineHeight respects the editor zoom level.\n // So take the result from env.fontInfo\n return env.fontInfo.lineHeight;\n }\n}\nclass EditorMinimap extends BaseEditorOption {\n constructor() {\n const defaults = {\n enabled: true,\n size: 'proportional',\n side: 'right',\n showSlider: 'mouseover',\n renderCharacters: true,\n maxColumn: 120,\n scale: 1,\n };\n super(61 /* minimap */, 'minimap', defaults, {\n 'editor.minimap.enabled': {\n type: 'boolean',\n default: defaults.enabled,\n description: nls.localize('minimap.enabled', \"Controls whether the minimap is shown.\")\n },\n 'editor.minimap.size': {\n type: 'string',\n enum: ['proportional', 'fill', 'fit'],\n enumDescriptions: [\n nls.localize('minimap.size.proportional', \"The minimap has the same size as the editor contents (and might scroll).\"),\n nls.localize('minimap.size.fill', \"The minimap will stretch or shrink as necessary to fill the height of the editor (no scrolling).\"),\n nls.localize('minimap.size.fit', \"The minimap will shrink as necessary to never be larger than the editor (no scrolling).\"),\n ],\n default: defaults.size,\n description: nls.localize('minimap.size', \"Controls the size of the minimap.\")\n },\n 'editor.minimap.side': {\n type: 'string',\n enum: ['left', 'right'],\n default: defaults.side,\n description: nls.localize('minimap.side', \"Controls the side where to render the minimap.\")\n },\n 'editor.minimap.showSlider': {\n type: 'string',\n enum: ['always', 'mouseover'],\n default: defaults.showSlider,\n description: nls.localize('minimap.showSlider', \"Controls when the minimap slider is shown.\")\n },\n 'editor.minimap.scale': {\n type: 'number',\n default: defaults.scale,\n minimum: 1,\n maximum: 3,\n enum: [1, 2, 3],\n description: nls.localize('minimap.scale', \"Scale of content drawn in the minimap: 1, 2 or 3.\")\n },\n 'editor.minimap.renderCharacters': {\n type: 'boolean',\n default: defaults.renderCharacters,\n description: nls.localize('minimap.renderCharacters', \"Render the actual characters on a line as opposed to color blocks.\")\n },\n 'editor.minimap.maxColumn': {\n type: 'number',\n default: defaults.maxColumn,\n description: nls.localize('minimap.maxColumn', \"Limit the width of the minimap to render at most a certain number of columns.\")\n }\n });\n }\n validate(_input) {\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n return {\n enabled: boolean(input.enabled, this.defaultValue.enabled),\n size: stringSet(input.size, this.defaultValue.size, ['proportional', 'fill', 'fit']),\n side: stringSet(input.side, this.defaultValue.side, ['right', 'left']),\n showSlider: stringSet(input.showSlider, this.defaultValue.showSlider, ['always', 'mouseover']),\n renderCharacters: boolean(input.renderCharacters, this.defaultValue.renderCharacters),\n scale: EditorIntOption.clampedInt(input.scale, 1, 1, 3),\n maxColumn: EditorIntOption.clampedInt(input.maxColumn, this.defaultValue.maxColumn, 1, 10000),\n };\n }\n}\n//#endregion\n//#region multiCursorModifier\nfunction _multiCursorModifierFromString(multiCursorModifier) {\n if (multiCursorModifier === 'ctrlCmd') {\n return (platform.isMacintosh ? 'metaKey' : 'ctrlKey');\n }\n return 'altKey';\n}\nclass EditorPadding extends BaseEditorOption {\n constructor() {\n super(71 /* padding */, 'padding', { top: 0, bottom: 0 }, {\n 'editor.padding.top': {\n type: 'number',\n default: 0,\n minimum: 0,\n maximum: 1000,\n description: nls.localize('padding.top', \"Controls the amount of space between the top edge of the editor and the first line.\")\n },\n 'editor.padding.bottom': {\n type: 'number',\n default: 0,\n minimum: 0,\n maximum: 1000,\n description: nls.localize('padding.bottom', \"Controls the amount of space between the bottom edge of the editor and the last line.\")\n }\n });\n }\n validate(_input) {\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n return {\n top: EditorIntOption.clampedInt(input.top, 0, 0, 1000),\n bottom: EditorIntOption.clampedInt(input.bottom, 0, 0, 1000)\n };\n }\n}\nclass EditorParameterHints extends BaseEditorOption {\n constructor() {\n const defaults = {\n enabled: true,\n cycle: false\n };\n super(72 /* parameterHints */, 'parameterHints', defaults, {\n 'editor.parameterHints.enabled': {\n type: 'boolean',\n default: defaults.enabled,\n description: nls.localize('parameterHints.enabled', \"Enables a pop-up that shows parameter documentation and type information as you type.\")\n },\n 'editor.parameterHints.cycle': {\n type: 'boolean',\n default: defaults.cycle,\n description: nls.localize('parameterHints.cycle', \"Controls whether the parameter hints menu cycles or closes when reaching the end of the list.\")\n },\n });\n }\n validate(_input) {\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n return {\n enabled: boolean(input.enabled, this.defaultValue.enabled),\n cycle: boolean(input.cycle, this.defaultValue.cycle)\n };\n }\n}\n//#endregion\n//#region pixelRatio\nclass EditorPixelRatio extends ComputedEditorOption {\n constructor() {\n super(125 /* pixelRatio */);\n }\n compute(env, options, _) {\n return env.pixelRatio;\n }\n}\nclass EditorQuickSuggestions extends BaseEditorOption {\n constructor() {\n const defaults = {\n other: true,\n comments: false,\n strings: false\n };\n super(75 /* quickSuggestions */, 'quickSuggestions', defaults, {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n type: 'object',\n properties: {\n strings: {\n type: 'boolean',\n default: defaults.strings,\n description: nls.localize('quickSuggestions.strings', \"Enable quick suggestions inside strings.\")\n },\n comments: {\n type: 'boolean',\n default: defaults.comments,\n description: nls.localize('quickSuggestions.comments', \"Enable quick suggestions inside comments.\")\n },\n other: {\n type: 'boolean',\n default: defaults.other,\n description: nls.localize('quickSuggestions.other', \"Enable quick suggestions outside of strings and comments.\")\n },\n }\n }\n ],\n default: defaults,\n description: nls.localize('quickSuggestions', \"Controls whether suggestions should automatically show up while typing.\")\n });\n this.defaultValue = defaults;\n }\n validate(_input) {\n if (typeof _input === 'boolean') {\n return _input;\n }\n if (_input && typeof _input === 'object') {\n const input = _input;\n const opts = {\n other: boolean(input.other, this.defaultValue.other),\n comments: boolean(input.comments, this.defaultValue.comments),\n strings: boolean(input.strings, this.defaultValue.strings),\n };\n if (opts.other && opts.comments && opts.strings) {\n return true; // all on\n }\n else if (!opts.other && !opts.comments && !opts.strings) {\n return false; // all off\n }\n else {\n return opts;\n }\n }\n return this.defaultValue;\n }\n}\nclass EditorRenderLineNumbersOption extends BaseEditorOption {\n constructor() {\n super(56 /* lineNumbers */, 'lineNumbers', { renderType: 1 /* On */, renderFn: null }, {\n type: 'string',\n enum: ['off', 'on', 'relative', 'interval'],\n enumDescriptions: [\n nls.localize('lineNumbers.off', \"Line numbers are not rendered.\"),\n nls.localize('lineNumbers.on', \"Line numbers are rendered as absolute number.\"),\n nls.localize('lineNumbers.relative', \"Line numbers are rendered as distance in lines to cursor position.\"),\n nls.localize('lineNumbers.interval', \"Line numbers are rendered every 10 lines.\")\n ],\n default: 'on',\n description: nls.localize('lineNumbers', \"Controls the display of line numbers.\")\n });\n }\n validate(lineNumbers) {\n let renderType = this.defaultValue.renderType;\n let renderFn = this.defaultValue.renderFn;\n if (typeof lineNumbers !== 'undefined') {\n if (typeof lineNumbers === 'function') {\n renderType = 4 /* Custom */;\n renderFn = lineNumbers;\n }\n else if (lineNumbers === 'interval') {\n renderType = 3 /* Interval */;\n }\n else if (lineNumbers === 'relative') {\n renderType = 2 /* Relative */;\n }\n else if (lineNumbers === 'on') {\n renderType = 1 /* On */;\n }\n else {\n renderType = 0 /* Off */;\n }\n }\n return {\n renderType,\n renderFn\n };\n }\n}\n//#endregion\n//#region renderValidationDecorations\n/**\n * @internal\n */\nexport function filterValidationDecorations(options) {\n const renderValidationDecorations = options.get(84 /* renderValidationDecorations */);\n if (renderValidationDecorations === 'editable') {\n return options.get(77 /* readOnly */);\n }\n return renderValidationDecorations === 'on' ? false : true;\n}\nclass EditorRulers extends BaseEditorOption {\n constructor() {\n const defaults = [];\n const columnSchema = { type: 'number', description: nls.localize('rulers.size', \"Number of monospace characters at which this editor ruler will render.\") };\n super(88 /* rulers */, 'rulers', defaults, {\n type: 'array',\n items: {\n anyOf: [\n columnSchema,\n {\n type: [\n 'object'\n ],\n properties: {\n column: columnSchema,\n color: {\n type: 'string',\n description: nls.localize('rulers.color', \"Color of this editor ruler.\"),\n format: 'color-hex'\n }\n }\n }\n ]\n },\n default: defaults,\n description: nls.localize('rulers', \"Render vertical rulers after a certain number of monospace characters. Use multiple values for multiple rulers. No rulers are drawn if array is empty.\")\n });\n }\n validate(input) {\n if (Array.isArray(input)) {\n let rulers = [];\n for (let _element of input) {\n if (typeof _element === 'number') {\n rulers.push({\n column: EditorIntOption.clampedInt(_element, 0, 0, 10000),\n color: null\n });\n }\n else if (_element && typeof _element === 'object') {\n const element = _element;\n rulers.push({\n column: EditorIntOption.clampedInt(element.column, 0, 0, 10000),\n color: element.color\n });\n }\n }\n rulers.sort((a, b) => a.column - b.column);\n return rulers;\n }\n return this.defaultValue;\n }\n}\nfunction _scrollbarVisibilityFromString(visibility, defaultValue) {\n if (typeof visibility !== 'string') {\n return defaultValue;\n }\n switch (visibility) {\n case 'hidden': return 2 /* Hidden */;\n case 'visible': return 3 /* Visible */;\n default: return 1 /* Auto */;\n }\n}\nclass EditorScrollbar extends BaseEditorOption {\n constructor() {\n super(89 /* scrollbar */, 'scrollbar', {\n vertical: 1 /* Auto */,\n horizontal: 1 /* Auto */,\n arrowSize: 11,\n useShadows: true,\n verticalHasArrows: false,\n horizontalHasArrows: false,\n horizontalScrollbarSize: 12,\n horizontalSliderSize: 12,\n verticalScrollbarSize: 14,\n verticalSliderSize: 14,\n handleMouseWheel: true,\n alwaysConsumeMouseWheel: true,\n scrollByPage: false\n });\n }\n validate(_input) {\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n const horizontalScrollbarSize = EditorIntOption.clampedInt(input.horizontalScrollbarSize, this.defaultValue.horizontalScrollbarSize, 0, 1000);\n const verticalScrollbarSize = EditorIntOption.clampedInt(input.verticalScrollbarSize, this.defaultValue.verticalScrollbarSize, 0, 1000);\n return {\n arrowSize: EditorIntOption.clampedInt(input.arrowSize, this.defaultValue.arrowSize, 0, 1000),\n vertical: _scrollbarVisibilityFromString(input.vertical, this.defaultValue.vertical),\n horizontal: _scrollbarVisibilityFromString(input.horizontal, this.defaultValue.horizontal),\n useShadows: boolean(input.useShadows, this.defaultValue.useShadows),\n verticalHasArrows: boolean(input.verticalHasArrows, this.defaultValue.verticalHasArrows),\n horizontalHasArrows: boolean(input.horizontalHasArrows, this.defaultValue.horizontalHasArrows),\n handleMouseWheel: boolean(input.handleMouseWheel, this.defaultValue.handleMouseWheel),\n alwaysConsumeMouseWheel: boolean(input.alwaysConsumeMouseWheel, this.defaultValue.alwaysConsumeMouseWheel),\n horizontalScrollbarSize: horizontalScrollbarSize,\n horizontalSliderSize: EditorIntOption.clampedInt(input.horizontalSliderSize, horizontalScrollbarSize, 0, 1000),\n verticalScrollbarSize: verticalScrollbarSize,\n verticalSliderSize: EditorIntOption.clampedInt(input.verticalSliderSize, verticalScrollbarSize, 0, 1000),\n scrollByPage: boolean(input.scrollByPage, this.defaultValue.scrollByPage),\n };\n }\n}\nclass EditorSuggest extends BaseEditorOption {\n constructor() {\n const defaults = {\n insertMode: 'insert',\n filterGraceful: true,\n snippetsPreventQuickSuggestions: true,\n localityBonus: false,\n shareSuggestSelections: false,\n showIcons: true,\n showStatusBar: false,\n showInlineDetails: true,\n showMethods: true,\n showFunctions: true,\n showConstructors: true,\n showFields: true,\n showVariables: true,\n showClasses: true,\n showStructs: true,\n showInterfaces: true,\n showModules: true,\n showProperties: true,\n showEvents: true,\n showOperators: true,\n showUnits: true,\n showValues: true,\n showConstants: true,\n showEnums: true,\n showEnumMembers: true,\n showKeywords: true,\n showWords: true,\n showColors: true,\n showFiles: true,\n showReferences: true,\n showFolders: true,\n showTypeParameters: true,\n showSnippets: true,\n showUsers: true,\n showIssues: true,\n };\n super(103 /* suggest */, 'suggest', defaults, {\n 'editor.suggest.insertMode': {\n type: 'string',\n enum: ['insert', 'replace'],\n enumDescriptions: [\n nls.localize('suggest.insertMode.insert', \"Insert suggestion without overwriting text right of the cursor.\"),\n nls.localize('suggest.insertMode.replace', \"Insert suggestion and overwrite text right of the cursor.\"),\n ],\n default: defaults.insertMode,\n description: nls.localize('suggest.insertMode', \"Controls whether words are overwritten when accepting completions. Note that this depends on extensions opting into this feature.\")\n },\n 'editor.suggest.filterGraceful': {\n type: 'boolean',\n default: defaults.filterGraceful,\n description: nls.localize('suggest.filterGraceful', \"Controls whether filtering and sorting suggestions accounts for small typos.\")\n },\n 'editor.suggest.localityBonus': {\n type: 'boolean',\n default: defaults.localityBonus,\n description: nls.localize('suggest.localityBonus', \"Controls whether sorting favors words that appear close to the cursor.\")\n },\n 'editor.suggest.shareSuggestSelections': {\n type: 'boolean',\n default: defaults.shareSuggestSelections,\n markdownDescription: nls.localize('suggest.shareSuggestSelections', \"Controls whether remembered suggestion selections are shared between multiple workspaces and windows (needs `#editor.suggestSelection#`).\")\n },\n 'editor.suggest.snippetsPreventQuickSuggestions': {\n type: 'boolean',\n default: defaults.snippetsPreventQuickSuggestions,\n description: nls.localize('suggest.snippetsPreventQuickSuggestions', \"Controls whether an active snippet prevents quick suggestions.\")\n },\n 'editor.suggest.showIcons': {\n type: 'boolean',\n default: defaults.showIcons,\n description: nls.localize('suggest.showIcons', \"Controls whether to show or hide icons in suggestions.\")\n },\n 'editor.suggest.showStatusBar': {\n type: 'boolean',\n default: defaults.showStatusBar,\n description: nls.localize('suggest.showStatusBar', \"Controls the visibility of the status bar at the bottom of the suggest widget.\")\n },\n 'editor.suggest.showInlineDetails': {\n type: 'boolean',\n default: defaults.showInlineDetails,\n description: nls.localize('suggest.showInlineDetails', \"Controls whether suggest details show inline with the label or only in the details widget\")\n },\n 'editor.suggest.maxVisibleSuggestions': {\n type: 'number',\n deprecationMessage: nls.localize('suggest.maxVisibleSuggestions.dep', \"This setting is deprecated. The suggest widget can now be resized.\"),\n },\n 'editor.suggest.filteredTypes': {\n type: 'object',\n deprecationMessage: nls.localize('deprecated', \"This setting is deprecated, please use separate settings like 'editor.suggest.showKeywords' or 'editor.suggest.showSnippets' instead.\")\n },\n 'editor.suggest.showMethods': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showMethods', \"When enabled IntelliSense shows `method`-suggestions.\")\n },\n 'editor.suggest.showFunctions': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showFunctions', \"When enabled IntelliSense shows `function`-suggestions.\")\n },\n 'editor.suggest.showConstructors': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showConstructors', \"When enabled IntelliSense shows `constructor`-suggestions.\")\n },\n 'editor.suggest.showFields': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showFields', \"When enabled IntelliSense shows `field`-suggestions.\")\n },\n 'editor.suggest.showVariables': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showVariables', \"When enabled IntelliSense shows `variable`-suggestions.\")\n },\n 'editor.suggest.showClasses': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showClasss', \"When enabled IntelliSense shows `class`-suggestions.\")\n },\n 'editor.suggest.showStructs': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showStructs', \"When enabled IntelliSense shows `struct`-suggestions.\")\n },\n 'editor.suggest.showInterfaces': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showInterfaces', \"When enabled IntelliSense shows `interface`-suggestions.\")\n },\n 'editor.suggest.showModules': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showModules', \"When enabled IntelliSense shows `module`-suggestions.\")\n },\n 'editor.suggest.showProperties': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showPropertys', \"When enabled IntelliSense shows `property`-suggestions.\")\n },\n 'editor.suggest.showEvents': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showEvents', \"When enabled IntelliSense shows `event`-suggestions.\")\n },\n 'editor.suggest.showOperators': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showOperators', \"When enabled IntelliSense shows `operator`-suggestions.\")\n },\n 'editor.suggest.showUnits': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showUnits', \"When enabled IntelliSense shows `unit`-suggestions.\")\n },\n 'editor.suggest.showValues': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showValues', \"When enabled IntelliSense shows `value`-suggestions.\")\n },\n 'editor.suggest.showConstants': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showConstants', \"When enabled IntelliSense shows `constant`-suggestions.\")\n },\n 'editor.suggest.showEnums': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showEnums', \"When enabled IntelliSense shows `enum`-suggestions.\")\n },\n 'editor.suggest.showEnumMembers': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showEnumMembers', \"When enabled IntelliSense shows `enumMember`-suggestions.\")\n },\n 'editor.suggest.showKeywords': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showKeywords', \"When enabled IntelliSense shows `keyword`-suggestions.\")\n },\n 'editor.suggest.showWords': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showTexts', \"When enabled IntelliSense shows `text`-suggestions.\")\n },\n 'editor.suggest.showColors': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showColors', \"When enabled IntelliSense shows `color`-suggestions.\")\n },\n 'editor.suggest.showFiles': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showFiles', \"When enabled IntelliSense shows `file`-suggestions.\")\n },\n 'editor.suggest.showReferences': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showReferences', \"When enabled IntelliSense shows `reference`-suggestions.\")\n },\n 'editor.suggest.showCustomcolors': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showCustomcolors', \"When enabled IntelliSense shows `customcolor`-suggestions.\")\n },\n 'editor.suggest.showFolders': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showFolders', \"When enabled IntelliSense shows `folder`-suggestions.\")\n },\n 'editor.suggest.showTypeParameters': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showTypeParameters', \"When enabled IntelliSense shows `typeParameter`-suggestions.\")\n },\n 'editor.suggest.showSnippets': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showSnippets', \"When enabled IntelliSense shows `snippet`-suggestions.\")\n },\n 'editor.suggest.showUsers': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showUsers', \"When enabled IntelliSense shows `user`-suggestions.\")\n },\n 'editor.suggest.showIssues': {\n type: 'boolean',\n default: true,\n markdownDescription: nls.localize('editor.suggest.showIssues', \"When enabled IntelliSense shows `issues`-suggestions.\")\n }\n });\n }\n validate(_input) {\n if (!_input || typeof _input !== 'object') {\n return this.defaultValue;\n }\n const input = _input;\n return {\n insertMode: stringSet(input.insertMode, this.defaultValue.insertMode, ['insert', 'replace']),\n filterGraceful: boolean(input.filterGraceful, this.defaultValue.filterGraceful),\n snippetsPreventQuickSuggestions: boolean(input.snippetsPreventQuickSuggestions, this.defaultValue.filterGraceful),\n localityBonus: boolean(input.localityBonus, this.defaultValue.localityBonus),\n shareSuggestSelections: boolean(input.shareSuggestSelections, this.defaultValue.shareSuggestSelections),\n showIcons: boolean(input.showIcons, this.defaultValue.showIcons),\n showStatusBar: boolean(input.showStatusBar, this.defaultValue.showStatusBar),\n showInlineDetails: boolean(input.showInlineDetails, this.defaultValue.showInlineDetails),\n showMethods: boolean(input.showMethods, this.defaultValue.showMethods),\n showFunctions: boolean(input.showFunctions, this.defaultValue.showFunctions),\n showConstructors: boolean(input.showConstructors, this.defaultValue.showConstructors),\n showFields: boolean(input.showFields, this.defaultValue.showFields),\n showVariables: boolean(input.showVariables, this.defaultValue.showVariables),\n showClasses: boolean(input.showClasses, this.defaultValue.showClasses),\n showStructs: boolean(input.showStructs, this.defaultValue.showStructs),\n showInterfaces: boolean(input.showInterfaces, this.defaultValue.showInterfaces),\n showModules: boolean(input.showModules, this.defaultValue.showModules),\n showProperties: boolean(input.showProperties, this.defaultValue.showProperties),\n showEvents: boolean(input.showEvents, this.defaultValue.showEvents),\n showOperators: boolean(input.showOperators, this.defaultValue.showOperators),\n showUnits: boolean(input.showUnits, this.defaultValue.showUnits),\n showValues: boolean(input.showValues, this.defaultValue.showValues),\n showConstants: boolean(input.showConstants, this.defaultValue.showConstants),\n showEnums: boolean(input.showEnums, this.defaultValue.showEnums),\n showEnumMembers: boolean(input.showEnumMembers, this.defaultValue.showEnumMembers),\n showKeywords: boolean(input.showKeywords, this.defaultValue.showKeywords),\n showWords: boolean(input.showWords, this.defaultValue.showWords),\n showColors: boolean(input.showColors, this.defaultValue.showColors),\n showFiles: boolean(input.showFiles, this.defaultValue.showFiles),\n showReferences: boolean(input.showReferences, this.defaultValue.showReferences),\n showFolders: boolean(input.showFolders, this.defaultValue.showFolders),\n showTypeParameters: boolean(input.showTypeParameters, this.defaultValue.showTypeParameters),\n showSnippets: boolean(input.showSnippets, this.defaultValue.showSnippets),\n showUsers: boolean(input.showUsers, this.defaultValue.showUsers),\n showIssues: boolean(input.showIssues, this.defaultValue.showIssues),\n };\n }\n}\nclass SmartSelect extends BaseEditorOption {\n constructor() {\n super(99 /* smartSelect */, 'smartSelect', {\n selectLeadingAndTrailingWhitespace: true\n }, {\n 'editor.smartSelect.selectLeadingAndTrailingWhitespace': {\n description: nls.localize('selectLeadingAndTrailingWhitespace', \"Whether leading and trailing whitespace should always be selected.\"),\n default: true,\n type: 'boolean'\n }\n });\n }\n validate(input) {\n if (!input || typeof input !== 'object') {\n return this.defaultValue;\n }\n return {\n selectLeadingAndTrailingWhitespace: boolean(input.selectLeadingAndTrailingWhitespace, this.defaultValue.selectLeadingAndTrailingWhitespace)\n };\n }\n}\n//#endregion\n//#region tabFocusMode\nclass EditorTabFocusMode extends ComputedEditorOption {\n constructor() {\n super(126 /* tabFocusMode */, [77 /* readOnly */]);\n }\n compute(env, options, _) {\n const readOnly = options.get(77 /* readOnly */);\n return (readOnly ? true : env.tabFocusMode);\n }\n}\nfunction _wrappingIndentFromString(wrappingIndent) {\n switch (wrappingIndent) {\n case 'none': return 0 /* None */;\n case 'same': return 1 /* Same */;\n case 'indent': return 2 /* Indent */;\n case 'deepIndent': return 3 /* DeepIndent */;\n }\n}\nclass EditorWrappingInfoComputer extends ComputedEditorOption {\n constructor() {\n super(128 /* wrappingInfo */, [127 /* layoutInfo */]);\n }\n compute(env, options, _) {\n const layoutInfo = options.get(127 /* layoutInfo */);\n return {\n isDominatedByLongLines: env.isDominatedByLongLines,\n isWordWrapMinified: layoutInfo.isWordWrapMinified,\n isViewportWrapping: layoutInfo.isViewportWrapping,\n wrappingColumn: layoutInfo.wrappingColumn,\n };\n }\n}\n//#endregion\nconst DEFAULT_WINDOWS_FONT_FAMILY = 'Consolas, \\'Courier New\\', monospace';\nconst DEFAULT_MAC_FONT_FAMILY = 'Menlo, Monaco, \\'Courier New\\', monospace';\nconst DEFAULT_LINUX_FONT_FAMILY = '\\'Droid Sans Mono\\', \\'monospace\\', monospace, \\'Droid Sans Fallback\\'';\n/**\n * @internal\n */\nexport const EDITOR_FONT_DEFAULTS = {\n fontFamily: (platform.isMacintosh ? DEFAULT_MAC_FONT_FAMILY : (platform.isLinux ? DEFAULT_LINUX_FONT_FAMILY : DEFAULT_WINDOWS_FONT_FAMILY)),\n fontWeight: 'normal',\n fontSize: (platform.isMacintosh ? 12 : 14),\n lineHeight: 0,\n letterSpacing: 0,\n};\n/**\n * @internal\n */\nexport const EDITOR_MODEL_DEFAULTS = {\n tabSize: 4,\n indentSize: 4,\n insertSpaces: true,\n detectIndentation: true,\n trimAutoWhitespace: true,\n largeFileOptimizations: true\n};\n/**\n * @internal\n */\nexport const editorOptionsRegistry = [];\nfunction register(option) {\n editorOptionsRegistry[option.id] = option;\n return option;\n}\n/**\n * WORKAROUND: TS emits \"any\" for complex editor options values (anything except string, bool, enum, etc. ends up being \"any\")\n * @monacodtsreplace\n * /accessibilitySupport, any/accessibilitySupport, AccessibilitySupport/\n * /comments, any/comments, EditorCommentsOptions/\n * /find, any/find, EditorFindOptions/\n * /fontInfo, any/fontInfo, FontInfo/\n * /gotoLocation, any/gotoLocation, GoToLocationOptions/\n * /hover, any/hover, EditorHoverOptions/\n * /lightbulb, any/lightbulb, EditorLightbulbOptions/\n * /minimap, any/minimap, EditorMinimapOptions/\n * /parameterHints, any/parameterHints, InternalParameterHintOptions/\n * /quickSuggestions, any/quickSuggestions, ValidQuickSuggestionsOptions/\n * /suggest, any/suggest, InternalSuggestOptions/\n */\nexport const EditorOptions = {\n acceptSuggestionOnCommitCharacter: register(new EditorBooleanOption(0 /* acceptSuggestionOnCommitCharacter */, 'acceptSuggestionOnCommitCharacter', true, { markdownDescription: nls.localize('acceptSuggestionOnCommitCharacter', \"Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character.\") })),\n acceptSuggestionOnEnter: register(new EditorStringEnumOption(1 /* acceptSuggestionOnEnter */, 'acceptSuggestionOnEnter', 'on', ['on', 'smart', 'off'], {\n markdownEnumDescriptions: [\n '',\n nls.localize('acceptSuggestionOnEnterSmart', \"Only accept a suggestion with `Enter` when it makes a textual change.\"),\n ''\n ],\n markdownDescription: nls.localize('acceptSuggestionOnEnter', \"Controls whether suggestions should be accepted on `Enter`, in addition to `Tab`. Helps to avoid ambiguity between inserting new lines or accepting suggestions.\")\n })),\n accessibilitySupport: register(new EditorAccessibilitySupport()),\n accessibilityPageSize: register(new EditorIntOption(3 /* accessibilityPageSize */, 'accessibilityPageSize', 10, 1, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, {\n description: nls.localize('accessibilityPageSize', \"Controls the number of lines in the editor that can be read out by a screen reader at once. When we detect a screen reader we automatically set the default to be 500. Warning: this has a performance implication for numbers larger than the default.\")\n })),\n ariaLabel: register(new EditorStringOption(4 /* ariaLabel */, 'ariaLabel', nls.localize('editorViewAccessibleLabel', \"Editor content\"))),\n autoClosingBrackets: register(new EditorStringEnumOption(5 /* autoClosingBrackets */, 'autoClosingBrackets', 'languageDefined', ['always', 'languageDefined', 'beforeWhitespace', 'never'], {\n enumDescriptions: [\n '',\n nls.localize('editor.autoClosingBrackets.languageDefined', \"Use language configurations to determine when to autoclose brackets.\"),\n nls.localize('editor.autoClosingBrackets.beforeWhitespace', \"Autoclose brackets only when the cursor is to the left of whitespace.\"),\n '',\n ],\n description: nls.localize('autoClosingBrackets', \"Controls whether the editor should automatically close brackets after the user adds an opening bracket.\")\n })),\n autoClosingDelete: register(new EditorStringEnumOption(6 /* autoClosingDelete */, 'autoClosingDelete', 'auto', ['always', 'auto', 'never'], {\n enumDescriptions: [\n '',\n nls.localize('editor.autoClosingDelete.auto', \"Remove adjacent closing quotes or brackets only if they were automatically inserted.\"),\n '',\n ],\n description: nls.localize('autoClosingDelete', \"Controls whether the editor should remove adjacent closing quotes or brackets when deleting.\")\n })),\n autoClosingOvertype: register(new EditorStringEnumOption(7 /* autoClosingOvertype */, 'autoClosingOvertype', 'auto', ['always', 'auto', 'never'], {\n enumDescriptions: [\n '',\n nls.localize('editor.autoClosingOvertype.auto', \"Type over closing quotes or brackets only if they were automatically inserted.\"),\n '',\n ],\n description: nls.localize('autoClosingOvertype', \"Controls whether the editor should type over closing quotes or brackets.\")\n })),\n autoClosingQuotes: register(new EditorStringEnumOption(8 /* autoClosingQuotes */, 'autoClosingQuotes', 'languageDefined', ['always', 'languageDefined', 'beforeWhitespace', 'never'], {\n enumDescriptions: [\n '',\n nls.localize('editor.autoClosingQuotes.languageDefined', \"Use language configurations to determine when to autoclose quotes.\"),\n nls.localize('editor.autoClosingQuotes.beforeWhitespace', \"Autoclose quotes only when the cursor is to the left of whitespace.\"),\n '',\n ],\n description: nls.localize('autoClosingQuotes', \"Controls whether the editor should automatically close quotes after the user adds an opening quote.\")\n })),\n autoIndent: register(new EditorEnumOption(9 /* autoIndent */, 'autoIndent', 4 /* Full */, 'full', ['none', 'keep', 'brackets', 'advanced', 'full'], _autoIndentFromString, {\n enumDescriptions: [\n nls.localize('editor.autoIndent.none', \"The editor will not insert indentation automatically.\"),\n nls.localize('editor.autoIndent.keep', \"The editor will keep the current line's indentation.\"),\n nls.localize('editor.autoIndent.brackets', \"The editor will keep the current line's indentation and honor language defined brackets.\"),\n nls.localize('editor.autoIndent.advanced', \"The editor will keep the current line's indentation, honor language defined brackets and invoke special onEnterRules defined by languages.\"),\n nls.localize('editor.autoIndent.full', \"The editor will keep the current line's indentation, honor language defined brackets, invoke special onEnterRules defined by languages, and honor indentationRules defined by languages.\"),\n ],\n description: nls.localize('autoIndent', \"Controls whether the editor should automatically adjust the indentation when users type, paste, move or indent lines.\")\n })),\n automaticLayout: register(new EditorBooleanOption(10 /* automaticLayout */, 'automaticLayout', false)),\n autoSurround: register(new EditorStringEnumOption(11 /* autoSurround */, 'autoSurround', 'languageDefined', ['languageDefined', 'quotes', 'brackets', 'never'], {\n enumDescriptions: [\n nls.localize('editor.autoSurround.languageDefined', \"Use language configurations to determine when to automatically surround selections.\"),\n nls.localize('editor.autoSurround.quotes', \"Surround with quotes but not brackets.\"),\n nls.localize('editor.autoSurround.brackets', \"Surround with brackets but not quotes.\"),\n ''\n ],\n description: nls.localize('autoSurround', \"Controls whether the editor should automatically surround selections when typing quotes or brackets.\")\n })),\n stickyTabStops: register(new EditorBooleanOption(101 /* stickyTabStops */, 'stickyTabStops', false, { description: nls.localize('stickyTabStops', \"Emulate selection behavior of tab characters when using spaces for indentation. Selection will stick to tab stops.\") })),\n codeLens: register(new EditorBooleanOption(12 /* codeLens */, 'codeLens', true, { description: nls.localize('codeLens', \"Controls whether the editor shows CodeLens.\") })),\n codeLensFontFamily: register(new EditorStringOption(13 /* codeLensFontFamily */, 'codeLensFontFamily', '', { description: nls.localize('codeLensFontFamily', \"Controls the font family for CodeLens.\") })),\n codeLensFontSize: register(new EditorIntOption(14 /* codeLensFontSize */, 'codeLensFontSize', 0, 0, 100, {\n type: 'number',\n default: 0,\n minimum: 0,\n maximum: 100,\n description: nls.localize('codeLensFontSize', \"Controls the font size in pixels for CodeLens. When set to `0`, the 90% of `#editor.fontSize#` is used.\")\n })),\n colorDecorators: register(new EditorBooleanOption(15 /* colorDecorators */, 'colorDecorators', true, { description: nls.localize('colorDecorators', \"Controls whether the editor should render the inline color decorators and color picker.\") })),\n columnSelection: register(new EditorBooleanOption(16 /* columnSelection */, 'columnSelection', false, { description: nls.localize('columnSelection', \"Enable that the selection with the mouse and keys is doing column selection.\") })),\n comments: register(new EditorComments()),\n contextmenu: register(new EditorBooleanOption(18 /* contextmenu */, 'contextmenu', true)),\n copyWithSyntaxHighlighting: register(new EditorBooleanOption(19 /* copyWithSyntaxHighlighting */, 'copyWithSyntaxHighlighting', true, { description: nls.localize('copyWithSyntaxHighlighting', \"Controls whether syntax highlighting should be copied into the clipboard.\") })),\n cursorBlinking: register(new EditorEnumOption(20 /* cursorBlinking */, 'cursorBlinking', 1 /* Blink */, 'blink', ['blink', 'smooth', 'phase', 'expand', 'solid'], _cursorBlinkingStyleFromString, { description: nls.localize('cursorBlinking', \"Control the cursor animation style.\") })),\n cursorSmoothCaretAnimation: register(new EditorBooleanOption(21 /* cursorSmoothCaretAnimation */, 'cursorSmoothCaretAnimation', false, { description: nls.localize('cursorSmoothCaretAnimation', \"Controls whether the smooth caret animation should be enabled.\") })),\n cursorStyle: register(new EditorEnumOption(22 /* cursorStyle */, 'cursorStyle', TextEditorCursorStyle.Line, 'line', ['line', 'block', 'underline', 'line-thin', 'block-outline', 'underline-thin'], _cursorStyleFromString, { description: nls.localize('cursorStyle', \"Controls the cursor style.\") })),\n cursorSurroundingLines: register(new EditorIntOption(23 /* cursorSurroundingLines */, 'cursorSurroundingLines', 0, 0, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, { description: nls.localize('cursorSurroundingLines', \"Controls the minimal number of visible leading and trailing lines surrounding the cursor. Known as 'scrollOff' or 'scrollOffset' in some other editors.\") })),\n cursorSurroundingLinesStyle: register(new EditorStringEnumOption(24 /* cursorSurroundingLinesStyle */, 'cursorSurroundingLinesStyle', 'default', ['default', 'all'], {\n enumDescriptions: [\n nls.localize('cursorSurroundingLinesStyle.default', \"`cursorSurroundingLines` is enforced only when triggered via the keyboard or API.\"),\n nls.localize('cursorSurroundingLinesStyle.all', \"`cursorSurroundingLines` is enforced always.\")\n ],\n description: nls.localize('cursorSurroundingLinesStyle', \"Controls when `cursorSurroundingLines` should be enforced.\")\n })),\n cursorWidth: register(new EditorIntOption(25 /* cursorWidth */, 'cursorWidth', 0, 0, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, { markdownDescription: nls.localize('cursorWidth', \"Controls the width of the cursor when `#editor.cursorStyle#` is set to `line`.\") })),\n disableLayerHinting: register(new EditorBooleanOption(26 /* disableLayerHinting */, 'disableLayerHinting', false)),\n disableMonospaceOptimizations: register(new EditorBooleanOption(27 /* disableMonospaceOptimizations */, 'disableMonospaceOptimizations', false)),\n domReadOnly: register(new EditorBooleanOption(28 /* domReadOnly */, 'domReadOnly', false)),\n dragAndDrop: register(new EditorBooleanOption(29 /* dragAndDrop */, 'dragAndDrop', true, { description: nls.localize('dragAndDrop', \"Controls whether the editor should allow moving selections via drag and drop.\") })),\n emptySelectionClipboard: register(new EditorEmptySelectionClipboard()),\n extraEditorClassName: register(new EditorStringOption(31 /* extraEditorClassName */, 'extraEditorClassName', '')),\n fastScrollSensitivity: register(new EditorFloatOption(32 /* fastScrollSensitivity */, 'fastScrollSensitivity', 5, x => (x <= 0 ? 5 : x), { markdownDescription: nls.localize('fastScrollSensitivity', \"Scrolling speed multiplier when pressing `Alt`.\") })),\n find: register(new EditorFind()),\n fixedOverflowWidgets: register(new EditorBooleanOption(34 /* fixedOverflowWidgets */, 'fixedOverflowWidgets', false)),\n folding: register(new EditorBooleanOption(35 /* folding */, 'folding', true, { description: nls.localize('folding', \"Controls whether the editor has code folding enabled.\") })),\n foldingStrategy: register(new EditorStringEnumOption(36 /* foldingStrategy */, 'foldingStrategy', 'auto', ['auto', 'indentation'], {\n enumDescriptions: [\n nls.localize('foldingStrategy.auto', \"Use a language-specific folding strategy if available, else the indentation-based one.\"),\n nls.localize('foldingStrategy.indentation', \"Use the indentation-based folding strategy.\"),\n ],\n description: nls.localize('foldingStrategy', \"Controls the strategy for computing folding ranges.\")\n })),\n foldingHighlight: register(new EditorBooleanOption(37 /* foldingHighlight */, 'foldingHighlight', true, { description: nls.localize('foldingHighlight', \"Controls whether the editor should highlight folded ranges.\") })),\n unfoldOnClickAfterEndOfLine: register(new EditorBooleanOption(38 /* unfoldOnClickAfterEndOfLine */, 'unfoldOnClickAfterEndOfLine', false, { description: nls.localize('unfoldOnClickAfterEndOfLine', \"Controls whether clicking on the empty content after a folded line will unfold the line.\") })),\n fontFamily: register(new EditorStringOption(39 /* fontFamily */, 'fontFamily', EDITOR_FONT_DEFAULTS.fontFamily, { description: nls.localize('fontFamily', \"Controls the font family.\") })),\n fontInfo: register(new EditorFontInfo()),\n fontLigatures2: register(new EditorFontLigatures()),\n fontSize: register(new EditorFontSize()),\n fontWeight: register(new EditorFontWeight()),\n formatOnPaste: register(new EditorBooleanOption(44 /* formatOnPaste */, 'formatOnPaste', false, { description: nls.localize('formatOnPaste', \"Controls whether the editor should automatically format the pasted content. A formatter must be available and the formatter should be able to format a range in a document.\") })),\n formatOnType: register(new EditorBooleanOption(45 /* formatOnType */, 'formatOnType', false, { description: nls.localize('formatOnType', \"Controls whether the editor should automatically format the line after typing.\") })),\n glyphMargin: register(new EditorBooleanOption(46 /* glyphMargin */, 'glyphMargin', true, { description: nls.localize('glyphMargin', \"Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.\") })),\n gotoLocation: register(new EditorGoToLocation()),\n hideCursorInOverviewRuler: register(new EditorBooleanOption(48 /* hideCursorInOverviewRuler */, 'hideCursorInOverviewRuler', false, { description: nls.localize('hideCursorInOverviewRuler', \"Controls whether the cursor should be hidden in the overview ruler.\") })),\n highlightActiveIndentGuide: register(new EditorBooleanOption(49 /* highlightActiveIndentGuide */, 'highlightActiveIndentGuide', true, { description: nls.localize('highlightActiveIndentGuide', \"Controls whether the editor should highlight the active indent guide.\") })),\n hover: register(new EditorHover()),\n inDiffEditor: register(new EditorBooleanOption(51 /* inDiffEditor */, 'inDiffEditor', false)),\n letterSpacing: register(new EditorFloatOption(52 /* letterSpacing */, 'letterSpacing', EDITOR_FONT_DEFAULTS.letterSpacing, x => EditorFloatOption.clamp(x, -5, 20), { description: nls.localize('letterSpacing', \"Controls the letter spacing in pixels.\") })),\n lightbulb: register(new EditorLightbulb()),\n lineDecorationsWidth: register(new SimpleEditorOption(54 /* lineDecorationsWidth */, 'lineDecorationsWidth', 10)),\n lineHeight: register(new EditorLineHeight()),\n lineNumbers: register(new EditorRenderLineNumbersOption()),\n lineNumbersMinChars: register(new EditorIntOption(57 /* lineNumbersMinChars */, 'lineNumbersMinChars', 5, 1, 300)),\n linkedEditing: register(new EditorBooleanOption(58 /* linkedEditing */, 'linkedEditing', false, { description: nls.localize('linkedEditing', \"Controls whether the editor has linked editing enabled. Depending on the language, related symbols, e.g. HTML tags, are updated while editing.\") })),\n links: register(new EditorBooleanOption(59 /* links */, 'links', true, { description: nls.localize('links', \"Controls whether the editor should detect links and make them clickable.\") })),\n matchBrackets: register(new EditorStringEnumOption(60 /* matchBrackets */, 'matchBrackets', 'always', ['always', 'near', 'never'], { description: nls.localize('matchBrackets', \"Highlight matching brackets.\") })),\n minimap: register(new EditorMinimap()),\n mouseStyle: register(new EditorStringEnumOption(62 /* mouseStyle */, 'mouseStyle', 'text', ['text', 'default', 'copy'])),\n mouseWheelScrollSensitivity: register(new EditorFloatOption(63 /* mouseWheelScrollSensitivity */, 'mouseWheelScrollSensitivity', 1, x => (x === 0 ? 1 : x), { markdownDescription: nls.localize('mouseWheelScrollSensitivity', \"A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.\") })),\n mouseWheelZoom: register(new EditorBooleanOption(64 /* mouseWheelZoom */, 'mouseWheelZoom', false, { markdownDescription: nls.localize('mouseWheelZoom', \"Zoom the font of the editor when using mouse wheel and holding `Ctrl`.\") })),\n multiCursorMergeOverlapping: register(new EditorBooleanOption(65 /* multiCursorMergeOverlapping */, 'multiCursorMergeOverlapping', true, { description: nls.localize('multiCursorMergeOverlapping', \"Merge multiple cursors when they are overlapping.\") })),\n multiCursorModifier: register(new EditorEnumOption(66 /* multiCursorModifier */, 'multiCursorModifier', 'altKey', 'alt', ['ctrlCmd', 'alt'], _multiCursorModifierFromString, {\n markdownEnumDescriptions: [\n nls.localize('multiCursorModifier.ctrlCmd', \"Maps to `Control` on Windows and Linux and to `Command` on macOS.\"),\n nls.localize('multiCursorModifier.alt', \"Maps to `Alt` on Windows and Linux and to `Option` on macOS.\")\n ],\n markdownDescription: nls.localize({\n key: 'multiCursorModifier',\n comment: [\n '- `ctrlCmd` refers to a value the setting can take and should not be localized.',\n '- `Control` and `Command` refer to the modifier keys Ctrl or Cmd on the keyboard and can be localized.'\n ]\n }, \"The modifier to be used to add multiple cursors with the mouse. The Go To Definition and Open Link mouse gestures will adapt such that they do not conflict with the multicursor modifier. [Read more](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).\")\n })),\n multiCursorPaste: register(new EditorStringEnumOption(67 /* multiCursorPaste */, 'multiCursorPaste', 'spread', ['spread', 'full'], {\n markdownEnumDescriptions: [\n nls.localize('multiCursorPaste.spread', \"Each cursor pastes a single line of the text.\"),\n nls.localize('multiCursorPaste.full', \"Each cursor pastes the full text.\")\n ],\n markdownDescription: nls.localize('multiCursorPaste', \"Controls pasting when the line count of the pasted text matches the cursor count.\")\n })),\n occurrencesHighlight: register(new EditorBooleanOption(68 /* occurrencesHighlight */, 'occurrencesHighlight', true, { description: nls.localize('occurrencesHighlight', \"Controls whether the editor should highlight semantic symbol occurrences.\") })),\n overviewRulerBorder: register(new EditorBooleanOption(69 /* overviewRulerBorder */, 'overviewRulerBorder', true, { description: nls.localize('overviewRulerBorder', \"Controls whether a border should be drawn around the overview ruler.\") })),\n overviewRulerLanes: register(new EditorIntOption(70 /* overviewRulerLanes */, 'overviewRulerLanes', 3, 0, 3)),\n padding: register(new EditorPadding()),\n parameterHints: register(new EditorParameterHints()),\n peekWidgetDefaultFocus: register(new EditorStringEnumOption(73 /* peekWidgetDefaultFocus */, 'peekWidgetDefaultFocus', 'tree', ['tree', 'editor'], {\n enumDescriptions: [\n nls.localize('peekWidgetDefaultFocus.tree', \"Focus the tree when opening peek\"),\n nls.localize('peekWidgetDefaultFocus.editor', \"Focus the editor when opening peek\")\n ],\n description: nls.localize('peekWidgetDefaultFocus', \"Controls whether to focus the inline editor or the tree in the peek widget.\")\n })),\n definitionLinkOpensInPeek: register(new EditorBooleanOption(74 /* definitionLinkOpensInPeek */, 'definitionLinkOpensInPeek', false, { description: nls.localize('definitionLinkOpensInPeek', \"Controls whether the Go to Definition mouse gesture always opens the peek widget.\") })),\n quickSuggestions: register(new EditorQuickSuggestions()),\n quickSuggestionsDelay: register(new EditorIntOption(76 /* quickSuggestionsDelay */, 'quickSuggestionsDelay', 10, 0, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, { description: nls.localize('quickSuggestionsDelay', \"Controls the delay in milliseconds after which quick suggestions will show up.\") })),\n readOnly: register(new EditorBooleanOption(77 /* readOnly */, 'readOnly', false)),\n renameOnType: register(new EditorBooleanOption(78 /* renameOnType */, 'renameOnType', false, { description: nls.localize('renameOnType', \"Controls whether the editor auto renames on type.\"), markdownDeprecationMessage: nls.localize('renameOnTypeDeprecate', \"Deprecated, use `editor.linkedEditing` instead.\") })),\n renderControlCharacters: register(new EditorBooleanOption(79 /* renderControlCharacters */, 'renderControlCharacters', false, { description: nls.localize('renderControlCharacters', \"Controls whether the editor should render control characters.\") })),\n renderIndentGuides: register(new EditorBooleanOption(80 /* renderIndentGuides */, 'renderIndentGuides', true, { description: nls.localize('renderIndentGuides', \"Controls whether the editor should render indent guides.\") })),\n renderFinalNewline: register(new EditorBooleanOption(81 /* renderFinalNewline */, 'renderFinalNewline', true, { description: nls.localize('renderFinalNewline', \"Render last line number when the file ends with a newline.\") })),\n renderLineHighlight: register(new EditorStringEnumOption(82 /* renderLineHighlight */, 'renderLineHighlight', 'line', ['none', 'gutter', 'line', 'all'], {\n enumDescriptions: [\n '',\n '',\n '',\n nls.localize('renderLineHighlight.all', \"Highlights both the gutter and the current line.\"),\n ],\n description: nls.localize('renderLineHighlight', \"Controls how the editor should render the current line highlight.\")\n })),\n renderLineHighlightOnlyWhenFocus: register(new EditorBooleanOption(83 /* renderLineHighlightOnlyWhenFocus */, 'renderLineHighlightOnlyWhenFocus', false, { description: nls.localize('renderLineHighlightOnlyWhenFocus', \"Controls if the editor should render the current line highlight only when the editor is focused.\") })),\n renderValidationDecorations: register(new EditorStringEnumOption(84 /* renderValidationDecorations */, 'renderValidationDecorations', 'editable', ['editable', 'on', 'off'])),\n renderWhitespace: register(new EditorStringEnumOption(85 /* renderWhitespace */, 'renderWhitespace', 'selection', ['none', 'boundary', 'selection', 'trailing', 'all'], {\n enumDescriptions: [\n '',\n nls.localize('renderWhitespace.boundary', \"Render whitespace characters except for single spaces between words.\"),\n nls.localize('renderWhitespace.selection', \"Render whitespace characters only on selected text.\"),\n nls.localize('renderWhitespace.trailing', \"Render only trailing whitespace characters.\"),\n ''\n ],\n description: nls.localize('renderWhitespace', \"Controls how the editor should render whitespace characters.\")\n })),\n revealHorizontalRightPadding: register(new EditorIntOption(86 /* revealHorizontalRightPadding */, 'revealHorizontalRightPadding', 30, 0, 1000)),\n roundedSelection: register(new EditorBooleanOption(87 /* roundedSelection */, 'roundedSelection', true, { description: nls.localize('roundedSelection', \"Controls whether selections should have rounded corners.\") })),\n rulers: register(new EditorRulers()),\n scrollbar: register(new EditorScrollbar()),\n scrollBeyondLastColumn: register(new EditorIntOption(90 /* scrollBeyondLastColumn */, 'scrollBeyondLastColumn', 5, 0, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, { description: nls.localize('scrollBeyondLastColumn', \"Controls the number of extra characters beyond which the editor will scroll horizontally.\") })),\n scrollBeyondLastLine: register(new EditorBooleanOption(91 /* scrollBeyondLastLine */, 'scrollBeyondLastLine', true, { description: nls.localize('scrollBeyondLastLine', \"Controls whether the editor will scroll beyond the last line.\") })),\n scrollPredominantAxis: register(new EditorBooleanOption(92 /* scrollPredominantAxis */, 'scrollPredominantAxis', true, { description: nls.localize('scrollPredominantAxis', \"Scroll only along the predominant axis when scrolling both vertically and horizontally at the same time. Prevents horizontal drift when scrolling vertically on a trackpad.\") })),\n selectionClipboard: register(new EditorBooleanOption(93 /* selectionClipboard */, 'selectionClipboard', true, {\n description: nls.localize('selectionClipboard', \"Controls whether the Linux primary clipboard should be supported.\"),\n included: platform.isLinux\n })),\n selectionHighlight: register(new EditorBooleanOption(94 /* selectionHighlight */, 'selectionHighlight', true, { description: nls.localize('selectionHighlight', \"Controls whether the editor should highlight matches similar to the selection.\") })),\n selectOnLineNumbers: register(new EditorBooleanOption(95 /* selectOnLineNumbers */, 'selectOnLineNumbers', true)),\n showFoldingControls: register(new EditorStringEnumOption(96 /* showFoldingControls */, 'showFoldingControls', 'mouseover', ['always', 'mouseover'], {\n enumDescriptions: [\n nls.localize('showFoldingControls.always', \"Always show the folding controls.\"),\n nls.localize('showFoldingControls.mouseover', \"Only show the folding controls when the mouse is over the gutter.\"),\n ],\n description: nls.localize('showFoldingControls', \"Controls when the folding controls on the gutter are shown.\")\n })),\n showUnused: register(new EditorBooleanOption(97 /* showUnused */, 'showUnused', true, { description: nls.localize('showUnused', \"Controls fading out of unused code.\") })),\n showDeprecated: register(new EditorBooleanOption(122 /* showDeprecated */, 'showDeprecated', true, { description: nls.localize('showDeprecated', \"Controls strikethrough deprecated variables.\") })),\n inlineHints: register(new EditorInlineHints()),\n snippetSuggestions: register(new EditorStringEnumOption(98 /* snippetSuggestions */, 'snippetSuggestions', 'inline', ['top', 'bottom', 'inline', 'none'], {\n enumDescriptions: [\n nls.localize('snippetSuggestions.top', \"Show snippet suggestions on top of other suggestions.\"),\n nls.localize('snippetSuggestions.bottom', \"Show snippet suggestions below other suggestions.\"),\n nls.localize('snippetSuggestions.inline', \"Show snippets suggestions with other suggestions.\"),\n nls.localize('snippetSuggestions.none', \"Do not show snippet suggestions.\"),\n ],\n description: nls.localize('snippetSuggestions', \"Controls whether snippets are shown with other suggestions and how they are sorted.\")\n })),\n smartSelect: register(new SmartSelect()),\n smoothScrolling: register(new EditorBooleanOption(100 /* smoothScrolling */, 'smoothScrolling', false, { description: nls.localize('smoothScrolling', \"Controls whether the editor will scroll using an animation.\") })),\n stopRenderingLineAfter: register(new EditorIntOption(102 /* stopRenderingLineAfter */, 'stopRenderingLineAfter', 10000, -1, 1073741824 /* MAX_SAFE_SMALL_INTEGER */)),\n suggest: register(new EditorSuggest()),\n suggestFontSize: register(new EditorIntOption(104 /* suggestFontSize */, 'suggestFontSize', 0, 0, 1000, { markdownDescription: nls.localize('suggestFontSize', \"Font size for the suggest widget. When set to `0`, the value of `#editor.fontSize#` is used.\") })),\n suggestLineHeight: register(new EditorIntOption(105 /* suggestLineHeight */, 'suggestLineHeight', 0, 0, 1000, { markdownDescription: nls.localize('suggestLineHeight', \"Line height for the suggest widget. When set to `0`, the value of `#editor.lineHeight#` is used. The minimum value is 8.\") })),\n suggestOnTriggerCharacters: register(new EditorBooleanOption(106 /* suggestOnTriggerCharacters */, 'suggestOnTriggerCharacters', true, { description: nls.localize('suggestOnTriggerCharacters', \"Controls whether suggestions should automatically show up when typing trigger characters.\") })),\n suggestSelection: register(new EditorStringEnumOption(107 /* suggestSelection */, 'suggestSelection', 'recentlyUsed', ['first', 'recentlyUsed', 'recentlyUsedByPrefix'], {\n markdownEnumDescriptions: [\n nls.localize('suggestSelection.first', \"Always select the first suggestion.\"),\n nls.localize('suggestSelection.recentlyUsed', \"Select recent suggestions unless further typing selects one, e.g. `console.| -> console.log` because `log` has been completed recently.\"),\n nls.localize('suggestSelection.recentlyUsedByPrefix', \"Select suggestions based on previous prefixes that have completed those suggestions, e.g. `co -> console` and `con -> const`.\"),\n ],\n description: nls.localize('suggestSelection', \"Controls how suggestions are pre-selected when showing the suggest list.\")\n })),\n tabCompletion: register(new EditorStringEnumOption(108 /* tabCompletion */, 'tabCompletion', 'off', ['on', 'off', 'onlySnippets'], {\n enumDescriptions: [\n nls.localize('tabCompletion.on', \"Tab complete will insert the best matching suggestion when pressing tab.\"),\n nls.localize('tabCompletion.off', \"Disable tab completions.\"),\n nls.localize('tabCompletion.onlySnippets', \"Tab complete snippets when their prefix match. Works best when 'quickSuggestions' aren't enabled.\"),\n ],\n description: nls.localize('tabCompletion', \"Enables tab completions.\")\n })),\n tabIndex: register(new EditorIntOption(109 /* tabIndex */, 'tabIndex', 0, -1, 1073741824 /* MAX_SAFE_SMALL_INTEGER */)),\n unusualLineTerminators: register(new EditorStringEnumOption(110 /* unusualLineTerminators */, 'unusualLineTerminators', 'prompt', ['auto', 'off', 'prompt'], {\n enumDescriptions: [\n nls.localize('unusualLineTerminators.auto', \"Unusual line terminators are automatically removed.\"),\n nls.localize('unusualLineTerminators.off', \"Unusual line terminators are ignored.\"),\n nls.localize('unusualLineTerminators.prompt', \"Unusual line terminators prompt to be removed.\"),\n ],\n description: nls.localize('unusualLineTerminators', \"Remove unusual line terminators that might cause problems.\")\n })),\n useShadowDOM: register(new EditorBooleanOption(111 /* useShadowDOM */, 'useShadowDOM', true)),\n useTabStops: register(new EditorBooleanOption(112 /* useTabStops */, 'useTabStops', true, { description: nls.localize('useTabStops', \"Inserting and deleting whitespace follows tab stops.\") })),\n wordSeparators: register(new EditorStringOption(113 /* wordSeparators */, 'wordSeparators', USUAL_WORD_SEPARATORS, { description: nls.localize('wordSeparators', \"Characters that will be used as word separators when doing word related navigations or operations.\") })),\n wordWrap: register(new EditorStringEnumOption(114 /* wordWrap */, 'wordWrap', 'off', ['off', 'on', 'wordWrapColumn', 'bounded'], {\n markdownEnumDescriptions: [\n nls.localize('wordWrap.off', \"Lines will never wrap.\"),\n nls.localize('wordWrap.on', \"Lines will wrap at the viewport width.\"),\n nls.localize({\n key: 'wordWrap.wordWrapColumn',\n comment: [\n '- `editor.wordWrapColumn` refers to a different setting and should not be localized.'\n ]\n }, \"Lines will wrap at `#editor.wordWrapColumn#`.\"),\n nls.localize({\n key: 'wordWrap.bounded',\n comment: [\n '- viewport means the edge of the visible window size.',\n '- `editor.wordWrapColumn` refers to a different setting and should not be localized.'\n ]\n }, \"Lines will wrap at the minimum of viewport and `#editor.wordWrapColumn#`.\"),\n ],\n description: nls.localize({\n key: 'wordWrap',\n comment: [\n '- \\'off\\', \\'on\\', \\'wordWrapColumn\\' and \\'bounded\\' refer to values the setting can take and should not be localized.',\n '- `editor.wordWrapColumn` refers to a different setting and should not be localized.'\n ]\n }, \"Controls how lines should wrap.\")\n })),\n wordWrapBreakAfterCharacters: register(new EditorStringOption(115 /* wordWrapBreakAfterCharacters */, 'wordWrapBreakAfterCharacters', ' \\t})]?|/&.,;¢°′″‰℃、。。、¢,.:;?!%・・ゝゞヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻ァィゥェォャュョッー”〉》」』】〕)]}」')),\n wordWrapBreakBeforeCharacters: register(new EditorStringOption(116 /* wordWrapBreakBeforeCharacters */, 'wordWrapBreakBeforeCharacters', '([{‘“〈《「『【〔([{「£¥$£¥++')),\n wordWrapColumn: register(new EditorIntOption(117 /* wordWrapColumn */, 'wordWrapColumn', 80, 1, 1073741824 /* MAX_SAFE_SMALL_INTEGER */, {\n markdownDescription: nls.localize({\n key: 'wordWrapColumn',\n comment: [\n '- `editor.wordWrap` refers to a different setting and should not be localized.',\n '- \\'wordWrapColumn\\' and \\'bounded\\' refer to values the different setting can take and should not be localized.'\n ]\n }, \"Controls the wrapping column of the editor when `#editor.wordWrap#` is `wordWrapColumn` or `bounded`.\")\n })),\n wordWrapOverride1: register(new EditorStringEnumOption(118 /* wordWrapOverride1 */, 'wordWrapOverride1', 'inherit', ['off', 'on', 'inherit'])),\n wordWrapOverride2: register(new EditorStringEnumOption(119 /* wordWrapOverride2 */, 'wordWrapOverride2', 'inherit', ['off', 'on', 'inherit'])),\n wrappingIndent: register(new EditorEnumOption(120 /* wrappingIndent */, 'wrappingIndent', 1 /* Same */, 'same', ['none', 'same', 'indent', 'deepIndent'], _wrappingIndentFromString, {\n enumDescriptions: [\n nls.localize('wrappingIndent.none', \"No indentation. Wrapped lines begin at column 1.\"),\n nls.localize('wrappingIndent.same', \"Wrapped lines get the same indentation as the parent.\"),\n nls.localize('wrappingIndent.indent', \"Wrapped lines get +1 indentation toward the parent.\"),\n nls.localize('wrappingIndent.deepIndent', \"Wrapped lines get +2 indentation toward the parent.\"),\n ],\n description: nls.localize('wrappingIndent', \"Controls the indentation of wrapped lines.\"),\n })),\n wrappingStrategy: register(new EditorStringEnumOption(121 /* wrappingStrategy */, 'wrappingStrategy', 'simple', ['simple', 'advanced'], {\n enumDescriptions: [\n nls.localize('wrappingStrategy.simple', \"Assumes that all characters are of the same width. This is a fast algorithm that works correctly for monospace fonts and certain scripts (like Latin characters) where glyphs are of equal width.\"),\n nls.localize('wrappingStrategy.advanced', \"Delegates wrapping points computation to the browser. This is a slow algorithm, that might cause freezes for large files, but it works correctly in all cases.\")\n ],\n description: nls.localize('wrappingStrategy', \"Controls the algorithm that computes wrapping points.\")\n })),\n // Leave these at the end (because they have dependencies!)\n editorClassName: register(new EditorClassName()),\n pixelRatio: register(new EditorPixelRatio()),\n tabFocusMode: register(new EditorTabFocusMode()),\n layoutInfo: register(new EditorLayoutInfoComputer()),\n wrappingInfo: register(new EditorWrappingInfoComputer())\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nexport const EditorZoom = new class {\n constructor() {\n this._zoomLevel = 0;\n this._onDidChangeZoomLevel = new Emitter();\n this.onDidChangeZoomLevel = this._onDidChangeZoomLevel.event;\n }\n getZoomLevel() {\n return this._zoomLevel;\n }\n setZoomLevel(zoomLevel) {\n zoomLevel = Math.min(Math.max(-5, zoomLevel), 20);\n if (this._zoomLevel === zoomLevel) {\n return;\n }\n this._zoomLevel = zoomLevel;\n this._onDidChangeZoomLevel.fire(this._zoomLevel);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as platform from '../../../base/common/platform.js';\nimport { EditorZoom } from './editorZoom.js';\n/**\n * Determined from empirical observations.\n * @internal\n */\nconst GOLDEN_LINE_HEIGHT_RATIO = platform.isMacintosh ? 1.5 : 1.35;\n/**\n * @internal\n */\nconst MINIMUM_LINE_HEIGHT = 8;\nexport class BareFontInfo {\n /**\n * @internal\n */\n constructor(opts) {\n this.zoomLevel = opts.zoomLevel;\n this.pixelRatio = opts.pixelRatio;\n this.fontFamily = String(opts.fontFamily);\n this.fontWeight = String(opts.fontWeight);\n this.fontSize = opts.fontSize;\n this.fontFeatureSettings = opts.fontFeatureSettings;\n this.lineHeight = opts.lineHeight | 0;\n this.letterSpacing = opts.letterSpacing;\n }\n /**\n * @internal\n */\n static createFromValidatedSettings(options, zoomLevel, pixelRatio, ignoreEditorZoom) {\n const fontFamily = options.get(39 /* fontFamily */);\n const fontWeight = options.get(43 /* fontWeight */);\n const fontSize = options.get(42 /* fontSize */);\n const fontFeatureSettings = options.get(41 /* fontLigatures */);\n const lineHeight = options.get(55 /* lineHeight */);\n const letterSpacing = options.get(52 /* letterSpacing */);\n return BareFontInfo._create(fontFamily, fontWeight, fontSize, fontFeatureSettings, lineHeight, letterSpacing, zoomLevel, pixelRatio, ignoreEditorZoom);\n }\n /**\n * @internal\n */\n static _create(fontFamily, fontWeight, fontSize, fontFeatureSettings, lineHeight, letterSpacing, zoomLevel, pixelRatio, ignoreEditorZoom) {\n if (lineHeight === 0) {\n lineHeight = Math.round(GOLDEN_LINE_HEIGHT_RATIO * fontSize);\n }\n else if (lineHeight < MINIMUM_LINE_HEIGHT) {\n lineHeight = MINIMUM_LINE_HEIGHT;\n }\n const editorZoomLevelMultiplier = 1 + (ignoreEditorZoom ? 0 : EditorZoom.getZoomLevel() * 0.1);\n fontSize *= editorZoomLevelMultiplier;\n lineHeight *= editorZoomLevelMultiplier;\n return new BareFontInfo({\n zoomLevel: zoomLevel,\n pixelRatio: pixelRatio,\n fontFamily: fontFamily,\n fontWeight: fontWeight,\n fontSize: fontSize,\n fontFeatureSettings: fontFeatureSettings,\n lineHeight: lineHeight,\n letterSpacing: letterSpacing\n });\n }\n /**\n * @internal\n */\n getId() {\n return this.zoomLevel + '-' + this.pixelRatio + '-' + this.fontFamily + '-' + this.fontWeight + '-' + this.fontSize + '-' + this.fontFeatureSettings + '-' + this.lineHeight + '-' + this.letterSpacing;\n }\n /**\n * @internal\n */\n getMassagedFontFamily() {\n if (/[,\"']/.test(this.fontFamily)) {\n // Looks like the font family might be already escaped\n return this.fontFamily;\n }\n if (/[+ ]/.test(this.fontFamily)) {\n // Wrap a font family using + or <space> with quotes\n return `\"${this.fontFamily}\"`;\n }\n return this.fontFamily;\n }\n}\n// change this whenever `FontInfo` members are changed\nexport const SERIALIZED_FONT_INFO_VERSION = 1;\nexport class FontInfo extends BareFontInfo {\n /**\n * @internal\n */\n constructor(opts, isTrusted) {\n super(opts);\n this.version = SERIALIZED_FONT_INFO_VERSION;\n this.isTrusted = isTrusted;\n this.isMonospace = opts.isMonospace;\n this.typicalHalfwidthCharacterWidth = opts.typicalHalfwidthCharacterWidth;\n this.typicalFullwidthCharacterWidth = opts.typicalFullwidthCharacterWidth;\n this.canUseHalfwidthRightwardsArrow = opts.canUseHalfwidthRightwardsArrow;\n this.spaceWidth = opts.spaceWidth;\n this.middotWidth = opts.middotWidth;\n this.wsmiddotWidth = opts.wsmiddotWidth;\n this.maxDigitWidth = opts.maxDigitWidth;\n }\n /**\n * @internal\n */\n equals(other) {\n return (this.fontFamily === other.fontFamily\n && this.fontWeight === other.fontWeight\n && this.fontSize === other.fontSize\n && this.fontFeatureSettings === other.fontFeatureSettings\n && this.lineHeight === other.lineHeight\n && this.letterSpacing === other.letterSpacing\n && this.typicalHalfwidthCharacterWidth === other.typicalHalfwidthCharacterWidth\n && this.typicalFullwidthCharacterWidth === other.typicalFullwidthCharacterWidth\n && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n && this.spaceWidth === other.spaceWidth\n && this.middotWidth === other.middotWidth\n && this.wsmiddotWidth === other.wsmiddotWidth\n && this.maxDigitWidth === other.maxDigitWidth);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { CursorColumns } from './cursorCommon.js';\nexport class AtomicTabMoveOperations {\n /**\n * Get the visible column at the position. If we get to a non-whitespace character first\n * or past the end of string then return -1.\n *\n * **Note** `position` and the return value are 0-based.\n */\n static whitespaceVisibleColumn(lineContent, position, tabSize) {\n const lineLength = lineContent.length;\n let visibleColumn = 0;\n let prevTabStopPosition = -1;\n let prevTabStopVisibleColumn = -1;\n for (let i = 0; i < lineLength; i++) {\n if (i === position) {\n return [prevTabStopPosition, prevTabStopVisibleColumn, visibleColumn];\n }\n if (visibleColumn % tabSize === 0) {\n prevTabStopPosition = i;\n prevTabStopVisibleColumn = visibleColumn;\n }\n const chCode = lineContent.charCodeAt(i);\n switch (chCode) {\n case 32 /* Space */:\n visibleColumn += 1;\n break;\n case 9 /* Tab */:\n // Skip to the next multiple of tabSize.\n visibleColumn = CursorColumns.nextRenderTabStop(visibleColumn, tabSize);\n break;\n default:\n return [-1, -1, -1];\n }\n }\n if (position === lineLength) {\n return [prevTabStopPosition, prevTabStopVisibleColumn, visibleColumn];\n }\n return [-1, -1, -1];\n }\n /**\n * Return the position that should result from a move left, right or to the\n * nearest tab, if atomic tabs are enabled. Left and right are used for the\n * arrow key movements, nearest is used for mouse selection. It returns\n * -1 if atomic tabs are not relevant and you should fall back to normal\n * behaviour.\n *\n * **Note**: `position` and the return value are 0-based.\n */\n static atomicPosition(lineContent, position, tabSize, direction) {\n const lineLength = lineContent.length;\n // Get the 0-based visible column corresponding to the position, or return\n // -1 if it is not in the initial whitespace.\n const [prevTabStopPosition, prevTabStopVisibleColumn, visibleColumn] = AtomicTabMoveOperations.whitespaceVisibleColumn(lineContent, position, tabSize);\n if (visibleColumn === -1) {\n return -1;\n }\n // Is the output left or right of the current position. The case for nearest\n // where it is the same as the current position is handled in the switch.\n let left;\n switch (direction) {\n case 0 /* Left */:\n left = true;\n break;\n case 1 /* Right */:\n left = false;\n break;\n case 2 /* Nearest */:\n // The code below assumes the output position is either left or right\n // of the input position. If it is the same, return immediately.\n if (visibleColumn % tabSize === 0) {\n return position;\n }\n // Go to the nearest indentation.\n left = visibleColumn % tabSize <= (tabSize / 2);\n break;\n }\n // If going left, we can just use the info about the last tab stop position and\n // last tab stop visible column that we computed in the first walk over the whitespace.\n if (left) {\n if (prevTabStopPosition === -1) {\n return -1;\n }\n // If the direction is left, we need to keep scanning right to ensure\n // that targetVisibleColumn + tabSize is before non-whitespace.\n // This is so that when we press left at the end of a partial\n // indentation it only goes one character. For example ' foo' with\n // tabSize 4, should jump from position 6 to position 5, not 4.\n let currentVisibleColumn = prevTabStopVisibleColumn;\n for (let i = prevTabStopPosition; i < lineLength; ++i) {\n if (currentVisibleColumn === prevTabStopVisibleColumn + tabSize) {\n // It is a full indentation.\n return prevTabStopPosition;\n }\n const chCode = lineContent.charCodeAt(i);\n switch (chCode) {\n case 32 /* Space */:\n currentVisibleColumn += 1;\n break;\n case 9 /* Tab */:\n currentVisibleColumn = CursorColumns.nextRenderTabStop(currentVisibleColumn, tabSize);\n break;\n default:\n return -1;\n }\n }\n if (currentVisibleColumn === prevTabStopVisibleColumn + tabSize) {\n return prevTabStopPosition;\n }\n // It must have been a partial indentation.\n return -1;\n }\n // We are going right.\n const targetVisibleColumn = CursorColumns.nextRenderTabStop(visibleColumn, tabSize);\n // We can just continue from where whitespaceVisibleColumn got to.\n let currentVisibleColumn = visibleColumn;\n for (let i = position; i < lineLength; i++) {\n if (currentVisibleColumn === targetVisibleColumn) {\n return i;\n }\n const chCode = lineContent.charCodeAt(i);\n switch (chCode) {\n case 32 /* Space */:\n currentVisibleColumn += 1;\n break;\n case 9 /* Tab */:\n currentVisibleColumn = CursorColumns.nextRenderTabStop(currentVisibleColumn, tabSize);\n break;\n default:\n return -1;\n }\n }\n // This condition handles when the target column is at the end of the line.\n if (currentVisibleColumn === targetVisibleColumn) {\n return lineLength;\n }\n return -1;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { TextModel } from '../model/textModel.js';\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\nconst autoCloseAlways = () => true;\nconst autoCloseNever = () => false;\nconst autoCloseBeforeWhitespace = (chr) => (chr === ' ' || chr === '\\t');\nexport class CursorConfiguration {\n constructor(languageIdentifier, modelOptions, configuration) {\n this._languageIdentifier = languageIdentifier;\n const options = configuration.options;\n const layoutInfo = options.get(127 /* layoutInfo */);\n this.readOnly = options.get(77 /* readOnly */);\n this.tabSize = modelOptions.tabSize;\n this.indentSize = modelOptions.indentSize;\n this.insertSpaces = modelOptions.insertSpaces;\n this.stickyTabStops = options.get(101 /* stickyTabStops */);\n this.lineHeight = options.get(55 /* lineHeight */);\n this.pageSize = Math.max(1, Math.floor(layoutInfo.height / this.lineHeight) - 2);\n this.useTabStops = options.get(112 /* useTabStops */);\n this.wordSeparators = options.get(113 /* wordSeparators */);\n this.emptySelectionClipboard = options.get(30 /* emptySelectionClipboard */);\n this.copyWithSyntaxHighlighting = options.get(19 /* copyWithSyntaxHighlighting */);\n this.multiCursorMergeOverlapping = options.get(65 /* multiCursorMergeOverlapping */);\n this.multiCursorPaste = options.get(67 /* multiCursorPaste */);\n this.autoClosingBrackets = options.get(5 /* autoClosingBrackets */);\n this.autoClosingQuotes = options.get(8 /* autoClosingQuotes */);\n this.autoClosingDelete = options.get(6 /* autoClosingDelete */);\n this.autoClosingOvertype = options.get(7 /* autoClosingOvertype */);\n this.autoSurround = options.get(11 /* autoSurround */);\n this.autoIndent = options.get(9 /* autoIndent */);\n this.surroundingPairs = {};\n this._electricChars = null;\n this.shouldAutoCloseBefore = {\n quote: CursorConfiguration._getShouldAutoClose(languageIdentifier, this.autoClosingQuotes),\n bracket: CursorConfiguration._getShouldAutoClose(languageIdentifier, this.autoClosingBrackets)\n };\n this.autoClosingPairs = LanguageConfigurationRegistry.getAutoClosingPairs(languageIdentifier.id);\n let surroundingPairs = CursorConfiguration._getSurroundingPairs(languageIdentifier);\n if (surroundingPairs) {\n for (const pair of surroundingPairs) {\n this.surroundingPairs[pair.open] = pair.close;\n }\n }\n }\n static shouldRecreate(e) {\n return (e.hasChanged(127 /* layoutInfo */)\n || e.hasChanged(113 /* wordSeparators */)\n || e.hasChanged(30 /* emptySelectionClipboard */)\n || e.hasChanged(65 /* multiCursorMergeOverlapping */)\n || e.hasChanged(67 /* multiCursorPaste */)\n || e.hasChanged(5 /* autoClosingBrackets */)\n || e.hasChanged(8 /* autoClosingQuotes */)\n || e.hasChanged(6 /* autoClosingDelete */)\n || e.hasChanged(7 /* autoClosingOvertype */)\n || e.hasChanged(11 /* autoSurround */)\n || e.hasChanged(112 /* useTabStops */)\n || e.hasChanged(55 /* lineHeight */)\n || e.hasChanged(77 /* readOnly */));\n }\n get electricChars() {\n if (!this._electricChars) {\n this._electricChars = {};\n let electricChars = CursorConfiguration._getElectricCharacters(this._languageIdentifier);\n if (electricChars) {\n for (const char of electricChars) {\n this._electricChars[char] = true;\n }\n }\n }\n return this._electricChars;\n }\n normalizeIndentation(str) {\n return TextModel.normalizeIndentation(str, this.indentSize, this.insertSpaces);\n }\n static _getElectricCharacters(languageIdentifier) {\n try {\n return LanguageConfigurationRegistry.getElectricCharacters(languageIdentifier.id);\n }\n catch (e) {\n onUnexpectedError(e);\n return null;\n }\n }\n static _getShouldAutoClose(languageIdentifier, autoCloseConfig) {\n switch (autoCloseConfig) {\n case 'beforeWhitespace':\n return autoCloseBeforeWhitespace;\n case 'languageDefined':\n return CursorConfiguration._getLanguageDefinedShouldAutoClose(languageIdentifier);\n case 'always':\n return autoCloseAlways;\n case 'never':\n return autoCloseNever;\n }\n }\n static _getLanguageDefinedShouldAutoClose(languageIdentifier) {\n try {\n const autoCloseBeforeSet = LanguageConfigurationRegistry.getAutoCloseBeforeSet(languageIdentifier.id);\n return c => autoCloseBeforeSet.indexOf(c) !== -1;\n }\n catch (e) {\n onUnexpectedError(e);\n return autoCloseNever;\n }\n }\n static _getSurroundingPairs(languageIdentifier) {\n try {\n return LanguageConfigurationRegistry.getSurroundingPairs(languageIdentifier.id);\n }\n catch (e) {\n onUnexpectedError(e);\n return null;\n }\n }\n}\n/**\n * Represents the cursor state on either the model or on the view model.\n */\nexport class SingleCursorState {\n constructor(selectionStart, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns) {\n this.selectionStart = selectionStart;\n this.selectionStartLeftoverVisibleColumns = selectionStartLeftoverVisibleColumns;\n this.position = position;\n this.leftoverVisibleColumns = leftoverVisibleColumns;\n this.selection = SingleCursorState._computeSelection(this.selectionStart, this.position);\n }\n equals(other) {\n return (this.selectionStartLeftoverVisibleColumns === other.selectionStartLeftoverVisibleColumns\n && this.leftoverVisibleColumns === other.leftoverVisibleColumns\n && this.position.equals(other.position)\n && this.selectionStart.equalsRange(other.selectionStart));\n }\n hasSelection() {\n return (!this.selection.isEmpty() || !this.selectionStart.isEmpty());\n }\n move(inSelectionMode, lineNumber, column, leftoverVisibleColumns) {\n if (inSelectionMode) {\n // move just position\n return new SingleCursorState(this.selectionStart, this.selectionStartLeftoverVisibleColumns, new Position(lineNumber, column), leftoverVisibleColumns);\n }\n else {\n // move everything\n return new SingleCursorState(new Range(lineNumber, column, lineNumber, column), leftoverVisibleColumns, new Position(lineNumber, column), leftoverVisibleColumns);\n }\n }\n static _computeSelection(selectionStart, position) {\n let startLineNumber, startColumn, endLineNumber, endColumn;\n if (selectionStart.isEmpty()) {\n startLineNumber = selectionStart.startLineNumber;\n startColumn = selectionStart.startColumn;\n endLineNumber = position.lineNumber;\n endColumn = position.column;\n }\n else {\n if (position.isBeforeOrEqual(selectionStart.getStartPosition())) {\n startLineNumber = selectionStart.endLineNumber;\n startColumn = selectionStart.endColumn;\n endLineNumber = position.lineNumber;\n endColumn = position.column;\n }\n else {\n startLineNumber = selectionStart.startLineNumber;\n startColumn = selectionStart.startColumn;\n endLineNumber = position.lineNumber;\n endColumn = position.column;\n }\n }\n return new Selection(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n}\nexport class CursorContext {\n constructor(model, coordinatesConverter, cursorConfig) {\n this.model = model;\n this.coordinatesConverter = coordinatesConverter;\n this.cursorConfig = cursorConfig;\n }\n}\nexport class PartialModelCursorState {\n constructor(modelState) {\n this.modelState = modelState;\n this.viewState = null;\n }\n}\nexport class PartialViewCursorState {\n constructor(viewState) {\n this.modelState = null;\n this.viewState = viewState;\n }\n}\nexport class CursorState {\n constructor(modelState, viewState) {\n this.modelState = modelState;\n this.viewState = viewState;\n }\n static fromModelState(modelState) {\n return new PartialModelCursorState(modelState);\n }\n static fromViewState(viewState) {\n return new PartialViewCursorState(viewState);\n }\n static fromModelSelection(modelSelection) {\n const selectionStartLineNumber = modelSelection.selectionStartLineNumber;\n const selectionStartColumn = modelSelection.selectionStartColumn;\n const positionLineNumber = modelSelection.positionLineNumber;\n const positionColumn = modelSelection.positionColumn;\n const modelState = new SingleCursorState(new Range(selectionStartLineNumber, selectionStartColumn, selectionStartLineNumber, selectionStartColumn), 0, new Position(positionLineNumber, positionColumn), 0);\n return CursorState.fromModelState(modelState);\n }\n static fromModelSelections(modelSelections) {\n let states = [];\n for (let i = 0, len = modelSelections.length; i < len; i++) {\n states[i] = this.fromModelSelection(modelSelections[i]);\n }\n return states;\n }\n equals(other) {\n return (this.viewState.equals(other.viewState) && this.modelState.equals(other.modelState));\n }\n}\nexport class EditOperationResult {\n constructor(type, commands, opts) {\n this.type = type;\n this.commands = commands;\n this.shouldPushStackElementBefore = opts.shouldPushStackElementBefore;\n this.shouldPushStackElementAfter = opts.shouldPushStackElementAfter;\n }\n}\n/**\n * Common operations that work and make sense both on the model and on the view model.\n */\nexport class CursorColumns {\n static visibleColumnFromColumn(lineContent, column, tabSize) {\n const lineContentLength = lineContent.length;\n const endOffset = column - 1 < lineContentLength ? column - 1 : lineContentLength;\n let result = 0;\n let i = 0;\n while (i < endOffset) {\n const codePoint = strings.getNextCodePoint(lineContent, endOffset, i);\n i += (codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n if (codePoint === 9 /* Tab */) {\n result = CursorColumns.nextRenderTabStop(result, tabSize);\n }\n else {\n let graphemeBreakType = strings.getGraphemeBreakType(codePoint);\n while (i < endOffset) {\n const nextCodePoint = strings.getNextCodePoint(lineContent, endOffset, i);\n const nextGraphemeBreakType = strings.getGraphemeBreakType(nextCodePoint);\n if (strings.breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\n break;\n }\n i += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n graphemeBreakType = nextGraphemeBreakType;\n }\n if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) {\n result = result + 2;\n }\n else {\n result = result + 1;\n }\n }\n }\n return result;\n }\n static visibleColumnFromColumn2(config, model, position) {\n return this.visibleColumnFromColumn(model.getLineContent(position.lineNumber), position.column, config.tabSize);\n }\n static columnFromVisibleColumn(lineContent, visibleColumn, tabSize) {\n if (visibleColumn <= 0) {\n return 1;\n }\n const lineLength = lineContent.length;\n let beforeVisibleColumn = 0;\n let beforeColumn = 1;\n let i = 0;\n while (i < lineLength) {\n const codePoint = strings.getNextCodePoint(lineContent, lineLength, i);\n i += (codePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n let afterVisibleColumn;\n if (codePoint === 9 /* Tab */) {\n afterVisibleColumn = CursorColumns.nextRenderTabStop(beforeVisibleColumn, tabSize);\n }\n else {\n let graphemeBreakType = strings.getGraphemeBreakType(codePoint);\n while (i < lineLength) {\n const nextCodePoint = strings.getNextCodePoint(lineContent, lineLength, i);\n const nextGraphemeBreakType = strings.getGraphemeBreakType(nextCodePoint);\n if (strings.breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\n break;\n }\n i += (nextCodePoint >= 65536 /* UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n graphemeBreakType = nextGraphemeBreakType;\n }\n if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) {\n afterVisibleColumn = beforeVisibleColumn + 2;\n }\n else {\n afterVisibleColumn = beforeVisibleColumn + 1;\n }\n }\n const afterColumn = i + 1;\n if (afterVisibleColumn >= visibleColumn) {\n const beforeDelta = visibleColumn - beforeVisibleColumn;\n const afterDelta = afterVisibleColumn - visibleColumn;\n if (afterDelta < beforeDelta) {\n return afterColumn;\n }\n else {\n return beforeColumn;\n }\n }\n beforeVisibleColumn = afterVisibleColumn;\n beforeColumn = afterColumn;\n }\n // walked the entire string\n return lineLength + 1;\n }\n static columnFromVisibleColumn2(config, model, lineNumber, visibleColumn) {\n let result = this.columnFromVisibleColumn(model.getLineContent(lineNumber), visibleColumn, config.tabSize);\n let minColumn = model.getLineMinColumn(lineNumber);\n if (result < minColumn) {\n return minColumn;\n }\n let maxColumn = model.getLineMaxColumn(lineNumber);\n if (result > maxColumn) {\n return maxColumn;\n }\n return result;\n }\n /**\n * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)\n */\n static nextRenderTabStop(visibleColumn, tabSize) {\n return visibleColumn + tabSize - visibleColumn % tabSize;\n }\n /**\n * ATTENTION: This works with 0-based columns (as oposed to the regular 1-based columns)\n */\n static nextIndentTabStop(visibleColumn, indentSize) {\n return visibleColumn + indentSize - visibleColumn % indentSize;\n }\n /**\n * ATTENTION: This works with 0-based columns (as opposed to the regular 1-based columns)\n */\n static prevRenderTabStop(column, tabSize) {\n return Math.max(0, column - 1 - (column - 1) % tabSize);\n }\n /**\n * ATTENTION: This works with 0-based columns (as opposed to the regular 1-based columns)\n */\n static prevIndentTabStop(column, indentSize) {\n return Math.max(0, column - 1 - (column - 1) % indentSize);\n }\n}\nexport function isQuote(ch) {\n return (ch === '\\'' || ch === '\"' || ch === '`');\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { ReplaceCommand } from '../commands/replaceCommand.js';\nimport { CursorColumns, EditOperationResult, isQuote } from './cursorCommon.js';\nimport { MoveOperations } from './cursorMoveOperations.js';\nimport { Range } from '../core/range.js';\nexport class DeleteOperations {\n static deleteRight(prevEditOperationType, config, model, selections) {\n let commands = [];\n let shouldPushStackElementBefore = (prevEditOperationType !== 3 /* DeletingRight */);\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n let deleteSelection = selection;\n if (deleteSelection.isEmpty()) {\n let position = selection.getPosition();\n let rightOfPosition = MoveOperations.right(config, model, position.lineNumber, position.column);\n deleteSelection = new Range(rightOfPosition.lineNumber, rightOfPosition.column, position.lineNumber, position.column);\n }\n if (deleteSelection.isEmpty()) {\n // Probably at end of file => ignore\n commands[i] = null;\n continue;\n }\n if (deleteSelection.startLineNumber !== deleteSelection.endLineNumber) {\n shouldPushStackElementBefore = true;\n }\n commands[i] = new ReplaceCommand(deleteSelection, '');\n }\n return [shouldPushStackElementBefore, commands];\n }\n static isAutoClosingPairDelete(autoClosingDelete, autoClosingBrackets, autoClosingQuotes, autoClosingPairsOpen, model, selections, autoClosedCharacters) {\n if (autoClosingBrackets === 'never' && autoClosingQuotes === 'never') {\n return false;\n }\n if (autoClosingDelete === 'never') {\n return false;\n }\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n const position = selection.getPosition();\n if (!selection.isEmpty()) {\n return false;\n }\n const lineText = model.getLineContent(position.lineNumber);\n if (position.column < 2 || position.column >= lineText.length + 1) {\n return false;\n }\n const character = lineText.charAt(position.column - 2);\n const autoClosingPairCandidates = autoClosingPairsOpen.get(character);\n if (!autoClosingPairCandidates) {\n return false;\n }\n if (isQuote(character)) {\n if (autoClosingQuotes === 'never') {\n return false;\n }\n }\n else {\n if (autoClosingBrackets === 'never') {\n return false;\n }\n }\n const afterCharacter = lineText.charAt(position.column - 1);\n let foundAutoClosingPair = false;\n for (const autoClosingPairCandidate of autoClosingPairCandidates) {\n if (autoClosingPairCandidate.open === character && autoClosingPairCandidate.close === afterCharacter) {\n foundAutoClosingPair = true;\n }\n }\n if (!foundAutoClosingPair) {\n return false;\n }\n // Must delete the pair only if it was automatically inserted by the editor\n if (autoClosingDelete === 'auto') {\n let found = false;\n for (let j = 0, lenJ = autoClosedCharacters.length; j < lenJ; j++) {\n const autoClosedCharacter = autoClosedCharacters[j];\n if (position.lineNumber === autoClosedCharacter.startLineNumber && position.column === autoClosedCharacter.startColumn) {\n found = true;\n break;\n }\n }\n if (!found) {\n return false;\n }\n }\n }\n return true;\n }\n static _runAutoClosingPairDelete(config, model, selections) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n const position = selections[i].getPosition();\n const deleteSelection = new Range(position.lineNumber, position.column - 1, position.lineNumber, position.column + 1);\n commands[i] = new ReplaceCommand(deleteSelection, '');\n }\n return [true, commands];\n }\n static deleteLeft(prevEditOperationType, config, model, selections, autoClosedCharacters) {\n if (this.isAutoClosingPairDelete(config.autoClosingDelete, config.autoClosingBrackets, config.autoClosingQuotes, config.autoClosingPairs.autoClosingPairsOpenByEnd, model, selections, autoClosedCharacters)) {\n return this._runAutoClosingPairDelete(config, model, selections);\n }\n let commands = [];\n let shouldPushStackElementBefore = (prevEditOperationType !== 2 /* DeletingLeft */);\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n let deleteSelection = selection;\n if (deleteSelection.isEmpty()) {\n let position = selection.getPosition();\n if (config.useTabStops && position.column > 1) {\n let lineContent = model.getLineContent(position.lineNumber);\n let firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n let lastIndentationColumn = (firstNonWhitespaceIndex === -1\n ? /* entire string is whitespace */ lineContent.length + 1\n : firstNonWhitespaceIndex + 1);\n if (position.column <= lastIndentationColumn) {\n let fromVisibleColumn = CursorColumns.visibleColumnFromColumn2(config, model, position);\n let toVisibleColumn = CursorColumns.prevIndentTabStop(fromVisibleColumn, config.indentSize);\n let toColumn = CursorColumns.columnFromVisibleColumn2(config, model, position.lineNumber, toVisibleColumn);\n deleteSelection = new Range(position.lineNumber, toColumn, position.lineNumber, position.column);\n }\n else {\n deleteSelection = new Range(position.lineNumber, position.column - 1, position.lineNumber, position.column);\n }\n }\n else {\n let leftOfPosition = MoveOperations.left(config, model, position.lineNumber, position.column);\n deleteSelection = new Range(leftOfPosition.lineNumber, leftOfPosition.column, position.lineNumber, position.column);\n }\n }\n if (deleteSelection.isEmpty()) {\n // Probably at beginning of file => ignore\n commands[i] = null;\n continue;\n }\n if (deleteSelection.startLineNumber !== deleteSelection.endLineNumber) {\n shouldPushStackElementBefore = true;\n }\n commands[i] = new ReplaceCommand(deleteSelection, '');\n }\n return [shouldPushStackElementBefore, commands];\n }\n static cut(config, model, selections) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n if (selection.isEmpty()) {\n if (config.emptySelectionClipboard) {\n // This is a full line cut\n let position = selection.getPosition();\n let startLineNumber, startColumn, endLineNumber, endColumn;\n if (position.lineNumber < model.getLineCount()) {\n // Cutting a line in the middle of the model\n startLineNumber = position.lineNumber;\n startColumn = 1;\n endLineNumber = position.lineNumber + 1;\n endColumn = 1;\n }\n else if (position.lineNumber > 1) {\n // Cutting the last line & there are more than 1 lines in the model\n startLineNumber = position.lineNumber - 1;\n startColumn = model.getLineMaxColumn(position.lineNumber - 1);\n endLineNumber = position.lineNumber;\n endColumn = model.getLineMaxColumn(position.lineNumber);\n }\n else {\n // Cutting the single line that the model contains\n startLineNumber = position.lineNumber;\n startColumn = 1;\n endLineNumber = position.lineNumber;\n endColumn = model.getLineMaxColumn(position.lineNumber);\n }\n let deleteSelection = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n if (!deleteSelection.isEmpty()) {\n commands[i] = new ReplaceCommand(deleteSelection, '');\n }\n else {\n commands[i] = null;\n }\n }\n else {\n // Cannot cut empty selection\n commands[i] = null;\n }\n }\n else {\n commands[i] = new ReplaceCommand(selection, '');\n }\n }\n return new EditOperationResult(0 /* Other */, commands, {\n shouldPushStackElementBefore: true,\n shouldPushStackElementAfter: true\n });\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as types from '../../../base/common/types.js';\nimport { CursorState, SingleCursorState } from './cursorCommon.js';\nimport { MoveOperations } from './cursorMoveOperations.js';\nimport { WordOperations } from './cursorWordOperations.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nexport class CursorMoveCommands {\n static addCursorDown(viewModel, cursors, useLogicalLine) {\n let result = [], resultLen = 0;\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[resultLen++] = new CursorState(cursor.modelState, cursor.viewState);\n if (useLogicalLine) {\n result[resultLen++] = CursorState.fromModelState(MoveOperations.translateDown(viewModel.cursorConfig, viewModel.model, cursor.modelState));\n }\n else {\n result[resultLen++] = CursorState.fromViewState(MoveOperations.translateDown(viewModel.cursorConfig, viewModel, cursor.viewState));\n }\n }\n return result;\n }\n static addCursorUp(viewModel, cursors, useLogicalLine) {\n let result = [], resultLen = 0;\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[resultLen++] = new CursorState(cursor.modelState, cursor.viewState);\n if (useLogicalLine) {\n result[resultLen++] = CursorState.fromModelState(MoveOperations.translateUp(viewModel.cursorConfig, viewModel.model, cursor.modelState));\n }\n else {\n result[resultLen++] = CursorState.fromViewState(MoveOperations.translateUp(viewModel.cursorConfig, viewModel, cursor.viewState));\n }\n }\n return result;\n }\n static moveToBeginningOfLine(viewModel, cursors, inSelectionMode) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[i] = this._moveToLineStart(viewModel, cursor, inSelectionMode);\n }\n return result;\n }\n static _moveToLineStart(viewModel, cursor, inSelectionMode) {\n const currentViewStateColumn = cursor.viewState.position.column;\n const currentModelStateColumn = cursor.modelState.position.column;\n const isFirstLineOfWrappedLine = currentViewStateColumn === currentModelStateColumn;\n const currentViewStatelineNumber = cursor.viewState.position.lineNumber;\n const firstNonBlankColumn = viewModel.getLineFirstNonWhitespaceColumn(currentViewStatelineNumber);\n const isBeginningOfViewLine = currentViewStateColumn === firstNonBlankColumn;\n if (!isFirstLineOfWrappedLine && !isBeginningOfViewLine) {\n return this._moveToLineStartByView(viewModel, cursor, inSelectionMode);\n }\n else {\n return this._moveToLineStartByModel(viewModel, cursor, inSelectionMode);\n }\n }\n static _moveToLineStartByView(viewModel, cursor, inSelectionMode) {\n return CursorState.fromViewState(MoveOperations.moveToBeginningOfLine(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode));\n }\n static _moveToLineStartByModel(viewModel, cursor, inSelectionMode) {\n return CursorState.fromModelState(MoveOperations.moveToBeginningOfLine(viewModel.cursorConfig, viewModel.model, cursor.modelState, inSelectionMode));\n }\n static moveToEndOfLine(viewModel, cursors, inSelectionMode, sticky) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[i] = this._moveToLineEnd(viewModel, cursor, inSelectionMode, sticky);\n }\n return result;\n }\n static _moveToLineEnd(viewModel, cursor, inSelectionMode, sticky) {\n const viewStatePosition = cursor.viewState.position;\n const viewModelMaxColumn = viewModel.getLineMaxColumn(viewStatePosition.lineNumber);\n const isEndOfViewLine = viewStatePosition.column === viewModelMaxColumn;\n const modelStatePosition = cursor.modelState.position;\n const modelMaxColumn = viewModel.model.getLineMaxColumn(modelStatePosition.lineNumber);\n const isEndLineOfWrappedLine = viewModelMaxColumn - viewStatePosition.column === modelMaxColumn - modelStatePosition.column;\n if (isEndOfViewLine || isEndLineOfWrappedLine) {\n return this._moveToLineEndByModel(viewModel, cursor, inSelectionMode, sticky);\n }\n else {\n return this._moveToLineEndByView(viewModel, cursor, inSelectionMode, sticky);\n }\n }\n static _moveToLineEndByView(viewModel, cursor, inSelectionMode, sticky) {\n return CursorState.fromViewState(MoveOperations.moveToEndOfLine(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode, sticky));\n }\n static _moveToLineEndByModel(viewModel, cursor, inSelectionMode, sticky) {\n return CursorState.fromModelState(MoveOperations.moveToEndOfLine(viewModel.cursorConfig, viewModel.model, cursor.modelState, inSelectionMode, sticky));\n }\n static expandLineSelection(viewModel, cursors) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const startLineNumber = cursor.modelState.selection.startLineNumber;\n const lineCount = viewModel.model.getLineCount();\n let endLineNumber = cursor.modelState.selection.endLineNumber;\n let endColumn;\n if (endLineNumber === lineCount) {\n endColumn = viewModel.model.getLineMaxColumn(lineCount);\n }\n else {\n endLineNumber++;\n endColumn = 1;\n }\n result[i] = CursorState.fromModelState(new SingleCursorState(new Range(startLineNumber, 1, startLineNumber, 1), 0, new Position(endLineNumber, endColumn), 0));\n }\n return result;\n }\n static moveToBeginningOfBuffer(viewModel, cursors, inSelectionMode) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[i] = CursorState.fromModelState(MoveOperations.moveToBeginningOfBuffer(viewModel.cursorConfig, viewModel.model, cursor.modelState, inSelectionMode));\n }\n return result;\n }\n static moveToEndOfBuffer(viewModel, cursors, inSelectionMode) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[i] = CursorState.fromModelState(MoveOperations.moveToEndOfBuffer(viewModel.cursorConfig, viewModel.model, cursor.modelState, inSelectionMode));\n }\n return result;\n }\n static selectAll(viewModel, cursor) {\n const lineCount = viewModel.model.getLineCount();\n const maxColumn = viewModel.model.getLineMaxColumn(lineCount);\n return CursorState.fromModelState(new SingleCursorState(new Range(1, 1, 1, 1), 0, new Position(lineCount, maxColumn), 0));\n }\n static line(viewModel, cursor, inSelectionMode, _position, _viewPosition) {\n const position = viewModel.model.validatePosition(_position);\n const viewPosition = (_viewPosition\n ? viewModel.coordinatesConverter.validateViewPosition(new Position(_viewPosition.lineNumber, _viewPosition.column), position)\n : viewModel.coordinatesConverter.convertModelPositionToViewPosition(position));\n if (!inSelectionMode || !cursor.modelState.hasSelection()) {\n // Entering line selection for the first time\n const lineCount = viewModel.model.getLineCount();\n let selectToLineNumber = position.lineNumber + 1;\n let selectToColumn = 1;\n if (selectToLineNumber > lineCount) {\n selectToLineNumber = lineCount;\n selectToColumn = viewModel.model.getLineMaxColumn(selectToLineNumber);\n }\n return CursorState.fromModelState(new SingleCursorState(new Range(position.lineNumber, 1, selectToLineNumber, selectToColumn), 0, new Position(selectToLineNumber, selectToColumn), 0));\n }\n // Continuing line selection\n const enteringLineNumber = cursor.modelState.selectionStart.getStartPosition().lineNumber;\n if (position.lineNumber < enteringLineNumber) {\n return CursorState.fromViewState(cursor.viewState.move(cursor.modelState.hasSelection(), viewPosition.lineNumber, 1, 0));\n }\n else if (position.lineNumber > enteringLineNumber) {\n const lineCount = viewModel.getLineCount();\n let selectToViewLineNumber = viewPosition.lineNumber + 1;\n let selectToViewColumn = 1;\n if (selectToViewLineNumber > lineCount) {\n selectToViewLineNumber = lineCount;\n selectToViewColumn = viewModel.getLineMaxColumn(selectToViewLineNumber);\n }\n return CursorState.fromViewState(cursor.viewState.move(cursor.modelState.hasSelection(), selectToViewLineNumber, selectToViewColumn, 0));\n }\n else {\n const endPositionOfSelectionStart = cursor.modelState.selectionStart.getEndPosition();\n return CursorState.fromModelState(cursor.modelState.move(cursor.modelState.hasSelection(), endPositionOfSelectionStart.lineNumber, endPositionOfSelectionStart.column, 0));\n }\n }\n static word(viewModel, cursor, inSelectionMode, _position) {\n const position = viewModel.model.validatePosition(_position);\n return CursorState.fromModelState(WordOperations.word(viewModel.cursorConfig, viewModel.model, cursor.modelState, inSelectionMode, position));\n }\n static cancelSelection(viewModel, cursor) {\n if (!cursor.modelState.hasSelection()) {\n return new CursorState(cursor.modelState, cursor.viewState);\n }\n const lineNumber = cursor.viewState.position.lineNumber;\n const column = cursor.viewState.position.column;\n return CursorState.fromViewState(new SingleCursorState(new Range(lineNumber, column, lineNumber, column), 0, new Position(lineNumber, column), 0));\n }\n static moveTo(viewModel, cursor, inSelectionMode, _position, _viewPosition) {\n const position = viewModel.model.validatePosition(_position);\n const viewPosition = (_viewPosition\n ? viewModel.coordinatesConverter.validateViewPosition(new Position(_viewPosition.lineNumber, _viewPosition.column), position)\n : viewModel.coordinatesConverter.convertModelPositionToViewPosition(position));\n return CursorState.fromViewState(cursor.viewState.move(inSelectionMode, viewPosition.lineNumber, viewPosition.column, 0));\n }\n static simpleMove(viewModel, cursors, direction, inSelectionMode, value, unit) {\n switch (direction) {\n case 0 /* Left */: {\n if (unit === 4 /* HalfLine */) {\n // Move left by half the current line length\n return this._moveHalfLineLeft(viewModel, cursors, inSelectionMode);\n }\n else {\n // Move left by `moveParams.value` columns\n return this._moveLeft(viewModel, cursors, inSelectionMode, value);\n }\n }\n case 1 /* Right */: {\n if (unit === 4 /* HalfLine */) {\n // Move right by half the current line length\n return this._moveHalfLineRight(viewModel, cursors, inSelectionMode);\n }\n else {\n // Move right by `moveParams.value` columns\n return this._moveRight(viewModel, cursors, inSelectionMode, value);\n }\n }\n case 2 /* Up */: {\n if (unit === 2 /* WrappedLine */) {\n // Move up by view lines\n return this._moveUpByViewLines(viewModel, cursors, inSelectionMode, value);\n }\n else {\n // Move up by model lines\n return this._moveUpByModelLines(viewModel, cursors, inSelectionMode, value);\n }\n }\n case 3 /* Down */: {\n if (unit === 2 /* WrappedLine */) {\n // Move down by view lines\n return this._moveDownByViewLines(viewModel, cursors, inSelectionMode, value);\n }\n else {\n // Move down by model lines\n return this._moveDownByModelLines(viewModel, cursors, inSelectionMode, value);\n }\n }\n case 4 /* PrevBlankLine */: {\n if (unit === 2 /* WrappedLine */) {\n return cursors.map(cursor => CursorState.fromViewState(MoveOperations.moveToPrevBlankLine(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode)));\n }\n else {\n return cursors.map(cursor => CursorState.fromModelState(MoveOperations.moveToPrevBlankLine(viewModel.cursorConfig, viewModel.model, cursor.modelState, inSelectionMode)));\n }\n }\n case 5 /* NextBlankLine */: {\n if (unit === 2 /* WrappedLine */) {\n return cursors.map(cursor => CursorState.fromViewState(MoveOperations.moveToNextBlankLine(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode)));\n }\n else {\n return cursors.map(cursor => CursorState.fromModelState(MoveOperations.moveToNextBlankLine(viewModel.cursorConfig, viewModel.model, cursor.modelState, inSelectionMode)));\n }\n }\n case 6 /* WrappedLineStart */: {\n // Move to the beginning of the current view line\n return this._moveToViewMinColumn(viewModel, cursors, inSelectionMode);\n }\n case 7 /* WrappedLineFirstNonWhitespaceCharacter */: {\n // Move to the first non-whitespace column of the current view line\n return this._moveToViewFirstNonWhitespaceColumn(viewModel, cursors, inSelectionMode);\n }\n case 8 /* WrappedLineColumnCenter */: {\n // Move to the \"center\" of the current view line\n return this._moveToViewCenterColumn(viewModel, cursors, inSelectionMode);\n }\n case 9 /* WrappedLineEnd */: {\n // Move to the end of the current view line\n return this._moveToViewMaxColumn(viewModel, cursors, inSelectionMode);\n }\n case 10 /* WrappedLineLastNonWhitespaceCharacter */: {\n // Move to the last non-whitespace column of the current view line\n return this._moveToViewLastNonWhitespaceColumn(viewModel, cursors, inSelectionMode);\n }\n default:\n return null;\n }\n }\n static viewportMove(viewModel, cursors, direction, inSelectionMode, value) {\n const visibleViewRange = viewModel.getCompletelyVisibleViewRange();\n const visibleModelRange = viewModel.coordinatesConverter.convertViewRangeToModelRange(visibleViewRange);\n switch (direction) {\n case 11 /* ViewPortTop */: {\n // Move to the nth line start in the viewport (from the top)\n const modelLineNumber = this._firstLineNumberInRange(viewModel.model, visibleModelRange, value);\n const modelColumn = viewModel.model.getLineFirstNonWhitespaceColumn(modelLineNumber);\n return [this._moveToModelPosition(viewModel, cursors[0], inSelectionMode, modelLineNumber, modelColumn)];\n }\n case 13 /* ViewPortBottom */: {\n // Move to the nth line start in the viewport (from the bottom)\n const modelLineNumber = this._lastLineNumberInRange(viewModel.model, visibleModelRange, value);\n const modelColumn = viewModel.model.getLineFirstNonWhitespaceColumn(modelLineNumber);\n return [this._moveToModelPosition(viewModel, cursors[0], inSelectionMode, modelLineNumber, modelColumn)];\n }\n case 12 /* ViewPortCenter */: {\n // Move to the line start in the viewport center\n const modelLineNumber = Math.round((visibleModelRange.startLineNumber + visibleModelRange.endLineNumber) / 2);\n const modelColumn = viewModel.model.getLineFirstNonWhitespaceColumn(modelLineNumber);\n return [this._moveToModelPosition(viewModel, cursors[0], inSelectionMode, modelLineNumber, modelColumn)];\n }\n case 14 /* ViewPortIfOutside */: {\n // Move to a position inside the viewport\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[i] = this.findPositionInViewportIfOutside(viewModel, cursor, visibleViewRange, inSelectionMode);\n }\n return result;\n }\n default:\n return null;\n }\n }\n static findPositionInViewportIfOutside(viewModel, cursor, visibleViewRange, inSelectionMode) {\n let viewLineNumber = cursor.viewState.position.lineNumber;\n if (visibleViewRange.startLineNumber <= viewLineNumber && viewLineNumber <= visibleViewRange.endLineNumber - 1) {\n // Nothing to do, cursor is in viewport\n return new CursorState(cursor.modelState, cursor.viewState);\n }\n else {\n if (viewLineNumber > visibleViewRange.endLineNumber - 1) {\n viewLineNumber = visibleViewRange.endLineNumber - 1;\n }\n if (viewLineNumber < visibleViewRange.startLineNumber) {\n viewLineNumber = visibleViewRange.startLineNumber;\n }\n const viewColumn = viewModel.getLineFirstNonWhitespaceColumn(viewLineNumber);\n return this._moveToViewPosition(viewModel, cursor, inSelectionMode, viewLineNumber, viewColumn);\n }\n }\n /**\n * Find the nth line start included in the range (from the start).\n */\n static _firstLineNumberInRange(model, range, count) {\n let startLineNumber = range.startLineNumber;\n if (range.startColumn !== model.getLineMinColumn(startLineNumber)) {\n // Move on to the second line if the first line start is not included in the range\n startLineNumber++;\n }\n return Math.min(range.endLineNumber, startLineNumber + count - 1);\n }\n /**\n * Find the nth line start included in the range (from the end).\n */\n static _lastLineNumberInRange(model, range, count) {\n let startLineNumber = range.startLineNumber;\n if (range.startColumn !== model.getLineMinColumn(startLineNumber)) {\n // Move on to the second line if the first line start is not included in the range\n startLineNumber++;\n }\n return Math.max(startLineNumber, range.endLineNumber - count + 1);\n }\n static _moveLeft(viewModel, cursors, inSelectionMode, noOfColumns) {\n const hasMultipleCursors = (cursors.length > 1);\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const skipWrappingPointStop = hasMultipleCursors || !cursor.viewState.hasSelection();\n let newViewState = MoveOperations.moveLeft(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode, noOfColumns);\n if (skipWrappingPointStop\n && noOfColumns === 1\n && cursor.viewState.position.column === viewModel.getLineMinColumn(cursor.viewState.position.lineNumber)\n && newViewState.position.lineNumber !== cursor.viewState.position.lineNumber) {\n // moved over to the previous view line\n const newViewModelPosition = viewModel.coordinatesConverter.convertViewPositionToModelPosition(newViewState.position);\n if (newViewModelPosition.lineNumber === cursor.modelState.position.lineNumber) {\n // stayed on the same model line => pass wrapping point where 2 view positions map to a single model position\n newViewState = MoveOperations.moveLeft(viewModel.cursorConfig, viewModel, newViewState, inSelectionMode, 1);\n }\n }\n result[i] = CursorState.fromViewState(newViewState);\n }\n return result;\n }\n static _moveHalfLineLeft(viewModel, cursors, inSelectionMode) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const viewLineNumber = cursor.viewState.position.lineNumber;\n const halfLine = Math.round(viewModel.getLineContent(viewLineNumber).length / 2);\n result[i] = CursorState.fromViewState(MoveOperations.moveLeft(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode, halfLine));\n }\n return result;\n }\n static _moveRight(viewModel, cursors, inSelectionMode, noOfColumns) {\n const hasMultipleCursors = (cursors.length > 1);\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const skipWrappingPointStop = hasMultipleCursors || !cursor.viewState.hasSelection();\n let newViewState = MoveOperations.moveRight(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode, noOfColumns);\n if (skipWrappingPointStop\n && noOfColumns === 1\n && cursor.viewState.position.column === viewModel.getLineMaxColumn(cursor.viewState.position.lineNumber)\n && newViewState.position.lineNumber !== cursor.viewState.position.lineNumber) {\n // moved over to the next view line\n const newViewModelPosition = viewModel.coordinatesConverter.convertViewPositionToModelPosition(newViewState.position);\n if (newViewModelPosition.lineNumber === cursor.modelState.position.lineNumber) {\n // stayed on the same model line => pass wrapping point where 2 view positions map to a single model position\n newViewState = MoveOperations.moveRight(viewModel.cursorConfig, viewModel, newViewState, inSelectionMode, 1);\n }\n }\n result[i] = CursorState.fromViewState(newViewState);\n }\n return result;\n }\n static _moveHalfLineRight(viewModel, cursors, inSelectionMode) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const viewLineNumber = cursor.viewState.position.lineNumber;\n const halfLine = Math.round(viewModel.getLineContent(viewLineNumber).length / 2);\n result[i] = CursorState.fromViewState(MoveOperations.moveRight(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode, halfLine));\n }\n return result;\n }\n static _moveDownByViewLines(viewModel, cursors, inSelectionMode, linesCount) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[i] = CursorState.fromViewState(MoveOperations.moveDown(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode, linesCount));\n }\n return result;\n }\n static _moveDownByModelLines(viewModel, cursors, inSelectionMode, linesCount) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[i] = CursorState.fromModelState(MoveOperations.moveDown(viewModel.cursorConfig, viewModel.model, cursor.modelState, inSelectionMode, linesCount));\n }\n return result;\n }\n static _moveUpByViewLines(viewModel, cursors, inSelectionMode, linesCount) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[i] = CursorState.fromViewState(MoveOperations.moveUp(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode, linesCount));\n }\n return result;\n }\n static _moveUpByModelLines(viewModel, cursors, inSelectionMode, linesCount) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n result[i] = CursorState.fromModelState(MoveOperations.moveUp(viewModel.cursorConfig, viewModel.model, cursor.modelState, inSelectionMode, linesCount));\n }\n return result;\n }\n static _moveToViewPosition(viewModel, cursor, inSelectionMode, toViewLineNumber, toViewColumn) {\n return CursorState.fromViewState(cursor.viewState.move(inSelectionMode, toViewLineNumber, toViewColumn, 0));\n }\n static _moveToModelPosition(viewModel, cursor, inSelectionMode, toModelLineNumber, toModelColumn) {\n return CursorState.fromModelState(cursor.modelState.move(inSelectionMode, toModelLineNumber, toModelColumn, 0));\n }\n static _moveToViewMinColumn(viewModel, cursors, inSelectionMode) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const viewLineNumber = cursor.viewState.position.lineNumber;\n const viewColumn = viewModel.getLineMinColumn(viewLineNumber);\n result[i] = this._moveToViewPosition(viewModel, cursor, inSelectionMode, viewLineNumber, viewColumn);\n }\n return result;\n }\n static _moveToViewFirstNonWhitespaceColumn(viewModel, cursors, inSelectionMode) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const viewLineNumber = cursor.viewState.position.lineNumber;\n const viewColumn = viewModel.getLineFirstNonWhitespaceColumn(viewLineNumber);\n result[i] = this._moveToViewPosition(viewModel, cursor, inSelectionMode, viewLineNumber, viewColumn);\n }\n return result;\n }\n static _moveToViewCenterColumn(viewModel, cursors, inSelectionMode) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const viewLineNumber = cursor.viewState.position.lineNumber;\n const viewColumn = Math.round((viewModel.getLineMaxColumn(viewLineNumber) + viewModel.getLineMinColumn(viewLineNumber)) / 2);\n result[i] = this._moveToViewPosition(viewModel, cursor, inSelectionMode, viewLineNumber, viewColumn);\n }\n return result;\n }\n static _moveToViewMaxColumn(viewModel, cursors, inSelectionMode) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const viewLineNumber = cursor.viewState.position.lineNumber;\n const viewColumn = viewModel.getLineMaxColumn(viewLineNumber);\n result[i] = this._moveToViewPosition(viewModel, cursor, inSelectionMode, viewLineNumber, viewColumn);\n }\n return result;\n }\n static _moveToViewLastNonWhitespaceColumn(viewModel, cursors, inSelectionMode) {\n let result = [];\n for (let i = 0, len = cursors.length; i < len; i++) {\n const cursor = cursors[i];\n const viewLineNumber = cursor.viewState.position.lineNumber;\n const viewColumn = viewModel.getLineLastNonWhitespaceColumn(viewLineNumber);\n result[i] = this._moveToViewPosition(viewModel, cursor, inSelectionMode, viewLineNumber, viewColumn);\n }\n return result;\n }\n}\nexport var CursorMove;\n(function (CursorMove) {\n const isCursorMoveArgs = function (arg) {\n if (!types.isObject(arg)) {\n return false;\n }\n let cursorMoveArg = arg;\n if (!types.isString(cursorMoveArg.to)) {\n return false;\n }\n if (!types.isUndefined(cursorMoveArg.select) && !types.isBoolean(cursorMoveArg.select)) {\n return false;\n }\n if (!types.isUndefined(cursorMoveArg.by) && !types.isString(cursorMoveArg.by)) {\n return false;\n }\n if (!types.isUndefined(cursorMoveArg.value) && !types.isNumber(cursorMoveArg.value)) {\n return false;\n }\n return true;\n };\n CursorMove.description = {\n description: 'Move cursor to a logical position in the view',\n args: [\n {\n name: 'Cursor move argument object',\n description: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t* 'to': A mandatory logical position value providing where to move the cursor.\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t\t'left', 'right', 'up', 'down', 'prevBlankLine', 'nextBlankLine',\n\t\t\t\t\t\t'wrappedLineStart', 'wrappedLineEnd', 'wrappedLineColumnCenter'\n\t\t\t\t\t\t'wrappedLineFirstNonWhitespaceCharacter', 'wrappedLineLastNonWhitespaceCharacter'\n\t\t\t\t\t\t'viewPortTop', 'viewPortCenter', 'viewPortBottom', 'viewPortIfOutside'\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t* 'by': Unit to move. Default is computed based on 'to' value.\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t\t'line', 'wrappedLine', 'character', 'halfLine'\n\t\t\t\t\t\t\\`\\`\\`\n\t\t\t\t\t* 'value': Number of units to move. Default is '1'.\n\t\t\t\t\t* 'select': If 'true' makes the selection. Default is 'false'.\n\t\t\t\t`,\n constraint: isCursorMoveArgs,\n schema: {\n 'type': 'object',\n 'required': ['to'],\n 'properties': {\n 'to': {\n 'type': 'string',\n 'enum': ['left', 'right', 'up', 'down', 'prevBlankLine', 'nextBlankLine', 'wrappedLineStart', 'wrappedLineEnd', 'wrappedLineColumnCenter', 'wrappedLineFirstNonWhitespaceCharacter', 'wrappedLineLastNonWhitespaceCharacter', 'viewPortTop', 'viewPortCenter', 'viewPortBottom', 'viewPortIfOutside']\n },\n 'by': {\n 'type': 'string',\n 'enum': ['line', 'wrappedLine', 'character', 'halfLine']\n },\n 'value': {\n 'type': 'number',\n 'default': 1\n },\n 'select': {\n 'type': 'boolean',\n 'default': false\n }\n }\n }\n }\n ]\n };\n /**\n * Positions in the view for cursor move command.\n */\n CursorMove.RawDirection = {\n Left: 'left',\n Right: 'right',\n Up: 'up',\n Down: 'down',\n PrevBlankLine: 'prevBlankLine',\n NextBlankLine: 'nextBlankLine',\n WrappedLineStart: 'wrappedLineStart',\n WrappedLineFirstNonWhitespaceCharacter: 'wrappedLineFirstNonWhitespaceCharacter',\n WrappedLineColumnCenter: 'wrappedLineColumnCenter',\n WrappedLineEnd: 'wrappedLineEnd',\n WrappedLineLastNonWhitespaceCharacter: 'wrappedLineLastNonWhitespaceCharacter',\n ViewPortTop: 'viewPortTop',\n ViewPortCenter: 'viewPortCenter',\n ViewPortBottom: 'viewPortBottom',\n ViewPortIfOutside: 'viewPortIfOutside'\n };\n /**\n * Units for Cursor move 'by' argument\n */\n CursorMove.RawUnit = {\n Line: 'line',\n WrappedLine: 'wrappedLine',\n Character: 'character',\n HalfLine: 'halfLine'\n };\n function parse(args) {\n if (!args.to) {\n // illegal arguments\n return null;\n }\n let direction;\n switch (args.to) {\n case CursorMove.RawDirection.Left:\n direction = 0 /* Left */;\n break;\n case CursorMove.RawDirection.Right:\n direction = 1 /* Right */;\n break;\n case CursorMove.RawDirection.Up:\n direction = 2 /* Up */;\n break;\n case CursorMove.RawDirection.Down:\n direction = 3 /* Down */;\n break;\n case CursorMove.RawDirection.PrevBlankLine:\n direction = 4 /* PrevBlankLine */;\n break;\n case CursorMove.RawDirection.NextBlankLine:\n direction = 5 /* NextBlankLine */;\n break;\n case CursorMove.RawDirection.WrappedLineStart:\n direction = 6 /* WrappedLineStart */;\n break;\n case CursorMove.RawDirection.WrappedLineFirstNonWhitespaceCharacter:\n direction = 7 /* WrappedLineFirstNonWhitespaceCharacter */;\n break;\n case CursorMove.RawDirection.WrappedLineColumnCenter:\n direction = 8 /* WrappedLineColumnCenter */;\n break;\n case CursorMove.RawDirection.WrappedLineEnd:\n direction = 9 /* WrappedLineEnd */;\n break;\n case CursorMove.RawDirection.WrappedLineLastNonWhitespaceCharacter:\n direction = 10 /* WrappedLineLastNonWhitespaceCharacter */;\n break;\n case CursorMove.RawDirection.ViewPortTop:\n direction = 11 /* ViewPortTop */;\n break;\n case CursorMove.RawDirection.ViewPortBottom:\n direction = 13 /* ViewPortBottom */;\n break;\n case CursorMove.RawDirection.ViewPortCenter:\n direction = 12 /* ViewPortCenter */;\n break;\n case CursorMove.RawDirection.ViewPortIfOutside:\n direction = 14 /* ViewPortIfOutside */;\n break;\n default:\n // illegal arguments\n return null;\n }\n let unit = 0 /* None */;\n switch (args.by) {\n case CursorMove.RawUnit.Line:\n unit = 1 /* Line */;\n break;\n case CursorMove.RawUnit.WrappedLine:\n unit = 2 /* WrappedLine */;\n break;\n case CursorMove.RawUnit.Character:\n unit = 3 /* Character */;\n break;\n case CursorMove.RawUnit.HalfLine:\n unit = 4 /* HalfLine */;\n break;\n }\n return {\n direction: direction,\n unit: unit,\n select: (!!args.select),\n value: (args.value || 1)\n };\n }\n CursorMove.parse = parse;\n})(CursorMove || (CursorMove = {}));\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 *--------------------------------------------------------------------------------------------*/\nimport { CursorColumns, SingleCursorState } from './cursorCommon.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { AtomicTabMoveOperations } from './cursorAtomicMoveOperations.js';\nexport class CursorPosition {\n constructor(lineNumber, column, leftoverVisibleColumns) {\n this.lineNumber = lineNumber;\n this.column = column;\n this.leftoverVisibleColumns = leftoverVisibleColumns;\n }\n}\nexport class MoveOperations {\n static leftPosition(model, lineNumber, column) {\n if (column > model.getLineMinColumn(lineNumber)) {\n column = column - strings.prevCharLength(model.getLineContent(lineNumber), column - 1);\n }\n else if (lineNumber > 1) {\n lineNumber = lineNumber - 1;\n column = model.getLineMaxColumn(lineNumber);\n }\n return new Position(lineNumber, column);\n }\n static leftPositionAtomicSoftTabs(model, lineNumber, column, tabSize) {\n const minColumn = model.getLineMinColumn(lineNumber);\n const lineContent = model.getLineContent(lineNumber);\n const newPosition = AtomicTabMoveOperations.atomicPosition(lineContent, column - 1, tabSize, 0 /* Left */);\n if (newPosition === -1 || newPosition + 1 < minColumn) {\n return this.leftPosition(model, lineNumber, column);\n }\n return new Position(lineNumber, newPosition + 1);\n }\n static left(config, model, lineNumber, column) {\n const pos = config.stickyTabStops\n ? MoveOperations.leftPositionAtomicSoftTabs(model, lineNumber, column, config.tabSize)\n : MoveOperations.leftPosition(model, lineNumber, column);\n return new CursorPosition(pos.lineNumber, pos.column, 0);\n }\n static moveLeft(config, model, cursor, inSelectionMode, noOfColumns) {\n let lineNumber, column;\n if (cursor.hasSelection() && !inSelectionMode) {\n // If we are in selection mode, move left without selection cancels selection and puts cursor at the beginning of the selection\n lineNumber = cursor.selection.startLineNumber;\n column = cursor.selection.startColumn;\n }\n else {\n let r = MoveOperations.left(config, model, cursor.position.lineNumber, cursor.position.column - (noOfColumns - 1));\n lineNumber = r.lineNumber;\n column = r.column;\n }\n return cursor.move(inSelectionMode, lineNumber, column, 0);\n }\n static rightPosition(model, lineNumber, column) {\n if (column < model.getLineMaxColumn(lineNumber)) {\n column = column + strings.nextCharLength(model.getLineContent(lineNumber), column - 1);\n }\n else if (lineNumber < model.getLineCount()) {\n lineNumber = lineNumber + 1;\n column = model.getLineMinColumn(lineNumber);\n }\n return new Position(lineNumber, column);\n }\n static rightPositionAtomicSoftTabs(model, lineNumber, column, tabSize, indentSize) {\n const lineContent = model.getLineContent(lineNumber);\n const newPosition = AtomicTabMoveOperations.atomicPosition(lineContent, column - 1, tabSize, 1 /* Right */);\n if (newPosition === -1) {\n return this.rightPosition(model, lineNumber, column);\n }\n return new Position(lineNumber, newPosition + 1);\n }\n static right(config, model, lineNumber, column) {\n const pos = config.stickyTabStops\n ? MoveOperations.rightPositionAtomicSoftTabs(model, lineNumber, column, config.tabSize, config.indentSize)\n : MoveOperations.rightPosition(model, lineNumber, column);\n return new CursorPosition(pos.lineNumber, pos.column, 0);\n }\n static moveRight(config, model, cursor, inSelectionMode, noOfColumns) {\n let lineNumber, column;\n if (cursor.hasSelection() && !inSelectionMode) {\n // If we are in selection mode, move right without selection cancels selection and puts cursor at the end of the selection\n lineNumber = cursor.selection.endLineNumber;\n column = cursor.selection.endColumn;\n }\n else {\n let r = MoveOperations.right(config, model, cursor.position.lineNumber, cursor.position.column + (noOfColumns - 1));\n lineNumber = r.lineNumber;\n column = r.column;\n }\n return cursor.move(inSelectionMode, lineNumber, column, 0);\n }\n static down(config, model, lineNumber, column, leftoverVisibleColumns, count, allowMoveOnLastLine) {\n const currentVisibleColumn = CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize) + leftoverVisibleColumns;\n const lineCount = model.getLineCount();\n const wasOnLastPosition = (lineNumber === lineCount && column === model.getLineMaxColumn(lineNumber));\n lineNumber = lineNumber + count;\n if (lineNumber > lineCount) {\n lineNumber = lineCount;\n if (allowMoveOnLastLine) {\n column = model.getLineMaxColumn(lineNumber);\n }\n else {\n column = Math.min(model.getLineMaxColumn(lineNumber), column);\n }\n }\n else {\n column = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, currentVisibleColumn);\n }\n if (wasOnLastPosition) {\n leftoverVisibleColumns = 0;\n }\n else {\n leftoverVisibleColumns = currentVisibleColumn - CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize);\n }\n return new CursorPosition(lineNumber, column, leftoverVisibleColumns);\n }\n static moveDown(config, model, cursor, inSelectionMode, linesCount) {\n let lineNumber, column;\n if (cursor.hasSelection() && !inSelectionMode) {\n // If we are in selection mode, move down acts relative to the end of selection\n lineNumber = cursor.selection.endLineNumber;\n column = cursor.selection.endColumn;\n }\n else {\n lineNumber = cursor.position.lineNumber;\n column = cursor.position.column;\n }\n let r = MoveOperations.down(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true);\n return cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns);\n }\n static translateDown(config, model, cursor) {\n let selection = cursor.selection;\n let selectionStart = MoveOperations.down(config, model, selection.selectionStartLineNumber, selection.selectionStartColumn, cursor.selectionStartLeftoverVisibleColumns, 1, false);\n let position = MoveOperations.down(config, model, selection.positionLineNumber, selection.positionColumn, cursor.leftoverVisibleColumns, 1, false);\n return new SingleCursorState(new Range(selectionStart.lineNumber, selectionStart.column, selectionStart.lineNumber, selectionStart.column), selectionStart.leftoverVisibleColumns, new Position(position.lineNumber, position.column), position.leftoverVisibleColumns);\n }\n static up(config, model, lineNumber, column, leftoverVisibleColumns, count, allowMoveOnFirstLine) {\n const currentVisibleColumn = CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize) + leftoverVisibleColumns;\n const wasOnFirstPosition = (lineNumber === 1 && column === 1);\n lineNumber = lineNumber - count;\n if (lineNumber < 1) {\n lineNumber = 1;\n if (allowMoveOnFirstLine) {\n column = model.getLineMinColumn(lineNumber);\n }\n else {\n column = Math.min(model.getLineMaxColumn(lineNumber), column);\n }\n }\n else {\n column = CursorColumns.columnFromVisibleColumn2(config, model, lineNumber, currentVisibleColumn);\n }\n if (wasOnFirstPosition) {\n leftoverVisibleColumns = 0;\n }\n else {\n leftoverVisibleColumns = currentVisibleColumn - CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize);\n }\n return new CursorPosition(lineNumber, column, leftoverVisibleColumns);\n }\n static moveUp(config, model, cursor, inSelectionMode, linesCount) {\n let lineNumber, column;\n if (cursor.hasSelection() && !inSelectionMode) {\n // If we are in selection mode, move up acts relative to the beginning of selection\n lineNumber = cursor.selection.startLineNumber;\n column = cursor.selection.startColumn;\n }\n else {\n lineNumber = cursor.position.lineNumber;\n column = cursor.position.column;\n }\n let r = MoveOperations.up(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true);\n return cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns);\n }\n static translateUp(config, model, cursor) {\n let selection = cursor.selection;\n let selectionStart = MoveOperations.up(config, model, selection.selectionStartLineNumber, selection.selectionStartColumn, cursor.selectionStartLeftoverVisibleColumns, 1, false);\n let position = MoveOperations.up(config, model, selection.positionLineNumber, selection.positionColumn, cursor.leftoverVisibleColumns, 1, false);\n return new SingleCursorState(new Range(selectionStart.lineNumber, selectionStart.column, selectionStart.lineNumber, selectionStart.column), selectionStart.leftoverVisibleColumns, new Position(position.lineNumber, position.column), position.leftoverVisibleColumns);\n }\n static _isBlankLine(model, lineNumber) {\n if (model.getLineFirstNonWhitespaceColumn(lineNumber) === 0) {\n // empty or contains only whitespace\n return true;\n }\n return false;\n }\n static moveToPrevBlankLine(config, model, cursor, inSelectionMode) {\n let lineNumber = cursor.position.lineNumber;\n // If our current line is blank, move to the previous non-blank line\n while (lineNumber > 1 && this._isBlankLine(model, lineNumber)) {\n lineNumber--;\n }\n // Find the previous blank line\n while (lineNumber > 1 && !this._isBlankLine(model, lineNumber)) {\n lineNumber--;\n }\n return cursor.move(inSelectionMode, lineNumber, model.getLineMinColumn(lineNumber), 0);\n }\n static moveToNextBlankLine(config, model, cursor, inSelectionMode) {\n const lineCount = model.getLineCount();\n let lineNumber = cursor.position.lineNumber;\n // If our current line is blank, move to the next non-blank line\n while (lineNumber < lineCount && this._isBlankLine(model, lineNumber)) {\n lineNumber++;\n }\n // Find the next blank line\n while (lineNumber < lineCount && !this._isBlankLine(model, lineNumber)) {\n lineNumber++;\n }\n return cursor.move(inSelectionMode, lineNumber, model.getLineMinColumn(lineNumber), 0);\n }\n static moveToBeginningOfLine(config, model, cursor, inSelectionMode) {\n let lineNumber = cursor.position.lineNumber;\n let minColumn = model.getLineMinColumn(lineNumber);\n let firstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(lineNumber) || minColumn;\n let column;\n let relevantColumnNumber = cursor.position.column;\n if (relevantColumnNumber === firstNonBlankColumn) {\n column = minColumn;\n }\n else {\n column = firstNonBlankColumn;\n }\n return cursor.move(inSelectionMode, lineNumber, column, 0);\n }\n static moveToEndOfLine(config, model, cursor, inSelectionMode, sticky) {\n let lineNumber = cursor.position.lineNumber;\n let maxColumn = model.getLineMaxColumn(lineNumber);\n return cursor.move(inSelectionMode, lineNumber, maxColumn, sticky ? 1073741824 /* MAX_SAFE_SMALL_INTEGER */ - maxColumn : 0);\n }\n static moveToBeginningOfBuffer(config, model, cursor, inSelectionMode) {\n return cursor.move(inSelectionMode, 1, 1, 0);\n }\n static moveToEndOfBuffer(config, model, cursor, inSelectionMode) {\n let lastLineNumber = model.getLineCount();\n let lastColumn = model.getLineMaxColumn(lastLineNumber);\n return cursor.move(inSelectionMode, lastLineNumber, lastColumn, 0);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nexport class SurroundSelectionCommand {\n constructor(range, charBeforeSelection, charAfterSelection) {\n this._range = range;\n this._charBeforeSelection = charBeforeSelection;\n this._charAfterSelection = charAfterSelection;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(new Range(this._range.startLineNumber, this._range.startColumn, this._range.startLineNumber, this._range.startColumn), this._charBeforeSelection);\n builder.addTrackedEditOperation(new Range(this._range.endLineNumber, this._range.endColumn, this._range.endLineNumber, this._range.endColumn), this._charAfterSelection);\n }\n computeCursorState(model, helper) {\n let inverseEditOperations = helper.getInverseEditOperations();\n let firstOperationRange = inverseEditOperations[0].range;\n let secondOperationRange = inverseEditOperations[1].range;\n return new Selection(firstOperationRange.endLineNumber, firstOperationRange.endColumn, secondOperationRange.endLineNumber, secondOperationRange.endColumn - this._charAfterSelection.length);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { ReplaceCommand, ReplaceCommandWithOffsetCursorState, ReplaceCommandWithoutChangingPosition, ReplaceCommandThatPreservesSelection } from '../commands/replaceCommand.js';\nimport { ShiftCommand } from '../commands/shiftCommand.js';\nimport { SurroundSelectionCommand } from '../commands/surroundSelectionCommand.js';\nimport { CursorColumns, EditOperationResult, isQuote } from './cursorCommon.js';\nimport { getMapForWordSeparators } from './wordCharacterClassifier.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { IndentAction } from '../modes/languageConfiguration.js';\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\nexport class TypeOperations {\n static indent(config, model, selections) {\n if (model === null || selections === null) {\n return [];\n }\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n commands[i] = new ShiftCommand(selections[i], {\n isUnshift: false,\n tabSize: config.tabSize,\n indentSize: config.indentSize,\n insertSpaces: config.insertSpaces,\n useTabStops: config.useTabStops,\n autoIndent: config.autoIndent\n });\n }\n return commands;\n }\n static outdent(config, model, selections) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n commands[i] = new ShiftCommand(selections[i], {\n isUnshift: true,\n tabSize: config.tabSize,\n indentSize: config.indentSize,\n insertSpaces: config.insertSpaces,\n useTabStops: config.useTabStops,\n autoIndent: config.autoIndent\n });\n }\n return commands;\n }\n static shiftIndent(config, indentation, count) {\n count = count || 1;\n return ShiftCommand.shiftIndent(indentation, indentation.length + count, config.tabSize, config.indentSize, config.insertSpaces);\n }\n static unshiftIndent(config, indentation, count) {\n count = count || 1;\n return ShiftCommand.unshiftIndent(indentation, indentation.length + count, config.tabSize, config.indentSize, config.insertSpaces);\n }\n static _distributedPaste(config, model, selections, text) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n commands[i] = new ReplaceCommand(selections[i], text[i]);\n }\n return new EditOperationResult(0 /* Other */, commands, {\n shouldPushStackElementBefore: true,\n shouldPushStackElementAfter: true\n });\n }\n static _simplePaste(config, model, selections, text, pasteOnNewLine) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n let position = selection.getPosition();\n if (pasteOnNewLine && !selection.isEmpty()) {\n pasteOnNewLine = false;\n }\n if (pasteOnNewLine && text.indexOf('\\n') !== text.length - 1) {\n pasteOnNewLine = false;\n }\n if (pasteOnNewLine) {\n // Paste entire line at the beginning of line\n let typeSelection = new Range(position.lineNumber, 1, position.lineNumber, 1);\n commands[i] = new ReplaceCommandThatPreservesSelection(typeSelection, text, selection, true);\n }\n else {\n commands[i] = new ReplaceCommand(selection, text);\n }\n }\n return new EditOperationResult(0 /* Other */, commands, {\n shouldPushStackElementBefore: true,\n shouldPushStackElementAfter: true\n });\n }\n static _distributePasteToCursors(config, selections, text, pasteOnNewLine, multicursorText) {\n if (pasteOnNewLine) {\n return null;\n }\n if (selections.length === 1) {\n return null;\n }\n if (multicursorText && multicursorText.length === selections.length) {\n return multicursorText;\n }\n if (config.multiCursorPaste === 'spread') {\n // Try to spread the pasted text in case the line count matches the cursor count\n // Remove trailing \\n if present\n if (text.charCodeAt(text.length - 1) === 10 /* LineFeed */) {\n text = text.substr(0, text.length - 1);\n }\n // Remove trailing \\r if present\n if (text.charCodeAt(text.length - 1) === 13 /* CarriageReturn */) {\n text = text.substr(0, text.length - 1);\n }\n let lines = strings.splitLines(text);\n if (lines.length === selections.length) {\n return lines;\n }\n }\n return null;\n }\n static paste(config, model, selections, text, pasteOnNewLine, multicursorText) {\n const distributedPaste = this._distributePasteToCursors(config, selections, text, pasteOnNewLine, multicursorText);\n if (distributedPaste) {\n selections = selections.sort(Range.compareRangesUsingStarts);\n return this._distributedPaste(config, model, selections, distributedPaste);\n }\n else {\n return this._simplePaste(config, model, selections, text, pasteOnNewLine);\n }\n }\n static _goodIndentForLine(config, model, lineNumber) {\n let action = null;\n let indentation = '';\n const expectedIndentAction = LanguageConfigurationRegistry.getInheritIndentForLine(config.autoIndent, model, lineNumber, false);\n if (expectedIndentAction) {\n action = expectedIndentAction.action;\n indentation = expectedIndentAction.indentation;\n }\n else if (lineNumber > 1) {\n let lastLineNumber;\n for (lastLineNumber = lineNumber - 1; lastLineNumber >= 1; lastLineNumber--) {\n const lineText = model.getLineContent(lastLineNumber);\n const nonWhitespaceIdx = strings.lastNonWhitespaceIndex(lineText);\n if (nonWhitespaceIdx >= 0) {\n break;\n }\n }\n if (lastLineNumber < 1) {\n // No previous line with content found\n return null;\n }\n const maxColumn = model.getLineMaxColumn(lastLineNumber);\n const expectedEnterAction = LanguageConfigurationRegistry.getEnterAction(config.autoIndent, model, new Range(lastLineNumber, maxColumn, lastLineNumber, maxColumn));\n if (expectedEnterAction) {\n indentation = expectedEnterAction.indentation + expectedEnterAction.appendText;\n }\n }\n if (action) {\n if (action === IndentAction.Indent) {\n indentation = TypeOperations.shiftIndent(config, indentation);\n }\n if (action === IndentAction.Outdent) {\n indentation = TypeOperations.unshiftIndent(config, indentation);\n }\n indentation = config.normalizeIndentation(indentation);\n }\n if (!indentation) {\n return null;\n }\n return indentation;\n }\n static _replaceJumpToNextIndent(config, model, selection, insertsAutoWhitespace) {\n let typeText = '';\n let position = selection.getStartPosition();\n if (config.insertSpaces) {\n let visibleColumnFromColumn = CursorColumns.visibleColumnFromColumn2(config, model, position);\n let indentSize = config.indentSize;\n let spacesCnt = indentSize - (visibleColumnFromColumn % indentSize);\n for (let i = 0; i < spacesCnt; i++) {\n typeText += ' ';\n }\n }\n else {\n typeText = '\\t';\n }\n return new ReplaceCommand(selection, typeText, insertsAutoWhitespace);\n }\n static tab(config, model, selections) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n if (selection.isEmpty()) {\n let lineText = model.getLineContent(selection.startLineNumber);\n if (/^\\s*$/.test(lineText) && model.isCheapToTokenize(selection.startLineNumber)) {\n let goodIndent = this._goodIndentForLine(config, model, selection.startLineNumber);\n goodIndent = goodIndent || '\\t';\n let possibleTypeText = config.normalizeIndentation(goodIndent);\n if (!lineText.startsWith(possibleTypeText)) {\n commands[i] = new ReplaceCommand(new Range(selection.startLineNumber, 1, selection.startLineNumber, lineText.length + 1), possibleTypeText, true);\n continue;\n }\n }\n commands[i] = this._replaceJumpToNextIndent(config, model, selection, true);\n }\n else {\n if (selection.startLineNumber === selection.endLineNumber) {\n let lineMaxColumn = model.getLineMaxColumn(selection.startLineNumber);\n if (selection.startColumn !== 1 || selection.endColumn !== lineMaxColumn) {\n // This is a single line selection that is not the entire line\n commands[i] = this._replaceJumpToNextIndent(config, model, selection, false);\n continue;\n }\n }\n commands[i] = new ShiftCommand(selection, {\n isUnshift: false,\n tabSize: config.tabSize,\n indentSize: config.indentSize,\n insertSpaces: config.insertSpaces,\n useTabStops: config.useTabStops,\n autoIndent: config.autoIndent\n });\n }\n }\n return commands;\n }\n static compositionType(prevEditOperationType, config, model, selections, text, replacePrevCharCnt, replaceNextCharCnt, positionDelta) {\n const commands = selections.map(selection => this._compositionType(model, selection, text, replacePrevCharCnt, replaceNextCharCnt, positionDelta));\n return new EditOperationResult(1 /* Typing */, commands, {\n shouldPushStackElementBefore: (prevEditOperationType !== 1 /* Typing */),\n shouldPushStackElementAfter: false\n });\n }\n static _compositionType(model, selection, text, replacePrevCharCnt, replaceNextCharCnt, positionDelta) {\n if (!selection.isEmpty()) {\n // looks like https://github.com/microsoft/vscode/issues/2773\n // where a cursor operation occurred before a canceled composition\n // => ignore composition\n return null;\n }\n const pos = selection.getPosition();\n const startColumn = Math.max(1, pos.column - replacePrevCharCnt);\n const endColumn = Math.min(model.getLineMaxColumn(pos.lineNumber), pos.column + replaceNextCharCnt);\n const range = new Range(pos.lineNumber, startColumn, pos.lineNumber, endColumn);\n const oldText = model.getValueInRange(range);\n if (oldText === text && positionDelta === 0) {\n // => ignore composition that doesn't do anything\n return null;\n }\n return new ReplaceCommandWithOffsetCursorState(range, text, 0, positionDelta);\n }\n static _typeCommand(range, text, keepPosition) {\n if (keepPosition) {\n return new ReplaceCommandWithoutChangingPosition(range, text, true);\n }\n else {\n return new ReplaceCommand(range, text, true);\n }\n }\n static _enter(config, model, keepPosition, range) {\n if (config.autoIndent === 0 /* None */) {\n return TypeOperations._typeCommand(range, '\\n', keepPosition);\n }\n if (!model.isCheapToTokenize(range.getStartPosition().lineNumber) || config.autoIndent === 1 /* Keep */) {\n let lineText = model.getLineContent(range.startLineNumber);\n let indentation = strings.getLeadingWhitespace(lineText).substring(0, range.startColumn - 1);\n return TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(indentation), keepPosition);\n }\n const r = LanguageConfigurationRegistry.getEnterAction(config.autoIndent, model, range);\n if (r) {\n if (r.indentAction === IndentAction.None) {\n // Nothing special\n return TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(r.indentation + r.appendText), keepPosition);\n }\n else if (r.indentAction === IndentAction.Indent) {\n // Indent once\n return TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(r.indentation + r.appendText), keepPosition);\n }\n else if (r.indentAction === IndentAction.IndentOutdent) {\n // Ultra special\n const normalIndent = config.normalizeIndentation(r.indentation);\n const increasedIndent = config.normalizeIndentation(r.indentation + r.appendText);\n const typeText = '\\n' + increasedIndent + '\\n' + normalIndent;\n if (keepPosition) {\n return new ReplaceCommandWithoutChangingPosition(range, typeText, true);\n }\n else {\n return new ReplaceCommandWithOffsetCursorState(range, typeText, -1, increasedIndent.length - normalIndent.length, true);\n }\n }\n else if (r.indentAction === IndentAction.Outdent) {\n const actualIndentation = TypeOperations.unshiftIndent(config, r.indentation);\n return TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(actualIndentation + r.appendText), keepPosition);\n }\n }\n const lineText = model.getLineContent(range.startLineNumber);\n const indentation = strings.getLeadingWhitespace(lineText).substring(0, range.startColumn - 1);\n if (config.autoIndent >= 4 /* Full */) {\n const ir = LanguageConfigurationRegistry.getIndentForEnter(config.autoIndent, model, range, {\n unshiftIndent: (indent) => {\n return TypeOperations.unshiftIndent(config, indent);\n },\n shiftIndent: (indent) => {\n return TypeOperations.shiftIndent(config, indent);\n },\n normalizeIndentation: (indent) => {\n return config.normalizeIndentation(indent);\n }\n });\n if (ir) {\n let oldEndViewColumn = CursorColumns.visibleColumnFromColumn2(config, model, range.getEndPosition());\n const oldEndColumn = range.endColumn;\n const newLineContent = model.getLineContent(range.endLineNumber);\n const firstNonWhitespace = strings.firstNonWhitespaceIndex(newLineContent);\n if (firstNonWhitespace >= 0) {\n range = range.setEndPosition(range.endLineNumber, Math.max(range.endColumn, firstNonWhitespace + 1));\n }\n else {\n range = range.setEndPosition(range.endLineNumber, model.getLineMaxColumn(range.endLineNumber));\n }\n if (keepPosition) {\n return new ReplaceCommandWithoutChangingPosition(range, '\\n' + config.normalizeIndentation(ir.afterEnter), true);\n }\n else {\n let offset = 0;\n if (oldEndColumn <= firstNonWhitespace + 1) {\n if (!config.insertSpaces) {\n oldEndViewColumn = Math.ceil(oldEndViewColumn / config.indentSize);\n }\n offset = Math.min(oldEndViewColumn + 1 - config.normalizeIndentation(ir.afterEnter).length - 1, 0);\n }\n return new ReplaceCommandWithOffsetCursorState(range, '\\n' + config.normalizeIndentation(ir.afterEnter), 0, offset, true);\n }\n }\n }\n return TypeOperations._typeCommand(range, '\\n' + config.normalizeIndentation(indentation), keepPosition);\n }\n static _isAutoIndentType(config, model, selections) {\n if (config.autoIndent < 4 /* Full */) {\n return false;\n }\n for (let i = 0, len = selections.length; i < len; i++) {\n if (!model.isCheapToTokenize(selections[i].getEndPosition().lineNumber)) {\n return false;\n }\n }\n return true;\n }\n static _runAutoIndentType(config, model, range, ch) {\n const currentIndentation = LanguageConfigurationRegistry.getIndentationAtPosition(model, range.startLineNumber, range.startColumn);\n const actualIndentation = LanguageConfigurationRegistry.getIndentActionForType(config.autoIndent, model, range, ch, {\n shiftIndent: (indentation) => {\n return TypeOperations.shiftIndent(config, indentation);\n },\n unshiftIndent: (indentation) => {\n return TypeOperations.unshiftIndent(config, indentation);\n },\n });\n if (actualIndentation === null) {\n return null;\n }\n if (actualIndentation !== config.normalizeIndentation(currentIndentation)) {\n const firstNonWhitespace = model.getLineFirstNonWhitespaceColumn(range.startLineNumber);\n if (firstNonWhitespace === 0) {\n return TypeOperations._typeCommand(new Range(range.startLineNumber, 1, range.endLineNumber, range.endColumn), config.normalizeIndentation(actualIndentation) + ch, false);\n }\n else {\n return TypeOperations._typeCommand(new Range(range.startLineNumber, 1, range.endLineNumber, range.endColumn), config.normalizeIndentation(actualIndentation) +\n model.getLineContent(range.startLineNumber).substring(firstNonWhitespace - 1, range.startColumn - 1) + ch, false);\n }\n }\n return null;\n }\n static _isAutoClosingOvertype(config, model, selections, autoClosedCharacters, ch) {\n if (config.autoClosingOvertype === 'never') {\n return false;\n }\n if (!config.autoClosingPairs.autoClosingPairsCloseSingleChar.has(ch)) {\n return false;\n }\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n if (!selection.isEmpty()) {\n return false;\n }\n const position = selection.getPosition();\n const lineText = model.getLineContent(position.lineNumber);\n const afterCharacter = lineText.charAt(position.column - 1);\n if (afterCharacter !== ch) {\n return false;\n }\n // Do not over-type quotes after a backslash\n const chIsQuote = isQuote(ch);\n const beforeCharacter = position.column > 2 ? lineText.charCodeAt(position.column - 2) : 0 /* Null */;\n if (beforeCharacter === 92 /* Backslash */ && chIsQuote) {\n return false;\n }\n // Must over-type a closing character typed by the editor\n if (config.autoClosingOvertype === 'auto') {\n let found = false;\n for (let j = 0, lenJ = autoClosedCharacters.length; j < lenJ; j++) {\n const autoClosedCharacter = autoClosedCharacters[j];\n if (position.lineNumber === autoClosedCharacter.startLineNumber && position.column === autoClosedCharacter.startColumn) {\n found = true;\n break;\n }\n }\n if (!found) {\n return false;\n }\n }\n }\n return true;\n }\n static _runAutoClosingOvertype(prevEditOperationType, config, model, selections, ch) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n const position = selection.getPosition();\n const typeSelection = new Range(position.lineNumber, position.column, position.lineNumber, position.column + 1);\n commands[i] = new ReplaceCommand(typeSelection, ch);\n }\n return new EditOperationResult(1 /* Typing */, commands, {\n shouldPushStackElementBefore: (prevEditOperationType !== 1 /* Typing */),\n shouldPushStackElementAfter: false\n });\n }\n static _isBeforeClosingBrace(config, lineAfter) {\n // If the start of lineAfter can be interpretted as both a starting or ending brace, default to returning false\n const nextChar = lineAfter.charAt(0);\n const potentialStartingBraces = config.autoClosingPairs.autoClosingPairsOpenByStart.get(nextChar) || [];\n const potentialClosingBraces = config.autoClosingPairs.autoClosingPairsCloseByStart.get(nextChar) || [];\n const isBeforeStartingBrace = potentialStartingBraces.some(x => lineAfter.startsWith(x.open));\n const isBeforeClosingBrace = potentialClosingBraces.some(x => lineAfter.startsWith(x.close));\n return !isBeforeStartingBrace && isBeforeClosingBrace;\n }\n static _findAutoClosingPairOpen(config, model, positions, ch) {\n const autoClosingPairCandidates = config.autoClosingPairs.autoClosingPairsOpenByEnd.get(ch);\n if (!autoClosingPairCandidates) {\n return null;\n }\n // Determine which auto-closing pair it is\n let autoClosingPair = null;\n for (const autoClosingPairCandidate of autoClosingPairCandidates) {\n if (autoClosingPair === null || autoClosingPairCandidate.open.length > autoClosingPair.open.length) {\n let candidateIsMatch = true;\n for (const position of positions) {\n const relevantText = model.getValueInRange(new Range(position.lineNumber, position.column - autoClosingPairCandidate.open.length + 1, position.lineNumber, position.column));\n if (relevantText + ch !== autoClosingPairCandidate.open) {\n candidateIsMatch = false;\n break;\n }\n }\n if (candidateIsMatch) {\n autoClosingPair = autoClosingPairCandidate;\n }\n }\n }\n return autoClosingPair;\n }\n static _findSubAutoClosingPairClose(config, autoClosingPair) {\n if (autoClosingPair.open.length <= 1) {\n return '';\n }\n const lastChar = autoClosingPair.close.charAt(autoClosingPair.close.length - 1);\n // get candidates with the same last character as close\n const subPairCandidates = config.autoClosingPairs.autoClosingPairsCloseByEnd.get(lastChar) || [];\n let subPairMatch = null;\n for (const x of subPairCandidates) {\n if (x.open !== autoClosingPair.open && autoClosingPair.open.includes(x.open) && autoClosingPair.close.endsWith(x.close)) {\n if (!subPairMatch || x.open.length > subPairMatch.open.length) {\n subPairMatch = x;\n }\n }\n }\n if (subPairMatch) {\n return subPairMatch.close;\n }\n else {\n return '';\n }\n }\n static _getAutoClosingPairClose(config, model, selections, ch, insertOpenCharacter) {\n const chIsQuote = isQuote(ch);\n const autoCloseConfig = chIsQuote ? config.autoClosingQuotes : config.autoClosingBrackets;\n if (autoCloseConfig === 'never') {\n return null;\n }\n const autoClosingPair = this._findAutoClosingPairOpen(config, model, selections.map(s => s.getPosition()), ch);\n if (!autoClosingPair) {\n return null;\n }\n const subAutoClosingPairClose = this._findSubAutoClosingPairClose(config, autoClosingPair);\n let isSubAutoClosingPairPresent = true;\n const shouldAutoCloseBefore = chIsQuote ? config.shouldAutoCloseBefore.quote : config.shouldAutoCloseBefore.bracket;\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n if (!selection.isEmpty()) {\n return null;\n }\n const position = selection.getPosition();\n const lineText = model.getLineContent(position.lineNumber);\n const lineAfter = lineText.substring(position.column - 1);\n if (!lineAfter.startsWith(subAutoClosingPairClose)) {\n isSubAutoClosingPairPresent = false;\n }\n // Only consider auto closing the pair if an allowed character follows or if another autoclosed pair closing brace follows\n if (lineText.length > position.column - 1) {\n const characterAfter = lineText.charAt(position.column - 1);\n const isBeforeCloseBrace = TypeOperations._isBeforeClosingBrace(config, lineAfter);\n if (!isBeforeCloseBrace && !shouldAutoCloseBefore(characterAfter)) {\n return null;\n }\n }\n if (!model.isCheapToTokenize(position.lineNumber)) {\n // Do not force tokenization\n return null;\n }\n // Do not auto-close ' or \" after a word character\n if (autoClosingPair.open.length === 1 && chIsQuote && autoCloseConfig !== 'always') {\n const wordSeparators = getMapForWordSeparators(config.wordSeparators);\n if (insertOpenCharacter && position.column > 1 && wordSeparators.get(lineText.charCodeAt(position.column - 2)) === 0 /* Regular */) {\n return null;\n }\n if (!insertOpenCharacter && position.column > 2 && wordSeparators.get(lineText.charCodeAt(position.column - 3)) === 0 /* Regular */) {\n return null;\n }\n }\n model.forceTokenization(position.lineNumber);\n const lineTokens = model.getLineTokens(position.lineNumber);\n let shouldAutoClosePair = false;\n try {\n shouldAutoClosePair = LanguageConfigurationRegistry.shouldAutoClosePair(autoClosingPair, lineTokens, insertOpenCharacter ? position.column : position.column - 1);\n }\n catch (e) {\n onUnexpectedError(e);\n }\n if (!shouldAutoClosePair) {\n return null;\n }\n }\n if (isSubAutoClosingPairPresent) {\n return autoClosingPair.close.substring(0, autoClosingPair.close.length - subAutoClosingPairClose.length);\n }\n else {\n return autoClosingPair.close;\n }\n }\n static _runAutoClosingOpenCharType(prevEditOperationType, config, model, selections, ch, insertOpenCharacter, autoClosingPairClose) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n commands[i] = new TypeWithAutoClosingCommand(selection, ch, insertOpenCharacter, autoClosingPairClose);\n }\n return new EditOperationResult(1 /* Typing */, commands, {\n shouldPushStackElementBefore: true,\n shouldPushStackElementAfter: false\n });\n }\n static _shouldSurroundChar(config, ch) {\n if (isQuote(ch)) {\n return (config.autoSurround === 'quotes' || config.autoSurround === 'languageDefined');\n }\n else {\n // Character is a bracket\n return (config.autoSurround === 'brackets' || config.autoSurround === 'languageDefined');\n }\n }\n static _isSurroundSelectionType(config, model, selections, ch) {\n if (!TypeOperations._shouldSurroundChar(config, ch) || !config.surroundingPairs.hasOwnProperty(ch)) {\n return false;\n }\n const isTypingAQuoteCharacter = isQuote(ch);\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n if (selection.isEmpty()) {\n return false;\n }\n let selectionContainsOnlyWhitespace = true;\n for (let lineNumber = selection.startLineNumber; lineNumber <= selection.endLineNumber; lineNumber++) {\n const lineText = model.getLineContent(lineNumber);\n const startIndex = (lineNumber === selection.startLineNumber ? selection.startColumn - 1 : 0);\n const endIndex = (lineNumber === selection.endLineNumber ? selection.endColumn - 1 : lineText.length);\n const selectedText = lineText.substring(startIndex, endIndex);\n if (/[^ \\t]/.test(selectedText)) {\n // this selected text contains something other than whitespace\n selectionContainsOnlyWhitespace = false;\n break;\n }\n }\n if (selectionContainsOnlyWhitespace) {\n return false;\n }\n if (isTypingAQuoteCharacter && selection.startLineNumber === selection.endLineNumber && selection.startColumn + 1 === selection.endColumn) {\n const selectionText = model.getValueInRange(selection);\n if (isQuote(selectionText)) {\n // Typing a quote character on top of another quote character\n // => disable surround selection type\n return false;\n }\n }\n }\n return true;\n }\n static _runSurroundSelectionType(prevEditOperationType, config, model, selections, ch) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n const selection = selections[i];\n const closeCharacter = config.surroundingPairs[ch];\n commands[i] = new SurroundSelectionCommand(selection, ch, closeCharacter);\n }\n return new EditOperationResult(0 /* Other */, commands, {\n shouldPushStackElementBefore: true,\n shouldPushStackElementAfter: true\n });\n }\n static _isTypeInterceptorElectricChar(config, model, selections) {\n if (selections.length === 1 && model.isCheapToTokenize(selections[0].getEndPosition().lineNumber)) {\n return true;\n }\n return false;\n }\n static _typeInterceptorElectricChar(prevEditOperationType, config, model, selection, ch) {\n if (!config.electricChars.hasOwnProperty(ch) || !selection.isEmpty()) {\n return null;\n }\n let position = selection.getPosition();\n model.forceTokenization(position.lineNumber);\n let lineTokens = model.getLineTokens(position.lineNumber);\n let electricAction;\n try {\n electricAction = LanguageConfigurationRegistry.onElectricCharacter(ch, lineTokens, position.column);\n }\n catch (e) {\n onUnexpectedError(e);\n return null;\n }\n if (!electricAction) {\n return null;\n }\n if (electricAction.matchOpenBracket) {\n let endColumn = (lineTokens.getLineContent() + ch).lastIndexOf(electricAction.matchOpenBracket) + 1;\n let match = model.findMatchingBracketUp(electricAction.matchOpenBracket, {\n lineNumber: position.lineNumber,\n column: endColumn\n });\n if (match) {\n if (match.startLineNumber === position.lineNumber) {\n // matched something on the same line => no change in indentation\n return null;\n }\n let matchLine = model.getLineContent(match.startLineNumber);\n let matchLineIndentation = strings.getLeadingWhitespace(matchLine);\n let newIndentation = config.normalizeIndentation(matchLineIndentation);\n let lineText = model.getLineContent(position.lineNumber);\n let lineFirstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(position.lineNumber) || position.column;\n let prefix = lineText.substring(lineFirstNonBlankColumn - 1, position.column - 1);\n let typeText = newIndentation + prefix + ch;\n let typeSelection = new Range(position.lineNumber, 1, position.lineNumber, position.column);\n const command = new ReplaceCommand(typeSelection, typeText);\n return new EditOperationResult(1 /* Typing */, [command], {\n shouldPushStackElementBefore: false,\n shouldPushStackElementAfter: true\n });\n }\n }\n return null;\n }\n /**\n * This is very similar with typing, but the character is already in the text buffer!\n */\n static compositionEndWithInterceptors(prevEditOperationType, config, model, selectionsWhenCompositionStarted, selections, autoClosedCharacters) {\n if (!selectionsWhenCompositionStarted || Selection.selectionsArrEqual(selectionsWhenCompositionStarted, selections)) {\n // no content was typed\n return null;\n }\n let ch = null;\n // extract last typed character\n for (const selection of selections) {\n if (!selection.isEmpty()) {\n return null;\n }\n const position = selection.getPosition();\n const currentChar = model.getValueInRange(new Range(position.lineNumber, position.column - 1, position.lineNumber, position.column));\n if (ch === null) {\n ch = currentChar;\n }\n else if (ch !== currentChar) {\n return null;\n }\n }\n if (!ch) {\n return null;\n }\n if (this._isAutoClosingOvertype(config, model, selections, autoClosedCharacters, ch)) {\n // Unfortunately, the close character is at this point \"doubled\", so we need to delete it...\n const commands = selections.map(s => new ReplaceCommand(new Range(s.positionLineNumber, s.positionColumn, s.positionLineNumber, s.positionColumn + 1), '', false));\n return new EditOperationResult(1 /* Typing */, commands, {\n shouldPushStackElementBefore: true,\n shouldPushStackElementAfter: false\n });\n }\n const autoClosingPairClose = this._getAutoClosingPairClose(config, model, selections, ch, false);\n if (autoClosingPairClose !== null) {\n return this._runAutoClosingOpenCharType(prevEditOperationType, config, model, selections, ch, false, autoClosingPairClose);\n }\n return null;\n }\n static typeWithInterceptors(isDoingComposition, prevEditOperationType, config, model, selections, autoClosedCharacters, ch) {\n if (!isDoingComposition && ch === '\\n') {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n commands[i] = TypeOperations._enter(config, model, false, selections[i]);\n }\n return new EditOperationResult(1 /* Typing */, commands, {\n shouldPushStackElementBefore: true,\n shouldPushStackElementAfter: false,\n });\n }\n if (!isDoingComposition && this._isAutoIndentType(config, model, selections)) {\n let commands = [];\n let autoIndentFails = false;\n for (let i = 0, len = selections.length; i < len; i++) {\n commands[i] = this._runAutoIndentType(config, model, selections[i], ch);\n if (!commands[i]) {\n autoIndentFails = true;\n break;\n }\n }\n if (!autoIndentFails) {\n return new EditOperationResult(1 /* Typing */, commands, {\n shouldPushStackElementBefore: true,\n shouldPushStackElementAfter: false,\n });\n }\n }\n if (!isDoingComposition && this._isAutoClosingOvertype(config, model, selections, autoClosedCharacters, ch)) {\n return this._runAutoClosingOvertype(prevEditOperationType, config, model, selections, ch);\n }\n if (!isDoingComposition) {\n const autoClosingPairClose = this._getAutoClosingPairClose(config, model, selections, ch, true);\n if (autoClosingPairClose) {\n return this._runAutoClosingOpenCharType(prevEditOperationType, config, model, selections, ch, true, autoClosingPairClose);\n }\n }\n if (this._isSurroundSelectionType(config, model, selections, ch)) {\n return this._runSurroundSelectionType(prevEditOperationType, config, model, selections, ch);\n }\n // Electric characters make sense only when dealing with a single cursor,\n // as multiple cursors typing brackets for example would interfer with bracket matching\n if (!isDoingComposition && this._isTypeInterceptorElectricChar(config, model, selections)) {\n const r = this._typeInterceptorElectricChar(prevEditOperationType, config, model, selections[0], ch);\n if (r) {\n return r;\n }\n }\n // A simple character type\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n commands[i] = new ReplaceCommand(selections[i], ch);\n }\n let shouldPushStackElementBefore = (prevEditOperationType !== 1 /* Typing */);\n if (ch === ' ') {\n shouldPushStackElementBefore = true;\n }\n return new EditOperationResult(1 /* Typing */, commands, {\n shouldPushStackElementBefore: shouldPushStackElementBefore,\n shouldPushStackElementAfter: false\n });\n }\n static typeWithoutInterceptors(prevEditOperationType, config, model, selections, str) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n commands[i] = new ReplaceCommand(selections[i], str);\n }\n return new EditOperationResult(1 /* Typing */, commands, {\n shouldPushStackElementBefore: (prevEditOperationType !== 1 /* Typing */),\n shouldPushStackElementAfter: false\n });\n }\n static lineInsertBefore(config, model, selections) {\n if (model === null || selections === null) {\n return [];\n }\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n let lineNumber = selections[i].positionLineNumber;\n if (lineNumber === 1) {\n commands[i] = new ReplaceCommandWithoutChangingPosition(new Range(1, 1, 1, 1), '\\n');\n }\n else {\n lineNumber--;\n let column = model.getLineMaxColumn(lineNumber);\n commands[i] = this._enter(config, model, false, new Range(lineNumber, column, lineNumber, column));\n }\n }\n return commands;\n }\n static lineInsertAfter(config, model, selections) {\n if (model === null || selections === null) {\n return [];\n }\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n const lineNumber = selections[i].positionLineNumber;\n let column = model.getLineMaxColumn(lineNumber);\n commands[i] = this._enter(config, model, false, new Range(lineNumber, column, lineNumber, column));\n }\n return commands;\n }\n static lineBreakInsert(config, model, selections) {\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n commands[i] = this._enter(config, model, true, selections[i]);\n }\n return commands;\n }\n}\nexport class TypeWithAutoClosingCommand extends ReplaceCommandWithOffsetCursorState {\n constructor(selection, openCharacter, insertOpenCharacter, closeCharacter) {\n super(selection, (insertOpenCharacter ? openCharacter : '') + closeCharacter, 0, -closeCharacter.length);\n this._openCharacter = openCharacter;\n this._closeCharacter = closeCharacter;\n this.closeCharacterRange = null;\n this.enclosingRange = null;\n }\n computeCursorState(model, helper) {\n let inverseEditOperations = helper.getInverseEditOperations();\n let range = inverseEditOperations[0].range;\n this.closeCharacterRange = new Range(range.startLineNumber, range.endColumn - this._closeCharacter.length, range.endLineNumber, range.endColumn);\n this.enclosingRange = new Range(range.startLineNumber, range.endColumn - this._openCharacter.length - this._closeCharacter.length, range.endLineNumber, range.endColumn);\n return super.computeCursorState(model, helper);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { SingleCursorState } from './cursorCommon.js';\nimport { DeleteOperations } from './cursorDeleteOperations.js';\nimport { getMapForWordSeparators } from './wordCharacterClassifier.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nexport class WordOperations {\n static _createWord(lineContent, wordType, nextCharClass, start, end) {\n // console.log('WORD ==> ' + start + ' => ' + end + ':::: <<<' + lineContent.substring(start, end) + '>>>');\n return { start: start, end: end, wordType: wordType, nextCharClass: nextCharClass };\n }\n static _findPreviousWordOnLine(wordSeparators, model, position) {\n let lineContent = model.getLineContent(position.lineNumber);\n return this._doFindPreviousWordOnLine(lineContent, wordSeparators, position);\n }\n static _doFindPreviousWordOnLine(lineContent, wordSeparators, position) {\n let wordType = 0 /* None */;\n for (let chIndex = position.column - 2; chIndex >= 0; chIndex--) {\n let chCode = lineContent.charCodeAt(chIndex);\n let chClass = wordSeparators.get(chCode);\n if (chClass === 0 /* Regular */) {\n if (wordType === 2 /* Separator */) {\n return this._createWord(lineContent, wordType, chClass, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\n }\n wordType = 1 /* Regular */;\n }\n else if (chClass === 2 /* WordSeparator */) {\n if (wordType === 1 /* Regular */) {\n return this._createWord(lineContent, wordType, chClass, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\n }\n wordType = 2 /* Separator */;\n }\n else if (chClass === 1 /* Whitespace */) {\n if (wordType !== 0 /* None */) {\n return this._createWord(lineContent, wordType, chClass, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\n }\n }\n }\n if (wordType !== 0 /* None */) {\n return this._createWord(lineContent, wordType, 1 /* Whitespace */, 0, this._findEndOfWord(lineContent, wordSeparators, wordType, 0));\n }\n return null;\n }\n static _findEndOfWord(lineContent, wordSeparators, wordType, startIndex) {\n let len = lineContent.length;\n for (let chIndex = startIndex; chIndex < len; chIndex++) {\n let chCode = lineContent.charCodeAt(chIndex);\n let chClass = wordSeparators.get(chCode);\n if (chClass === 1 /* Whitespace */) {\n return chIndex;\n }\n if (wordType === 1 /* Regular */ && chClass === 2 /* WordSeparator */) {\n return chIndex;\n }\n if (wordType === 2 /* Separator */ && chClass === 0 /* Regular */) {\n return chIndex;\n }\n }\n return len;\n }\n static _findNextWordOnLine(wordSeparators, model, position) {\n let lineContent = model.getLineContent(position.lineNumber);\n return this._doFindNextWordOnLine(lineContent, wordSeparators, position);\n }\n static _doFindNextWordOnLine(lineContent, wordSeparators, position) {\n let wordType = 0 /* None */;\n let len = lineContent.length;\n for (let chIndex = position.column - 1; chIndex < len; chIndex++) {\n let chCode = lineContent.charCodeAt(chIndex);\n let chClass = wordSeparators.get(chCode);\n if (chClass === 0 /* Regular */) {\n if (wordType === 2 /* Separator */) {\n return this._createWord(lineContent, wordType, chClass, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\n }\n wordType = 1 /* Regular */;\n }\n else if (chClass === 2 /* WordSeparator */) {\n if (wordType === 1 /* Regular */) {\n return this._createWord(lineContent, wordType, chClass, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\n }\n wordType = 2 /* Separator */;\n }\n else if (chClass === 1 /* Whitespace */) {\n if (wordType !== 0 /* None */) {\n return this._createWord(lineContent, wordType, chClass, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\n }\n }\n }\n if (wordType !== 0 /* None */) {\n return this._createWord(lineContent, wordType, 1 /* Whitespace */, this._findStartOfWord(lineContent, wordSeparators, wordType, len - 1), len);\n }\n return null;\n }\n static _findStartOfWord(lineContent, wordSeparators, wordType, startIndex) {\n for (let chIndex = startIndex; chIndex >= 0; chIndex--) {\n let chCode = lineContent.charCodeAt(chIndex);\n let chClass = wordSeparators.get(chCode);\n if (chClass === 1 /* Whitespace */) {\n return chIndex + 1;\n }\n if (wordType === 1 /* Regular */ && chClass === 2 /* WordSeparator */) {\n return chIndex + 1;\n }\n if (wordType === 2 /* Separator */ && chClass === 0 /* Regular */) {\n return chIndex + 1;\n }\n }\n return 0;\n }\n static moveWordLeft(wordSeparators, model, position, wordNavigationType) {\n let lineNumber = position.lineNumber;\n let column = position.column;\n if (column === 1) {\n if (lineNumber > 1) {\n lineNumber = lineNumber - 1;\n column = model.getLineMaxColumn(lineNumber);\n }\n }\n let prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, column));\n if (wordNavigationType === 0 /* WordStart */) {\n return new Position(lineNumber, prevWordOnLine ? prevWordOnLine.start + 1 : 1);\n }\n if (wordNavigationType === 1 /* WordStartFast */) {\n if (prevWordOnLine\n && prevWordOnLine.wordType === 2 /* Separator */\n && prevWordOnLine.end - prevWordOnLine.start === 1\n && prevWordOnLine.nextCharClass === 0 /* Regular */) {\n // Skip over a word made up of one single separator and followed by a regular character\n prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));\n }\n return new Position(lineNumber, prevWordOnLine ? prevWordOnLine.start + 1 : 1);\n }\n if (wordNavigationType === 3 /* WordAccessibility */) {\n while (prevWordOnLine\n && prevWordOnLine.wordType === 2 /* Separator */) {\n // Skip over words made up of only separators\n prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));\n }\n return new Position(lineNumber, prevWordOnLine ? prevWordOnLine.start + 1 : 1);\n }\n // We are stopping at the ending of words\n if (prevWordOnLine && column <= prevWordOnLine.end + 1) {\n prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));\n }\n return new Position(lineNumber, prevWordOnLine ? prevWordOnLine.end + 1 : 1);\n }\n static _moveWordPartLeft(model, position) {\n const lineNumber = position.lineNumber;\n const maxColumn = model.getLineMaxColumn(lineNumber);\n if (position.column === 1) {\n return (lineNumber > 1 ? new Position(lineNumber - 1, model.getLineMaxColumn(lineNumber - 1)) : position);\n }\n const lineContent = model.getLineContent(lineNumber);\n for (let column = position.column - 1; column > 1; column--) {\n const left = lineContent.charCodeAt(column - 2);\n const right = lineContent.charCodeAt(column - 1);\n if (left === 95 /* Underline */ && right !== 95 /* Underline */) {\n // snake_case_variables\n return new Position(lineNumber, column);\n }\n if (strings.isLowerAsciiLetter(left) && strings.isUpperAsciiLetter(right)) {\n // camelCaseVariables\n return new Position(lineNumber, column);\n }\n if (strings.isUpperAsciiLetter(left) && strings.isUpperAsciiLetter(right)) {\n // thisIsACamelCaseWithOneLetterWords\n if (column + 1 < maxColumn) {\n const rightRight = lineContent.charCodeAt(column);\n if (strings.isLowerAsciiLetter(rightRight)) {\n return new Position(lineNumber, column);\n }\n }\n }\n }\n return new Position(lineNumber, 1);\n }\n static moveWordRight(wordSeparators, model, position, wordNavigationType) {\n let lineNumber = position.lineNumber;\n let column = position.column;\n let movedDown = false;\n if (column === model.getLineMaxColumn(lineNumber)) {\n if (lineNumber < model.getLineCount()) {\n movedDown = true;\n lineNumber = lineNumber + 1;\n column = 1;\n }\n }\n let nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, column));\n if (wordNavigationType === 2 /* WordEnd */) {\n if (nextWordOnLine && nextWordOnLine.wordType === 2 /* Separator */) {\n if (nextWordOnLine.end - nextWordOnLine.start === 1 && nextWordOnLine.nextCharClass === 0 /* Regular */) {\n // Skip over a word made up of one single separator and followed by a regular character\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, nextWordOnLine.end + 1));\n }\n }\n if (nextWordOnLine) {\n column = nextWordOnLine.end + 1;\n }\n else {\n column = model.getLineMaxColumn(lineNumber);\n }\n }\n else if (wordNavigationType === 3 /* WordAccessibility */) {\n if (movedDown) {\n // If we move to the next line, pretend that the cursor is right before the first character.\n // This is needed when the first word starts right at the first character - and in order not to miss it,\n // we need to start before.\n column = 0;\n }\n while (nextWordOnLine\n && (nextWordOnLine.wordType === 2 /* Separator */\n || nextWordOnLine.start + 1 <= column)) {\n // Skip over a word made up of one single separator\n // Also skip over word if it begins before current cursor position to ascertain we're moving forward at least 1 character.\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, nextWordOnLine.end + 1));\n }\n if (nextWordOnLine) {\n column = nextWordOnLine.start + 1;\n }\n else {\n column = model.getLineMaxColumn(lineNumber);\n }\n }\n else {\n if (nextWordOnLine && !movedDown && column >= nextWordOnLine.start + 1) {\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, nextWordOnLine.end + 1));\n }\n if (nextWordOnLine) {\n column = nextWordOnLine.start + 1;\n }\n else {\n column = model.getLineMaxColumn(lineNumber);\n }\n }\n return new Position(lineNumber, column);\n }\n static _moveWordPartRight(model, position) {\n const lineNumber = position.lineNumber;\n const maxColumn = model.getLineMaxColumn(lineNumber);\n if (position.column === maxColumn) {\n return (lineNumber < model.getLineCount() ? new Position(lineNumber + 1, 1) : position);\n }\n const lineContent = model.getLineContent(lineNumber);\n for (let column = position.column + 1; column < maxColumn; column++) {\n const left = lineContent.charCodeAt(column - 2);\n const right = lineContent.charCodeAt(column - 1);\n if (left !== 95 /* Underline */ && right === 95 /* Underline */) {\n // snake_case_variables\n return new Position(lineNumber, column);\n }\n if (strings.isLowerAsciiLetter(left) && strings.isUpperAsciiLetter(right)) {\n // camelCaseVariables\n return new Position(lineNumber, column);\n }\n if (strings.isUpperAsciiLetter(left) && strings.isUpperAsciiLetter(right)) {\n // thisIsACamelCaseWithOneLetterWords\n if (column + 1 < maxColumn) {\n const rightRight = lineContent.charCodeAt(column);\n if (strings.isLowerAsciiLetter(rightRight)) {\n return new Position(lineNumber, column);\n }\n }\n }\n }\n return new Position(lineNumber, maxColumn);\n }\n static _deleteWordLeftWhitespace(model, position) {\n const lineContent = model.getLineContent(position.lineNumber);\n const startIndex = position.column - 2;\n const lastNonWhitespace = strings.lastNonWhitespaceIndex(lineContent, startIndex);\n if (lastNonWhitespace + 1 < startIndex) {\n return new Range(position.lineNumber, lastNonWhitespace + 2, position.lineNumber, position.column);\n }\n return null;\n }\n static deleteWordLeft(ctx, wordNavigationType) {\n const wordSeparators = ctx.wordSeparators;\n const model = ctx.model;\n const selection = ctx.selection;\n const whitespaceHeuristics = ctx.whitespaceHeuristics;\n if (!selection.isEmpty()) {\n return selection;\n }\n if (DeleteOperations.isAutoClosingPairDelete(ctx.autoClosingDelete, ctx.autoClosingBrackets, ctx.autoClosingQuotes, ctx.autoClosingPairs.autoClosingPairsOpenByEnd, ctx.model, [ctx.selection], ctx.autoClosedCharacters)) {\n const position = ctx.selection.getPosition();\n return new Range(position.lineNumber, position.column - 1, position.lineNumber, position.column + 1);\n }\n const position = new Position(selection.positionLineNumber, selection.positionColumn);\n let lineNumber = position.lineNumber;\n let column = position.column;\n if (lineNumber === 1 && column === 1) {\n // Ignore deleting at beginning of file\n return null;\n }\n if (whitespaceHeuristics) {\n let r = this._deleteWordLeftWhitespace(model, position);\n if (r) {\n return r;\n }\n }\n let prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);\n if (wordNavigationType === 0 /* WordStart */) {\n if (prevWordOnLine) {\n column = prevWordOnLine.start + 1;\n }\n else {\n if (column > 1) {\n column = 1;\n }\n else {\n lineNumber--;\n column = model.getLineMaxColumn(lineNumber);\n }\n }\n }\n else {\n if (prevWordOnLine && column <= prevWordOnLine.end + 1) {\n prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, new Position(lineNumber, prevWordOnLine.start + 1));\n }\n if (prevWordOnLine) {\n column = prevWordOnLine.end + 1;\n }\n else {\n if (column > 1) {\n column = 1;\n }\n else {\n lineNumber--;\n column = model.getLineMaxColumn(lineNumber);\n }\n }\n }\n return new Range(lineNumber, column, position.lineNumber, position.column);\n }\n static deleteInsideWord(wordSeparators, model, selection) {\n if (!selection.isEmpty()) {\n return selection;\n }\n const position = new Position(selection.positionLineNumber, selection.positionColumn);\n let r = this._deleteInsideWordWhitespace(model, position);\n if (r) {\n return r;\n }\n return this._deleteInsideWordDetermineDeleteRange(wordSeparators, model, position);\n }\n static _charAtIsWhitespace(str, index) {\n const charCode = str.charCodeAt(index);\n return (charCode === 32 /* Space */ || charCode === 9 /* Tab */);\n }\n static _deleteInsideWordWhitespace(model, position) {\n const lineContent = model.getLineContent(position.lineNumber);\n const lineContentLength = lineContent.length;\n if (lineContentLength === 0) {\n // empty line\n return null;\n }\n let leftIndex = Math.max(position.column - 2, 0);\n if (!this._charAtIsWhitespace(lineContent, leftIndex)) {\n // touches a non-whitespace character to the left\n return null;\n }\n let rightIndex = Math.min(position.column - 1, lineContentLength - 1);\n if (!this._charAtIsWhitespace(lineContent, rightIndex)) {\n // touches a non-whitespace character to the right\n return null;\n }\n // walk over whitespace to the left\n while (leftIndex > 0 && this._charAtIsWhitespace(lineContent, leftIndex - 1)) {\n leftIndex--;\n }\n // walk over whitespace to the right\n while (rightIndex + 1 < lineContentLength && this._charAtIsWhitespace(lineContent, rightIndex + 1)) {\n rightIndex++;\n }\n return new Range(position.lineNumber, leftIndex + 1, position.lineNumber, rightIndex + 2);\n }\n static _deleteInsideWordDetermineDeleteRange(wordSeparators, model, position) {\n const lineContent = model.getLineContent(position.lineNumber);\n const lineLength = lineContent.length;\n if (lineLength === 0) {\n // empty line\n if (position.lineNumber > 1) {\n return new Range(position.lineNumber - 1, model.getLineMaxColumn(position.lineNumber - 1), position.lineNumber, 1);\n }\n else {\n if (position.lineNumber < model.getLineCount()) {\n return new Range(position.lineNumber, 1, position.lineNumber + 1, 1);\n }\n else {\n // empty model\n return new Range(position.lineNumber, 1, position.lineNumber, 1);\n }\n }\n }\n const touchesWord = (word) => {\n return (word.start + 1 <= position.column && position.column <= word.end + 1);\n };\n const createRangeWithPosition = (startColumn, endColumn) => {\n startColumn = Math.min(startColumn, position.column);\n endColumn = Math.max(endColumn, position.column);\n return new Range(position.lineNumber, startColumn, position.lineNumber, endColumn);\n };\n const deleteWordAndAdjacentWhitespace = (word) => {\n let startColumn = word.start + 1;\n let endColumn = word.end + 1;\n let expandedToTheRight = false;\n while (endColumn - 1 < lineLength && this._charAtIsWhitespace(lineContent, endColumn - 1)) {\n expandedToTheRight = true;\n endColumn++;\n }\n if (!expandedToTheRight) {\n while (startColumn > 1 && this._charAtIsWhitespace(lineContent, startColumn - 2)) {\n startColumn--;\n }\n }\n return createRangeWithPosition(startColumn, endColumn);\n };\n const prevWordOnLine = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);\n if (prevWordOnLine && touchesWord(prevWordOnLine)) {\n return deleteWordAndAdjacentWhitespace(prevWordOnLine);\n }\n const nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, position);\n if (nextWordOnLine && touchesWord(nextWordOnLine)) {\n return deleteWordAndAdjacentWhitespace(nextWordOnLine);\n }\n if (prevWordOnLine && nextWordOnLine) {\n return createRangeWithPosition(prevWordOnLine.end + 1, nextWordOnLine.start + 1);\n }\n if (prevWordOnLine) {\n return createRangeWithPosition(prevWordOnLine.start + 1, prevWordOnLine.end + 1);\n }\n if (nextWordOnLine) {\n return createRangeWithPosition(nextWordOnLine.start + 1, nextWordOnLine.end + 1);\n }\n return createRangeWithPosition(1, lineLength + 1);\n }\n static _deleteWordPartLeft(model, selection) {\n if (!selection.isEmpty()) {\n return selection;\n }\n const pos = selection.getPosition();\n const toPosition = WordOperations._moveWordPartLeft(model, pos);\n return new Range(pos.lineNumber, pos.column, toPosition.lineNumber, toPosition.column);\n }\n static _findFirstNonWhitespaceChar(str, startIndex) {\n let len = str.length;\n for (let chIndex = startIndex; chIndex < len; chIndex++) {\n let ch = str.charAt(chIndex);\n if (ch !== ' ' && ch !== '\\t') {\n return chIndex;\n }\n }\n return len;\n }\n static _deleteWordRightWhitespace(model, position) {\n const lineContent = model.getLineContent(position.lineNumber);\n const startIndex = position.column - 1;\n const firstNonWhitespace = this._findFirstNonWhitespaceChar(lineContent, startIndex);\n if (startIndex + 1 < firstNonWhitespace) {\n // bingo\n return new Range(position.lineNumber, position.column, position.lineNumber, firstNonWhitespace + 1);\n }\n return null;\n }\n static deleteWordRight(ctx, wordNavigationType) {\n const wordSeparators = ctx.wordSeparators;\n const model = ctx.model;\n const selection = ctx.selection;\n const whitespaceHeuristics = ctx.whitespaceHeuristics;\n if (!selection.isEmpty()) {\n return selection;\n }\n const position = new Position(selection.positionLineNumber, selection.positionColumn);\n let lineNumber = position.lineNumber;\n let column = position.column;\n const lineCount = model.getLineCount();\n const maxColumn = model.getLineMaxColumn(lineNumber);\n if (lineNumber === lineCount && column === maxColumn) {\n // Ignore deleting at end of file\n return null;\n }\n if (whitespaceHeuristics) {\n let r = this._deleteWordRightWhitespace(model, position);\n if (r) {\n return r;\n }\n }\n let nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, position);\n if (wordNavigationType === 2 /* WordEnd */) {\n if (nextWordOnLine) {\n column = nextWordOnLine.end + 1;\n }\n else {\n if (column < maxColumn || lineNumber === lineCount) {\n column = maxColumn;\n }\n else {\n lineNumber++;\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, 1));\n if (nextWordOnLine) {\n column = nextWordOnLine.start + 1;\n }\n else {\n column = model.getLineMaxColumn(lineNumber);\n }\n }\n }\n }\n else {\n if (nextWordOnLine && column >= nextWordOnLine.start + 1) {\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, nextWordOnLine.end + 1));\n }\n if (nextWordOnLine) {\n column = nextWordOnLine.start + 1;\n }\n else {\n if (column < maxColumn || lineNumber === lineCount) {\n column = maxColumn;\n }\n else {\n lineNumber++;\n nextWordOnLine = WordOperations._findNextWordOnLine(wordSeparators, model, new Position(lineNumber, 1));\n if (nextWordOnLine) {\n column = nextWordOnLine.start + 1;\n }\n else {\n column = model.getLineMaxColumn(lineNumber);\n }\n }\n }\n }\n return new Range(lineNumber, column, position.lineNumber, position.column);\n }\n static _deleteWordPartRight(model, selection) {\n if (!selection.isEmpty()) {\n return selection;\n }\n const pos = selection.getPosition();\n const toPosition = WordOperations._moveWordPartRight(model, pos);\n return new Range(pos.lineNumber, pos.column, toPosition.lineNumber, toPosition.column);\n }\n static _createWordAtPosition(model, lineNumber, word) {\n const range = new Range(lineNumber, word.start + 1, lineNumber, word.end + 1);\n return {\n word: model.getValueInRange(range),\n startColumn: range.startColumn,\n endColumn: range.endColumn\n };\n }\n static getWordAtPosition(model, _wordSeparators, position) {\n const wordSeparators = getMapForWordSeparators(_wordSeparators);\n const prevWord = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);\n if (prevWord && prevWord.wordType === 1 /* Regular */ && prevWord.start <= position.column - 1 && position.column - 1 <= prevWord.end) {\n return WordOperations._createWordAtPosition(model, position.lineNumber, prevWord);\n }\n const nextWord = WordOperations._findNextWordOnLine(wordSeparators, model, position);\n if (nextWord && nextWord.wordType === 1 /* Regular */ && nextWord.start <= position.column - 1 && position.column - 1 <= nextWord.end) {\n return WordOperations._createWordAtPosition(model, position.lineNumber, nextWord);\n }\n return null;\n }\n static word(config, model, cursor, inSelectionMode, position) {\n const wordSeparators = getMapForWordSeparators(config.wordSeparators);\n let prevWord = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);\n let nextWord = WordOperations._findNextWordOnLine(wordSeparators, model, position);\n if (!inSelectionMode) {\n // Entering word selection for the first time\n let startColumn;\n let endColumn;\n if (prevWord && prevWord.wordType === 1 /* Regular */ && prevWord.start <= position.column - 1 && position.column - 1 <= prevWord.end) {\n // isTouchingPrevWord\n startColumn = prevWord.start + 1;\n endColumn = prevWord.end + 1;\n }\n else if (nextWord && nextWord.wordType === 1 /* Regular */ && nextWord.start <= position.column - 1 && position.column - 1 <= nextWord.end) {\n // isTouchingNextWord\n startColumn = nextWord.start + 1;\n endColumn = nextWord.end + 1;\n }\n else {\n if (prevWord) {\n startColumn = prevWord.end + 1;\n }\n else {\n startColumn = 1;\n }\n if (nextWord) {\n endColumn = nextWord.start + 1;\n }\n else {\n endColumn = model.getLineMaxColumn(position.lineNumber);\n }\n }\n return new SingleCursorState(new Range(position.lineNumber, startColumn, position.lineNumber, endColumn), 0, new Position(position.lineNumber, endColumn), 0);\n }\n let startColumn;\n let endColumn;\n if (prevWord && prevWord.wordType === 1 /* Regular */ && prevWord.start < position.column - 1 && position.column - 1 < prevWord.end) {\n // isInsidePrevWord\n startColumn = prevWord.start + 1;\n endColumn = prevWord.end + 1;\n }\n else if (nextWord && nextWord.wordType === 1 /* Regular */ && nextWord.start < position.column - 1 && position.column - 1 < nextWord.end) {\n // isInsideNextWord\n startColumn = nextWord.start + 1;\n endColumn = nextWord.end + 1;\n }\n else {\n startColumn = position.column;\n endColumn = position.column;\n }\n let lineNumber = position.lineNumber;\n let column;\n if (cursor.selectionStart.containsPosition(position)) {\n column = cursor.selectionStart.endColumn;\n }\n else if (position.isBeforeOrEqual(cursor.selectionStart.getStartPosition())) {\n column = startColumn;\n let possiblePosition = new Position(lineNumber, column);\n if (cursor.selectionStart.containsPosition(possiblePosition)) {\n column = cursor.selectionStart.endColumn;\n }\n }\n else {\n column = endColumn;\n let possiblePosition = new Position(lineNumber, column);\n if (cursor.selectionStart.containsPosition(possiblePosition)) {\n column = cursor.selectionStart.startColumn;\n }\n }\n return cursor.move(true, lineNumber, column, 0);\n }\n}\nexport class WordPartOperations extends WordOperations {\n static deleteWordPartLeft(ctx) {\n const candidates = enforceDefined([\n WordOperations.deleteWordLeft(ctx, 0 /* WordStart */),\n WordOperations.deleteWordLeft(ctx, 2 /* WordEnd */),\n WordOperations._deleteWordPartLeft(ctx.model, ctx.selection)\n ]);\n candidates.sort(Range.compareRangesUsingEnds);\n return candidates[2];\n }\n static deleteWordPartRight(ctx) {\n const candidates = enforceDefined([\n WordOperations.deleteWordRight(ctx, 0 /* WordStart */),\n WordOperations.deleteWordRight(ctx, 2 /* WordEnd */),\n WordOperations._deleteWordPartRight(ctx.model, ctx.selection)\n ]);\n candidates.sort(Range.compareRangesUsingStarts);\n return candidates[0];\n }\n static moveWordPartLeft(wordSeparators, model, position) {\n const candidates = enforceDefined([\n WordOperations.moveWordLeft(wordSeparators, model, position, 0 /* WordStart */),\n WordOperations.moveWordLeft(wordSeparators, model, position, 2 /* WordEnd */),\n WordOperations._moveWordPartLeft(model, position)\n ]);\n candidates.sort(Position.compare);\n return candidates[2];\n }\n static moveWordPartRight(wordSeparators, model, position) {\n const candidates = enforceDefined([\n WordOperations.moveWordRight(wordSeparators, model, position, 0 /* WordStart */),\n WordOperations.moveWordRight(wordSeparators, model, position, 2 /* WordEnd */),\n WordOperations._moveWordPartRight(model, position)\n ]);\n candidates.sort(Position.compare);\n return candidates[0];\n }\n}\nfunction enforceDefined(arr) {\n return arr.filter(el => Boolean(el));\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 *--------------------------------------------------------------------------------------------*/\nimport { CharacterClassifier } from '../core/characterClassifier.js';\nexport class WordCharacterClassifier extends CharacterClassifier {\n constructor(wordSeparators) {\n super(0 /* Regular */);\n for (let i = 0, len = wordSeparators.length; i < len; i++) {\n this.set(wordSeparators.charCodeAt(i), 2 /* WordSeparator */);\n }\n this.set(32 /* Space */, 1 /* Whitespace */);\n this.set(9 /* Tab */, 1 /* Whitespace */);\n }\n}\nfunction once(computeFn) {\n let cache = {}; // TODO@Alex unbounded cache\n return (input) => {\n if (!cache.hasOwnProperty(input)) {\n cache[input] = computeFn(input);\n }\n return cache[input];\n };\n}\nexport const getMapForWordSeparators = once((input) => new WordCharacterClassifier(input));\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 *--------------------------------------------------------------------------------------------*/\nimport { toUint8 } from '../../../base/common/uint.js';\n/**\n * A fast character classifier that uses a compact array for ASCII values.\n */\nexport class CharacterClassifier {\n constructor(_defaultValue) {\n let defaultValue = toUint8(_defaultValue);\n this._defaultValue = defaultValue;\n this._asciiMap = CharacterClassifier._createAsciiMap(defaultValue);\n this._map = new Map();\n }\n static _createAsciiMap(defaultValue) {\n let asciiMap = new Uint8Array(256);\n for (let i = 0; i < 256; i++) {\n asciiMap[i] = defaultValue;\n }\n return asciiMap;\n }\n set(charCode, _value) {\n let value = toUint8(_value);\n if (charCode >= 0 && charCode < 256) {\n this._asciiMap[charCode] = value;\n }\n else {\n this._map.set(charCode, value);\n }\n }\n get(charCode) {\n if (charCode >= 0 && charCode < 256) {\n return this._asciiMap[charCode];\n }\n else {\n return (this._map.get(charCode) || this._defaultValue);\n }\n }\n}\nexport class CharacterSet {\n constructor() {\n this._actual = new CharacterClassifier(0 /* False */);\n }\n add(charCode) {\n this._actual.set(charCode, 1 /* True */);\n }\n has(charCode) {\n return (this._actual.get(charCode) === 1 /* True */);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Range } from './range.js';\nexport class EditOperation {\n static insert(position, text) {\n return {\n range: new Range(position.lineNumber, position.column, position.lineNumber, position.column),\n text: text,\n forceMoveMarkers: true\n };\n }\n static delete(range) {\n return {\n range: range,\n text: null\n };\n }\n static replace(range, text) {\n return {\n range: range,\n text: text\n };\n }\n static replaceMove(range, text) {\n return {\n range: range,\n text: text,\n forceMoveMarkers: true\n };\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { TokenMetadata } from '../modes.js';\nexport class LineTokens {\n constructor(tokens, text) {\n this._tokens = tokens;\n this._tokensCount = (this._tokens.length >>> 1);\n this._text = text;\n }\n equals(other) {\n if (other instanceof LineTokens) {\n return this.slicedEquals(other, 0, this._tokensCount);\n }\n return false;\n }\n slicedEquals(other, sliceFromTokenIndex, sliceTokenCount) {\n if (this._text !== other._text) {\n return false;\n }\n if (this._tokensCount !== other._tokensCount) {\n return false;\n }\n const from = (sliceFromTokenIndex << 1);\n const to = from + (sliceTokenCount << 1);\n for (let i = from; i < to; i++) {\n if (this._tokens[i] !== other._tokens[i]) {\n return false;\n }\n }\n return true;\n }\n getLineContent() {\n return this._text;\n }\n getCount() {\n return this._tokensCount;\n }\n getStartOffset(tokenIndex) {\n if (tokenIndex > 0) {\n return this._tokens[(tokenIndex - 1) << 1];\n }\n return 0;\n }\n getMetadata(tokenIndex) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return metadata;\n }\n getLanguageId(tokenIndex) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return TokenMetadata.getLanguageId(metadata);\n }\n getStandardTokenType(tokenIndex) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return TokenMetadata.getTokenType(metadata);\n }\n getForeground(tokenIndex) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return TokenMetadata.getForeground(metadata);\n }\n getClassName(tokenIndex) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return TokenMetadata.getClassNameFromMetadata(metadata);\n }\n getInlineStyle(tokenIndex, colorMap) {\n const metadata = this._tokens[(tokenIndex << 1) + 1];\n return TokenMetadata.getInlineStyleFromMetadata(metadata, colorMap);\n }\n getEndOffset(tokenIndex) {\n return this._tokens[tokenIndex << 1];\n }\n /**\n * Find the token containing offset `offset`.\n * @param offset The search offset\n * @return The index of the token containing the offset.\n */\n findTokenIndexAtOffset(offset) {\n return LineTokens.findIndexInTokensArray(this._tokens, offset);\n }\n inflate() {\n return this;\n }\n sliceAndInflate(startOffset, endOffset, deltaOffset) {\n return new SlicedLineTokens(this, startOffset, endOffset, deltaOffset);\n }\n static convertToEndOffset(tokens, lineTextLength) {\n const tokenCount = (tokens.length >>> 1);\n const lastTokenIndex = tokenCount - 1;\n for (let tokenIndex = 0; tokenIndex < lastTokenIndex; tokenIndex++) {\n tokens[tokenIndex << 1] = tokens[(tokenIndex + 1) << 1];\n }\n tokens[lastTokenIndex << 1] = lineTextLength;\n }\n static findIndexInTokensArray(tokens, desiredIndex) {\n if (tokens.length <= 2) {\n return 0;\n }\n let low = 0;\n let high = (tokens.length >>> 1) - 1;\n while (low < high) {\n const mid = low + Math.floor((high - low) / 2);\n const endOffset = tokens[(mid << 1)];\n if (endOffset === desiredIndex) {\n return mid + 1;\n }\n else if (endOffset < desiredIndex) {\n low = mid + 1;\n }\n else if (endOffset > desiredIndex) {\n high = mid;\n }\n }\n return low;\n }\n}\nexport class SlicedLineTokens {\n constructor(source, startOffset, endOffset, deltaOffset) {\n this._source = source;\n this._startOffset = startOffset;\n this._endOffset = endOffset;\n this._deltaOffset = deltaOffset;\n this._firstTokenIndex = source.findTokenIndexAtOffset(startOffset);\n this._tokensCount = 0;\n for (let i = this._firstTokenIndex, len = source.getCount(); i < len; i++) {\n const tokenStartOffset = source.getStartOffset(i);\n if (tokenStartOffset >= endOffset) {\n break;\n }\n this._tokensCount++;\n }\n }\n equals(other) {\n if (other instanceof SlicedLineTokens) {\n return (this._startOffset === other._startOffset\n && this._endOffset === other._endOffset\n && this._deltaOffset === other._deltaOffset\n && this._source.slicedEquals(other._source, this._firstTokenIndex, this._tokensCount));\n }\n return false;\n }\n getCount() {\n return this._tokensCount;\n }\n getForeground(tokenIndex) {\n return this._source.getForeground(this._firstTokenIndex + tokenIndex);\n }\n getEndOffset(tokenIndex) {\n const tokenEndOffset = this._source.getEndOffset(this._firstTokenIndex + tokenIndex);\n return Math.min(this._endOffset, tokenEndOffset) - this._startOffset + this._deltaOffset;\n }\n getClassName(tokenIndex) {\n return this._source.getClassName(this._firstTokenIndex + tokenIndex);\n }\n getInlineStyle(tokenIndex, colorMap) {\n return this._source.getInlineStyle(this._firstTokenIndex + tokenIndex, colorMap);\n }\n findTokenIndexAtOffset(offset) {\n return this._source.findTokenIndexAtOffset(offset + this._startOffset - this._deltaOffset) - this._firstTokenIndex;\n }\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/**\n * A position in the editor.\n */\nexport class Position {\n constructor(lineNumber, column) {\n this.lineNumber = lineNumber;\n this.column = column;\n }\n /**\n * Create a new position from this position.\n *\n * @param newLineNumber new line number\n * @param newColumn new column\n */\n with(newLineNumber = this.lineNumber, newColumn = this.column) {\n if (newLineNumber === this.lineNumber && newColumn === this.column) {\n return this;\n }\n else {\n return new Position(newLineNumber, newColumn);\n }\n }\n /**\n * Derive a new position from this position.\n *\n * @param deltaLineNumber line number delta\n * @param deltaColumn column delta\n */\n delta(deltaLineNumber = 0, deltaColumn = 0) {\n return this.with(this.lineNumber + deltaLineNumber, this.column + deltaColumn);\n }\n /**\n * Test if this position equals other position\n */\n equals(other) {\n return Position.equals(this, other);\n }\n /**\n * Test if position `a` equals position `b`\n */\n static equals(a, b) {\n if (!a && !b) {\n return true;\n }\n return (!!a &&\n !!b &&\n a.lineNumber === b.lineNumber &&\n a.column === b.column);\n }\n /**\n * Test if this position is before other position.\n * If the two positions are equal, the result will be false.\n */\n isBefore(other) {\n return Position.isBefore(this, other);\n }\n /**\n * Test if position `a` is before position `b`.\n * If the two positions are equal, the result will be false.\n */\n static isBefore(a, b) {\n if (a.lineNumber < b.lineNumber) {\n return true;\n }\n if (b.lineNumber < a.lineNumber) {\n return false;\n }\n return a.column < b.column;\n }\n /**\n * Test if this position is before other position.\n * If the two positions are equal, the result will be true.\n */\n isBeforeOrEqual(other) {\n return Position.isBeforeOrEqual(this, other);\n }\n /**\n * Test if position `a` is before position `b`.\n * If the two positions are equal, the result will be true.\n */\n static isBeforeOrEqual(a, b) {\n if (a.lineNumber < b.lineNumber) {\n return true;\n }\n if (b.lineNumber < a.lineNumber) {\n return false;\n }\n return a.column <= b.column;\n }\n /**\n * A function that compares positions, useful for sorting\n */\n static compare(a, b) {\n let aLineNumber = a.lineNumber | 0;\n let bLineNumber = b.lineNumber | 0;\n if (aLineNumber === bLineNumber) {\n let aColumn = a.column | 0;\n let bColumn = b.column | 0;\n return aColumn - bColumn;\n }\n return aLineNumber - bLineNumber;\n }\n /**\n * Clone this position.\n */\n clone() {\n return new Position(this.lineNumber, this.column);\n }\n /**\n * Convert to a human-readable representation.\n */\n toString() {\n return '(' + this.lineNumber + ',' + this.column + ')';\n }\n // ---\n /**\n * Create a `Position` from an `IPosition`.\n */\n static lift(pos) {\n return new Position(pos.lineNumber, pos.column);\n }\n /**\n * Test if `obj` is an `IPosition`.\n */\n static isIPosition(obj) {\n return (obj\n && (typeof obj.lineNumber === 'number')\n && (typeof obj.column === 'number'));\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Position } from './position.js';\n/**\n * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)\n */\nexport class Range {\n constructor(startLineNumber, startColumn, endLineNumber, endColumn) {\n if ((startLineNumber > endLineNumber) || (startLineNumber === endLineNumber && startColumn > endColumn)) {\n this.startLineNumber = endLineNumber;\n this.startColumn = endColumn;\n this.endLineNumber = startLineNumber;\n this.endColumn = startColumn;\n }\n else {\n this.startLineNumber = startLineNumber;\n this.startColumn = startColumn;\n this.endLineNumber = endLineNumber;\n this.endColumn = endColumn;\n }\n }\n /**\n * Test if this range is empty.\n */\n isEmpty() {\n return Range.isEmpty(this);\n }\n /**\n * Test if `range` is empty.\n */\n static isEmpty(range) {\n return (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn);\n }\n /**\n * Test if position is in this range. If the position is at the edges, will return true.\n */\n containsPosition(position) {\n return Range.containsPosition(this, position);\n }\n /**\n * Test if `position` is in `range`. If the position is at the edges, will return true.\n */\n static containsPosition(range, position) {\n if (position.lineNumber < range.startLineNumber || position.lineNumber > range.endLineNumber) {\n return false;\n }\n if (position.lineNumber === range.startLineNumber && position.column < range.startColumn) {\n return false;\n }\n if (position.lineNumber === range.endLineNumber && position.column > range.endColumn) {\n return false;\n }\n return true;\n }\n /**\n * Test if range is in this range. If the range is equal to this range, will return true.\n */\n containsRange(range) {\n return Range.containsRange(this, range);\n }\n /**\n * Test if `otherRange` is in `range`. If the ranges are equal, will return true.\n */\n static containsRange(range, otherRange) {\n if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn < range.startColumn) {\n return false;\n }\n if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn > range.endColumn) {\n return false;\n }\n return true;\n }\n /**\n * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true.\n */\n strictContainsRange(range) {\n return Range.strictContainsRange(this, range);\n }\n /**\n * Test if `otherRange` is strinctly in `range` (must start after, and end before). If the ranges are equal, will return false.\n */\n static strictContainsRange(range, otherRange) {\n if (otherRange.startLineNumber < range.startLineNumber || otherRange.endLineNumber < range.startLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber > range.endLineNumber || otherRange.endLineNumber > range.endLineNumber) {\n return false;\n }\n if (otherRange.startLineNumber === range.startLineNumber && otherRange.startColumn <= range.startColumn) {\n return false;\n }\n if (otherRange.endLineNumber === range.endLineNumber && otherRange.endColumn >= range.endColumn) {\n return false;\n }\n return true;\n }\n /**\n * A reunion of the two ranges.\n * The smallest position will be used as the start point, and the largest one as the end point.\n */\n plusRange(range) {\n return Range.plusRange(this, range);\n }\n /**\n * A reunion of the two ranges.\n * The smallest position will be used as the start point, and the largest one as the end point.\n */\n static plusRange(a, b) {\n let startLineNumber;\n let startColumn;\n let endLineNumber;\n let endColumn;\n if (b.startLineNumber < a.startLineNumber) {\n startLineNumber = b.startLineNumber;\n startColumn = b.startColumn;\n }\n else if (b.startLineNumber === a.startLineNumber) {\n startLineNumber = b.startLineNumber;\n startColumn = Math.min(b.startColumn, a.startColumn);\n }\n else {\n startLineNumber = a.startLineNumber;\n startColumn = a.startColumn;\n }\n if (b.endLineNumber > a.endLineNumber) {\n endLineNumber = b.endLineNumber;\n endColumn = b.endColumn;\n }\n else if (b.endLineNumber === a.endLineNumber) {\n endLineNumber = b.endLineNumber;\n endColumn = Math.max(b.endColumn, a.endColumn);\n }\n else {\n endLineNumber = a.endLineNumber;\n endColumn = a.endColumn;\n }\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n /**\n * A intersection of the two ranges.\n */\n intersectRanges(range) {\n return Range.intersectRanges(this, range);\n }\n /**\n * A intersection of the two ranges.\n */\n static intersectRanges(a, b) {\n let resultStartLineNumber = a.startLineNumber;\n let resultStartColumn = a.startColumn;\n let resultEndLineNumber = a.endLineNumber;\n let resultEndColumn = a.endColumn;\n let otherStartLineNumber = b.startLineNumber;\n let otherStartColumn = b.startColumn;\n let otherEndLineNumber = b.endLineNumber;\n let otherEndColumn = b.endColumn;\n if (resultStartLineNumber < otherStartLineNumber) {\n resultStartLineNumber = otherStartLineNumber;\n resultStartColumn = otherStartColumn;\n }\n else if (resultStartLineNumber === otherStartLineNumber) {\n resultStartColumn = Math.max(resultStartColumn, otherStartColumn);\n }\n if (resultEndLineNumber > otherEndLineNumber) {\n resultEndLineNumber = otherEndLineNumber;\n resultEndColumn = otherEndColumn;\n }\n else if (resultEndLineNumber === otherEndLineNumber) {\n resultEndColumn = Math.min(resultEndColumn, otherEndColumn);\n }\n // Check if selection is now empty\n if (resultStartLineNumber > resultEndLineNumber) {\n return null;\n }\n if (resultStartLineNumber === resultEndLineNumber && resultStartColumn > resultEndColumn) {\n return null;\n }\n return new Range(resultStartLineNumber, resultStartColumn, resultEndLineNumber, resultEndColumn);\n }\n /**\n * Test if this range equals other.\n */\n equalsRange(other) {\n return Range.equalsRange(this, other);\n }\n /**\n * Test if range `a` equals `b`.\n */\n static equalsRange(a, b) {\n return (!!a &&\n !!b &&\n a.startLineNumber === b.startLineNumber &&\n a.startColumn === b.startColumn &&\n a.endLineNumber === b.endLineNumber &&\n a.endColumn === b.endColumn);\n }\n /**\n * Return the end position (which will be after or equal to the start position)\n */\n getEndPosition() {\n return Range.getEndPosition(this);\n }\n /**\n * Return the end position (which will be after or equal to the start position)\n */\n static getEndPosition(range) {\n return new Position(range.endLineNumber, range.endColumn);\n }\n /**\n * Return the start position (which will be before or equal to the end position)\n */\n getStartPosition() {\n return Range.getStartPosition(this);\n }\n /**\n * Return the start position (which will be before or equal to the end position)\n */\n static getStartPosition(range) {\n return new Position(range.startLineNumber, range.startColumn);\n }\n /**\n * Transform to a user presentable string representation.\n */\n toString() {\n return '[' + this.startLineNumber + ',' + this.startColumn + ' -> ' + this.endLineNumber + ',' + this.endColumn + ']';\n }\n /**\n * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position.\n */\n setEndPosition(endLineNumber, endColumn) {\n return new Range(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n }\n /**\n * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position.\n */\n setStartPosition(startLineNumber, startColumn) {\n return new Range(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n }\n /**\n * Create a new empty range using this range's start position.\n */\n collapseToStart() {\n return Range.collapseToStart(this);\n }\n /**\n * Create a new empty range using this range's start position.\n */\n static collapseToStart(range) {\n return new Range(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\n }\n // ---\n static fromPositions(start, end = start) {\n return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n static lift(range) {\n if (!range) {\n return null;\n }\n return new Range(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n }\n /**\n * Test if `obj` is an `IRange`.\n */\n static isIRange(obj) {\n return (obj\n && (typeof obj.startLineNumber === 'number')\n && (typeof obj.startColumn === 'number')\n && (typeof obj.endLineNumber === 'number')\n && (typeof obj.endColumn === 'number'));\n }\n /**\n * Test if the two ranges are touching in any way.\n */\n static areIntersectingOrTouching(a, b) {\n // Check if `a` is before `b`\n if (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn < b.startColumn)) {\n return false;\n }\n // Check if `b` is before `a`\n if (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn < a.startColumn)) {\n return false;\n }\n // These ranges must intersect\n return true;\n }\n /**\n * Test if the two ranges are intersecting. If the ranges are touching it returns true.\n */\n static areIntersecting(a, b) {\n // Check if `a` is before `b`\n if (a.endLineNumber < b.startLineNumber || (a.endLineNumber === b.startLineNumber && a.endColumn <= b.startColumn)) {\n return false;\n }\n // Check if `b` is before `a`\n if (b.endLineNumber < a.startLineNumber || (b.endLineNumber === a.startLineNumber && b.endColumn <= a.startColumn)) {\n return false;\n }\n // These ranges must intersect\n return true;\n }\n /**\n * A function that compares ranges, useful for sorting ranges\n * It will first compare ranges on the startPosition and then on the endPosition\n */\n static compareRangesUsingStarts(a, b) {\n if (a && b) {\n const aStartLineNumber = a.startLineNumber | 0;\n const bStartLineNumber = b.startLineNumber | 0;\n if (aStartLineNumber === bStartLineNumber) {\n const aStartColumn = a.startColumn | 0;\n const bStartColumn = b.startColumn | 0;\n if (aStartColumn === bStartColumn) {\n const aEndLineNumber = a.endLineNumber | 0;\n const bEndLineNumber = b.endLineNumber | 0;\n if (aEndLineNumber === bEndLineNumber) {\n const aEndColumn = a.endColumn | 0;\n const bEndColumn = b.endColumn | 0;\n return aEndColumn - bEndColumn;\n }\n return aEndLineNumber - bEndLineNumber;\n }\n return aStartColumn - bStartColumn;\n }\n return aStartLineNumber - bStartLineNumber;\n }\n const aExists = (a ? 1 : 0);\n const bExists = (b ? 1 : 0);\n return aExists - bExists;\n }\n /**\n * A function that compares ranges, useful for sorting ranges\n * It will first compare ranges on the endPosition and then on the startPosition\n */\n static compareRangesUsingEnds(a, b) {\n if (a.endLineNumber === b.endLineNumber) {\n if (a.endColumn === b.endColumn) {\n if (a.startLineNumber === b.startLineNumber) {\n return a.startColumn - b.startColumn;\n }\n return a.startLineNumber - b.startLineNumber;\n }\n return a.endColumn - b.endColumn;\n }\n return a.endLineNumber - b.endLineNumber;\n }\n /**\n * Test if the range spans multiple lines.\n */\n static spansMultipleLines(range) {\n return range.endLineNumber > range.startLineNumber;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Position } from './position.js';\nimport { Range } from './range.js';\n/**\n * A selection in the editor.\n * The selection is a range that has an orientation.\n */\nexport class Selection extends Range {\n constructor(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn) {\n super(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn);\n this.selectionStartLineNumber = selectionStartLineNumber;\n this.selectionStartColumn = selectionStartColumn;\n this.positionLineNumber = positionLineNumber;\n this.positionColumn = positionColumn;\n }\n /**\n * Transform to a human-readable representation.\n */\n toString() {\n return '[' + this.selectionStartLineNumber + ',' + this.selectionStartColumn + ' -> ' + this.positionLineNumber + ',' + this.positionColumn + ']';\n }\n /**\n * Test if equals other selection.\n */\n equalsSelection(other) {\n return (Selection.selectionsEqual(this, other));\n }\n /**\n * Test if the two selections are equal.\n */\n static selectionsEqual(a, b) {\n return (a.selectionStartLineNumber === b.selectionStartLineNumber &&\n a.selectionStartColumn === b.selectionStartColumn &&\n a.positionLineNumber === b.positionLineNumber &&\n a.positionColumn === b.positionColumn);\n }\n /**\n * Get directions (LTR or RTL).\n */\n getDirection() {\n if (this.selectionStartLineNumber === this.startLineNumber && this.selectionStartColumn === this.startColumn) {\n return 0 /* LTR */;\n }\n return 1 /* RTL */;\n }\n /**\n * Create a new selection with a different `positionLineNumber` and `positionColumn`.\n */\n setEndPosition(endLineNumber, endColumn) {\n if (this.getDirection() === 0 /* LTR */) {\n return new Selection(this.startLineNumber, this.startColumn, endLineNumber, endColumn);\n }\n return new Selection(endLineNumber, endColumn, this.startLineNumber, this.startColumn);\n }\n /**\n * Get the position at `positionLineNumber` and `positionColumn`.\n */\n getPosition() {\n return new Position(this.positionLineNumber, this.positionColumn);\n }\n /**\n * Create a new selection with a different `selectionStartLineNumber` and `selectionStartColumn`.\n */\n setStartPosition(startLineNumber, startColumn) {\n if (this.getDirection() === 0 /* LTR */) {\n return new Selection(startLineNumber, startColumn, this.endLineNumber, this.endColumn);\n }\n return new Selection(this.endLineNumber, this.endColumn, startLineNumber, startColumn);\n }\n // ----\n /**\n * Create a `Selection` from one or two positions\n */\n static fromPositions(start, end = start) {\n return new Selection(start.lineNumber, start.column, end.lineNumber, end.column);\n }\n /**\n * Create a `Selection` from an `ISelection`.\n */\n static liftSelection(sel) {\n return new Selection(sel.selectionStartLineNumber, sel.selectionStartColumn, sel.positionLineNumber, sel.positionColumn);\n }\n /**\n * `a` equals `b`.\n */\n static selectionsArrEqual(a, b) {\n if (a && !b || !a && b) {\n return false;\n }\n if (!a && !b) {\n return true;\n }\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0, len = a.length; i < len; i++) {\n if (!this.selectionsEqual(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n /**\n * Test if `obj` is an `ISelection`.\n */\n static isISelection(obj) {\n return (obj\n && (typeof obj.selectionStartLineNumber === 'number')\n && (typeof obj.selectionStartColumn === 'number')\n && (typeof obj.positionLineNumber === 'number')\n && (typeof obj.positionColumn === 'number'));\n }\n /**\n * Create with a direction.\n */\n static createWithDirection(startLineNumber, startColumn, endLineNumber, endColumn, direction) {\n if (direction === 0 /* LTR */) {\n return new Selection(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n return new Selection(endLineNumber, endColumn, startLineNumber, startColumn);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport * as platform from '../../../base/common/platform.js';\nimport * as buffer from '../../../base/common/buffer.js';\nlet _utf16LE_TextDecoder;\nfunction getUTF16LE_TextDecoder() {\n if (!_utf16LE_TextDecoder) {\n _utf16LE_TextDecoder = new TextDecoder('UTF-16LE');\n }\n return _utf16LE_TextDecoder;\n}\nlet _utf16BE_TextDecoder;\nfunction getUTF16BE_TextDecoder() {\n if (!_utf16BE_TextDecoder) {\n _utf16BE_TextDecoder = new TextDecoder('UTF-16BE');\n }\n return _utf16BE_TextDecoder;\n}\nlet _platformTextDecoder;\nexport function getPlatformTextDecoder() {\n if (!_platformTextDecoder) {\n _platformTextDecoder = platform.isLittleEndian() ? getUTF16LE_TextDecoder() : getUTF16BE_TextDecoder();\n }\n return _platformTextDecoder;\n}\nexport const hasTextDecoder = (typeof TextDecoder !== 'undefined');\nexport let createStringBuilder;\nexport let decodeUTF16LE;\nif (hasTextDecoder) {\n createStringBuilder = (capacity) => new StringBuilder(capacity);\n decodeUTF16LE = standardDecodeUTF16LE;\n}\nelse {\n createStringBuilder = (capacity) => new CompatStringBuilder();\n decodeUTF16LE = compatDecodeUTF16LE;\n}\nfunction standardDecodeUTF16LE(source, offset, len) {\n const view = new Uint16Array(source.buffer, offset, len);\n if (len > 0 && (view[0] === 0xFEFF || view[0] === 0xFFFE)) {\n // UTF16 sometimes starts with a BOM https://de.wikipedia.org/wiki/Byte_Order_Mark\n // It looks like TextDecoder.decode will eat up a leading BOM (0xFEFF or 0xFFFE)\n // We don't want that behavior because we know the string is UTF16LE and the BOM should be maintained\n // So we use the manual decoder\n return compatDecodeUTF16LE(source, offset, len);\n }\n return getUTF16LE_TextDecoder().decode(view);\n}\nfunction compatDecodeUTF16LE(source, offset, len) {\n let result = [];\n let resultLen = 0;\n for (let i = 0; i < len; i++) {\n const charCode = buffer.readUInt16LE(source, offset);\n offset += 2;\n result[resultLen++] = String.fromCharCode(charCode);\n }\n return result.join('');\n}\nclass StringBuilder {\n constructor(capacity) {\n this._capacity = capacity | 0;\n this._buffer = new Uint16Array(this._capacity);\n this._completedStrings = null;\n this._bufferLength = 0;\n }\n reset() {\n this._completedStrings = null;\n this._bufferLength = 0;\n }\n build() {\n if (this._completedStrings !== null) {\n this._flushBuffer();\n return this._completedStrings.join('');\n }\n return this._buildBuffer();\n }\n _buildBuffer() {\n if (this._bufferLength === 0) {\n return '';\n }\n const view = new Uint16Array(this._buffer.buffer, 0, this._bufferLength);\n return getPlatformTextDecoder().decode(view);\n }\n _flushBuffer() {\n const bufferString = this._buildBuffer();\n this._bufferLength = 0;\n if (this._completedStrings === null) {\n this._completedStrings = [bufferString];\n }\n else {\n this._completedStrings[this._completedStrings.length] = bufferString;\n }\n }\n write1(charCode) {\n const remainingSpace = this._capacity - this._bufferLength;\n if (remainingSpace <= 1) {\n if (remainingSpace === 0 || strings.isHighSurrogate(charCode)) {\n this._flushBuffer();\n }\n }\n this._buffer[this._bufferLength++] = charCode;\n }\n appendASCII(charCode) {\n if (this._bufferLength === this._capacity) {\n // buffer is full\n this._flushBuffer();\n }\n this._buffer[this._bufferLength++] = charCode;\n }\n appendASCIIString(str) {\n const strLen = str.length;\n if (this._bufferLength + strLen >= this._capacity) {\n // This string does not fit in the remaining buffer space\n this._flushBuffer();\n this._completedStrings[this._completedStrings.length] = str;\n return;\n }\n for (let i = 0; i < strLen; i++) {\n this._buffer[this._bufferLength++] = str.charCodeAt(i);\n }\n }\n}\nclass CompatStringBuilder {\n constructor() {\n this._pieces = [];\n this._piecesLen = 0;\n }\n reset() {\n this._pieces = [];\n this._piecesLen = 0;\n }\n build() {\n return this._pieces.join('');\n }\n write1(charCode) {\n this._pieces[this._piecesLen++] = String.fromCharCode(charCode);\n }\n appendASCII(charCode) {\n this._pieces[this._piecesLen++] = String.fromCharCode(charCode);\n }\n appendASCIIString(str) {\n this._pieces[this._piecesLen++] = str;\n }\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 *--------------------------------------------------------------------------------------------*/\nexport class Token {\n constructor(offset, type, language) {\n this.offset = offset | 0; // @perf\n this.type = type;\n this.language = language;\n }\n toString() {\n return '(' + this.offset + ', ' + this.type + ')';\n }\n}\nexport class TokenizationResult {\n constructor(tokens, endState) {\n this.tokens = tokens;\n this.endState = endState;\n }\n}\nexport class TokenizationResult2 {\n constructor(tokens, endState) {\n this.tokens = tokens;\n this.endState = endState;\n }\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 *--------------------------------------------------------------------------------------------*/\nexport class InternalEditorAction {\n constructor(id, label, alias, precondition, run, contextKeyService) {\n this.id = id;\n this.label = label;\n this.alias = alias;\n this._precondition = precondition;\n this._run = run;\n this._contextKeyService = contextKeyService;\n }\n isSupported() {\n return this._contextKeyService.contextMatchesRules(this._precondition);\n }\n run() {\n if (!this.isSupported()) {\n return Promise.resolve(undefined);\n }\n return this._run();\n }\n}\n","/**\n * @internal\n */\nexport function isThemeColor(o) {\n return o && typeof o.id === 'string';\n}\n/**\n * The type of the `IEditor`.\n */\nexport const EditorType = {\n ICodeEditor: 'vs.editor.ICodeEditor',\n IDiffEditor: 'vs.editor.IDiffEditor'\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../nls.js';\nimport { RawContextKey } from '../../platform/contextkey/common/contextkey.js';\nexport var EditorContextKeys;\n(function (EditorContextKeys) {\n EditorContextKeys.editorSimpleInput = new RawContextKey('editorSimpleInput', false, true);\n /**\n * A context key that is set when the editor's text has focus (cursor is blinking).\n * Is false when focus is in simple editor widgets (repl input, scm commit input).\n */\n EditorContextKeys.editorTextFocus = new RawContextKey('editorTextFocus', false, nls.localize('editorTextFocus', \"Whether the editor text has focus (cursor is blinking)\"));\n /**\n * A context key that is set when the editor's text or an editor's widget has focus.\n */\n EditorContextKeys.focus = new RawContextKey('editorFocus', false, nls.localize('editorFocus', \"Whether the editor or an editor widget has focus (e.g. focus is in the find widget)\"));\n /**\n * A context key that is set when any editor input has focus (regular editor, repl input...).\n */\n EditorContextKeys.textInputFocus = new RawContextKey('textInputFocus', false, nls.localize('textInputFocus', \"Whether an editor or a rich text input has focus (cursor is blinking)\"));\n EditorContextKeys.readOnly = new RawContextKey('editorReadonly', false, nls.localize('editorReadonly', \"Whether the editor is read only\"));\n EditorContextKeys.inDiffEditor = new RawContextKey('inDiffEditor', false, nls.localize('inDiffEditor', \"Whether the context is a diff editor\"));\n EditorContextKeys.columnSelection = new RawContextKey('editorColumnSelection', false, nls.localize('editorColumnSelection', \"Whether `editor.columnSelection` is enabled\"));\n EditorContextKeys.writable = EditorContextKeys.readOnly.toNegated();\n EditorContextKeys.hasNonEmptySelection = new RawContextKey('editorHasSelection', false, nls.localize('editorHasSelection', \"Whether the editor has text selected\"));\n EditorContextKeys.hasOnlyEmptySelection = EditorContextKeys.hasNonEmptySelection.toNegated();\n EditorContextKeys.hasMultipleSelections = new RawContextKey('editorHasMultipleSelections', false, nls.localize('editorHasMultipleSelections', \"Whether the editor has multiple selections\"));\n EditorContextKeys.hasSingleSelection = EditorContextKeys.hasMultipleSelections.toNegated();\n EditorContextKeys.tabMovesFocus = new RawContextKey('editorTabMovesFocus', false, nls.localize('editorTabMovesFocus', \"Whether `Tab` will move focus out of the editor\"));\n EditorContextKeys.tabDoesNotMoveFocus = EditorContextKeys.tabMovesFocus.toNegated();\n EditorContextKeys.isInWalkThroughSnippet = new RawContextKey('isInEmbeddedEditor', false, true);\n EditorContextKeys.canUndo = new RawContextKey('canUndo', false, true);\n EditorContextKeys.canRedo = new RawContextKey('canRedo', false, true);\n EditorContextKeys.hoverVisible = new RawContextKey('editorHoverVisible', false, nls.localize('editorHoverVisible', \"Whether the editor hover is visible\"));\n /**\n * A context key that is set when an editor is part of a larger editor, like notebooks or\n * (future) a diff editor\n */\n EditorContextKeys.inCompositeEditor = new RawContextKey('inCompositeEditor', undefined, nls.localize('inCompositeEditor', \"Whether the editor is part of a larger editor (e.g. notebooks)\"));\n EditorContextKeys.notInCompositeEditor = EditorContextKeys.inCompositeEditor.toNegated();\n // -- mode context keys\n EditorContextKeys.languageId = new RawContextKey('editorLangId', '', nls.localize('editorLangId', \"The language identifier of the editor\"));\n EditorContextKeys.hasCompletionItemProvider = new RawContextKey('editorHasCompletionItemProvider', false, nls.localize('editorHasCompletionItemProvider', \"Whether the editor has a completion item provider\"));\n EditorContextKeys.hasCodeActionsProvider = new RawContextKey('editorHasCodeActionsProvider', false, nls.localize('editorHasCodeActionsProvider', \"Whether the editor has a code actions provider\"));\n EditorContextKeys.hasCodeLensProvider = new RawContextKey('editorHasCodeLensProvider', false, nls.localize('editorHasCodeLensProvider', \"Whether the editor has a code lens provider\"));\n EditorContextKeys.hasDefinitionProvider = new RawContextKey('editorHasDefinitionProvider', false, nls.localize('editorHasDefinitionProvider', \"Whether the editor has a definition provider\"));\n EditorContextKeys.hasDeclarationProvider = new RawContextKey('editorHasDeclarationProvider', false, nls.localize('editorHasDeclarationProvider', \"Whether the editor has a declaration provider\"));\n EditorContextKeys.hasImplementationProvider = new RawContextKey('editorHasImplementationProvider', false, nls.localize('editorHasImplementationProvider', \"Whether the editor has an implementation provider\"));\n EditorContextKeys.hasTypeDefinitionProvider = new RawContextKey('editorHasTypeDefinitionProvider', false, nls.localize('editorHasTypeDefinitionProvider', \"Whether the editor has a type definition provider\"));\n EditorContextKeys.hasHoverProvider = new RawContextKey('editorHasHoverProvider', false, nls.localize('editorHasHoverProvider', \"Whether the editor has a hover provider\"));\n EditorContextKeys.hasDocumentHighlightProvider = new RawContextKey('editorHasDocumentHighlightProvider', false, nls.localize('editorHasDocumentHighlightProvider', \"Whether the editor has a document highlight provider\"));\n EditorContextKeys.hasDocumentSymbolProvider = new RawContextKey('editorHasDocumentSymbolProvider', false, nls.localize('editorHasDocumentSymbolProvider', \"Whether the editor has a document symbol provider\"));\n EditorContextKeys.hasReferenceProvider = new RawContextKey('editorHasReferenceProvider', false, nls.localize('editorHasReferenceProvider', \"Whether the editor has a reference provider\"));\n EditorContextKeys.hasRenameProvider = new RawContextKey('editorHasRenameProvider', false, nls.localize('editorHasRenameProvider', \"Whether the editor has a rename provider\"));\n EditorContextKeys.hasSignatureHelpProvider = new RawContextKey('editorHasSignatureHelpProvider', false, nls.localize('editorHasSignatureHelpProvider', \"Whether the editor has a signature help provider\"));\n EditorContextKeys.hasInlineHintsProvider = new RawContextKey('editorHasInlineHintsProvider', false, nls.localize('editorHasInlineHintsProvider', \"Whether the editor has an inline hints provider\"));\n // -- mode context keys: formatting\n EditorContextKeys.hasDocumentFormattingProvider = new RawContextKey('editorHasDocumentFormattingProvider', false, nls.localize('editorHasDocumentFormattingProvider', \"Whether the editor has a document formatting provider\"));\n EditorContextKeys.hasDocumentSelectionFormattingProvider = new RawContextKey('editorHasDocumentSelectionFormattingProvider', false, nls.localize('editorHasDocumentSelectionFormattingProvider', \"Whether the editor has a document selection formatting provider\"));\n EditorContextKeys.hasMultipleDocumentFormattingProvider = new RawContextKey('editorHasMultipleDocumentFormattingProvider', false, nls.localize('editorHasMultipleDocumentFormattingProvider', \"Whether the editor has multiple document formatting providers\"));\n EditorContextKeys.hasMultipleDocumentSelectionFormattingProvider = new RawContextKey('editorHasMultipleDocumentSelectionFormattingProvider', false, nls.localize('editorHasMultipleDocumentSelectionFormattingProvider', \"Whether the editor has multiple document selection formatting providers\"));\n})(EditorContextKeys || (EditorContextKeys = {}));\n","/**\n * Vertical Lane in the overview ruler of the editor.\n */\nexport var OverviewRulerLane;\n(function (OverviewRulerLane) {\n OverviewRulerLane[OverviewRulerLane[\"Left\"] = 1] = \"Left\";\n OverviewRulerLane[OverviewRulerLane[\"Center\"] = 2] = \"Center\";\n OverviewRulerLane[OverviewRulerLane[\"Right\"] = 4] = \"Right\";\n OverviewRulerLane[OverviewRulerLane[\"Full\"] = 7] = \"Full\";\n})(OverviewRulerLane || (OverviewRulerLane = {}));\n/**\n * Position in the minimap to render the decoration.\n */\nexport var MinimapPosition;\n(function (MinimapPosition) {\n MinimapPosition[MinimapPosition[\"Inline\"] = 1] = \"Inline\";\n MinimapPosition[MinimapPosition[\"Gutter\"] = 2] = \"Gutter\";\n})(MinimapPosition || (MinimapPosition = {}));\nexport class TextModelResolvedOptions {\n /**\n * @internal\n */\n constructor(src) {\n this.tabSize = Math.max(1, src.tabSize | 0);\n this.indentSize = src.tabSize | 0;\n this.insertSpaces = Boolean(src.insertSpaces);\n this.defaultEOL = src.defaultEOL | 0;\n this.trimAutoWhitespace = Boolean(src.trimAutoWhitespace);\n }\n /**\n * @internal\n */\n equals(other) {\n return (this.tabSize === other.tabSize\n && this.indentSize === other.indentSize\n && this.insertSpaces === other.insertSpaces\n && this.defaultEOL === other.defaultEOL\n && this.trimAutoWhitespace === other.trimAutoWhitespace);\n }\n /**\n * @internal\n */\n createChangeEvent(newOpts) {\n return {\n tabSize: this.tabSize !== newOpts.tabSize,\n indentSize: this.indentSize !== newOpts.indentSize,\n insertSpaces: this.insertSpaces !== newOpts.insertSpaces,\n trimAutoWhitespace: this.trimAutoWhitespace !== newOpts.trimAutoWhitespace,\n };\n }\n}\nexport class FindMatch {\n /**\n * @internal\n */\n constructor(range, matches) {\n this.range = range;\n this.matches = matches;\n }\n}\n/**\n * @internal\n */\nexport class ValidAnnotatedEditOperation {\n constructor(identifier, range, text, forceMoveMarkers, isAutoWhitespaceEdit, _isTracked) {\n this.identifier = identifier;\n this.range = range;\n this.text = text;\n this.forceMoveMarkers = forceMoveMarkers;\n this.isAutoWhitespaceEdit = isAutoWhitespaceEdit;\n this._isTracked = _isTracked;\n }\n}\n/**\n * @internal\n */\nexport class ApplyEditsResult {\n constructor(reverseEdits, changes, trimAutoWhitespaceLineNumbers) {\n this.reverseEdits = reverseEdits;\n this.changes = changes;\n this.trimAutoWhitespaceLineNumbers = trimAutoWhitespaceLineNumbers;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Selection } from '../core/selection.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { TextChange, compressConsecutiveTextChanges } from './textChange.js';\nimport * as buffer from '../../../base/common/buffer.js';\nimport { basename } from '../../../base/common/resources.js';\nfunction uriGetComparisonKey(resource) {\n return resource.toString();\n}\nexport class SingleModelEditStackData {\n constructor(beforeVersionId, afterVersionId, beforeEOL, afterEOL, beforeCursorState, afterCursorState, changes) {\n this.beforeVersionId = beforeVersionId;\n this.afterVersionId = afterVersionId;\n this.beforeEOL = beforeEOL;\n this.afterEOL = afterEOL;\n this.beforeCursorState = beforeCursorState;\n this.afterCursorState = afterCursorState;\n this.changes = changes;\n }\n static create(model, beforeCursorState) {\n const alternativeVersionId = model.getAlternativeVersionId();\n const eol = getModelEOL(model);\n return new SingleModelEditStackData(alternativeVersionId, alternativeVersionId, eol, eol, beforeCursorState, beforeCursorState, []);\n }\n append(model, textChanges, afterEOL, afterVersionId, afterCursorState) {\n if (textChanges.length > 0) {\n this.changes = compressConsecutiveTextChanges(this.changes, textChanges);\n }\n this.afterEOL = afterEOL;\n this.afterVersionId = afterVersionId;\n this.afterCursorState = afterCursorState;\n }\n static _writeSelectionsSize(selections) {\n return 4 + 4 * 4 * (selections ? selections.length : 0);\n }\n static _writeSelections(b, selections, offset) {\n buffer.writeUInt32BE(b, (selections ? selections.length : 0), offset);\n offset += 4;\n if (selections) {\n for (const selection of selections) {\n buffer.writeUInt32BE(b, selection.selectionStartLineNumber, offset);\n offset += 4;\n buffer.writeUInt32BE(b, selection.selectionStartColumn, offset);\n offset += 4;\n buffer.writeUInt32BE(b, selection.positionLineNumber, offset);\n offset += 4;\n buffer.writeUInt32BE(b, selection.positionColumn, offset);\n offset += 4;\n }\n }\n return offset;\n }\n static _readSelections(b, offset, dest) {\n const count = buffer.readUInt32BE(b, offset);\n offset += 4;\n for (let i = 0; i < count; i++) {\n const selectionStartLineNumber = buffer.readUInt32BE(b, offset);\n offset += 4;\n const selectionStartColumn = buffer.readUInt32BE(b, offset);\n offset += 4;\n const positionLineNumber = buffer.readUInt32BE(b, offset);\n offset += 4;\n const positionColumn = buffer.readUInt32BE(b, offset);\n offset += 4;\n dest.push(new Selection(selectionStartLineNumber, selectionStartColumn, positionLineNumber, positionColumn));\n }\n return offset;\n }\n serialize() {\n let necessarySize = (+4 // beforeVersionId\n + 4 // afterVersionId\n + 1 // beforeEOL\n + 1 // afterEOL\n + SingleModelEditStackData._writeSelectionsSize(this.beforeCursorState)\n + SingleModelEditStackData._writeSelectionsSize(this.afterCursorState)\n + 4 // change count\n );\n for (const change of this.changes) {\n necessarySize += change.writeSize();\n }\n const b = new Uint8Array(necessarySize);\n let offset = 0;\n buffer.writeUInt32BE(b, this.beforeVersionId, offset);\n offset += 4;\n buffer.writeUInt32BE(b, this.afterVersionId, offset);\n offset += 4;\n buffer.writeUInt8(b, this.beforeEOL, offset);\n offset += 1;\n buffer.writeUInt8(b, this.afterEOL, offset);\n offset += 1;\n offset = SingleModelEditStackData._writeSelections(b, this.beforeCursorState, offset);\n offset = SingleModelEditStackData._writeSelections(b, this.afterCursorState, offset);\n buffer.writeUInt32BE(b, this.changes.length, offset);\n offset += 4;\n for (const change of this.changes) {\n offset = change.write(b, offset);\n }\n return b.buffer;\n }\n static deserialize(source) {\n const b = new Uint8Array(source);\n let offset = 0;\n const beforeVersionId = buffer.readUInt32BE(b, offset);\n offset += 4;\n const afterVersionId = buffer.readUInt32BE(b, offset);\n offset += 4;\n const beforeEOL = buffer.readUInt8(b, offset);\n offset += 1;\n const afterEOL = buffer.readUInt8(b, offset);\n offset += 1;\n const beforeCursorState = [];\n offset = SingleModelEditStackData._readSelections(b, offset, beforeCursorState);\n const afterCursorState = [];\n offset = SingleModelEditStackData._readSelections(b, offset, afterCursorState);\n const changeCount = buffer.readUInt32BE(b, offset);\n offset += 4;\n const changes = [];\n for (let i = 0; i < changeCount; i++) {\n offset = TextChange.read(b, offset, changes);\n }\n return new SingleModelEditStackData(beforeVersionId, afterVersionId, beforeEOL, afterEOL, beforeCursorState, afterCursorState, changes);\n }\n}\nexport class SingleModelEditStackElement {\n constructor(model, beforeCursorState) {\n this.model = model;\n this._data = SingleModelEditStackData.create(model, beforeCursorState);\n }\n get type() {\n return 0 /* Resource */;\n }\n get resource() {\n if (URI.isUri(this.model)) {\n return this.model;\n }\n return this.model.uri;\n }\n get label() {\n return nls.localize('edit', \"Typing\");\n }\n toString() {\n const data = (this._data instanceof SingleModelEditStackData ? this._data : SingleModelEditStackData.deserialize(this._data));\n return data.changes.map(change => change.toString()).join(', ');\n }\n matchesResource(resource) {\n const uri = (URI.isUri(this.model) ? this.model : this.model.uri);\n return (uri.toString() === resource.toString());\n }\n setModel(model) {\n this.model = model;\n }\n canAppend(model) {\n return (this.model === model && this._data instanceof SingleModelEditStackData);\n }\n append(model, textChanges, afterEOL, afterVersionId, afterCursorState) {\n if (this._data instanceof SingleModelEditStackData) {\n this._data.append(model, textChanges, afterEOL, afterVersionId, afterCursorState);\n }\n }\n close() {\n if (this._data instanceof SingleModelEditStackData) {\n this._data = this._data.serialize();\n }\n }\n open() {\n if (!(this._data instanceof SingleModelEditStackData)) {\n this._data = SingleModelEditStackData.deserialize(this._data);\n }\n }\n undo() {\n if (URI.isUri(this.model)) {\n // don't have a model\n throw new Error(`Invalid SingleModelEditStackElement`);\n }\n if (this._data instanceof SingleModelEditStackData) {\n this._data = this._data.serialize();\n }\n const data = SingleModelEditStackData.deserialize(this._data);\n this.model._applyUndo(data.changes, data.beforeEOL, data.beforeVersionId, data.beforeCursorState);\n }\n redo() {\n if (URI.isUri(this.model)) {\n // don't have a model\n throw new Error(`Invalid SingleModelEditStackElement`);\n }\n if (this._data instanceof SingleModelEditStackData) {\n this._data = this._data.serialize();\n }\n const data = SingleModelEditStackData.deserialize(this._data);\n this.model._applyRedo(data.changes, data.afterEOL, data.afterVersionId, data.afterCursorState);\n }\n heapSize() {\n if (this._data instanceof SingleModelEditStackData) {\n this._data = this._data.serialize();\n }\n return this._data.byteLength + 168 /*heap overhead*/;\n }\n}\nexport class MultiModelEditStackElement {\n constructor(label, editStackElements) {\n this.type = 1 /* Workspace */;\n this.label = label;\n this._isOpen = true;\n this._editStackElementsArr = editStackElements.slice(0);\n this._editStackElementsMap = new Map();\n for (const editStackElement of this._editStackElementsArr) {\n const key = uriGetComparisonKey(editStackElement.resource);\n this._editStackElementsMap.set(key, editStackElement);\n }\n this._delegate = null;\n }\n get resources() {\n return this._editStackElementsArr.map(editStackElement => editStackElement.resource);\n }\n prepareUndoRedo() {\n if (this._delegate) {\n return this._delegate.prepareUndoRedo(this);\n }\n }\n matchesResource(resource) {\n const key = uriGetComparisonKey(resource);\n return (this._editStackElementsMap.has(key));\n }\n setModel(model) {\n const key = uriGetComparisonKey(URI.isUri(model) ? model : model.uri);\n if (this._editStackElementsMap.has(key)) {\n this._editStackElementsMap.get(key).setModel(model);\n }\n }\n canAppend(model) {\n if (!this._isOpen) {\n return false;\n }\n const key = uriGetComparisonKey(model.uri);\n if (this._editStackElementsMap.has(key)) {\n const editStackElement = this._editStackElementsMap.get(key);\n return editStackElement.canAppend(model);\n }\n return false;\n }\n append(model, textChanges, afterEOL, afterVersionId, afterCursorState) {\n const key = uriGetComparisonKey(model.uri);\n const editStackElement = this._editStackElementsMap.get(key);\n editStackElement.append(model, textChanges, afterEOL, afterVersionId, afterCursorState);\n }\n close() {\n this._isOpen = false;\n }\n open() {\n // cannot reopen\n }\n undo() {\n this._isOpen = false;\n for (const editStackElement of this._editStackElementsArr) {\n editStackElement.undo();\n }\n }\n redo() {\n for (const editStackElement of this._editStackElementsArr) {\n editStackElement.redo();\n }\n }\n heapSize(resource) {\n const key = uriGetComparisonKey(resource);\n if (this._editStackElementsMap.has(key)) {\n const editStackElement = this._editStackElementsMap.get(key);\n return editStackElement.heapSize();\n }\n return 0;\n }\n split() {\n return this._editStackElementsArr;\n }\n toString() {\n let result = [];\n for (const editStackElement of this._editStackElementsArr) {\n result.push(`${basename(editStackElement.resource)}: ${editStackElement}`);\n }\n return `{${result.join(', ')}}`;\n }\n}\nfunction getModelEOL(model) {\n const eol = model.getEOL();\n if (eol === '\\n') {\n return 0 /* LF */;\n }\n else {\n return 1 /* CRLF */;\n }\n}\nexport function isEditStackElement(element) {\n if (!element) {\n return false;\n }\n return ((element instanceof SingleModelEditStackElement) || (element instanceof MultiModelEditStackElement));\n}\nexport class EditStack {\n constructor(model, undoRedoService) {\n this._model = model;\n this._undoRedoService = undoRedoService;\n }\n pushStackElement() {\n const lastElement = this._undoRedoService.getLastElement(this._model.uri);\n if (isEditStackElement(lastElement)) {\n lastElement.close();\n }\n }\n popStackElement() {\n const lastElement = this._undoRedoService.getLastElement(this._model.uri);\n if (isEditStackElement(lastElement)) {\n lastElement.open();\n }\n }\n clear() {\n this._undoRedoService.removeElements(this._model.uri);\n }\n _getOrCreateEditStackElement(beforeCursorState) {\n const lastElement = this._undoRedoService.getLastElement(this._model.uri);\n if (isEditStackElement(lastElement) && lastElement.canAppend(this._model)) {\n return lastElement;\n }\n const newElement = new SingleModelEditStackElement(this._model, beforeCursorState);\n this._undoRedoService.pushElement(newElement);\n return newElement;\n }\n pushEOL(eol) {\n const editStackElement = this._getOrCreateEditStackElement(null);\n this._model.setEOL(eol);\n editStackElement.append(this._model, [], getModelEOL(this._model), this._model.getAlternativeVersionId(), null);\n }\n pushEditOperation(beforeCursorState, editOperations, cursorStateComputer) {\n const editStackElement = this._getOrCreateEditStackElement(beforeCursorState);\n const inverseEditOperations = this._model.applyEdits(editOperations, true);\n const afterCursorState = EditStack._computeCursorState(cursorStateComputer, inverseEditOperations);\n const textChanges = inverseEditOperations.map((op, index) => ({ index: index, textChange: op.textChange }));\n textChanges.sort((a, b) => {\n if (a.textChange.oldPosition === b.textChange.oldPosition) {\n return a.index - b.index;\n }\n return a.textChange.oldPosition - b.textChange.oldPosition;\n });\n editStackElement.append(this._model, textChanges.map(op => op.textChange), getModelEOL(this._model), this._model.getAlternativeVersionId(), afterCursorState);\n return afterCursorState;\n }\n static _computeCursorState(cursorStateComputer, inverseEditOperations) {\n try {\n return cursorStateComputer ? cursorStateComputer(inverseEditOperations) : null;\n }\n catch (e) {\n onUnexpectedError(e);\n return null;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as buffer from '../../../base/common/buffer.js';\nimport { decodeUTF16LE } from '../core/stringBuilder.js';\nfunction escapeNewLine(str) {\n return (str\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r'));\n}\nexport class TextChange {\n constructor(oldPosition, oldText, newPosition, newText) {\n this.oldPosition = oldPosition;\n this.oldText = oldText;\n this.newPosition = newPosition;\n this.newText = newText;\n }\n get oldLength() {\n return this.oldText.length;\n }\n get oldEnd() {\n return this.oldPosition + this.oldText.length;\n }\n get newLength() {\n return this.newText.length;\n }\n get newEnd() {\n return this.newPosition + this.newText.length;\n }\n toString() {\n if (this.oldText.length === 0) {\n return `(insert@${this.oldPosition} \"${escapeNewLine(this.newText)}\")`;\n }\n if (this.newText.length === 0) {\n return `(delete@${this.oldPosition} \"${escapeNewLine(this.oldText)}\")`;\n }\n return `(replace@${this.oldPosition} \"${escapeNewLine(this.oldText)}\" with \"${escapeNewLine(this.newText)}\")`;\n }\n static _writeStringSize(str) {\n return (4 + 2 * str.length);\n }\n static _writeString(b, str, offset) {\n const len = str.length;\n buffer.writeUInt32BE(b, len, offset);\n offset += 4;\n for (let i = 0; i < len; i++) {\n buffer.writeUInt16LE(b, str.charCodeAt(i), offset);\n offset += 2;\n }\n return offset;\n }\n static _readString(b, offset) {\n const len = buffer.readUInt32BE(b, offset);\n offset += 4;\n return decodeUTF16LE(b, offset, len);\n }\n writeSize() {\n return (+4 // oldPosition\n + 4 // newPosition\n + TextChange._writeStringSize(this.oldText)\n + TextChange._writeStringSize(this.newText));\n }\n write(b, offset) {\n buffer.writeUInt32BE(b, this.oldPosition, offset);\n offset += 4;\n buffer.writeUInt32BE(b, this.newPosition, offset);\n offset += 4;\n offset = TextChange._writeString(b, this.oldText, offset);\n offset = TextChange._writeString(b, this.newText, offset);\n return offset;\n }\n static read(b, offset, dest) {\n const oldPosition = buffer.readUInt32BE(b, offset);\n offset += 4;\n const newPosition = buffer.readUInt32BE(b, offset);\n offset += 4;\n const oldText = TextChange._readString(b, offset);\n offset += TextChange._writeStringSize(oldText);\n const newText = TextChange._readString(b, offset);\n offset += TextChange._writeStringSize(newText);\n dest.push(new TextChange(oldPosition, oldText, newPosition, newText));\n return offset;\n }\n}\nexport function compressConsecutiveTextChanges(prevEdits, currEdits) {\n if (prevEdits === null || prevEdits.length === 0) {\n return currEdits;\n }\n const compressor = new TextChangeCompressor(prevEdits, currEdits);\n return compressor.compress();\n}\nclass TextChangeCompressor {\n constructor(prevEdits, currEdits) {\n this._prevEdits = prevEdits;\n this._currEdits = currEdits;\n this._result = [];\n this._resultLen = 0;\n this._prevLen = this._prevEdits.length;\n this._prevDeltaOffset = 0;\n this._currLen = this._currEdits.length;\n this._currDeltaOffset = 0;\n }\n compress() {\n let prevIndex = 0;\n let currIndex = 0;\n let prevEdit = this._getPrev(prevIndex);\n let currEdit = this._getCurr(currIndex);\n while (prevIndex < this._prevLen || currIndex < this._currLen) {\n if (prevEdit === null) {\n this._acceptCurr(currEdit);\n currEdit = this._getCurr(++currIndex);\n continue;\n }\n if (currEdit === null) {\n this._acceptPrev(prevEdit);\n prevEdit = this._getPrev(++prevIndex);\n continue;\n }\n if (currEdit.oldEnd <= prevEdit.newPosition) {\n this._acceptCurr(currEdit);\n currEdit = this._getCurr(++currIndex);\n continue;\n }\n if (prevEdit.newEnd <= currEdit.oldPosition) {\n this._acceptPrev(prevEdit);\n prevEdit = this._getPrev(++prevIndex);\n continue;\n }\n if (currEdit.oldPosition < prevEdit.newPosition) {\n const [e1, e2] = TextChangeCompressor._splitCurr(currEdit, prevEdit.newPosition - currEdit.oldPosition);\n this._acceptCurr(e1);\n currEdit = e2;\n continue;\n }\n if (prevEdit.newPosition < currEdit.oldPosition) {\n const [e1, e2] = TextChangeCompressor._splitPrev(prevEdit, currEdit.oldPosition - prevEdit.newPosition);\n this._acceptPrev(e1);\n prevEdit = e2;\n continue;\n }\n // At this point, currEdit.oldPosition === prevEdit.newPosition\n let mergePrev;\n let mergeCurr;\n if (currEdit.oldEnd === prevEdit.newEnd) {\n mergePrev = prevEdit;\n mergeCurr = currEdit;\n prevEdit = this._getPrev(++prevIndex);\n currEdit = this._getCurr(++currIndex);\n }\n else if (currEdit.oldEnd < prevEdit.newEnd) {\n const [e1, e2] = TextChangeCompressor._splitPrev(prevEdit, currEdit.oldLength);\n mergePrev = e1;\n mergeCurr = currEdit;\n prevEdit = e2;\n currEdit = this._getCurr(++currIndex);\n }\n else {\n const [e1, e2] = TextChangeCompressor._splitCurr(currEdit, prevEdit.newLength);\n mergePrev = prevEdit;\n mergeCurr = e1;\n prevEdit = this._getPrev(++prevIndex);\n currEdit = e2;\n }\n this._result[this._resultLen++] = new TextChange(mergePrev.oldPosition, mergePrev.oldText, mergeCurr.newPosition, mergeCurr.newText);\n this._prevDeltaOffset += mergePrev.newLength - mergePrev.oldLength;\n this._currDeltaOffset += mergeCurr.newLength - mergeCurr.oldLength;\n }\n const merged = TextChangeCompressor._merge(this._result);\n const cleaned = TextChangeCompressor._removeNoOps(merged);\n return cleaned;\n }\n _acceptCurr(currEdit) {\n this._result[this._resultLen++] = TextChangeCompressor._rebaseCurr(this._prevDeltaOffset, currEdit);\n this._currDeltaOffset += currEdit.newLength - currEdit.oldLength;\n }\n _getCurr(currIndex) {\n return (currIndex < this._currLen ? this._currEdits[currIndex] : null);\n }\n _acceptPrev(prevEdit) {\n this._result[this._resultLen++] = TextChangeCompressor._rebasePrev(this._currDeltaOffset, prevEdit);\n this._prevDeltaOffset += prevEdit.newLength - prevEdit.oldLength;\n }\n _getPrev(prevIndex) {\n return (prevIndex < this._prevLen ? this._prevEdits[prevIndex] : null);\n }\n static _rebaseCurr(prevDeltaOffset, currEdit) {\n return new TextChange(currEdit.oldPosition - prevDeltaOffset, currEdit.oldText, currEdit.newPosition, currEdit.newText);\n }\n static _rebasePrev(currDeltaOffset, prevEdit) {\n return new TextChange(prevEdit.oldPosition, prevEdit.oldText, prevEdit.newPosition + currDeltaOffset, prevEdit.newText);\n }\n static _splitPrev(edit, offset) {\n const preText = edit.newText.substr(0, offset);\n const postText = edit.newText.substr(offset);\n return [\n new TextChange(edit.oldPosition, edit.oldText, edit.newPosition, preText),\n new TextChange(edit.oldEnd, '', edit.newPosition + offset, postText)\n ];\n }\n static _splitCurr(edit, offset) {\n const preText = edit.oldText.substr(0, offset);\n const postText = edit.oldText.substr(offset);\n return [\n new TextChange(edit.oldPosition, preText, edit.newPosition, edit.newText),\n new TextChange(edit.oldPosition + offset, postText, edit.newEnd, '')\n ];\n }\n static _merge(edits) {\n if (edits.length === 0) {\n return edits;\n }\n let result = [], resultLen = 0;\n let prev = edits[0];\n for (let i = 1; i < edits.length; i++) {\n const curr = edits[i];\n if (prev.oldEnd === curr.oldPosition) {\n // Merge into `prev`\n prev = new TextChange(prev.oldPosition, prev.oldText + curr.oldText, prev.newPosition, prev.newText + curr.newText);\n }\n else {\n result[resultLen++] = prev;\n prev = curr;\n }\n }\n result[resultLen++] = prev;\n return result;\n }\n static _removeNoOps(edits) {\n if (edits.length === 0) {\n return edits;\n }\n let result = [], resultLen = 0;\n for (let i = 0; i < edits.length; i++) {\n const edit = edits[i];\n if (edit.oldText === edit.newText) {\n continue;\n }\n result[resultLen++] = edit;\n }\n return result;\n }\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 *--------------------------------------------------------------------------------------------*/\nclass SpacesDiffResult {\n constructor() {\n this.spacesDiff = 0;\n this.looksLikeAlignment = false;\n }\n}\n/**\n * Compute the diff in spaces between two line's indentation.\n */\nfunction spacesDiff(a, aLength, b, bLength, result) {\n result.spacesDiff = 0;\n result.looksLikeAlignment = false;\n // This can go both ways (e.g.):\n // - a: \"\\t\"\n // - b: \"\\t \"\n // => This should count 1 tab and 4 spaces\n let i;\n for (i = 0; i < aLength && i < bLength; i++) {\n let aCharCode = a.charCodeAt(i);\n let bCharCode = b.charCodeAt(i);\n if (aCharCode !== bCharCode) {\n break;\n }\n }\n let aSpacesCnt = 0, aTabsCount = 0;\n for (let j = i; j < aLength; j++) {\n let aCharCode = a.charCodeAt(j);\n if (aCharCode === 32 /* Space */) {\n aSpacesCnt++;\n }\n else {\n aTabsCount++;\n }\n }\n let bSpacesCnt = 0, bTabsCount = 0;\n for (let j = i; j < bLength; j++) {\n let bCharCode = b.charCodeAt(j);\n if (bCharCode === 32 /* Space */) {\n bSpacesCnt++;\n }\n else {\n bTabsCount++;\n }\n }\n if (aSpacesCnt > 0 && aTabsCount > 0) {\n return;\n }\n if (bSpacesCnt > 0 && bTabsCount > 0) {\n return;\n }\n let tabsDiff = Math.abs(aTabsCount - bTabsCount);\n let spacesDiff = Math.abs(aSpacesCnt - bSpacesCnt);\n if (tabsDiff === 0) {\n // check if the indentation difference might be caused by alignment reasons\n // sometime folks like to align their code, but this should not be used as a hint\n result.spacesDiff = spacesDiff;\n if (spacesDiff > 0 && 0 <= bSpacesCnt - 1 && bSpacesCnt - 1 < a.length && bSpacesCnt < b.length) {\n if (b.charCodeAt(bSpacesCnt) !== 32 /* Space */ && a.charCodeAt(bSpacesCnt - 1) === 32 /* Space */) {\n if (a.charCodeAt(a.length - 1) === 44 /* Comma */) {\n // This looks like an alignment desire: e.g.\n // const a = b + c,\n // d = b - c;\n result.looksLikeAlignment = true;\n }\n }\n }\n return;\n }\n if (spacesDiff % tabsDiff === 0) {\n result.spacesDiff = spacesDiff / tabsDiff;\n return;\n }\n}\nexport function guessIndentation(source, defaultTabSize, defaultInsertSpaces) {\n // Look at most at the first 10k lines\n const linesCount = Math.min(source.getLineCount(), 10000);\n let linesIndentedWithTabsCount = 0; // number of lines that contain at least one tab in indentation\n let linesIndentedWithSpacesCount = 0; // number of lines that contain only spaces in indentation\n let previousLineText = ''; // content of latest line that contained non-whitespace chars\n let previousLineIndentation = 0; // index at which latest line contained the first non-whitespace char\n const ALLOWED_TAB_SIZE_GUESSES = [2, 4, 6, 8, 3, 5, 7]; // prefer even guesses for `tabSize`, limit to [2, 8].\n const MAX_ALLOWED_TAB_SIZE_GUESS = 8; // max(ALLOWED_TAB_SIZE_GUESSES) = 8\n let spacesDiffCount = [0, 0, 0, 0, 0, 0, 0, 0, 0]; // `tabSize` scores\n let tmp = new SpacesDiffResult();\n for (let lineNumber = 1; lineNumber <= linesCount; lineNumber++) {\n let currentLineLength = source.getLineLength(lineNumber);\n let currentLineText = source.getLineContent(lineNumber);\n // if the text buffer is chunk based, so long lines are cons-string, v8 will flattern the string when we check charCode.\n // checking charCode on chunks directly is cheaper.\n const useCurrentLineText = (currentLineLength <= 65536);\n let currentLineHasContent = false; // does `currentLineText` contain non-whitespace chars\n let currentLineIndentation = 0; // index at which `currentLineText` contains the first non-whitespace char\n let currentLineSpacesCount = 0; // count of spaces found in `currentLineText` indentation\n let currentLineTabsCount = 0; // count of tabs found in `currentLineText` indentation\n for (let j = 0, lenJ = currentLineLength; j < lenJ; j++) {\n let charCode = (useCurrentLineText ? currentLineText.charCodeAt(j) : source.getLineCharCode(lineNumber, j));\n if (charCode === 9 /* Tab */) {\n currentLineTabsCount++;\n }\n else if (charCode === 32 /* Space */) {\n currentLineSpacesCount++;\n }\n else {\n // Hit non whitespace character on this line\n currentLineHasContent = true;\n currentLineIndentation = j;\n break;\n }\n }\n // Ignore empty or only whitespace lines\n if (!currentLineHasContent) {\n continue;\n }\n if (currentLineTabsCount > 0) {\n linesIndentedWithTabsCount++;\n }\n else if (currentLineSpacesCount > 1) {\n linesIndentedWithSpacesCount++;\n }\n spacesDiff(previousLineText, previousLineIndentation, currentLineText, currentLineIndentation, tmp);\n if (tmp.looksLikeAlignment) {\n // if defaultInsertSpaces === true && the spaces count == tabSize, we may want to count it as valid indentation\n //\n // - item1\n // - item2\n //\n // otherwise skip this line entirely\n //\n // const a = 1,\n // b = 2;\n if (!(defaultInsertSpaces && defaultTabSize === tmp.spacesDiff)) {\n continue;\n }\n }\n let currentSpacesDiff = tmp.spacesDiff;\n if (currentSpacesDiff <= MAX_ALLOWED_TAB_SIZE_GUESS) {\n spacesDiffCount[currentSpacesDiff]++;\n }\n previousLineText = currentLineText;\n previousLineIndentation = currentLineIndentation;\n }\n let insertSpaces = defaultInsertSpaces;\n if (linesIndentedWithTabsCount !== linesIndentedWithSpacesCount) {\n insertSpaces = (linesIndentedWithTabsCount < linesIndentedWithSpacesCount);\n }\n let tabSize = defaultTabSize;\n // Guess tabSize only if inserting spaces...\n if (insertSpaces) {\n let tabSizeScore = (insertSpaces ? 0 : 0.1 * linesCount);\n // console.log(\"score threshold: \" + tabSizeScore);\n ALLOWED_TAB_SIZE_GUESSES.forEach((possibleTabSize) => {\n let possibleTabSizeScore = spacesDiffCount[possibleTabSize];\n if (possibleTabSizeScore > tabSizeScore) {\n tabSizeScore = possibleTabSizeScore;\n tabSize = possibleTabSize;\n }\n });\n // Let a tabSize of 2 win even if it is not the maximum\n // (only in case 4 was guessed)\n if (tabSize === 4 && spacesDiffCount[4] > 0 && spacesDiffCount[2] > 0 && spacesDiffCount[2] >= spacesDiffCount[4] / 2) {\n tabSize = 2;\n }\n }\n // console.log('--------------------------');\n // console.log('linesIndentedWithTabsCount: ' + linesIndentedWithTabsCount + ', linesIndentedWithSpacesCount: ' + linesIndentedWithSpacesCount);\n // console.log('spacesDiffCount: ' + spacesDiffCount);\n // console.log('tabSize: ' + tabSize + ', tabSizeScore: ' + tabSizeScore);\n return {\n insertSpaces: insertSpaces,\n tabSize: tabSize\n };\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 *--------------------------------------------------------------------------------------------*/\nexport function getNodeColor(node) {\n return ((node.metadata & 1 /* ColorMask */) >>> 0 /* ColorOffset */);\n}\nfunction setNodeColor(node, color) {\n node.metadata = ((node.metadata & 254 /* ColorMaskInverse */) | (color << 0 /* ColorOffset */));\n}\nfunction getNodeIsVisited(node) {\n return ((node.metadata & 2 /* IsVisitedMask */) >>> 1 /* IsVisitedOffset */) === 1;\n}\nfunction setNodeIsVisited(node, value) {\n node.metadata = ((node.metadata & 253 /* IsVisitedMaskInverse */) | ((value ? 1 : 0) << 1 /* IsVisitedOffset */));\n}\nfunction getNodeIsForValidation(node) {\n return ((node.metadata & 4 /* IsForValidationMask */) >>> 2 /* IsForValidationOffset */) === 1;\n}\nfunction setNodeIsForValidation(node, value) {\n node.metadata = ((node.metadata & 251 /* IsForValidationMaskInverse */) | ((value ? 1 : 0) << 2 /* IsForValidationOffset */));\n}\nexport function getNodeIsInOverviewRuler(node) {\n return ((node.metadata & 8 /* IsInOverviewRulerMask */) >>> 3 /* IsInOverviewRulerOffset */) === 1;\n}\nfunction setNodeIsInOverviewRuler(node, value) {\n node.metadata = ((node.metadata & 247 /* IsInOverviewRulerMaskInverse */) | ((value ? 1 : 0) << 3 /* IsInOverviewRulerOffset */));\n}\nfunction getNodeStickiness(node) {\n return ((node.metadata & 48 /* StickinessMask */) >>> 4 /* StickinessOffset */);\n}\nfunction _setNodeStickiness(node, stickiness) {\n node.metadata = ((node.metadata & 207 /* StickinessMaskInverse */) | (stickiness << 4 /* StickinessOffset */));\n}\nfunction getCollapseOnReplaceEdit(node) {\n return ((node.metadata & 64 /* CollapseOnReplaceEditMask */) >>> 6 /* CollapseOnReplaceEditOffset */) === 1;\n}\nfunction setCollapseOnReplaceEdit(node, value) {\n node.metadata = ((node.metadata & 191 /* CollapseOnReplaceEditMaskInverse */) | ((value ? 1 : 0) << 6 /* CollapseOnReplaceEditOffset */));\n}\nexport class IntervalNode {\n constructor(id, start, end) {\n this.metadata = 0;\n this.parent = this;\n this.left = this;\n this.right = this;\n setNodeColor(this, 1 /* Red */);\n this.start = start;\n this.end = end;\n // FORCE_OVERFLOWING_TEST: this.delta = start;\n this.delta = 0;\n this.maxEnd = end;\n this.id = id;\n this.ownerId = 0;\n this.options = null;\n setNodeIsForValidation(this, false);\n _setNodeStickiness(this, 1 /* NeverGrowsWhenTypingAtEdges */);\n setNodeIsInOverviewRuler(this, false);\n setCollapseOnReplaceEdit(this, false);\n this.cachedVersionId = 0;\n this.cachedAbsoluteStart = start;\n this.cachedAbsoluteEnd = end;\n this.range = null;\n setNodeIsVisited(this, false);\n }\n reset(versionId, start, end, range) {\n this.start = start;\n this.end = end;\n this.maxEnd = end;\n this.cachedVersionId = versionId;\n this.cachedAbsoluteStart = start;\n this.cachedAbsoluteEnd = end;\n this.range = range;\n }\n setOptions(options) {\n this.options = options;\n let className = this.options.className;\n setNodeIsForValidation(this, (className === \"squiggly-error\" /* EditorErrorDecoration */\n || className === \"squiggly-warning\" /* EditorWarningDecoration */\n || className === \"squiggly-info\" /* EditorInfoDecoration */));\n _setNodeStickiness(this, this.options.stickiness);\n setNodeIsInOverviewRuler(this, (this.options.overviewRuler && this.options.overviewRuler.color) ? true : false);\n setCollapseOnReplaceEdit(this, this.options.collapseOnReplaceEdit);\n }\n setCachedOffsets(absoluteStart, absoluteEnd, cachedVersionId) {\n if (this.cachedVersionId !== cachedVersionId) {\n this.range = null;\n }\n this.cachedVersionId = cachedVersionId;\n this.cachedAbsoluteStart = absoluteStart;\n this.cachedAbsoluteEnd = absoluteEnd;\n }\n detach() {\n this.parent = null;\n this.left = null;\n this.right = null;\n }\n}\nexport const SENTINEL = new IntervalNode(null, 0, 0);\nSENTINEL.parent = SENTINEL;\nSENTINEL.left = SENTINEL;\nSENTINEL.right = SENTINEL;\nsetNodeColor(SENTINEL, 0 /* Black */);\nexport class IntervalTree {\n constructor() {\n this.root = SENTINEL;\n this.requestNormalizeDelta = false;\n }\n intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId) {\n if (this.root === SENTINEL) {\n return [];\n }\n return intervalSearch(this, start, end, filterOwnerId, filterOutValidation, cachedVersionId);\n }\n search(filterOwnerId, filterOutValidation, cachedVersionId) {\n if (this.root === SENTINEL) {\n return [];\n }\n return search(this, filterOwnerId, filterOutValidation, cachedVersionId);\n }\n /**\n * Will not set `cachedAbsoluteStart` nor `cachedAbsoluteEnd` on the returned nodes!\n */\n collectNodesFromOwner(ownerId) {\n return collectNodesFromOwner(this, ownerId);\n }\n /**\n * Will not set `cachedAbsoluteStart` nor `cachedAbsoluteEnd` on the returned nodes!\n */\n collectNodesPostOrder() {\n return collectNodesPostOrder(this);\n }\n insert(node) {\n rbTreeInsert(this, node);\n this._normalizeDeltaIfNecessary();\n }\n delete(node) {\n rbTreeDelete(this, node);\n this._normalizeDeltaIfNecessary();\n }\n resolveNode(node, cachedVersionId) {\n const initialNode = node;\n let delta = 0;\n while (node !== this.root) {\n if (node === node.parent.right) {\n delta += node.parent.delta;\n }\n node = node.parent;\n }\n const nodeStart = initialNode.start + delta;\n const nodeEnd = initialNode.end + delta;\n initialNode.setCachedOffsets(nodeStart, nodeEnd, cachedVersionId);\n }\n acceptReplace(offset, length, textLength, forceMoveMarkers) {\n // Our strategy is to remove all directly impacted nodes, and then add them back to the tree.\n // (1) collect all nodes that are intersecting this edit as nodes of interest\n const nodesOfInterest = searchForEditing(this, offset, offset + length);\n // (2) remove all nodes that are intersecting this edit\n for (let i = 0, len = nodesOfInterest.length; i < len; i++) {\n const node = nodesOfInterest[i];\n rbTreeDelete(this, node);\n }\n this._normalizeDeltaIfNecessary();\n // (3) edit all tree nodes except the nodes of interest\n noOverlapReplace(this, offset, offset + length, textLength);\n this._normalizeDeltaIfNecessary();\n // (4) edit the nodes of interest and insert them back in the tree\n for (let i = 0, len = nodesOfInterest.length; i < len; i++) {\n const node = nodesOfInterest[i];\n node.start = node.cachedAbsoluteStart;\n node.end = node.cachedAbsoluteEnd;\n nodeAcceptEdit(node, offset, (offset + length), textLength, forceMoveMarkers);\n node.maxEnd = node.end;\n rbTreeInsert(this, node);\n }\n this._normalizeDeltaIfNecessary();\n }\n _normalizeDeltaIfNecessary() {\n if (!this.requestNormalizeDelta) {\n return;\n }\n this.requestNormalizeDelta = false;\n normalizeDelta(this);\n }\n}\n//#region Delta Normalization\nfunction normalizeDelta(T) {\n let node = T.root;\n let delta = 0;\n while (node !== SENTINEL) {\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\n // go left\n node = node.left;\n continue;\n }\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n delta += node.delta;\n node = node.right;\n continue;\n }\n // handle current node\n node.start = delta + node.start;\n node.end = delta + node.end;\n node.delta = 0;\n recomputeMaxEnd(node);\n setNodeIsVisited(node, true);\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n if (node === node.parent.right) {\n delta -= node.parent.delta;\n }\n node = node.parent;\n }\n setNodeIsVisited(T.root, false);\n}\nfunction adjustMarkerBeforeColumn(markerOffset, markerStickToPreviousCharacter, checkOffset, moveSemantics) {\n if (markerOffset < checkOffset) {\n return true;\n }\n if (markerOffset > checkOffset) {\n return false;\n }\n if (moveSemantics === 1 /* ForceMove */) {\n return false;\n }\n if (moveSemantics === 2 /* ForceStay */) {\n return true;\n }\n return markerStickToPreviousCharacter;\n}\n/**\n * This is a lot more complicated than strictly necessary to maintain the same behaviour\n * as when decorations were implemented using two markers.\n */\nexport function nodeAcceptEdit(node, start, end, textLength, forceMoveMarkers) {\n const nodeStickiness = getNodeStickiness(node);\n const startStickToPreviousCharacter = (nodeStickiness === 0 /* AlwaysGrowsWhenTypingAtEdges */\n || nodeStickiness === 2 /* GrowsOnlyWhenTypingBefore */);\n const endStickToPreviousCharacter = (nodeStickiness === 1 /* NeverGrowsWhenTypingAtEdges */\n || nodeStickiness === 2 /* GrowsOnlyWhenTypingBefore */);\n const deletingCnt = (end - start);\n const insertingCnt = textLength;\n const commonLength = Math.min(deletingCnt, insertingCnt);\n const nodeStart = node.start;\n let startDone = false;\n const nodeEnd = node.end;\n let endDone = false;\n if (start <= nodeStart && nodeEnd <= end && getCollapseOnReplaceEdit(node)) {\n // This edit encompasses the entire decoration range\n // and the decoration has asked to become collapsed\n node.start = start;\n startDone = true;\n node.end = start;\n endDone = true;\n }\n {\n const moveSemantics = forceMoveMarkers ? 1 /* ForceMove */ : (deletingCnt > 0 ? 2 /* ForceStay */ : 0 /* MarkerDefined */);\n if (!startDone && adjustMarkerBeforeColumn(nodeStart, startStickToPreviousCharacter, start, moveSemantics)) {\n startDone = true;\n }\n if (!endDone && adjustMarkerBeforeColumn(nodeEnd, endStickToPreviousCharacter, start, moveSemantics)) {\n endDone = true;\n }\n }\n if (commonLength > 0 && !forceMoveMarkers) {\n const moveSemantics = (deletingCnt > insertingCnt ? 2 /* ForceStay */ : 0 /* MarkerDefined */);\n if (!startDone && adjustMarkerBeforeColumn(nodeStart, startStickToPreviousCharacter, start + commonLength, moveSemantics)) {\n startDone = true;\n }\n if (!endDone && adjustMarkerBeforeColumn(nodeEnd, endStickToPreviousCharacter, start + commonLength, moveSemantics)) {\n endDone = true;\n }\n }\n {\n const moveSemantics = forceMoveMarkers ? 1 /* ForceMove */ : 0 /* MarkerDefined */;\n if (!startDone && adjustMarkerBeforeColumn(nodeStart, startStickToPreviousCharacter, end, moveSemantics)) {\n node.start = start + insertingCnt;\n startDone = true;\n }\n if (!endDone && adjustMarkerBeforeColumn(nodeEnd, endStickToPreviousCharacter, end, moveSemantics)) {\n node.end = start + insertingCnt;\n endDone = true;\n }\n }\n // Finish\n const deltaColumn = (insertingCnt - deletingCnt);\n if (!startDone) {\n node.start = Math.max(0, nodeStart + deltaColumn);\n }\n if (!endDone) {\n node.end = Math.max(0, nodeEnd + deltaColumn);\n }\n if (node.start > node.end) {\n node.end = node.start;\n }\n}\nfunction searchForEditing(T, start, end) {\n // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree\n // Now, it is known that two intervals A and B overlap only when both\n // A.low <= B.high and A.high >= B.low. When searching the trees for\n // nodes overlapping with a given interval, you can immediately skip:\n // a) all nodes to the right of nodes whose low value is past the end of the given interval.\n // b) all nodes that have their maximum 'high' value below the start of the given interval.\n let node = T.root;\n let delta = 0;\n let nodeMaxEnd = 0;\n let nodeStart = 0;\n let nodeEnd = 0;\n let result = [];\n let resultLen = 0;\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n if (node === node.parent.right) {\n delta -= node.parent.delta;\n }\n node = node.parent;\n continue;\n }\n if (!getNodeIsVisited(node.left)) {\n // first time seeing this node\n nodeMaxEnd = delta + node.maxEnd;\n if (nodeMaxEnd < start) {\n // cover case b) from above\n // there is no need to search this node or its children\n setNodeIsVisited(node, true);\n continue;\n }\n if (node.left !== SENTINEL) {\n // go left\n node = node.left;\n continue;\n }\n }\n // handle current node\n nodeStart = delta + node.start;\n if (nodeStart > end) {\n // cover case a) from above\n // there is no need to search this node or its right subtree\n setNodeIsVisited(node, true);\n continue;\n }\n nodeEnd = delta + node.end;\n if (nodeEnd >= start) {\n node.setCachedOffsets(nodeStart, nodeEnd, 0);\n result[resultLen++] = node;\n }\n setNodeIsVisited(node, true);\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n delta += node.delta;\n node = node.right;\n continue;\n }\n }\n setNodeIsVisited(T.root, false);\n return result;\n}\nfunction noOverlapReplace(T, start, end, textLength) {\n // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree\n // Now, it is known that two intervals A and B overlap only when both\n // A.low <= B.high and A.high >= B.low. When searching the trees for\n // nodes overlapping with a given interval, you can immediately skip:\n // a) all nodes to the right of nodes whose low value is past the end of the given interval.\n // b) all nodes that have their maximum 'high' value below the start of the given interval.\n let node = T.root;\n let delta = 0;\n let nodeMaxEnd = 0;\n let nodeStart = 0;\n const editDelta = (textLength - (end - start));\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n if (node === node.parent.right) {\n delta -= node.parent.delta;\n }\n recomputeMaxEnd(node);\n node = node.parent;\n continue;\n }\n if (!getNodeIsVisited(node.left)) {\n // first time seeing this node\n nodeMaxEnd = delta + node.maxEnd;\n if (nodeMaxEnd < start) {\n // cover case b) from above\n // there is no need to search this node or its children\n setNodeIsVisited(node, true);\n continue;\n }\n if (node.left !== SENTINEL) {\n // go left\n node = node.left;\n continue;\n }\n }\n // handle current node\n nodeStart = delta + node.start;\n if (nodeStart > end) {\n node.start += editDelta;\n node.end += editDelta;\n node.delta += editDelta;\n if (node.delta < -1073741824 /* MIN_SAFE_DELTA */ || node.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n // cover case a) from above\n // there is no need to search this node or its right subtree\n setNodeIsVisited(node, true);\n continue;\n }\n setNodeIsVisited(node, true);\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n delta += node.delta;\n node = node.right;\n continue;\n }\n }\n setNodeIsVisited(T.root, false);\n}\n//#endregion\n//#region Searching\nfunction collectNodesFromOwner(T, ownerId) {\n let node = T.root;\n let result = [];\n let resultLen = 0;\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n node = node.parent;\n continue;\n }\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\n // go left\n node = node.left;\n continue;\n }\n // handle current node\n if (node.ownerId === ownerId) {\n result[resultLen++] = node;\n }\n setNodeIsVisited(node, true);\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n node = node.right;\n continue;\n }\n }\n setNodeIsVisited(T.root, false);\n return result;\n}\nfunction collectNodesPostOrder(T) {\n let node = T.root;\n let result = [];\n let resultLen = 0;\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n node = node.parent;\n continue;\n }\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\n // go left\n node = node.left;\n continue;\n }\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n node = node.right;\n continue;\n }\n // handle current node\n result[resultLen++] = node;\n setNodeIsVisited(node, true);\n }\n setNodeIsVisited(T.root, false);\n return result;\n}\nfunction search(T, filterOwnerId, filterOutValidation, cachedVersionId) {\n let node = T.root;\n let delta = 0;\n let nodeStart = 0;\n let nodeEnd = 0;\n let result = [];\n let resultLen = 0;\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n if (node === node.parent.right) {\n delta -= node.parent.delta;\n }\n node = node.parent;\n continue;\n }\n if (node.left !== SENTINEL && !getNodeIsVisited(node.left)) {\n // go left\n node = node.left;\n continue;\n }\n // handle current node\n nodeStart = delta + node.start;\n nodeEnd = delta + node.end;\n node.setCachedOffsets(nodeStart, nodeEnd, cachedVersionId);\n let include = true;\n if (filterOwnerId && node.ownerId && node.ownerId !== filterOwnerId) {\n include = false;\n }\n if (filterOutValidation && getNodeIsForValidation(node)) {\n include = false;\n }\n if (include) {\n result[resultLen++] = node;\n }\n setNodeIsVisited(node, true);\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n delta += node.delta;\n node = node.right;\n continue;\n }\n }\n setNodeIsVisited(T.root, false);\n return result;\n}\nfunction intervalSearch(T, intervalStart, intervalEnd, filterOwnerId, filterOutValidation, cachedVersionId) {\n // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree\n // Now, it is known that two intervals A and B overlap only when both\n // A.low <= B.high and A.high >= B.low. When searching the trees for\n // nodes overlapping with a given interval, you can immediately skip:\n // a) all nodes to the right of nodes whose low value is past the end of the given interval.\n // b) all nodes that have their maximum 'high' value below the start of the given interval.\n let node = T.root;\n let delta = 0;\n let nodeMaxEnd = 0;\n let nodeStart = 0;\n let nodeEnd = 0;\n let result = [];\n let resultLen = 0;\n while (node !== SENTINEL) {\n if (getNodeIsVisited(node)) {\n // going up from this node\n setNodeIsVisited(node.left, false);\n setNodeIsVisited(node.right, false);\n if (node === node.parent.right) {\n delta -= node.parent.delta;\n }\n node = node.parent;\n continue;\n }\n if (!getNodeIsVisited(node.left)) {\n // first time seeing this node\n nodeMaxEnd = delta + node.maxEnd;\n if (nodeMaxEnd < intervalStart) {\n // cover case b) from above\n // there is no need to search this node or its children\n setNodeIsVisited(node, true);\n continue;\n }\n if (node.left !== SENTINEL) {\n // go left\n node = node.left;\n continue;\n }\n }\n // handle current node\n nodeStart = delta + node.start;\n if (nodeStart > intervalEnd) {\n // cover case a) from above\n // there is no need to search this node or its right subtree\n setNodeIsVisited(node, true);\n continue;\n }\n nodeEnd = delta + node.end;\n if (nodeEnd >= intervalStart) {\n // There is overlap\n node.setCachedOffsets(nodeStart, nodeEnd, cachedVersionId);\n let include = true;\n if (filterOwnerId && node.ownerId && node.ownerId !== filterOwnerId) {\n include = false;\n }\n if (filterOutValidation && getNodeIsForValidation(node)) {\n include = false;\n }\n if (include) {\n result[resultLen++] = node;\n }\n }\n setNodeIsVisited(node, true);\n if (node.right !== SENTINEL && !getNodeIsVisited(node.right)) {\n // go right\n delta += node.delta;\n node = node.right;\n continue;\n }\n }\n setNodeIsVisited(T.root, false);\n return result;\n}\n//#endregion\n//#region Insertion\nfunction rbTreeInsert(T, newNode) {\n if (T.root === SENTINEL) {\n newNode.parent = SENTINEL;\n newNode.left = SENTINEL;\n newNode.right = SENTINEL;\n setNodeColor(newNode, 0 /* Black */);\n T.root = newNode;\n return T.root;\n }\n treeInsert(T, newNode);\n recomputeMaxEndWalkToRoot(newNode.parent);\n // repair tree\n let x = newNode;\n while (x !== T.root && getNodeColor(x.parent) === 1 /* Red */) {\n if (x.parent === x.parent.parent.left) {\n const y = x.parent.parent.right;\n if (getNodeColor(y) === 1 /* Red */) {\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(y, 0 /* Black */);\n setNodeColor(x.parent.parent, 1 /* Red */);\n x = x.parent.parent;\n }\n else {\n if (x === x.parent.right) {\n x = x.parent;\n leftRotate(T, x);\n }\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(x.parent.parent, 1 /* Red */);\n rightRotate(T, x.parent.parent);\n }\n }\n else {\n const y = x.parent.parent.left;\n if (getNodeColor(y) === 1 /* Red */) {\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(y, 0 /* Black */);\n setNodeColor(x.parent.parent, 1 /* Red */);\n x = x.parent.parent;\n }\n else {\n if (x === x.parent.left) {\n x = x.parent;\n rightRotate(T, x);\n }\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(x.parent.parent, 1 /* Red */);\n leftRotate(T, x.parent.parent);\n }\n }\n }\n setNodeColor(T.root, 0 /* Black */);\n return newNode;\n}\nfunction treeInsert(T, z) {\n let delta = 0;\n let x = T.root;\n const zAbsoluteStart = z.start;\n const zAbsoluteEnd = z.end;\n while (true) {\n const cmp = intervalCompare(zAbsoluteStart, zAbsoluteEnd, x.start + delta, x.end + delta);\n if (cmp < 0) {\n // this node should be inserted to the left\n // => it is not affected by the node's delta\n if (x.left === SENTINEL) {\n z.start -= delta;\n z.end -= delta;\n z.maxEnd -= delta;\n x.left = z;\n break;\n }\n else {\n x = x.left;\n }\n }\n else {\n // this node should be inserted to the right\n // => it is not affected by the node's delta\n if (x.right === SENTINEL) {\n z.start -= (delta + x.delta);\n z.end -= (delta + x.delta);\n z.maxEnd -= (delta + x.delta);\n x.right = z;\n break;\n }\n else {\n delta += x.delta;\n x = x.right;\n }\n }\n }\n z.parent = x;\n z.left = SENTINEL;\n z.right = SENTINEL;\n setNodeColor(z, 1 /* Red */);\n}\n//#endregion\n//#region Deletion\nfunction rbTreeDelete(T, z) {\n let x;\n let y;\n // RB-DELETE except we don't swap z and y in case c)\n // i.e. we always delete what's pointed at by z.\n if (z.left === SENTINEL) {\n x = z.right;\n y = z;\n // x's delta is no longer influenced by z's delta\n x.delta += z.delta;\n if (x.delta < -1073741824 /* MIN_SAFE_DELTA */ || x.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n x.start += z.delta;\n x.end += z.delta;\n }\n else if (z.right === SENTINEL) {\n x = z.left;\n y = z;\n }\n else {\n y = leftest(z.right);\n x = y.right;\n // y's delta is no longer influenced by z's delta,\n // but we don't want to walk the entire right-hand-side subtree of x.\n // we therefore maintain z's delta in y, and adjust only x\n x.start += y.delta;\n x.end += y.delta;\n x.delta += y.delta;\n if (x.delta < -1073741824 /* MIN_SAFE_DELTA */ || x.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n y.start += z.delta;\n y.end += z.delta;\n y.delta = z.delta;\n if (y.delta < -1073741824 /* MIN_SAFE_DELTA */ || y.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n }\n if (y === T.root) {\n T.root = x;\n setNodeColor(x, 0 /* Black */);\n z.detach();\n resetSentinel();\n recomputeMaxEnd(x);\n T.root.parent = SENTINEL;\n return;\n }\n let yWasRed = (getNodeColor(y) === 1 /* Red */);\n if (y === y.parent.left) {\n y.parent.left = x;\n }\n else {\n y.parent.right = x;\n }\n if (y === z) {\n x.parent = y.parent;\n }\n else {\n if (y.parent === z) {\n x.parent = y;\n }\n else {\n x.parent = y.parent;\n }\n y.left = z.left;\n y.right = z.right;\n y.parent = z.parent;\n setNodeColor(y, getNodeColor(z));\n if (z === T.root) {\n T.root = y;\n }\n else {\n if (z === z.parent.left) {\n z.parent.left = y;\n }\n else {\n z.parent.right = y;\n }\n }\n if (y.left !== SENTINEL) {\n y.left.parent = y;\n }\n if (y.right !== SENTINEL) {\n y.right.parent = y;\n }\n }\n z.detach();\n if (yWasRed) {\n recomputeMaxEndWalkToRoot(x.parent);\n if (y !== z) {\n recomputeMaxEndWalkToRoot(y);\n recomputeMaxEndWalkToRoot(y.parent);\n }\n resetSentinel();\n return;\n }\n recomputeMaxEndWalkToRoot(x);\n recomputeMaxEndWalkToRoot(x.parent);\n if (y !== z) {\n recomputeMaxEndWalkToRoot(y);\n recomputeMaxEndWalkToRoot(y.parent);\n }\n // RB-DELETE-FIXUP\n let w;\n while (x !== T.root && getNodeColor(x) === 0 /* Black */) {\n if (x === x.parent.left) {\n w = x.parent.right;\n if (getNodeColor(w) === 1 /* Red */) {\n setNodeColor(w, 0 /* Black */);\n setNodeColor(x.parent, 1 /* Red */);\n leftRotate(T, x.parent);\n w = x.parent.right;\n }\n if (getNodeColor(w.left) === 0 /* Black */ && getNodeColor(w.right) === 0 /* Black */) {\n setNodeColor(w, 1 /* Red */);\n x = x.parent;\n }\n else {\n if (getNodeColor(w.right) === 0 /* Black */) {\n setNodeColor(w.left, 0 /* Black */);\n setNodeColor(w, 1 /* Red */);\n rightRotate(T, w);\n w = x.parent.right;\n }\n setNodeColor(w, getNodeColor(x.parent));\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(w.right, 0 /* Black */);\n leftRotate(T, x.parent);\n x = T.root;\n }\n }\n else {\n w = x.parent.left;\n if (getNodeColor(w) === 1 /* Red */) {\n setNodeColor(w, 0 /* Black */);\n setNodeColor(x.parent, 1 /* Red */);\n rightRotate(T, x.parent);\n w = x.parent.left;\n }\n if (getNodeColor(w.left) === 0 /* Black */ && getNodeColor(w.right) === 0 /* Black */) {\n setNodeColor(w, 1 /* Red */);\n x = x.parent;\n }\n else {\n if (getNodeColor(w.left) === 0 /* Black */) {\n setNodeColor(w.right, 0 /* Black */);\n setNodeColor(w, 1 /* Red */);\n leftRotate(T, w);\n w = x.parent.left;\n }\n setNodeColor(w, getNodeColor(x.parent));\n setNodeColor(x.parent, 0 /* Black */);\n setNodeColor(w.left, 0 /* Black */);\n rightRotate(T, x.parent);\n x = T.root;\n }\n }\n }\n setNodeColor(x, 0 /* Black */);\n resetSentinel();\n}\nfunction leftest(node) {\n while (node.left !== SENTINEL) {\n node = node.left;\n }\n return node;\n}\nfunction resetSentinel() {\n SENTINEL.parent = SENTINEL;\n SENTINEL.delta = 0; // optional\n SENTINEL.start = 0; // optional\n SENTINEL.end = 0; // optional\n}\n//#endregion\n//#region Rotations\nfunction leftRotate(T, x) {\n const y = x.right; // set y.\n y.delta += x.delta; // y's delta is no longer influenced by x's delta\n if (y.delta < -1073741824 /* MIN_SAFE_DELTA */ || y.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n y.start += x.delta;\n y.end += x.delta;\n x.right = y.left; // turn y's left subtree into x's right subtree.\n if (y.left !== SENTINEL) {\n y.left.parent = x;\n }\n y.parent = x.parent; // link x's parent to y.\n if (x.parent === SENTINEL) {\n T.root = y;\n }\n else if (x === x.parent.left) {\n x.parent.left = y;\n }\n else {\n x.parent.right = y;\n }\n y.left = x; // put x on y's left.\n x.parent = y;\n recomputeMaxEnd(x);\n recomputeMaxEnd(y);\n}\nfunction rightRotate(T, y) {\n const x = y.left;\n y.delta -= x.delta;\n if (y.delta < -1073741824 /* MIN_SAFE_DELTA */ || y.delta > 1073741824 /* MAX_SAFE_DELTA */) {\n T.requestNormalizeDelta = true;\n }\n y.start -= x.delta;\n y.end -= x.delta;\n y.left = x.right;\n if (x.right !== SENTINEL) {\n x.right.parent = y;\n }\n x.parent = y.parent;\n if (y.parent === SENTINEL) {\n T.root = x;\n }\n else if (y === y.parent.right) {\n y.parent.right = x;\n }\n else {\n y.parent.left = x;\n }\n x.right = y;\n y.parent = x;\n recomputeMaxEnd(y);\n recomputeMaxEnd(x);\n}\n//#endregion\n//#region max end computation\nfunction computeMaxEnd(node) {\n let maxEnd = node.end;\n if (node.left !== SENTINEL) {\n const leftMaxEnd = node.left.maxEnd;\n if (leftMaxEnd > maxEnd) {\n maxEnd = leftMaxEnd;\n }\n }\n if (node.right !== SENTINEL) {\n const rightMaxEnd = node.right.maxEnd + node.delta;\n if (rightMaxEnd > maxEnd) {\n maxEnd = rightMaxEnd;\n }\n }\n return maxEnd;\n}\nexport function recomputeMaxEnd(node) {\n node.maxEnd = computeMaxEnd(node);\n}\nfunction recomputeMaxEndWalkToRoot(node) {\n while (node !== SENTINEL) {\n const maxEnd = computeMaxEnd(node);\n if (node.maxEnd === maxEnd) {\n // no need to go further\n return;\n }\n node.maxEnd = maxEnd;\n node = node.parent;\n }\n}\n//#endregion\n//#region utils\nexport function intervalCompare(aStart, aEnd, bStart, bEnd) {\n if (aStart === bStart) {\n return aEnd - bEnd;\n }\n return aStart - bStart;\n}\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\nexport class TreeNode {\n constructor(piece, color) {\n this.piece = piece;\n this.color = color;\n this.size_left = 0;\n this.lf_left = 0;\n this.parent = this;\n this.left = this;\n this.right = this;\n }\n next() {\n if (this.right !== SENTINEL) {\n return leftest(this.right);\n }\n let node = this;\n while (node.parent !== SENTINEL) {\n if (node.parent.left === node) {\n break;\n }\n node = node.parent;\n }\n if (node.parent === SENTINEL) {\n return SENTINEL;\n }\n else {\n return node.parent;\n }\n }\n prev() {\n if (this.left !== SENTINEL) {\n return righttest(this.left);\n }\n let node = this;\n while (node.parent !== SENTINEL) {\n if (node.parent.right === node) {\n break;\n }\n node = node.parent;\n }\n if (node.parent === SENTINEL) {\n return SENTINEL;\n }\n else {\n return node.parent;\n }\n }\n detach() {\n this.parent = null;\n this.left = null;\n this.right = null;\n }\n}\nexport const SENTINEL = new TreeNode(null, 0 /* Black */);\nSENTINEL.parent = SENTINEL;\nSENTINEL.left = SENTINEL;\nSENTINEL.right = SENTINEL;\nSENTINEL.color = 0 /* Black */;\nexport function leftest(node) {\n while (node.left !== SENTINEL) {\n node = node.left;\n }\n return node;\n}\nexport function righttest(node) {\n while (node.right !== SENTINEL) {\n node = node.right;\n }\n return node;\n}\nexport function calculateSize(node) {\n if (node === SENTINEL) {\n return 0;\n }\n return node.size_left + node.piece.length + calculateSize(node.right);\n}\nexport function calculateLF(node) {\n if (node === SENTINEL) {\n return 0;\n }\n return node.lf_left + node.piece.lineFeedCnt + calculateLF(node.right);\n}\nexport function resetSentinel() {\n SENTINEL.parent = SENTINEL;\n}\nexport function leftRotate(tree, x) {\n let y = x.right;\n // fix size_left\n y.size_left += x.size_left + (x.piece ? x.piece.length : 0);\n y.lf_left += x.lf_left + (x.piece ? x.piece.lineFeedCnt : 0);\n x.right = y.left;\n if (y.left !== SENTINEL) {\n y.left.parent = x;\n }\n y.parent = x.parent;\n if (x.parent === SENTINEL) {\n tree.root = y;\n }\n else if (x.parent.left === x) {\n x.parent.left = y;\n }\n else {\n x.parent.right = y;\n }\n y.left = x;\n x.parent = y;\n}\nexport function rightRotate(tree, y) {\n let x = y.left;\n y.left = x.right;\n if (x.right !== SENTINEL) {\n x.right.parent = y;\n }\n x.parent = y.parent;\n // fix size_left\n y.size_left -= x.size_left + (x.piece ? x.piece.length : 0);\n y.lf_left -= x.lf_left + (x.piece ? x.piece.lineFeedCnt : 0);\n if (y.parent === SENTINEL) {\n tree.root = x;\n }\n else if (y === y.parent.right) {\n y.parent.right = x;\n }\n else {\n y.parent.left = x;\n }\n x.right = y;\n y.parent = x;\n}\nexport function rbDelete(tree, z) {\n let x;\n let y;\n if (z.left === SENTINEL) {\n y = z;\n x = y.right;\n }\n else if (z.right === SENTINEL) {\n y = z;\n x = y.left;\n }\n else {\n y = leftest(z.right);\n x = y.right;\n }\n if (y === tree.root) {\n tree.root = x;\n // if x is null, we are removing the only node\n x.color = 0 /* Black */;\n z.detach();\n resetSentinel();\n tree.root.parent = SENTINEL;\n return;\n }\n let yWasRed = (y.color === 1 /* Red */);\n if (y === y.parent.left) {\n y.parent.left = x;\n }\n else {\n y.parent.right = x;\n }\n if (y === z) {\n x.parent = y.parent;\n recomputeTreeMetadata(tree, x);\n }\n else {\n if (y.parent === z) {\n x.parent = y;\n }\n else {\n x.parent = y.parent;\n }\n // as we make changes to x's hierarchy, update size_left of subtree first\n recomputeTreeMetadata(tree, x);\n y.left = z.left;\n y.right = z.right;\n y.parent = z.parent;\n y.color = z.color;\n if (z === tree.root) {\n tree.root = y;\n }\n else {\n if (z === z.parent.left) {\n z.parent.left = y;\n }\n else {\n z.parent.right = y;\n }\n }\n if (y.left !== SENTINEL) {\n y.left.parent = y;\n }\n if (y.right !== SENTINEL) {\n y.right.parent = y;\n }\n // update metadata\n // we replace z with y, so in this sub tree, the length change is z.item.length\n y.size_left = z.size_left;\n y.lf_left = z.lf_left;\n recomputeTreeMetadata(tree, y);\n }\n z.detach();\n if (x.parent.left === x) {\n let newSizeLeft = calculateSize(x);\n let newLFLeft = calculateLF(x);\n if (newSizeLeft !== x.parent.size_left || newLFLeft !== x.parent.lf_left) {\n let delta = newSizeLeft - x.parent.size_left;\n let lf_delta = newLFLeft - x.parent.lf_left;\n x.parent.size_left = newSizeLeft;\n x.parent.lf_left = newLFLeft;\n updateTreeMetadata(tree, x.parent, delta, lf_delta);\n }\n }\n recomputeTreeMetadata(tree, x.parent);\n if (yWasRed) {\n resetSentinel();\n return;\n }\n // RB-DELETE-FIXUP\n let w;\n while (x !== tree.root && x.color === 0 /* Black */) {\n if (x === x.parent.left) {\n w = x.parent.right;\n if (w.color === 1 /* Red */) {\n w.color = 0 /* Black */;\n x.parent.color = 1 /* Red */;\n leftRotate(tree, x.parent);\n w = x.parent.right;\n }\n if (w.left.color === 0 /* Black */ && w.right.color === 0 /* Black */) {\n w.color = 1 /* Red */;\n x = x.parent;\n }\n else {\n if (w.right.color === 0 /* Black */) {\n w.left.color = 0 /* Black */;\n w.color = 1 /* Red */;\n rightRotate(tree, w);\n w = x.parent.right;\n }\n w.color = x.parent.color;\n x.parent.color = 0 /* Black */;\n w.right.color = 0 /* Black */;\n leftRotate(tree, x.parent);\n x = tree.root;\n }\n }\n else {\n w = x.parent.left;\n if (w.color === 1 /* Red */) {\n w.color = 0 /* Black */;\n x.parent.color = 1 /* Red */;\n rightRotate(tree, x.parent);\n w = x.parent.left;\n }\n if (w.left.color === 0 /* Black */ && w.right.color === 0 /* Black */) {\n w.color = 1 /* Red */;\n x = x.parent;\n }\n else {\n if (w.left.color === 0 /* Black */) {\n w.right.color = 0 /* Black */;\n w.color = 1 /* Red */;\n leftRotate(tree, w);\n w = x.parent.left;\n }\n w.color = x.parent.color;\n x.parent.color = 0 /* Black */;\n w.left.color = 0 /* Black */;\n rightRotate(tree, x.parent);\n x = tree.root;\n }\n }\n }\n x.color = 0 /* Black */;\n resetSentinel();\n}\nexport function fixInsert(tree, x) {\n recomputeTreeMetadata(tree, x);\n while (x !== tree.root && x.parent.color === 1 /* Red */) {\n if (x.parent === x.parent.parent.left) {\n const y = x.parent.parent.right;\n if (y.color === 1 /* Red */) {\n x.parent.color = 0 /* Black */;\n y.color = 0 /* Black */;\n x.parent.parent.color = 1 /* Red */;\n x = x.parent.parent;\n }\n else {\n if (x === x.parent.right) {\n x = x.parent;\n leftRotate(tree, x);\n }\n x.parent.color = 0 /* Black */;\n x.parent.parent.color = 1 /* Red */;\n rightRotate(tree, x.parent.parent);\n }\n }\n else {\n const y = x.parent.parent.left;\n if (y.color === 1 /* Red */) {\n x.parent.color = 0 /* Black */;\n y.color = 0 /* Black */;\n x.parent.parent.color = 1 /* Red */;\n x = x.parent.parent;\n }\n else {\n if (x === x.parent.left) {\n x = x.parent;\n rightRotate(tree, x);\n }\n x.parent.color = 0 /* Black */;\n x.parent.parent.color = 1 /* Red */;\n leftRotate(tree, x.parent.parent);\n }\n }\n }\n tree.root.color = 0 /* Black */;\n}\nexport function updateTreeMetadata(tree, x, delta, lineFeedCntDelta) {\n // node length change or line feed count change\n while (x !== tree.root && x !== SENTINEL) {\n if (x.parent.left === x) {\n x.parent.size_left += delta;\n x.parent.lf_left += lineFeedCntDelta;\n }\n x = x.parent;\n }\n}\nexport function recomputeTreeMetadata(tree, x) {\n let delta = 0;\n let lf_delta = 0;\n if (x === tree.root) {\n return;\n }\n if (delta === 0) {\n // go upwards till the node whose left subtree is changed.\n while (x !== tree.root && x === x.parent.right) {\n x = x.parent;\n }\n if (x === tree.root) {\n // well, it means we add a node to the end (inorder)\n return;\n }\n // x is the node whose right subtree is changed.\n x = x.parent;\n delta = calculateSize(x.left) - x.size_left;\n lf_delta = calculateLF(x.left) - x.lf_left;\n x.size_left += delta;\n x.lf_left += lf_delta;\n }\n // go upwards till root. O(logN)\n while (x !== tree.root && (delta !== 0 || lf_delta !== 0)) {\n if (x.parent.left === x) {\n x.parent.size_left += delta;\n x.parent.lf_left += lf_delta;\n }\n x = x.parent;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Position } from '../../core/position.js';\nimport { Range } from '../../core/range.js';\nimport { FindMatch } from '../../model.js';\nimport { SENTINEL, TreeNode, fixInsert, leftest, rbDelete, righttest, updateTreeMetadata } from './rbTreeBase.js';\nimport { Searcher, createFindMatch, isValidMatch } from '../textModelSearch.js';\n// const lfRegex = new RegExp(/\\r\\n|\\r|\\n/g);\nexport const AverageBufferSize = 65535;\nexport function createUintArray(arr) {\n let r;\n if (arr[arr.length - 1] < 65536) {\n r = new Uint16Array(arr.length);\n }\n else {\n r = new Uint32Array(arr.length);\n }\n r.set(arr, 0);\n return r;\n}\nexport class LineStarts {\n constructor(lineStarts, cr, lf, crlf, isBasicASCII) {\n this.lineStarts = lineStarts;\n this.cr = cr;\n this.lf = lf;\n this.crlf = crlf;\n this.isBasicASCII = isBasicASCII;\n }\n}\nexport function createLineStartsFast(str, readonly = true) {\n let r = [0], rLength = 1;\n for (let i = 0, len = str.length; i < len; i++) {\n const chr = str.charCodeAt(i);\n if (chr === 13 /* CarriageReturn */) {\n if (i + 1 < len && str.charCodeAt(i + 1) === 10 /* LineFeed */) {\n // \\r\\n... case\n r[rLength++] = i + 2;\n i++; // skip \\n\n }\n else {\n // \\r... case\n r[rLength++] = i + 1;\n }\n }\n else if (chr === 10 /* LineFeed */) {\n r[rLength++] = i + 1;\n }\n }\n if (readonly) {\n return createUintArray(r);\n }\n else {\n return r;\n }\n}\nexport function createLineStarts(r, str) {\n r.length = 0;\n r[0] = 0;\n let rLength = 1;\n let cr = 0, lf = 0, crlf = 0;\n let isBasicASCII = true;\n for (let i = 0, len = str.length; i < len; i++) {\n const chr = str.charCodeAt(i);\n if (chr === 13 /* CarriageReturn */) {\n if (i + 1 < len && str.charCodeAt(i + 1) === 10 /* LineFeed */) {\n // \\r\\n... case\n crlf++;\n r[rLength++] = i + 2;\n i++; // skip \\n\n }\n else {\n cr++;\n // \\r... case\n r[rLength++] = i + 1;\n }\n }\n else if (chr === 10 /* LineFeed */) {\n lf++;\n r[rLength++] = i + 1;\n }\n else {\n if (isBasicASCII) {\n if (chr !== 9 /* Tab */ && (chr < 32 || chr > 126)) {\n isBasicASCII = false;\n }\n }\n }\n }\n const result = new LineStarts(createUintArray(r), cr, lf, crlf, isBasicASCII);\n r.length = 0;\n return result;\n}\nexport class Piece {\n constructor(bufferIndex, start, end, lineFeedCnt, length) {\n this.bufferIndex = bufferIndex;\n this.start = start;\n this.end = end;\n this.lineFeedCnt = lineFeedCnt;\n this.length = length;\n }\n}\nexport class StringBuffer {\n constructor(buffer, lineStarts) {\n this.buffer = buffer;\n this.lineStarts = lineStarts;\n }\n}\n/**\n * Readonly snapshot for piece tree.\n * In a real multiple thread environment, to make snapshot reading always work correctly, we need to\n * 1. Make TreeNode.piece immutable, then reading and writing can run in parallel.\n * 2. TreeNode/Buffers normalization should not happen during snapshot reading.\n */\nclass PieceTreeSnapshot {\n constructor(tree, BOM) {\n this._pieces = [];\n this._tree = tree;\n this._BOM = BOM;\n this._index = 0;\n if (tree.root !== SENTINEL) {\n tree.iterate(tree.root, node => {\n if (node !== SENTINEL) {\n this._pieces.push(node.piece);\n }\n return true;\n });\n }\n }\n read() {\n if (this._pieces.length === 0) {\n if (this._index === 0) {\n this._index++;\n return this._BOM;\n }\n else {\n return null;\n }\n }\n if (this._index > this._pieces.length - 1) {\n return null;\n }\n if (this._index === 0) {\n return this._BOM + this._tree.getPieceContent(this._pieces[this._index++]);\n }\n return this._tree.getPieceContent(this._pieces[this._index++]);\n }\n}\nclass PieceTreeSearchCache {\n constructor(limit) {\n this._limit = limit;\n this._cache = [];\n }\n get(offset) {\n for (let i = this._cache.length - 1; i >= 0; i--) {\n let nodePos = this._cache[i];\n if (nodePos.nodeStartOffset <= offset && nodePos.nodeStartOffset + nodePos.node.piece.length >= offset) {\n return nodePos;\n }\n }\n return null;\n }\n get2(lineNumber) {\n for (let i = this._cache.length - 1; i >= 0; i--) {\n let nodePos = this._cache[i];\n if (nodePos.nodeStartLineNumber && nodePos.nodeStartLineNumber < lineNumber && nodePos.nodeStartLineNumber + nodePos.node.piece.lineFeedCnt >= lineNumber) {\n return nodePos;\n }\n }\n return null;\n }\n set(nodePosition) {\n if (this._cache.length >= this._limit) {\n this._cache.shift();\n }\n this._cache.push(nodePosition);\n }\n validate(offset) {\n let hasInvalidVal = false;\n let tmp = this._cache;\n for (let i = 0; i < tmp.length; i++) {\n let nodePos = tmp[i];\n if (nodePos.node.parent === null || nodePos.nodeStartOffset >= offset) {\n tmp[i] = null;\n hasInvalidVal = true;\n continue;\n }\n }\n if (hasInvalidVal) {\n let newArr = [];\n for (const entry of tmp) {\n if (entry !== null) {\n newArr.push(entry);\n }\n }\n this._cache = newArr;\n }\n }\n}\nexport class PieceTreeBase {\n constructor(chunks, eol, eolNormalized) {\n this.create(chunks, eol, eolNormalized);\n }\n create(chunks, eol, eolNormalized) {\n this._buffers = [\n new StringBuffer('', [0])\n ];\n this._lastChangeBufferPos = { line: 0, column: 0 };\n this.root = SENTINEL;\n this._lineCnt = 1;\n this._length = 0;\n this._EOL = eol;\n this._EOLLength = eol.length;\n this._EOLNormalized = eolNormalized;\n let lastNode = null;\n for (let i = 0, len = chunks.length; i < len; i++) {\n if (chunks[i].buffer.length > 0) {\n if (!chunks[i].lineStarts) {\n chunks[i].lineStarts = createLineStartsFast(chunks[i].buffer);\n }\n let piece = new Piece(i + 1, { line: 0, column: 0 }, { line: chunks[i].lineStarts.length - 1, column: chunks[i].buffer.length - chunks[i].lineStarts[chunks[i].lineStarts.length - 1] }, chunks[i].lineStarts.length - 1, chunks[i].buffer.length);\n this._buffers.push(chunks[i]);\n lastNode = this.rbInsertRight(lastNode, piece);\n }\n }\n this._searchCache = new PieceTreeSearchCache(1);\n this._lastVisitedLine = { lineNumber: 0, value: '' };\n this.computeBufferMetadata();\n }\n normalizeEOL(eol) {\n let averageBufferSize = AverageBufferSize;\n let min = averageBufferSize - Math.floor(averageBufferSize / 3);\n let max = min * 2;\n let tempChunk = '';\n let tempChunkLen = 0;\n let chunks = [];\n this.iterate(this.root, node => {\n let str = this.getNodeContent(node);\n let len = str.length;\n if (tempChunkLen <= min || tempChunkLen + len < max) {\n tempChunk += str;\n tempChunkLen += len;\n return true;\n }\n // flush anyways\n let text = tempChunk.replace(/\\r\\n|\\r|\\n/g, eol);\n chunks.push(new StringBuffer(text, createLineStartsFast(text)));\n tempChunk = str;\n tempChunkLen = len;\n return true;\n });\n if (tempChunkLen > 0) {\n let text = tempChunk.replace(/\\r\\n|\\r|\\n/g, eol);\n chunks.push(new StringBuffer(text, createLineStartsFast(text)));\n }\n this.create(chunks, eol, true);\n }\n // #region Buffer API\n getEOL() {\n return this._EOL;\n }\n setEOL(newEOL) {\n this._EOL = newEOL;\n this._EOLLength = this._EOL.length;\n this.normalizeEOL(newEOL);\n }\n createSnapshot(BOM) {\n return new PieceTreeSnapshot(this, BOM);\n }\n getOffsetAt(lineNumber, column) {\n let leftLen = 0; // inorder\n let x = this.root;\n while (x !== SENTINEL) {\n if (x.left !== SENTINEL && x.lf_left + 1 >= lineNumber) {\n x = x.left;\n }\n else if (x.lf_left + x.piece.lineFeedCnt + 1 >= lineNumber) {\n leftLen += x.size_left;\n // lineNumber >= 2\n let accumualtedValInCurrentIndex = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n return leftLen += accumualtedValInCurrentIndex + column - 1;\n }\n else {\n lineNumber -= x.lf_left + x.piece.lineFeedCnt;\n leftLen += x.size_left + x.piece.length;\n x = x.right;\n }\n }\n return leftLen;\n }\n getPositionAt(offset) {\n offset = Math.floor(offset);\n offset = Math.max(0, offset);\n let x = this.root;\n let lfCnt = 0;\n let originalOffset = offset;\n while (x !== SENTINEL) {\n if (x.size_left !== 0 && x.size_left >= offset) {\n x = x.left;\n }\n else if (x.size_left + x.piece.length >= offset) {\n let out = this.getIndexOf(x, offset - x.size_left);\n lfCnt += x.lf_left + out.index;\n if (out.index === 0) {\n let lineStartOffset = this.getOffsetAt(lfCnt + 1, 1);\n let column = originalOffset - lineStartOffset;\n return new Position(lfCnt + 1, column + 1);\n }\n return new Position(lfCnt + 1, out.remainder + 1);\n }\n else {\n offset -= x.size_left + x.piece.length;\n lfCnt += x.lf_left + x.piece.lineFeedCnt;\n if (x.right === SENTINEL) {\n // last node\n let lineStartOffset = this.getOffsetAt(lfCnt + 1, 1);\n let column = originalOffset - offset - lineStartOffset;\n return new Position(lfCnt + 1, column + 1);\n }\n else {\n x = x.right;\n }\n }\n }\n return new Position(1, 1);\n }\n getValueInRange(range, eol) {\n if (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn) {\n return '';\n }\n let startPosition = this.nodeAt2(range.startLineNumber, range.startColumn);\n let endPosition = this.nodeAt2(range.endLineNumber, range.endColumn);\n let value = this.getValueInRange2(startPosition, endPosition);\n if (eol) {\n if (eol !== this._EOL || !this._EOLNormalized) {\n return value.replace(/\\r\\n|\\r|\\n/g, eol);\n }\n if (eol === this.getEOL() && this._EOLNormalized) {\n if (eol === '\\r\\n') {\n }\n return value;\n }\n return value.replace(/\\r\\n|\\r|\\n/g, eol);\n }\n return value;\n }\n getValueInRange2(startPosition, endPosition) {\n if (startPosition.node === endPosition.node) {\n let node = startPosition.node;\n let buffer = this._buffers[node.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start);\n return buffer.substring(startOffset + startPosition.remainder, startOffset + endPosition.remainder);\n }\n let x = startPosition.node;\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n let ret = buffer.substring(startOffset + startPosition.remainder, startOffset + x.piece.length);\n x = x.next();\n while (x !== SENTINEL) {\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n if (x === endPosition.node) {\n ret += buffer.substring(startOffset, startOffset + endPosition.remainder);\n break;\n }\n else {\n ret += buffer.substr(startOffset, x.piece.length);\n }\n x = x.next();\n }\n return ret;\n }\n getLinesContent() {\n let lines = [];\n let linesLength = 0;\n let currentLine = '';\n let danglingCR = false;\n this.iterate(this.root, node => {\n if (node === SENTINEL) {\n return true;\n }\n const piece = node.piece;\n let pieceLength = piece.length;\n if (pieceLength === 0) {\n return true;\n }\n const buffer = this._buffers[piece.bufferIndex].buffer;\n const lineStarts = this._buffers[piece.bufferIndex].lineStarts;\n const pieceStartLine = piece.start.line;\n const pieceEndLine = piece.end.line;\n let pieceStartOffset = lineStarts[pieceStartLine] + piece.start.column;\n if (danglingCR) {\n if (buffer.charCodeAt(pieceStartOffset) === 10 /* LineFeed */) {\n // pretend the \\n was in the previous piece..\n pieceStartOffset++;\n pieceLength--;\n }\n lines[linesLength++] = currentLine;\n currentLine = '';\n danglingCR = false;\n if (pieceLength === 0) {\n return true;\n }\n }\n if (pieceStartLine === pieceEndLine) {\n // this piece has no new lines\n if (!this._EOLNormalized && buffer.charCodeAt(pieceStartOffset + pieceLength - 1) === 13 /* CarriageReturn */) {\n danglingCR = true;\n currentLine += buffer.substr(pieceStartOffset, pieceLength - 1);\n }\n else {\n currentLine += buffer.substr(pieceStartOffset, pieceLength);\n }\n return true;\n }\n // add the text before the first line start in this piece\n currentLine += (this._EOLNormalized\n ? buffer.substring(pieceStartOffset, Math.max(pieceStartOffset, lineStarts[pieceStartLine + 1] - this._EOLLength))\n : buffer.substring(pieceStartOffset, lineStarts[pieceStartLine + 1]).replace(/(\\r\\n|\\r|\\n)$/, ''));\n lines[linesLength++] = currentLine;\n for (let line = pieceStartLine + 1; line < pieceEndLine; line++) {\n currentLine = (this._EOLNormalized\n ? buffer.substring(lineStarts[line], lineStarts[line + 1] - this._EOLLength)\n : buffer.substring(lineStarts[line], lineStarts[line + 1]).replace(/(\\r\\n|\\r|\\n)$/, ''));\n lines[linesLength++] = currentLine;\n }\n if (!this._EOLNormalized && buffer.charCodeAt(lineStarts[pieceEndLine] + piece.end.column - 1) === 13 /* CarriageReturn */) {\n danglingCR = true;\n if (piece.end.column === 0) {\n // The last line ended with a \\r, let's undo the push, it will be pushed by next iteration\n linesLength--;\n }\n else {\n currentLine = buffer.substr(lineStarts[pieceEndLine], piece.end.column - 1);\n }\n }\n else {\n currentLine = buffer.substr(lineStarts[pieceEndLine], piece.end.column);\n }\n return true;\n });\n if (danglingCR) {\n lines[linesLength++] = currentLine;\n currentLine = '';\n }\n lines[linesLength++] = currentLine;\n return lines;\n }\n getLength() {\n return this._length;\n }\n getLineCount() {\n return this._lineCnt;\n }\n getLineContent(lineNumber) {\n if (this._lastVisitedLine.lineNumber === lineNumber) {\n return this._lastVisitedLine.value;\n }\n this._lastVisitedLine.lineNumber = lineNumber;\n if (lineNumber === this._lineCnt) {\n this._lastVisitedLine.value = this.getLineRawContent(lineNumber);\n }\n else if (this._EOLNormalized) {\n this._lastVisitedLine.value = this.getLineRawContent(lineNumber, this._EOLLength);\n }\n else {\n this._lastVisitedLine.value = this.getLineRawContent(lineNumber).replace(/(\\r\\n|\\r|\\n)$/, '');\n }\n return this._lastVisitedLine.value;\n }\n _getCharCode(nodePos) {\n if (nodePos.remainder === nodePos.node.piece.length) {\n // the char we want to fetch is at the head of next node.\n let matchingNode = nodePos.node.next();\n if (!matchingNode) {\n return 0;\n }\n let buffer = this._buffers[matchingNode.piece.bufferIndex];\n let startOffset = this.offsetInBuffer(matchingNode.piece.bufferIndex, matchingNode.piece.start);\n return buffer.buffer.charCodeAt(startOffset);\n }\n else {\n let buffer = this._buffers[nodePos.node.piece.bufferIndex];\n let startOffset = this.offsetInBuffer(nodePos.node.piece.bufferIndex, nodePos.node.piece.start);\n let targetOffset = startOffset + nodePos.remainder;\n return buffer.buffer.charCodeAt(targetOffset);\n }\n }\n getLineCharCode(lineNumber, index) {\n let nodePos = this.nodeAt2(lineNumber, index + 1);\n return this._getCharCode(nodePos);\n }\n getLineLength(lineNumber) {\n if (lineNumber === this.getLineCount()) {\n let startOffset = this.getOffsetAt(lineNumber, 1);\n return this.getLength() - startOffset;\n }\n return this.getOffsetAt(lineNumber + 1, 1) - this.getOffsetAt(lineNumber, 1) - this._EOLLength;\n }\n findMatchesInNode(node, searcher, startLineNumber, startColumn, startCursor, endCursor, searchData, captureMatches, limitResultCount, resultLen, result) {\n let buffer = this._buffers[node.piece.bufferIndex];\n let startOffsetInBuffer = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start);\n let start = this.offsetInBuffer(node.piece.bufferIndex, startCursor);\n let end = this.offsetInBuffer(node.piece.bufferIndex, endCursor);\n let m;\n // Reset regex to search from the beginning\n let ret = { line: 0, column: 0 };\n let searchText;\n let offsetInBuffer;\n if (searcher._wordSeparators) {\n searchText = buffer.buffer.substring(start, end);\n offsetInBuffer = (offset) => offset + start;\n searcher.reset(0);\n }\n else {\n searchText = buffer.buffer;\n offsetInBuffer = (offset) => offset;\n searcher.reset(start);\n }\n do {\n m = searcher.next(searchText);\n if (m) {\n if (offsetInBuffer(m.index) >= end) {\n return resultLen;\n }\n this.positionInBuffer(node, offsetInBuffer(m.index) - startOffsetInBuffer, ret);\n let lineFeedCnt = this.getLineFeedCnt(node.piece.bufferIndex, startCursor, ret);\n let retStartColumn = ret.line === startCursor.line ? ret.column - startCursor.column + startColumn : ret.column + 1;\n let retEndColumn = retStartColumn + m[0].length;\n result[resultLen++] = createFindMatch(new Range(startLineNumber + lineFeedCnt, retStartColumn, startLineNumber + lineFeedCnt, retEndColumn), m, captureMatches);\n if (offsetInBuffer(m.index) + m[0].length >= end) {\n return resultLen;\n }\n if (resultLen >= limitResultCount) {\n return resultLen;\n }\n }\n } while (m);\n return resultLen;\n }\n findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount) {\n const result = [];\n let resultLen = 0;\n const searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n let startPosition = this.nodeAt2(searchRange.startLineNumber, searchRange.startColumn);\n if (startPosition === null) {\n return [];\n }\n let endPosition = this.nodeAt2(searchRange.endLineNumber, searchRange.endColumn);\n if (endPosition === null) {\n return [];\n }\n let start = this.positionInBuffer(startPosition.node, startPosition.remainder);\n let end = this.positionInBuffer(endPosition.node, endPosition.remainder);\n if (startPosition.node === endPosition.node) {\n this.findMatchesInNode(startPosition.node, searcher, searchRange.startLineNumber, searchRange.startColumn, start, end, searchData, captureMatches, limitResultCount, resultLen, result);\n return result;\n }\n let startLineNumber = searchRange.startLineNumber;\n let currentNode = startPosition.node;\n while (currentNode !== endPosition.node) {\n let lineBreakCnt = this.getLineFeedCnt(currentNode.piece.bufferIndex, start, currentNode.piece.end);\n if (lineBreakCnt >= 1) {\n // last line break position\n let lineStarts = this._buffers[currentNode.piece.bufferIndex].lineStarts;\n let startOffsetInBuffer = this.offsetInBuffer(currentNode.piece.bufferIndex, currentNode.piece.start);\n let nextLineStartOffset = lineStarts[start.line + lineBreakCnt];\n let startColumn = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn : 1;\n resultLen = this.findMatchesInNode(currentNode, searcher, startLineNumber, startColumn, start, this.positionInBuffer(currentNode, nextLineStartOffset - startOffsetInBuffer), searchData, captureMatches, limitResultCount, resultLen, result);\n if (resultLen >= limitResultCount) {\n return result;\n }\n startLineNumber += lineBreakCnt;\n }\n let startColumn = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn - 1 : 0;\n // search for the remaining content\n if (startLineNumber === searchRange.endLineNumber) {\n const text = this.getLineContent(startLineNumber).substring(startColumn, searchRange.endColumn - 1);\n resultLen = this._findMatchesInLine(searchData, searcher, text, searchRange.endLineNumber, startColumn, resultLen, result, captureMatches, limitResultCount);\n return result;\n }\n resultLen = this._findMatchesInLine(searchData, searcher, this.getLineContent(startLineNumber).substr(startColumn), startLineNumber, startColumn, resultLen, result, captureMatches, limitResultCount);\n if (resultLen >= limitResultCount) {\n return result;\n }\n startLineNumber++;\n startPosition = this.nodeAt2(startLineNumber, 1);\n currentNode = startPosition.node;\n start = this.positionInBuffer(startPosition.node, startPosition.remainder);\n }\n if (startLineNumber === searchRange.endLineNumber) {\n let startColumn = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn - 1 : 0;\n const text = this.getLineContent(startLineNumber).substring(startColumn, searchRange.endColumn - 1);\n resultLen = this._findMatchesInLine(searchData, searcher, text, searchRange.endLineNumber, startColumn, resultLen, result, captureMatches, limitResultCount);\n return result;\n }\n let startColumn = startLineNumber === searchRange.startLineNumber ? searchRange.startColumn : 1;\n resultLen = this.findMatchesInNode(endPosition.node, searcher, startLineNumber, startColumn, start, end, searchData, captureMatches, limitResultCount, resultLen, result);\n return result;\n }\n _findMatchesInLine(searchData, searcher, text, lineNumber, deltaOffset, resultLen, result, captureMatches, limitResultCount) {\n const wordSeparators = searchData.wordSeparators;\n if (!captureMatches && searchData.simpleSearch) {\n const searchString = searchData.simpleSearch;\n const searchStringLen = searchString.length;\n const textLength = text.length;\n let lastMatchIndex = -searchStringLen;\n while ((lastMatchIndex = text.indexOf(searchString, lastMatchIndex + searchStringLen)) !== -1) {\n if (!wordSeparators || isValidMatch(wordSeparators, text, textLength, lastMatchIndex, searchStringLen)) {\n result[resultLen++] = new FindMatch(new Range(lineNumber, lastMatchIndex + 1 + deltaOffset, lineNumber, lastMatchIndex + 1 + searchStringLen + deltaOffset), null);\n if (resultLen >= limitResultCount) {\n return resultLen;\n }\n }\n }\n return resultLen;\n }\n let m;\n // Reset regex to search from the beginning\n searcher.reset(0);\n do {\n m = searcher.next(text);\n if (m) {\n result[resultLen++] = createFindMatch(new Range(lineNumber, m.index + 1 + deltaOffset, lineNumber, m.index + 1 + m[0].length + deltaOffset), m, captureMatches);\n if (resultLen >= limitResultCount) {\n return resultLen;\n }\n }\n } while (m);\n return resultLen;\n }\n // #endregion\n // #region Piece Table\n insert(offset, value, eolNormalized = false) {\n this._EOLNormalized = this._EOLNormalized && eolNormalized;\n this._lastVisitedLine.lineNumber = 0;\n this._lastVisitedLine.value = '';\n if (this.root !== SENTINEL) {\n let { node, remainder, nodeStartOffset } = this.nodeAt(offset);\n let piece = node.piece;\n let bufferIndex = piece.bufferIndex;\n let insertPosInBuffer = this.positionInBuffer(node, remainder);\n if (node.piece.bufferIndex === 0 &&\n piece.end.line === this._lastChangeBufferPos.line &&\n piece.end.column === this._lastChangeBufferPos.column &&\n (nodeStartOffset + piece.length === offset) &&\n value.length < AverageBufferSize) {\n // changed buffer\n this.appendToNode(node, value);\n this.computeBufferMetadata();\n return;\n }\n if (nodeStartOffset === offset) {\n this.insertContentToNodeLeft(value, node);\n this._searchCache.validate(offset);\n }\n else if (nodeStartOffset + node.piece.length > offset) {\n // we are inserting into the middle of a node.\n let nodesToDel = [];\n let newRightPiece = new Piece(piece.bufferIndex, insertPosInBuffer, piece.end, this.getLineFeedCnt(piece.bufferIndex, insertPosInBuffer, piece.end), this.offsetInBuffer(bufferIndex, piece.end) - this.offsetInBuffer(bufferIndex, insertPosInBuffer));\n if (this.shouldCheckCRLF() && this.endWithCR(value)) {\n let headOfRight = this.nodeCharCodeAt(node, remainder);\n if (headOfRight === 10 /** \\n */) {\n let newStart = { line: newRightPiece.start.line + 1, column: 0 };\n newRightPiece = new Piece(newRightPiece.bufferIndex, newStart, newRightPiece.end, this.getLineFeedCnt(newRightPiece.bufferIndex, newStart, newRightPiece.end), newRightPiece.length - 1);\n value += '\\n';\n }\n }\n // reuse node for content before insertion point.\n if (this.shouldCheckCRLF() && this.startWithLF(value)) {\n let tailOfLeft = this.nodeCharCodeAt(node, remainder - 1);\n if (tailOfLeft === 13 /** \\r */) {\n let previousPos = this.positionInBuffer(node, remainder - 1);\n this.deleteNodeTail(node, previousPos);\n value = '\\r' + value;\n if (node.piece.length === 0) {\n nodesToDel.push(node);\n }\n }\n else {\n this.deleteNodeTail(node, insertPosInBuffer);\n }\n }\n else {\n this.deleteNodeTail(node, insertPosInBuffer);\n }\n let newPieces = this.createNewPieces(value);\n if (newRightPiece.length > 0) {\n this.rbInsertRight(node, newRightPiece);\n }\n let tmpNode = node;\n for (let k = 0; k < newPieces.length; k++) {\n tmpNode = this.rbInsertRight(tmpNode, newPieces[k]);\n }\n this.deleteNodes(nodesToDel);\n }\n else {\n this.insertContentToNodeRight(value, node);\n }\n }\n else {\n // insert new node\n let pieces = this.createNewPieces(value);\n let node = this.rbInsertLeft(null, pieces[0]);\n for (let k = 1; k < pieces.length; k++) {\n node = this.rbInsertRight(node, pieces[k]);\n }\n }\n // todo, this is too brutal. Total line feed count should be updated the same way as lf_left.\n this.computeBufferMetadata();\n }\n delete(offset, cnt) {\n this._lastVisitedLine.lineNumber = 0;\n this._lastVisitedLine.value = '';\n if (cnt <= 0 || this.root === SENTINEL) {\n return;\n }\n let startPosition = this.nodeAt(offset);\n let endPosition = this.nodeAt(offset + cnt);\n let startNode = startPosition.node;\n let endNode = endPosition.node;\n if (startNode === endNode) {\n let startSplitPosInBuffer = this.positionInBuffer(startNode, startPosition.remainder);\n let endSplitPosInBuffer = this.positionInBuffer(startNode, endPosition.remainder);\n if (startPosition.nodeStartOffset === offset) {\n if (cnt === startNode.piece.length) { // delete node\n let next = startNode.next();\n rbDelete(this, startNode);\n this.validateCRLFWithPrevNode(next);\n this.computeBufferMetadata();\n return;\n }\n this.deleteNodeHead(startNode, endSplitPosInBuffer);\n this._searchCache.validate(offset);\n this.validateCRLFWithPrevNode(startNode);\n this.computeBufferMetadata();\n return;\n }\n if (startPosition.nodeStartOffset + startNode.piece.length === offset + cnt) {\n this.deleteNodeTail(startNode, startSplitPosInBuffer);\n this.validateCRLFWithNextNode(startNode);\n this.computeBufferMetadata();\n return;\n }\n // delete content in the middle, this node will be splitted to nodes\n this.shrinkNode(startNode, startSplitPosInBuffer, endSplitPosInBuffer);\n this.computeBufferMetadata();\n return;\n }\n let nodesToDel = [];\n let startSplitPosInBuffer = this.positionInBuffer(startNode, startPosition.remainder);\n this.deleteNodeTail(startNode, startSplitPosInBuffer);\n this._searchCache.validate(offset);\n if (startNode.piece.length === 0) {\n nodesToDel.push(startNode);\n }\n // update last touched node\n let endSplitPosInBuffer = this.positionInBuffer(endNode, endPosition.remainder);\n this.deleteNodeHead(endNode, endSplitPosInBuffer);\n if (endNode.piece.length === 0) {\n nodesToDel.push(endNode);\n }\n // delete nodes in between\n let secondNode = startNode.next();\n for (let node = secondNode; node !== SENTINEL && node !== endNode; node = node.next()) {\n nodesToDel.push(node);\n }\n let prev = startNode.piece.length === 0 ? startNode.prev() : startNode;\n this.deleteNodes(nodesToDel);\n this.validateCRLFWithNextNode(prev);\n this.computeBufferMetadata();\n }\n insertContentToNodeLeft(value, node) {\n // we are inserting content to the beginning of node\n let nodesToDel = [];\n if (this.shouldCheckCRLF() && this.endWithCR(value) && this.startWithLF(node)) {\n // move `\\n` to new node.\n let piece = node.piece;\n let newStart = { line: piece.start.line + 1, column: 0 };\n let nPiece = new Piece(piece.bufferIndex, newStart, piece.end, this.getLineFeedCnt(piece.bufferIndex, newStart, piece.end), piece.length - 1);\n node.piece = nPiece;\n value += '\\n';\n updateTreeMetadata(this, node, -1, -1);\n if (node.piece.length === 0) {\n nodesToDel.push(node);\n }\n }\n let newPieces = this.createNewPieces(value);\n let newNode = this.rbInsertLeft(node, newPieces[newPieces.length - 1]);\n for (let k = newPieces.length - 2; k >= 0; k--) {\n newNode = this.rbInsertLeft(newNode, newPieces[k]);\n }\n this.validateCRLFWithPrevNode(newNode);\n this.deleteNodes(nodesToDel);\n }\n insertContentToNodeRight(value, node) {\n // we are inserting to the right of this node.\n if (this.adjustCarriageReturnFromNext(value, node)) {\n // move \\n to the new node.\n value += '\\n';\n }\n let newPieces = this.createNewPieces(value);\n let newNode = this.rbInsertRight(node, newPieces[0]);\n let tmpNode = newNode;\n for (let k = 1; k < newPieces.length; k++) {\n tmpNode = this.rbInsertRight(tmpNode, newPieces[k]);\n }\n this.validateCRLFWithPrevNode(newNode);\n }\n positionInBuffer(node, remainder, ret) {\n let piece = node.piece;\n let bufferIndex = node.piece.bufferIndex;\n let lineStarts = this._buffers[bufferIndex].lineStarts;\n let startOffset = lineStarts[piece.start.line] + piece.start.column;\n let offset = startOffset + remainder;\n // binary search offset between startOffset and endOffset\n let low = piece.start.line;\n let high = piece.end.line;\n let mid = 0;\n let midStop = 0;\n let midStart = 0;\n while (low <= high) {\n mid = low + ((high - low) / 2) | 0;\n midStart = lineStarts[mid];\n if (mid === high) {\n break;\n }\n midStop = lineStarts[mid + 1];\n if (offset < midStart) {\n high = mid - 1;\n }\n else if (offset >= midStop) {\n low = mid + 1;\n }\n else {\n break;\n }\n }\n if (ret) {\n ret.line = mid;\n ret.column = offset - midStart;\n return null;\n }\n return {\n line: mid,\n column: offset - midStart\n };\n }\n getLineFeedCnt(bufferIndex, start, end) {\n // we don't need to worry about start: abc\\r|\\n, or abc|\\r, or abc|\\n, or abc|\\r\\n doesn't change the fact that, there is one line break after start.\n // now let's take care of end: abc\\r|\\n, if end is in between \\r and \\n, we need to add line feed count by 1\n if (end.column === 0) {\n return end.line - start.line;\n }\n let lineStarts = this._buffers[bufferIndex].lineStarts;\n if (end.line === lineStarts.length - 1) { // it means, there is no \\n after end, otherwise, there will be one more lineStart.\n return end.line - start.line;\n }\n let nextLineStartOffset = lineStarts[end.line + 1];\n let endOffset = lineStarts[end.line] + end.column;\n if (nextLineStartOffset > endOffset + 1) { // there are more than 1 character after end, which means it can't be \\n\n return end.line - start.line;\n }\n // endOffset + 1 === nextLineStartOffset\n // character at endOffset is \\n, so we check the character before first\n // if character at endOffset is \\r, end.column is 0 and we can't get here.\n let previousCharOffset = endOffset - 1; // end.column > 0 so it's okay.\n let buffer = this._buffers[bufferIndex].buffer;\n if (buffer.charCodeAt(previousCharOffset) === 13) {\n return end.line - start.line + 1;\n }\n else {\n return end.line - start.line;\n }\n }\n offsetInBuffer(bufferIndex, cursor) {\n let lineStarts = this._buffers[bufferIndex].lineStarts;\n return lineStarts[cursor.line] + cursor.column;\n }\n deleteNodes(nodes) {\n for (let i = 0; i < nodes.length; i++) {\n rbDelete(this, nodes[i]);\n }\n }\n createNewPieces(text) {\n if (text.length > AverageBufferSize) {\n // the content is large, operations like substring, charCode becomes slow\n // so here we split it into smaller chunks, just like what we did for CR/LF normalization\n let newPieces = [];\n while (text.length > AverageBufferSize) {\n const lastChar = text.charCodeAt(AverageBufferSize - 1);\n let splitText;\n if (lastChar === 13 /* CarriageReturn */ || (lastChar >= 0xD800 && lastChar <= 0xDBFF)) {\n // last character is \\r or a high surrogate => keep it back\n splitText = text.substring(0, AverageBufferSize - 1);\n text = text.substring(AverageBufferSize - 1);\n }\n else {\n splitText = text.substring(0, AverageBufferSize);\n text = text.substring(AverageBufferSize);\n }\n let lineStarts = createLineStartsFast(splitText);\n newPieces.push(new Piece(this._buffers.length, /* buffer index */ { line: 0, column: 0 }, { line: lineStarts.length - 1, column: splitText.length - lineStarts[lineStarts.length - 1] }, lineStarts.length - 1, splitText.length));\n this._buffers.push(new StringBuffer(splitText, lineStarts));\n }\n let lineStarts = createLineStartsFast(text);\n newPieces.push(new Piece(this._buffers.length, /* buffer index */ { line: 0, column: 0 }, { line: lineStarts.length - 1, column: text.length - lineStarts[lineStarts.length - 1] }, lineStarts.length - 1, text.length));\n this._buffers.push(new StringBuffer(text, lineStarts));\n return newPieces;\n }\n let startOffset = this._buffers[0].buffer.length;\n const lineStarts = createLineStartsFast(text, false);\n let start = this._lastChangeBufferPos;\n if (this._buffers[0].lineStarts[this._buffers[0].lineStarts.length - 1] === startOffset\n && startOffset !== 0\n && this.startWithLF(text)\n && this.endWithCR(this._buffers[0].buffer) // todo, we can check this._lastChangeBufferPos's column as it's the last one\n ) {\n this._lastChangeBufferPos = { line: this._lastChangeBufferPos.line, column: this._lastChangeBufferPos.column + 1 };\n start = this._lastChangeBufferPos;\n for (let i = 0; i < lineStarts.length; i++) {\n lineStarts[i] += startOffset + 1;\n }\n this._buffers[0].lineStarts = this._buffers[0].lineStarts.concat(lineStarts.slice(1));\n this._buffers[0].buffer += '_' + text;\n startOffset += 1;\n }\n else {\n if (startOffset !== 0) {\n for (let i = 0; i < lineStarts.length; i++) {\n lineStarts[i] += startOffset;\n }\n }\n this._buffers[0].lineStarts = this._buffers[0].lineStarts.concat(lineStarts.slice(1));\n this._buffers[0].buffer += text;\n }\n const endOffset = this._buffers[0].buffer.length;\n let endIndex = this._buffers[0].lineStarts.length - 1;\n let endColumn = endOffset - this._buffers[0].lineStarts[endIndex];\n let endPos = { line: endIndex, column: endColumn };\n let newPiece = new Piece(0, /** todo@peng */ start, endPos, this.getLineFeedCnt(0, start, endPos), endOffset - startOffset);\n this._lastChangeBufferPos = endPos;\n return [newPiece];\n }\n getLineRawContent(lineNumber, endOffset = 0) {\n let x = this.root;\n let ret = '';\n let cache = this._searchCache.get2(lineNumber);\n if (cache) {\n x = cache.node;\n let prevAccumulatedValue = this.getAccumulatedValue(x, lineNumber - cache.nodeStartLineNumber - 1);\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n if (cache.nodeStartLineNumber + x.piece.lineFeedCnt === lineNumber) {\n ret = buffer.substring(startOffset + prevAccumulatedValue, startOffset + x.piece.length);\n }\n else {\n let accumulatedValue = this.getAccumulatedValue(x, lineNumber - cache.nodeStartLineNumber);\n return buffer.substring(startOffset + prevAccumulatedValue, startOffset + accumulatedValue - endOffset);\n }\n }\n else {\n let nodeStartOffset = 0;\n const originalLineNumber = lineNumber;\n while (x !== SENTINEL) {\n if (x.left !== SENTINEL && x.lf_left >= lineNumber - 1) {\n x = x.left;\n }\n else if (x.lf_left + x.piece.lineFeedCnt > lineNumber - 1) {\n let prevAccumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n let accumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 1);\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n nodeStartOffset += x.size_left;\n this._searchCache.set({\n node: x,\n nodeStartOffset,\n nodeStartLineNumber: originalLineNumber - (lineNumber - 1 - x.lf_left)\n });\n return buffer.substring(startOffset + prevAccumulatedValue, startOffset + accumulatedValue - endOffset);\n }\n else if (x.lf_left + x.piece.lineFeedCnt === lineNumber - 1) {\n let prevAccumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n ret = buffer.substring(startOffset + prevAccumulatedValue, startOffset + x.piece.length);\n break;\n }\n else {\n lineNumber -= x.lf_left + x.piece.lineFeedCnt;\n nodeStartOffset += x.size_left + x.piece.length;\n x = x.right;\n }\n }\n }\n // search in order, to find the node contains end column\n x = x.next();\n while (x !== SENTINEL) {\n let buffer = this._buffers[x.piece.bufferIndex].buffer;\n if (x.piece.lineFeedCnt > 0) {\n let accumulatedValue = this.getAccumulatedValue(x, 0);\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n ret += buffer.substring(startOffset, startOffset + accumulatedValue - endOffset);\n return ret;\n }\n else {\n let startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n ret += buffer.substr(startOffset, x.piece.length);\n }\n x = x.next();\n }\n return ret;\n }\n computeBufferMetadata() {\n let x = this.root;\n let lfCnt = 1;\n let len = 0;\n while (x !== SENTINEL) {\n lfCnt += x.lf_left + x.piece.lineFeedCnt;\n len += x.size_left + x.piece.length;\n x = x.right;\n }\n this._lineCnt = lfCnt;\n this._length = len;\n this._searchCache.validate(this._length);\n }\n // #region node operations\n getIndexOf(node, accumulatedValue) {\n let piece = node.piece;\n let pos = this.positionInBuffer(node, accumulatedValue);\n let lineCnt = pos.line - piece.start.line;\n if (this.offsetInBuffer(piece.bufferIndex, piece.end) - this.offsetInBuffer(piece.bufferIndex, piece.start) === accumulatedValue) {\n // we are checking the end of this node, so a CRLF check is necessary.\n let realLineCnt = this.getLineFeedCnt(node.piece.bufferIndex, piece.start, pos);\n if (realLineCnt !== lineCnt) {\n // aha yes, CRLF\n return { index: realLineCnt, remainder: 0 };\n }\n }\n return { index: lineCnt, remainder: pos.column };\n }\n getAccumulatedValue(node, index) {\n if (index < 0) {\n return 0;\n }\n let piece = node.piece;\n let lineStarts = this._buffers[piece.bufferIndex].lineStarts;\n let expectedLineStartIndex = piece.start.line + index + 1;\n if (expectedLineStartIndex > piece.end.line) {\n return lineStarts[piece.end.line] + piece.end.column - lineStarts[piece.start.line] - piece.start.column;\n }\n else {\n return lineStarts[expectedLineStartIndex] - lineStarts[piece.start.line] - piece.start.column;\n }\n }\n deleteNodeTail(node, pos) {\n const piece = node.piece;\n const originalLFCnt = piece.lineFeedCnt;\n const originalEndOffset = this.offsetInBuffer(piece.bufferIndex, piece.end);\n const newEnd = pos;\n const newEndOffset = this.offsetInBuffer(piece.bufferIndex, newEnd);\n const newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, piece.start, newEnd);\n const lf_delta = newLineFeedCnt - originalLFCnt;\n const size_delta = newEndOffset - originalEndOffset;\n const newLength = piece.length + size_delta;\n node.piece = new Piece(piece.bufferIndex, piece.start, newEnd, newLineFeedCnt, newLength);\n updateTreeMetadata(this, node, size_delta, lf_delta);\n }\n deleteNodeHead(node, pos) {\n const piece = node.piece;\n const originalLFCnt = piece.lineFeedCnt;\n const originalStartOffset = this.offsetInBuffer(piece.bufferIndex, piece.start);\n const newStart = pos;\n const newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, newStart, piece.end);\n const newStartOffset = this.offsetInBuffer(piece.bufferIndex, newStart);\n const lf_delta = newLineFeedCnt - originalLFCnt;\n const size_delta = originalStartOffset - newStartOffset;\n const newLength = piece.length + size_delta;\n node.piece = new Piece(piece.bufferIndex, newStart, piece.end, newLineFeedCnt, newLength);\n updateTreeMetadata(this, node, size_delta, lf_delta);\n }\n shrinkNode(node, start, end) {\n const piece = node.piece;\n const originalStartPos = piece.start;\n const originalEndPos = piece.end;\n // old piece, originalStartPos, start\n const oldLength = piece.length;\n const oldLFCnt = piece.lineFeedCnt;\n const newEnd = start;\n const newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, piece.start, newEnd);\n const newLength = this.offsetInBuffer(piece.bufferIndex, start) - this.offsetInBuffer(piece.bufferIndex, originalStartPos);\n node.piece = new Piece(piece.bufferIndex, piece.start, newEnd, newLineFeedCnt, newLength);\n updateTreeMetadata(this, node, newLength - oldLength, newLineFeedCnt - oldLFCnt);\n // new right piece, end, originalEndPos\n let newPiece = new Piece(piece.bufferIndex, end, originalEndPos, this.getLineFeedCnt(piece.bufferIndex, end, originalEndPos), this.offsetInBuffer(piece.bufferIndex, originalEndPos) - this.offsetInBuffer(piece.bufferIndex, end));\n let newNode = this.rbInsertRight(node, newPiece);\n this.validateCRLFWithPrevNode(newNode);\n }\n appendToNode(node, value) {\n if (this.adjustCarriageReturnFromNext(value, node)) {\n value += '\\n';\n }\n const hitCRLF = this.shouldCheckCRLF() && this.startWithLF(value) && this.endWithCR(node);\n const startOffset = this._buffers[0].buffer.length;\n this._buffers[0].buffer += value;\n const lineStarts = createLineStartsFast(value, false);\n for (let i = 0; i < lineStarts.length; i++) {\n lineStarts[i] += startOffset;\n }\n if (hitCRLF) {\n let prevStartOffset = this._buffers[0].lineStarts[this._buffers[0].lineStarts.length - 2];\n this._buffers[0].lineStarts.pop();\n // _lastChangeBufferPos is already wrong\n this._lastChangeBufferPos = { line: this._lastChangeBufferPos.line - 1, column: startOffset - prevStartOffset };\n }\n this._buffers[0].lineStarts = this._buffers[0].lineStarts.concat(lineStarts.slice(1));\n const endIndex = this._buffers[0].lineStarts.length - 1;\n const endColumn = this._buffers[0].buffer.length - this._buffers[0].lineStarts[endIndex];\n const newEnd = { line: endIndex, column: endColumn };\n const newLength = node.piece.length + value.length;\n const oldLineFeedCnt = node.piece.lineFeedCnt;\n const newLineFeedCnt = this.getLineFeedCnt(0, node.piece.start, newEnd);\n const lf_delta = newLineFeedCnt - oldLineFeedCnt;\n node.piece = new Piece(node.piece.bufferIndex, node.piece.start, newEnd, newLineFeedCnt, newLength);\n this._lastChangeBufferPos = newEnd;\n updateTreeMetadata(this, node, value.length, lf_delta);\n }\n nodeAt(offset) {\n let x = this.root;\n let cache = this._searchCache.get(offset);\n if (cache) {\n return {\n node: cache.node,\n nodeStartOffset: cache.nodeStartOffset,\n remainder: offset - cache.nodeStartOffset\n };\n }\n let nodeStartOffset = 0;\n while (x !== SENTINEL) {\n if (x.size_left > offset) {\n x = x.left;\n }\n else if (x.size_left + x.piece.length >= offset) {\n nodeStartOffset += x.size_left;\n let ret = {\n node: x,\n remainder: offset - x.size_left,\n nodeStartOffset\n };\n this._searchCache.set(ret);\n return ret;\n }\n else {\n offset -= x.size_left + x.piece.length;\n nodeStartOffset += x.size_left + x.piece.length;\n x = x.right;\n }\n }\n return null;\n }\n nodeAt2(lineNumber, column) {\n let x = this.root;\n let nodeStartOffset = 0;\n while (x !== SENTINEL) {\n if (x.left !== SENTINEL && x.lf_left >= lineNumber - 1) {\n x = x.left;\n }\n else if (x.lf_left + x.piece.lineFeedCnt > lineNumber - 1) {\n let prevAccumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n let accumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 1);\n nodeStartOffset += x.size_left;\n return {\n node: x,\n remainder: Math.min(prevAccumualtedValue + column - 1, accumulatedValue),\n nodeStartOffset\n };\n }\n else if (x.lf_left + x.piece.lineFeedCnt === lineNumber - 1) {\n let prevAccumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n if (prevAccumualtedValue + column - 1 <= x.piece.length) {\n return {\n node: x,\n remainder: prevAccumualtedValue + column - 1,\n nodeStartOffset\n };\n }\n else {\n column -= x.piece.length - prevAccumualtedValue;\n break;\n }\n }\n else {\n lineNumber -= x.lf_left + x.piece.lineFeedCnt;\n nodeStartOffset += x.size_left + x.piece.length;\n x = x.right;\n }\n }\n // search in order, to find the node contains position.column\n x = x.next();\n while (x !== SENTINEL) {\n if (x.piece.lineFeedCnt > 0) {\n let accumulatedValue = this.getAccumulatedValue(x, 0);\n let nodeStartOffset = this.offsetOfNode(x);\n return {\n node: x,\n remainder: Math.min(column - 1, accumulatedValue),\n nodeStartOffset\n };\n }\n else {\n if (x.piece.length >= column - 1) {\n let nodeStartOffset = this.offsetOfNode(x);\n return {\n node: x,\n remainder: column - 1,\n nodeStartOffset\n };\n }\n else {\n column -= x.piece.length;\n }\n }\n x = x.next();\n }\n return null;\n }\n nodeCharCodeAt(node, offset) {\n if (node.piece.lineFeedCnt < 1) {\n return -1;\n }\n let buffer = this._buffers[node.piece.bufferIndex];\n let newOffset = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start) + offset;\n return buffer.buffer.charCodeAt(newOffset);\n }\n offsetOfNode(node) {\n if (!node) {\n return 0;\n }\n let pos = node.size_left;\n while (node !== this.root) {\n if (node.parent.right === node) {\n pos += node.parent.size_left + node.parent.piece.length;\n }\n node = node.parent;\n }\n return pos;\n }\n // #endregion\n // #region CRLF\n shouldCheckCRLF() {\n return !(this._EOLNormalized && this._EOL === '\\n');\n }\n startWithLF(val) {\n if (typeof val === 'string') {\n return val.charCodeAt(0) === 10;\n }\n if (val === SENTINEL || val.piece.lineFeedCnt === 0) {\n return false;\n }\n let piece = val.piece;\n let lineStarts = this._buffers[piece.bufferIndex].lineStarts;\n let line = piece.start.line;\n let startOffset = lineStarts[line] + piece.start.column;\n if (line === lineStarts.length - 1) {\n // last line, so there is no line feed at the end of this line\n return false;\n }\n let nextLineOffset = lineStarts[line + 1];\n if (nextLineOffset > startOffset + 1) {\n return false;\n }\n return this._buffers[piece.bufferIndex].buffer.charCodeAt(startOffset) === 10;\n }\n endWithCR(val) {\n if (typeof val === 'string') {\n return val.charCodeAt(val.length - 1) === 13;\n }\n if (val === SENTINEL || val.piece.lineFeedCnt === 0) {\n return false;\n }\n return this.nodeCharCodeAt(val, val.piece.length - 1) === 13;\n }\n validateCRLFWithPrevNode(nextNode) {\n if (this.shouldCheckCRLF() && this.startWithLF(nextNode)) {\n let node = nextNode.prev();\n if (this.endWithCR(node)) {\n this.fixCRLF(node, nextNode);\n }\n }\n }\n validateCRLFWithNextNode(node) {\n if (this.shouldCheckCRLF() && this.endWithCR(node)) {\n let nextNode = node.next();\n if (this.startWithLF(nextNode)) {\n this.fixCRLF(node, nextNode);\n }\n }\n }\n fixCRLF(prev, next) {\n let nodesToDel = [];\n // update node\n let lineStarts = this._buffers[prev.piece.bufferIndex].lineStarts;\n let newEnd;\n if (prev.piece.end.column === 0) {\n // it means, last line ends with \\r, not \\r\\n\n newEnd = { line: prev.piece.end.line - 1, column: lineStarts[prev.piece.end.line] - lineStarts[prev.piece.end.line - 1] - 1 };\n }\n else {\n // \\r\\n\n newEnd = { line: prev.piece.end.line, column: prev.piece.end.column - 1 };\n }\n const prevNewLength = prev.piece.length - 1;\n const prevNewLFCnt = prev.piece.lineFeedCnt - 1;\n prev.piece = new Piece(prev.piece.bufferIndex, prev.piece.start, newEnd, prevNewLFCnt, prevNewLength);\n updateTreeMetadata(this, prev, -1, -1);\n if (prev.piece.length === 0) {\n nodesToDel.push(prev);\n }\n // update nextNode\n let newStart = { line: next.piece.start.line + 1, column: 0 };\n const newLength = next.piece.length - 1;\n const newLineFeedCnt = this.getLineFeedCnt(next.piece.bufferIndex, newStart, next.piece.end);\n next.piece = new Piece(next.piece.bufferIndex, newStart, next.piece.end, newLineFeedCnt, newLength);\n updateTreeMetadata(this, next, -1, -1);\n if (next.piece.length === 0) {\n nodesToDel.push(next);\n }\n // create new piece which contains \\r\\n\n let pieces = this.createNewPieces('\\r\\n');\n this.rbInsertRight(prev, pieces[0]);\n // delete empty nodes\n for (let i = 0; i < nodesToDel.length; i++) {\n rbDelete(this, nodesToDel[i]);\n }\n }\n adjustCarriageReturnFromNext(value, node) {\n if (this.shouldCheckCRLF() && this.endWithCR(value)) {\n let nextNode = node.next();\n if (this.startWithLF(nextNode)) {\n // move `\\n` forward\n value += '\\n';\n if (nextNode.piece.length === 1) {\n rbDelete(this, nextNode);\n }\n else {\n const piece = nextNode.piece;\n const newStart = { line: piece.start.line + 1, column: 0 };\n const newLength = piece.length - 1;\n const newLineFeedCnt = this.getLineFeedCnt(piece.bufferIndex, newStart, piece.end);\n nextNode.piece = new Piece(piece.bufferIndex, newStart, piece.end, newLineFeedCnt, newLength);\n updateTreeMetadata(this, nextNode, -1, -1);\n }\n return true;\n }\n }\n return false;\n }\n // #endregion\n // #endregion\n // #region Tree operations\n iterate(node, callback) {\n if (node === SENTINEL) {\n return callback(SENTINEL);\n }\n let leftRet = this.iterate(node.left, callback);\n if (!leftRet) {\n return leftRet;\n }\n return callback(node) && this.iterate(node.right, callback);\n }\n getNodeContent(node) {\n if (node === SENTINEL) {\n return '';\n }\n let buffer = this._buffers[node.piece.bufferIndex];\n let currentContent;\n let piece = node.piece;\n let startOffset = this.offsetInBuffer(piece.bufferIndex, piece.start);\n let endOffset = this.offsetInBuffer(piece.bufferIndex, piece.end);\n currentContent = buffer.buffer.substring(startOffset, endOffset);\n return currentContent;\n }\n getPieceContent(piece) {\n let buffer = this._buffers[piece.bufferIndex];\n let startOffset = this.offsetInBuffer(piece.bufferIndex, piece.start);\n let endOffset = this.offsetInBuffer(piece.bufferIndex, piece.end);\n let currentContent = buffer.buffer.substring(startOffset, endOffset);\n return currentContent;\n }\n /**\n * node node\n * / \\ / \\\n * a b <---- a b\n * /\n * z\n */\n rbInsertRight(node, p) {\n let z = new TreeNode(p, 1 /* Red */);\n z.left = SENTINEL;\n z.right = SENTINEL;\n z.parent = SENTINEL;\n z.size_left = 0;\n z.lf_left = 0;\n let x = this.root;\n if (x === SENTINEL) {\n this.root = z;\n z.color = 0 /* Black */;\n }\n else if (node.right === SENTINEL) {\n node.right = z;\n z.parent = node;\n }\n else {\n let nextNode = leftest(node.right);\n nextNode.left = z;\n z.parent = nextNode;\n }\n fixInsert(this, z);\n return z;\n }\n /**\n * node node\n * / \\ / \\\n * a b ----> a b\n * \\\n * z\n */\n rbInsertLeft(node, p) {\n let z = new TreeNode(p, 1 /* Red */);\n z.left = SENTINEL;\n z.right = SENTINEL;\n z.parent = SENTINEL;\n z.size_left = 0;\n z.lf_left = 0;\n if (this.root === SENTINEL) {\n this.root = z;\n z.color = 0 /* Black */;\n }\n else if (node.left === SENTINEL) {\n node.left = z;\n z.parent = node;\n }\n else {\n let prevNode = righttest(node.left); // a\n prevNode.right = z;\n z.parent = prevNode;\n }\n fixInsert(this, z);\n return z;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../../base/common/event.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { Range } from '../../core/range.js';\nimport { ApplyEditsResult } from '../../model.js';\nimport { PieceTreeBase } from './pieceTreeBase.js';\nimport { countEOL } from '../tokensStore.js';\nimport { TextChange } from '../textChange.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nexport class PieceTreeTextBuffer extends Disposable {\n constructor(chunks, BOM, eol, containsRTL, containsUnusualLineTerminators, isBasicASCII, eolNormalized) {\n super();\n this._onDidChangeContent = this._register(new Emitter());\n this._BOM = BOM;\n this._mightContainNonBasicASCII = !isBasicASCII;\n this._mightContainRTL = containsRTL;\n this._mightContainUnusualLineTerminators = containsUnusualLineTerminators;\n this._pieceTree = new PieceTreeBase(chunks, eol, eolNormalized);\n }\n mightContainRTL() {\n return this._mightContainRTL;\n }\n mightContainUnusualLineTerminators() {\n return this._mightContainUnusualLineTerminators;\n }\n resetMightContainUnusualLineTerminators() {\n this._mightContainUnusualLineTerminators = false;\n }\n mightContainNonBasicASCII() {\n return this._mightContainNonBasicASCII;\n }\n getBOM() {\n return this._BOM;\n }\n getEOL() {\n return this._pieceTree.getEOL();\n }\n createSnapshot(preserveBOM) {\n return this._pieceTree.createSnapshot(preserveBOM ? this._BOM : '');\n }\n getOffsetAt(lineNumber, column) {\n return this._pieceTree.getOffsetAt(lineNumber, column);\n }\n getPositionAt(offset) {\n return this._pieceTree.getPositionAt(offset);\n }\n getRangeAt(start, length) {\n let end = start + length;\n const startPosition = this.getPositionAt(start);\n const endPosition = this.getPositionAt(end);\n return new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column);\n }\n getValueInRange(range, eol = 0 /* TextDefined */) {\n if (range.isEmpty()) {\n return '';\n }\n const lineEnding = this._getEndOfLine(eol);\n return this._pieceTree.getValueInRange(range, lineEnding);\n }\n getValueLengthInRange(range, eol = 0 /* TextDefined */) {\n if (range.isEmpty()) {\n return 0;\n }\n if (range.startLineNumber === range.endLineNumber) {\n return (range.endColumn - range.startColumn);\n }\n let startOffset = this.getOffsetAt(range.startLineNumber, range.startColumn);\n let endOffset = this.getOffsetAt(range.endLineNumber, range.endColumn);\n return endOffset - startOffset;\n }\n getCharacterCountInRange(range, eol = 0 /* TextDefined */) {\n if (this._mightContainNonBasicASCII) {\n // we must count by iterating\n let result = 0;\n const fromLineNumber = range.startLineNumber;\n const toLineNumber = range.endLineNumber;\n for (let lineNumber = fromLineNumber; lineNumber <= toLineNumber; lineNumber++) {\n const lineContent = this.getLineContent(lineNumber);\n const fromOffset = (lineNumber === fromLineNumber ? range.startColumn - 1 : 0);\n const toOffset = (lineNumber === toLineNumber ? range.endColumn - 1 : lineContent.length);\n for (let offset = fromOffset; offset < toOffset; offset++) {\n if (strings.isHighSurrogate(lineContent.charCodeAt(offset))) {\n result = result + 1;\n offset = offset + 1;\n }\n else {\n result = result + 1;\n }\n }\n }\n result += this._getEndOfLine(eol).length * (toLineNumber - fromLineNumber);\n return result;\n }\n return this.getValueLengthInRange(range, eol);\n }\n getLength() {\n return this._pieceTree.getLength();\n }\n getLineCount() {\n return this._pieceTree.getLineCount();\n }\n getLinesContent() {\n return this._pieceTree.getLinesContent();\n }\n getLineContent(lineNumber) {\n return this._pieceTree.getLineContent(lineNumber);\n }\n getLineCharCode(lineNumber, index) {\n return this._pieceTree.getLineCharCode(lineNumber, index);\n }\n getLineLength(lineNumber) {\n return this._pieceTree.getLineLength(lineNumber);\n }\n getLineFirstNonWhitespaceColumn(lineNumber) {\n const result = strings.firstNonWhitespaceIndex(this.getLineContent(lineNumber));\n if (result === -1) {\n return 0;\n }\n return result + 1;\n }\n getLineLastNonWhitespaceColumn(lineNumber) {\n const result = strings.lastNonWhitespaceIndex(this.getLineContent(lineNumber));\n if (result === -1) {\n return 0;\n }\n return result + 2;\n }\n _getEndOfLine(eol) {\n switch (eol) {\n case 1 /* LF */:\n return '\\n';\n case 2 /* CRLF */:\n return '\\r\\n';\n case 0 /* TextDefined */:\n return this.getEOL();\n default:\n throw new Error('Unknown EOL preference');\n }\n }\n setEOL(newEOL) {\n this._pieceTree.setEOL(newEOL);\n }\n applyEdits(rawOperations, recordTrimAutoWhitespace, computeUndoEdits) {\n let mightContainRTL = this._mightContainRTL;\n let mightContainUnusualLineTerminators = this._mightContainUnusualLineTerminators;\n let mightContainNonBasicASCII = this._mightContainNonBasicASCII;\n let canReduceOperations = true;\n let operations = [];\n for (let i = 0; i < rawOperations.length; i++) {\n let op = rawOperations[i];\n if (canReduceOperations && op._isTracked) {\n canReduceOperations = false;\n }\n let validatedRange = op.range;\n if (op.text) {\n let textMightContainNonBasicASCII = true;\n if (!mightContainNonBasicASCII) {\n textMightContainNonBasicASCII = !strings.isBasicASCII(op.text);\n mightContainNonBasicASCII = textMightContainNonBasicASCII;\n }\n if (!mightContainRTL && textMightContainNonBasicASCII) {\n // check if the new inserted text contains RTL\n mightContainRTL = strings.containsRTL(op.text);\n }\n if (!mightContainUnusualLineTerminators && textMightContainNonBasicASCII) {\n // check if the new inserted text contains unusual line terminators\n mightContainUnusualLineTerminators = strings.containsUnusualLineTerminators(op.text);\n }\n }\n let validText = '';\n let eolCount = 0;\n let firstLineLength = 0;\n let lastLineLength = 0;\n if (op.text) {\n let strEOL;\n [eolCount, firstLineLength, lastLineLength, strEOL] = countEOL(op.text);\n const bufferEOL = this.getEOL();\n const expectedStrEOL = (bufferEOL === '\\r\\n' ? 2 /* CRLF */ : 1 /* LF */);\n if (strEOL === 0 /* Unknown */ || strEOL === expectedStrEOL) {\n validText = op.text;\n }\n else {\n validText = op.text.replace(/\\r\\n|\\r|\\n/g, bufferEOL);\n }\n }\n operations[i] = {\n sortIndex: i,\n identifier: op.identifier || null,\n range: validatedRange,\n rangeOffset: this.getOffsetAt(validatedRange.startLineNumber, validatedRange.startColumn),\n rangeLength: this.getValueLengthInRange(validatedRange),\n text: validText,\n eolCount: eolCount,\n firstLineLength: firstLineLength,\n lastLineLength: lastLineLength,\n forceMoveMarkers: Boolean(op.forceMoveMarkers),\n isAutoWhitespaceEdit: op.isAutoWhitespaceEdit || false\n };\n }\n // Sort operations ascending\n operations.sort(PieceTreeTextBuffer._sortOpsAscending);\n let hasTouchingRanges = false;\n for (let i = 0, count = operations.length - 1; i < count; i++) {\n let rangeEnd = operations[i].range.getEndPosition();\n let nextRangeStart = operations[i + 1].range.getStartPosition();\n if (nextRangeStart.isBeforeOrEqual(rangeEnd)) {\n if (nextRangeStart.isBefore(rangeEnd)) {\n // overlapping ranges\n throw new Error('Overlapping ranges are not allowed!');\n }\n hasTouchingRanges = true;\n }\n }\n if (canReduceOperations) {\n operations = this._reduceOperations(operations);\n }\n // Delta encode operations\n let reverseRanges = (computeUndoEdits || recordTrimAutoWhitespace ? PieceTreeTextBuffer._getInverseEditRanges(operations) : []);\n let newTrimAutoWhitespaceCandidates = [];\n if (recordTrimAutoWhitespace) {\n for (let i = 0; i < operations.length; i++) {\n let op = operations[i];\n let reverseRange = reverseRanges[i];\n if (op.isAutoWhitespaceEdit && op.range.isEmpty()) {\n // Record already the future line numbers that might be auto whitespace removal candidates on next edit\n for (let lineNumber = reverseRange.startLineNumber; lineNumber <= reverseRange.endLineNumber; lineNumber++) {\n let currentLineContent = '';\n if (lineNumber === reverseRange.startLineNumber) {\n currentLineContent = this.getLineContent(op.range.startLineNumber);\n if (strings.firstNonWhitespaceIndex(currentLineContent) !== -1) {\n continue;\n }\n }\n newTrimAutoWhitespaceCandidates.push({ lineNumber: lineNumber, oldContent: currentLineContent });\n }\n }\n }\n }\n let reverseOperations = null;\n if (computeUndoEdits) {\n let reverseRangeDeltaOffset = 0;\n reverseOperations = [];\n for (let i = 0; i < operations.length; i++) {\n const op = operations[i];\n const reverseRange = reverseRanges[i];\n const bufferText = this.getValueInRange(op.range);\n const reverseRangeOffset = op.rangeOffset + reverseRangeDeltaOffset;\n reverseRangeDeltaOffset += (op.text.length - bufferText.length);\n reverseOperations[i] = {\n sortIndex: op.sortIndex,\n identifier: op.identifier,\n range: reverseRange,\n text: bufferText,\n textChange: new TextChange(op.rangeOffset, bufferText, reverseRangeOffset, op.text)\n };\n }\n // Can only sort reverse operations when the order is not significant\n if (!hasTouchingRanges) {\n reverseOperations.sort((a, b) => a.sortIndex - b.sortIndex);\n }\n }\n this._mightContainRTL = mightContainRTL;\n this._mightContainUnusualLineTerminators = mightContainUnusualLineTerminators;\n this._mightContainNonBasicASCII = mightContainNonBasicASCII;\n const contentChanges = this._doApplyEdits(operations);\n let trimAutoWhitespaceLineNumbers = null;\n if (recordTrimAutoWhitespace && newTrimAutoWhitespaceCandidates.length > 0) {\n // sort line numbers auto whitespace removal candidates for next edit descending\n newTrimAutoWhitespaceCandidates.sort((a, b) => b.lineNumber - a.lineNumber);\n trimAutoWhitespaceLineNumbers = [];\n for (let i = 0, len = newTrimAutoWhitespaceCandidates.length; i < len; i++) {\n let lineNumber = newTrimAutoWhitespaceCandidates[i].lineNumber;\n if (i > 0 && newTrimAutoWhitespaceCandidates[i - 1].lineNumber === lineNumber) {\n // Do not have the same line number twice\n continue;\n }\n let prevContent = newTrimAutoWhitespaceCandidates[i].oldContent;\n let lineContent = this.getLineContent(lineNumber);\n if (lineContent.length === 0 || lineContent === prevContent || strings.firstNonWhitespaceIndex(lineContent) !== -1) {\n continue;\n }\n trimAutoWhitespaceLineNumbers.push(lineNumber);\n }\n }\n this._onDidChangeContent.fire();\n return new ApplyEditsResult(reverseOperations, contentChanges, trimAutoWhitespaceLineNumbers);\n }\n /**\n * Transform operations such that they represent the same logic edit,\n * but that they also do not cause OOM crashes.\n */\n _reduceOperations(operations) {\n if (operations.length < 1000) {\n // We know from empirical testing that a thousand edits work fine regardless of their shape.\n return operations;\n }\n // At one point, due to how events are emitted and how each operation is handled,\n // some operations can trigger a high amount of temporary string allocations,\n // that will immediately get edited again.\n // e.g. a formatter inserting ridiculous ammounts of \\n on a model with a single line\n // Therefore, the strategy is to collapse all the operations into a huge single edit operation\n return [this._toSingleEditOperation(operations)];\n }\n _toSingleEditOperation(operations) {\n let forceMoveMarkers = false;\n const firstEditRange = operations[0].range;\n const lastEditRange = operations[operations.length - 1].range;\n const entireEditRange = new Range(firstEditRange.startLineNumber, firstEditRange.startColumn, lastEditRange.endLineNumber, lastEditRange.endColumn);\n let lastEndLineNumber = firstEditRange.startLineNumber;\n let lastEndColumn = firstEditRange.startColumn;\n const result = [];\n for (let i = 0, len = operations.length; i < len; i++) {\n const operation = operations[i];\n const range = operation.range;\n forceMoveMarkers = forceMoveMarkers || operation.forceMoveMarkers;\n // (1) -- Push old text\n result.push(this.getValueInRange(new Range(lastEndLineNumber, lastEndColumn, range.startLineNumber, range.startColumn)));\n // (2) -- Push new text\n if (operation.text.length > 0) {\n result.push(operation.text);\n }\n lastEndLineNumber = range.endLineNumber;\n lastEndColumn = range.endColumn;\n }\n const text = result.join('');\n const [eolCount, firstLineLength, lastLineLength] = countEOL(text);\n return {\n sortIndex: 0,\n identifier: operations[0].identifier,\n range: entireEditRange,\n rangeOffset: this.getOffsetAt(entireEditRange.startLineNumber, entireEditRange.startColumn),\n rangeLength: this.getValueLengthInRange(entireEditRange, 0 /* TextDefined */),\n text: text,\n eolCount: eolCount,\n firstLineLength: firstLineLength,\n lastLineLength: lastLineLength,\n forceMoveMarkers: forceMoveMarkers,\n isAutoWhitespaceEdit: false\n };\n }\n _doApplyEdits(operations) {\n operations.sort(PieceTreeTextBuffer._sortOpsDescending);\n let contentChanges = [];\n // operations are from bottom to top\n for (let i = 0; i < operations.length; i++) {\n let op = operations[i];\n const startLineNumber = op.range.startLineNumber;\n const startColumn = op.range.startColumn;\n const endLineNumber = op.range.endLineNumber;\n const endColumn = op.range.endColumn;\n if (startLineNumber === endLineNumber && startColumn === endColumn && op.text.length === 0) {\n // no-op\n continue;\n }\n if (op.text) {\n // replacement\n this._pieceTree.delete(op.rangeOffset, op.rangeLength);\n this._pieceTree.insert(op.rangeOffset, op.text, true);\n }\n else {\n // deletion\n this._pieceTree.delete(op.rangeOffset, op.rangeLength);\n }\n const contentChangeRange = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n contentChanges.push({\n range: contentChangeRange,\n rangeLength: op.rangeLength,\n text: op.text,\n rangeOffset: op.rangeOffset,\n forceMoveMarkers: op.forceMoveMarkers\n });\n }\n return contentChanges;\n }\n findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount) {\n return this._pieceTree.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);\n }\n /**\n * Assumes `operations` are validated and sorted ascending\n */\n static _getInverseEditRanges(operations) {\n let result = [];\n let prevOpEndLineNumber = 0;\n let prevOpEndColumn = 0;\n let prevOp = null;\n for (let i = 0, len = operations.length; i < len; i++) {\n let op = operations[i];\n let startLineNumber;\n let startColumn;\n if (prevOp) {\n if (prevOp.range.endLineNumber === op.range.startLineNumber) {\n startLineNumber = prevOpEndLineNumber;\n startColumn = prevOpEndColumn + (op.range.startColumn - prevOp.range.endColumn);\n }\n else {\n startLineNumber = prevOpEndLineNumber + (op.range.startLineNumber - prevOp.range.endLineNumber);\n startColumn = op.range.startColumn;\n }\n }\n else {\n startLineNumber = op.range.startLineNumber;\n startColumn = op.range.startColumn;\n }\n let resultRange;\n if (op.text.length > 0) {\n // the operation inserts something\n const lineCount = op.eolCount + 1;\n if (lineCount === 1) {\n // single line insert\n resultRange = new Range(startLineNumber, startColumn, startLineNumber, startColumn + op.firstLineLength);\n }\n else {\n // multi line insert\n resultRange = new Range(startLineNumber, startColumn, startLineNumber + lineCount - 1, op.lastLineLength + 1);\n }\n }\n else {\n // There is nothing to insert\n resultRange = new Range(startLineNumber, startColumn, startLineNumber, startColumn);\n }\n prevOpEndLineNumber = resultRange.endLineNumber;\n prevOpEndColumn = resultRange.endColumn;\n result.push(resultRange);\n prevOp = op;\n }\n return result;\n }\n static _sortOpsAscending(a, b) {\n let r = Range.compareRangesUsingEnds(a.range, b.range);\n if (r === 0) {\n return a.sortIndex - b.sortIndex;\n }\n return r;\n }\n static _sortOpsDescending(a, b) {\n let r = Range.compareRangesUsingEnds(a.range, b.range);\n if (r === 0) {\n return b.sortIndex - a.sortIndex;\n }\n return -r;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../../base/common/strings.js';\nimport { StringBuffer, createLineStarts, createLineStartsFast } from './pieceTreeBase.js';\nimport { PieceTreeTextBuffer } from './pieceTreeTextBuffer.js';\nexport class PieceTreeTextBufferFactory {\n constructor(_chunks, _bom, _cr, _lf, _crlf, _containsRTL, _containsUnusualLineTerminators, _isBasicASCII, _normalizeEOL) {\n this._chunks = _chunks;\n this._bom = _bom;\n this._cr = _cr;\n this._lf = _lf;\n this._crlf = _crlf;\n this._containsRTL = _containsRTL;\n this._containsUnusualLineTerminators = _containsUnusualLineTerminators;\n this._isBasicASCII = _isBasicASCII;\n this._normalizeEOL = _normalizeEOL;\n }\n _getEOL(defaultEOL) {\n const totalEOLCount = this._cr + this._lf + this._crlf;\n const totalCRCount = this._cr + this._crlf;\n if (totalEOLCount === 0) {\n // This is an empty file or a file with precisely one line\n return (defaultEOL === 1 /* LF */ ? '\\n' : '\\r\\n');\n }\n if (totalCRCount > totalEOLCount / 2) {\n // More than half of the file contains \\r\\n ending lines\n return '\\r\\n';\n }\n // At least one line more ends in \\n\n return '\\n';\n }\n create(defaultEOL) {\n const eol = this._getEOL(defaultEOL);\n let chunks = this._chunks;\n if (this._normalizeEOL &&\n ((eol === '\\r\\n' && (this._cr > 0 || this._lf > 0))\n || (eol === '\\n' && (this._cr > 0 || this._crlf > 0)))) {\n // Normalize pieces\n for (let i = 0, len = chunks.length; i < len; i++) {\n let str = chunks[i].buffer.replace(/\\r\\n|\\r|\\n/g, eol);\n let newLineStart = createLineStartsFast(str);\n chunks[i] = new StringBuffer(str, newLineStart);\n }\n }\n const textBuffer = new PieceTreeTextBuffer(chunks, this._bom, eol, this._containsRTL, this._containsUnusualLineTerminators, this._isBasicASCII, this._normalizeEOL);\n return { textBuffer: textBuffer, disposable: textBuffer };\n }\n}\nexport class PieceTreeTextBufferBuilder {\n constructor() {\n this.chunks = [];\n this.BOM = '';\n this._hasPreviousChar = false;\n this._previousChar = 0;\n this._tmpLineStarts = [];\n this.cr = 0;\n this.lf = 0;\n this.crlf = 0;\n this.containsRTL = false;\n this.containsUnusualLineTerminators = false;\n this.isBasicASCII = true;\n }\n acceptChunk(chunk) {\n if (chunk.length === 0) {\n return;\n }\n if (this.chunks.length === 0) {\n if (strings.startsWithUTF8BOM(chunk)) {\n this.BOM = strings.UTF8_BOM_CHARACTER;\n chunk = chunk.substr(1);\n }\n }\n const lastChar = chunk.charCodeAt(chunk.length - 1);\n if (lastChar === 13 /* CarriageReturn */ || (lastChar >= 0xD800 && lastChar <= 0xDBFF)) {\n // last character is \\r or a high surrogate => keep it back\n this._acceptChunk1(chunk.substr(0, chunk.length - 1), false);\n this._hasPreviousChar = true;\n this._previousChar = lastChar;\n }\n else {\n this._acceptChunk1(chunk, false);\n this._hasPreviousChar = false;\n this._previousChar = lastChar;\n }\n }\n _acceptChunk1(chunk, allowEmptyStrings) {\n if (!allowEmptyStrings && chunk.length === 0) {\n // Nothing to do\n return;\n }\n if (this._hasPreviousChar) {\n this._acceptChunk2(String.fromCharCode(this._previousChar) + chunk);\n }\n else {\n this._acceptChunk2(chunk);\n }\n }\n _acceptChunk2(chunk) {\n const lineStarts = createLineStarts(this._tmpLineStarts, chunk);\n this.chunks.push(new StringBuffer(chunk, lineStarts.lineStarts));\n this.cr += lineStarts.cr;\n this.lf += lineStarts.lf;\n this.crlf += lineStarts.crlf;\n if (this.isBasicASCII) {\n this.isBasicASCII = lineStarts.isBasicASCII;\n }\n if (!this.isBasicASCII && !this.containsRTL) {\n // No need to check if it is basic ASCII\n this.containsRTL = strings.containsRTL(chunk);\n }\n if (!this.isBasicASCII && !this.containsUnusualLineTerminators) {\n // No need to check if it is basic ASCII\n this.containsUnusualLineTerminators = strings.containsUnusualLineTerminators(chunk);\n }\n }\n finish(normalizeEOL = true) {\n this._finish();\n return new PieceTreeTextBufferFactory(this.chunks, this.BOM, this.cr, this.lf, this.crlf, this.containsRTL, this.containsUnusualLineTerminators, this.isBasicASCII, normalizeEOL);\n }\n _finish() {\n if (this.chunks.length === 0) {\n this._acceptChunk1('', true);\n }\n if (this._hasPreviousChar) {\n this._hasPreviousChar = false;\n // recreate last chunk\n let lastChunk = this.chunks[this.chunks.length - 1];\n lastChunk.buffer += String.fromCharCode(this._previousChar);\n let newLineStarts = createLineStartsFast(lastChunk.buffer);\n lastChunk.lineStarts = newLineStarts;\n if (this._previousChar === 13 /* CarriageReturn */) {\n this.cr++;\n }\n }\n }\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/**\n * An event describing that a model has been reset to a new value.\n * @internal\n */\nexport class ModelRawFlush {\n constructor() {\n this.changeType = 1 /* Flush */;\n }\n}\n/**\n * An event describing that a line has changed in a model.\n * @internal\n */\nexport class ModelRawLineChanged {\n constructor(lineNumber, detail) {\n this.changeType = 2 /* LineChanged */;\n this.lineNumber = lineNumber;\n this.detail = detail;\n }\n}\n/**\n * An event describing that line(s) have been deleted in a model.\n * @internal\n */\nexport class ModelRawLinesDeleted {\n constructor(fromLineNumber, toLineNumber) {\n this.changeType = 3 /* LinesDeleted */;\n this.fromLineNumber = fromLineNumber;\n this.toLineNumber = toLineNumber;\n }\n}\n/**\n * An event describing that line(s) have been inserted in a model.\n * @internal\n */\nexport class ModelRawLinesInserted {\n constructor(fromLineNumber, toLineNumber, detail) {\n this.changeType = 4 /* LinesInserted */;\n this.fromLineNumber = fromLineNumber;\n this.toLineNumber = toLineNumber;\n this.detail = detail;\n }\n}\n/**\n * An event describing that a model has had its EOL changed.\n * @internal\n */\nexport class ModelRawEOLChanged {\n constructor() {\n this.changeType = 5 /* EOLChanged */;\n }\n}\n/**\n * An event describing a change in the text of a model.\n * @internal\n */\nexport class ModelRawContentChangedEvent {\n constructor(changes, versionId, isUndoing, isRedoing) {\n this.changes = changes;\n this.versionId = versionId;\n this.isUndoing = isUndoing;\n this.isRedoing = isRedoing;\n this.resultingSelection = null;\n }\n containsEvent(type) {\n for (let i = 0, len = this.changes.length; i < len; i++) {\n const change = this.changes[i];\n if (change.changeType === type) {\n return true;\n }\n }\n return false;\n }\n static merge(a, b) {\n const changes = [].concat(a.changes).concat(b.changes);\n const versionId = b.versionId;\n const isUndoing = (a.isUndoing || b.isUndoing);\n const isRedoing = (a.isRedoing || b.isRedoing);\n return new ModelRawContentChangedEvent(changes, versionId, isUndoing, isRedoing);\n }\n}\n/**\n * @internal\n */\nexport class InternalModelContentChangeEvent {\n constructor(rawContentChangedEvent, contentChangedEvent) {\n this.rawContentChangedEvent = rawContentChangedEvent;\n this.contentChangedEvent = contentChangedEvent;\n }\n merge(other) {\n const rawContentChangedEvent = ModelRawContentChangedEvent.merge(this.rawContentChangedEvent, other.rawContentChangedEvent);\n const contentChangedEvent = InternalModelContentChangeEvent._mergeChangeEvents(this.contentChangedEvent, other.contentChangedEvent);\n return new InternalModelContentChangeEvent(rawContentChangedEvent, contentChangedEvent);\n }\n static _mergeChangeEvents(a, b) {\n const changes = [].concat(a.changes).concat(b.changes);\n const eol = b.eol;\n const versionId = b.versionId;\n const isUndoing = (a.isUndoing || b.isUndoing);\n const isRedoing = (a.isRedoing || b.isRedoing);\n const isFlush = (a.isFlush || b.isFlush);\n return {\n changes: changes,\n eol: eol,\n versionId: versionId,\n isUndoing: isUndoing,\n isRedoing: isRedoing,\n isFlush: isFlush\n };\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as arrays from '../../../base/common/arrays.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { LineTokens } from '../core/lineTokens.js';\nimport { Position } from '../core/position.js';\nimport { TokenizationRegistry } from '../modes.js';\nimport { nullTokenize2 } from '../modes/nullMode.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\nimport { MultilineTokensBuilder, countEOL } from './tokensStore.js';\nimport * as platform from '../../../base/common/platform.js';\nexport class TokenizationStateStore {\n constructor() {\n this._beginState = [];\n this._valid = [];\n this._len = 0;\n this._invalidLineStartIndex = 0;\n }\n _reset(initialState) {\n this._beginState = [];\n this._valid = [];\n this._len = 0;\n this._invalidLineStartIndex = 0;\n if (initialState) {\n this._setBeginState(0, initialState);\n }\n }\n flush(initialState) {\n this._reset(initialState);\n }\n get invalidLineStartIndex() {\n return this._invalidLineStartIndex;\n }\n _invalidateLine(lineIndex) {\n if (lineIndex < this._len) {\n this._valid[lineIndex] = false;\n }\n if (lineIndex < this._invalidLineStartIndex) {\n this._invalidLineStartIndex = lineIndex;\n }\n }\n _isValid(lineIndex) {\n if (lineIndex < this._len) {\n return this._valid[lineIndex];\n }\n return false;\n }\n getBeginState(lineIndex) {\n if (lineIndex < this._len) {\n return this._beginState[lineIndex];\n }\n return null;\n }\n _ensureLine(lineIndex) {\n while (lineIndex >= this._len) {\n this._beginState[this._len] = null;\n this._valid[this._len] = false;\n this._len++;\n }\n }\n _deleteLines(start, deleteCount) {\n if (deleteCount === 0) {\n return;\n }\n if (start + deleteCount > this._len) {\n deleteCount = this._len - start;\n }\n this._beginState.splice(start, deleteCount);\n this._valid.splice(start, deleteCount);\n this._len -= deleteCount;\n }\n _insertLines(insertIndex, insertCount) {\n if (insertCount === 0) {\n return;\n }\n let beginState = [];\n let valid = [];\n for (let i = 0; i < insertCount; i++) {\n beginState[i] = null;\n valid[i] = false;\n }\n this._beginState = arrays.arrayInsert(this._beginState, insertIndex, beginState);\n this._valid = arrays.arrayInsert(this._valid, insertIndex, valid);\n this._len += insertCount;\n }\n _setValid(lineIndex, valid) {\n this._ensureLine(lineIndex);\n this._valid[lineIndex] = valid;\n }\n _setBeginState(lineIndex, beginState) {\n this._ensureLine(lineIndex);\n this._beginState[lineIndex] = beginState;\n }\n setEndState(linesLength, lineIndex, endState) {\n this._setValid(lineIndex, true);\n this._invalidLineStartIndex = lineIndex + 1;\n // Check if this was the last line\n if (lineIndex === linesLength - 1) {\n return;\n }\n // Check if the end state has changed\n const previousEndState = this.getBeginState(lineIndex + 1);\n if (previousEndState === null || !endState.equals(previousEndState)) {\n this._setBeginState(lineIndex + 1, endState);\n this._invalidateLine(lineIndex + 1);\n return;\n }\n // Perhaps we can skip tokenizing some lines...\n let i = lineIndex + 1;\n while (i < linesLength) {\n if (!this._isValid(i)) {\n break;\n }\n i++;\n }\n this._invalidLineStartIndex = i;\n }\n setFakeTokens(lineIndex) {\n this._setValid(lineIndex, false);\n }\n //#region Editing\n applyEdits(range, eolCount) {\n const deletingLinesCnt = range.endLineNumber - range.startLineNumber;\n const insertingLinesCnt = eolCount;\n const editingLinesCnt = Math.min(deletingLinesCnt, insertingLinesCnt);\n for (let j = editingLinesCnt; j >= 0; j--) {\n this._invalidateLine(range.startLineNumber + j - 1);\n }\n this._acceptDeleteRange(range);\n this._acceptInsertText(new Position(range.startLineNumber, range.startColumn), eolCount);\n }\n _acceptDeleteRange(range) {\n const firstLineIndex = range.startLineNumber - 1;\n if (firstLineIndex >= this._len) {\n return;\n }\n this._deleteLines(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n }\n _acceptInsertText(position, eolCount) {\n const lineIndex = position.lineNumber - 1;\n if (lineIndex >= this._len) {\n return;\n }\n this._insertLines(position.lineNumber, eolCount);\n }\n}\nexport class TextModelTokenization extends Disposable {\n constructor(textModel) {\n super();\n this._isDisposed = false;\n this._textModel = textModel;\n this._tokenizationStateStore = new TokenizationStateStore();\n this._tokenizationSupport = null;\n this._register(TokenizationRegistry.onDidChange((e) => {\n const languageIdentifier = this._textModel.getLanguageIdentifier();\n if (e.changedLanguages.indexOf(languageIdentifier.language) === -1) {\n return;\n }\n this._resetTokenizationState();\n this._textModel.clearTokens();\n }));\n this._register(this._textModel.onDidChangeRawContentFast((e) => {\n if (e.containsEvent(1 /* Flush */)) {\n this._resetTokenizationState();\n return;\n }\n }));\n this._register(this._textModel.onDidChangeContentFast((e) => {\n for (let i = 0, len = e.changes.length; i < len; i++) {\n const change = e.changes[i];\n const [eolCount] = countEOL(change.text);\n this._tokenizationStateStore.applyEdits(change.range, eolCount);\n }\n this._beginBackgroundTokenization();\n }));\n this._register(this._textModel.onDidChangeAttached(() => {\n this._beginBackgroundTokenization();\n }));\n this._register(this._textModel.onDidChangeLanguage(() => {\n this._resetTokenizationState();\n this._textModel.clearTokens();\n }));\n this._resetTokenizationState();\n }\n dispose() {\n this._isDisposed = true;\n super.dispose();\n }\n _resetTokenizationState() {\n const [tokenizationSupport, initialState] = initializeTokenization(this._textModel);\n this._tokenizationSupport = tokenizationSupport;\n this._tokenizationStateStore.flush(initialState);\n this._beginBackgroundTokenization();\n }\n _beginBackgroundTokenization() {\n if (this._textModel.isAttachedToEditor() && this._hasLinesToTokenize()) {\n platform.setImmediate(() => {\n if (this._isDisposed) {\n // disposed in the meantime\n return;\n }\n this._revalidateTokensNow();\n });\n }\n }\n _revalidateTokensNow(toLineNumber = this._textModel.getLineCount()) {\n const MAX_ALLOWED_TIME = 1;\n const builder = new MultilineTokensBuilder();\n const sw = StopWatch.create(false);\n while (this._hasLinesToTokenize()) {\n if (sw.elapsed() > MAX_ALLOWED_TIME) {\n // Stop if MAX_ALLOWED_TIME is reached\n break;\n }\n const tokenizedLineNumber = this._tokenizeOneInvalidLine(builder);\n if (tokenizedLineNumber >= toLineNumber) {\n break;\n }\n }\n this._beginBackgroundTokenization();\n this._textModel.setTokens(builder.tokens);\n }\n tokenizeViewport(startLineNumber, endLineNumber) {\n const builder = new MultilineTokensBuilder();\n this._tokenizeViewport(builder, startLineNumber, endLineNumber);\n this._textModel.setTokens(builder.tokens);\n }\n reset() {\n this._resetTokenizationState();\n this._textModel.clearTokens();\n }\n forceTokenization(lineNumber) {\n const builder = new MultilineTokensBuilder();\n this._updateTokensUntilLine(builder, lineNumber);\n this._textModel.setTokens(builder.tokens);\n }\n isCheapToTokenize(lineNumber) {\n if (!this._tokenizationSupport) {\n return true;\n }\n const firstInvalidLineNumber = this._tokenizationStateStore.invalidLineStartIndex + 1;\n if (lineNumber > firstInvalidLineNumber) {\n return false;\n }\n if (lineNumber < firstInvalidLineNumber) {\n return true;\n }\n if (this._textModel.getLineLength(lineNumber) < 2048 /* CHEAP_TOKENIZATION_LENGTH_LIMIT */) {\n return true;\n }\n return false;\n }\n _hasLinesToTokenize() {\n if (!this._tokenizationSupport) {\n return false;\n }\n return (this._tokenizationStateStore.invalidLineStartIndex < this._textModel.getLineCount());\n }\n _tokenizeOneInvalidLine(builder) {\n if (!this._hasLinesToTokenize()) {\n return this._textModel.getLineCount() + 1;\n }\n const lineNumber = this._tokenizationStateStore.invalidLineStartIndex + 1;\n this._updateTokensUntilLine(builder, lineNumber);\n return lineNumber;\n }\n _updateTokensUntilLine(builder, lineNumber) {\n if (!this._tokenizationSupport) {\n return;\n }\n const languageIdentifier = this._textModel.getLanguageIdentifier();\n const linesLength = this._textModel.getLineCount();\n const endLineIndex = lineNumber - 1;\n // Validate all states up to and including endLineIndex\n for (let lineIndex = this._tokenizationStateStore.invalidLineStartIndex; lineIndex <= endLineIndex; lineIndex++) {\n const text = this._textModel.getLineContent(lineIndex + 1);\n const lineStartState = this._tokenizationStateStore.getBeginState(lineIndex);\n const r = safeTokenize(languageIdentifier, this._tokenizationSupport, text, true, lineStartState);\n builder.add(lineIndex + 1, r.tokens);\n this._tokenizationStateStore.setEndState(linesLength, lineIndex, r.endState);\n lineIndex = this._tokenizationStateStore.invalidLineStartIndex - 1; // -1 because the outer loop increments it\n }\n }\n _tokenizeViewport(builder, startLineNumber, endLineNumber) {\n if (!this._tokenizationSupport) {\n // nothing to do\n return;\n }\n if (endLineNumber <= this._tokenizationStateStore.invalidLineStartIndex) {\n // nothing to do\n return;\n }\n if (startLineNumber <= this._tokenizationStateStore.invalidLineStartIndex) {\n // tokenization has reached the viewport start...\n this._updateTokensUntilLine(builder, endLineNumber);\n return;\n }\n let nonWhitespaceColumn = this._textModel.getLineFirstNonWhitespaceColumn(startLineNumber);\n let fakeLines = [];\n let initialState = null;\n for (let i = startLineNumber - 1; nonWhitespaceColumn > 0 && i >= 1; i--) {\n let newNonWhitespaceIndex = this._textModel.getLineFirstNonWhitespaceColumn(i);\n if (newNonWhitespaceIndex === 0) {\n continue;\n }\n if (newNonWhitespaceIndex < nonWhitespaceColumn) {\n initialState = this._tokenizationStateStore.getBeginState(i - 1);\n if (initialState) {\n break;\n }\n fakeLines.push(this._textModel.getLineContent(i));\n nonWhitespaceColumn = newNonWhitespaceIndex;\n }\n }\n if (!initialState) {\n initialState = this._tokenizationSupport.getInitialState();\n }\n const languageIdentifier = this._textModel.getLanguageIdentifier();\n let state = initialState;\n for (let i = fakeLines.length - 1; i >= 0; i--) {\n let r = safeTokenize(languageIdentifier, this._tokenizationSupport, fakeLines[i], false, state);\n state = r.endState;\n }\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n let text = this._textModel.getLineContent(lineNumber);\n let r = safeTokenize(languageIdentifier, this._tokenizationSupport, text, true, state);\n builder.add(lineNumber, r.tokens);\n this._tokenizationStateStore.setFakeTokens(lineNumber - 1);\n state = r.endState;\n }\n }\n}\nfunction initializeTokenization(textModel) {\n const languageIdentifier = textModel.getLanguageIdentifier();\n let tokenizationSupport = (textModel.isTooLargeForTokenization()\n ? null\n : TokenizationRegistry.get(languageIdentifier.language));\n let initialState = null;\n if (tokenizationSupport) {\n try {\n initialState = tokenizationSupport.getInitialState();\n }\n catch (e) {\n onUnexpectedError(e);\n tokenizationSupport = null;\n }\n }\n return [tokenizationSupport, initialState];\n}\nfunction safeTokenize(languageIdentifier, tokenizationSupport, text, hasEOL, state) {\n let r = null;\n if (tokenizationSupport) {\n try {\n r = tokenizationSupport.tokenize2(text, hasEOL, state.clone(), 0);\n }\n catch (e) {\n onUnexpectedError(e);\n }\n }\n if (!r) {\n r = nullTokenize2(languageIdentifier.id, text, state, 0);\n }\n LineTokens.convertToEndOffset(r.tokens, text.length);\n return r;\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 *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { EDITOR_MODEL_DEFAULTS } from '../config/editorOptions.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport * as model from '../model.js';\nimport { EditStack } from './editStack.js';\nimport { guessIndentation } from './indentationGuesser.js';\nimport { IntervalNode, IntervalTree, getNodeIsInOverviewRuler, recomputeMaxEnd } from './intervalTree.js';\nimport { PieceTreeTextBufferBuilder } from './pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js';\nimport { InternalModelContentChangeEvent, ModelRawContentChangedEvent, ModelRawEOLChanged, ModelRawFlush, ModelRawLineChanged, ModelRawLinesDeleted, ModelRawLinesInserted } from './textModelEvents.js';\nimport { SearchParams, TextModelSearch } from './textModelSearch.js';\nimport { TextModelTokenization } from './textModelTokens.js';\nimport { getWordAtText } from './wordHelper.js';\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\nimport { NULL_LANGUAGE_IDENTIFIER } from '../modes/nullMode.js';\nimport { ignoreBracketsInToken } from '../modes/supports.js';\nimport { BracketsUtils } from '../modes/supports/richEditBrackets.js';\nimport { TokensStore, countEOL, TokensStore2 } from './tokensStore.js';\nimport { Color } from '../../../base/common/color.js';\nimport { PieceTreeTextBuffer } from './pieceTreeTextBuffer/pieceTreeTextBuffer.js';\nfunction createTextBufferBuilder() {\n return new PieceTreeTextBufferBuilder();\n}\nexport function createTextBufferFactory(text) {\n const builder = createTextBufferBuilder();\n builder.acceptChunk(text);\n return builder.finish();\n}\nexport function createTextBuffer(value, defaultEOL) {\n const factory = (typeof value === 'string' ? createTextBufferFactory(value) : value);\n return factory.create(defaultEOL);\n}\nlet MODEL_ID = 0;\nconst LIMIT_FIND_COUNT = 999;\nexport const LONG_LINE_BOUNDARY = 10000;\nclass TextModelSnapshot {\n constructor(source) {\n this._source = source;\n this._eos = false;\n }\n read() {\n if (this._eos) {\n return null;\n }\n let result = [], resultCnt = 0, resultLength = 0;\n do {\n let tmp = this._source.read();\n if (tmp === null) {\n // end-of-stream\n this._eos = true;\n if (resultCnt === 0) {\n return null;\n }\n else {\n return result.join('');\n }\n }\n if (tmp.length > 0) {\n result[resultCnt++] = tmp;\n resultLength += tmp.length;\n }\n if (resultLength >= 64 * 1024) {\n return result.join('');\n }\n } while (true);\n }\n}\nconst invalidFunc = () => { throw new Error(`Invalid change accessor`); };\nclass BracketSearchCanceled {\n constructor() {\n this._searchCanceledBrand = undefined;\n }\n}\nBracketSearchCanceled.INSTANCE = new BracketSearchCanceled();\nfunction stripBracketSearchCanceled(result) {\n if (result instanceof BracketSearchCanceled) {\n return null;\n }\n return result;\n}\nexport class TextModel extends Disposable {\n //#endregion\n constructor(source, creationOptions, languageIdentifier, associatedResource = null, undoRedoService) {\n super();\n //#region Events\n this._onWillDispose = this._register(new Emitter());\n this.onWillDispose = this._onWillDispose.event;\n this._onDidChangeDecorations = this._register(new DidChangeDecorationsEmitter());\n this.onDidChangeDecorations = this._onDidChangeDecorations.event;\n this._onDidChangeLanguage = this._register(new Emitter());\n this.onDidChangeLanguage = this._onDidChangeLanguage.event;\n this._onDidChangeLanguageConfiguration = this._register(new Emitter());\n this.onDidChangeLanguageConfiguration = this._onDidChangeLanguageConfiguration.event;\n this._onDidChangeTokens = this._register(new Emitter());\n this.onDidChangeTokens = this._onDidChangeTokens.event;\n this._onDidChangeOptions = this._register(new Emitter());\n this.onDidChangeOptions = this._onDidChangeOptions.event;\n this._onDidChangeAttached = this._register(new Emitter());\n this.onDidChangeAttached = this._onDidChangeAttached.event;\n this._eventEmitter = this._register(new DidChangeContentEmitter());\n // Generate a new unique model id\n MODEL_ID++;\n this.id = '$model' + MODEL_ID;\n this.isForSimpleWidget = creationOptions.isForSimpleWidget;\n if (typeof associatedResource === 'undefined' || associatedResource === null) {\n this._associatedResource = URI.parse('inmemory://model/' + MODEL_ID);\n }\n else {\n this._associatedResource = associatedResource;\n }\n this._undoRedoService = undoRedoService;\n this._attachedEditorCount = 0;\n const { textBuffer, disposable } = createTextBuffer(source, creationOptions.defaultEOL);\n this._buffer = textBuffer;\n this._bufferDisposable = disposable;\n this._options = TextModel.resolveOptions(this._buffer, creationOptions);\n const bufferLineCount = this._buffer.getLineCount();\n const bufferTextLength = this._buffer.getValueLengthInRange(new Range(1, 1, bufferLineCount, this._buffer.getLineLength(bufferLineCount) + 1), 0 /* TextDefined */);\n // !!! Make a decision in the ctor and permanently respect this decision !!!\n // If a model is too large at construction time, it will never get tokenized,\n // under no circumstances.\n if (creationOptions.largeFileOptimizations) {\n this._isTooLargeForTokenization = ((bufferTextLength > TextModel.LARGE_FILE_SIZE_THRESHOLD)\n || (bufferLineCount > TextModel.LARGE_FILE_LINE_COUNT_THRESHOLD));\n }\n else {\n this._isTooLargeForTokenization = false;\n }\n this._isTooLargeForSyncing = (bufferTextLength > TextModel.MODEL_SYNC_LIMIT);\n this._versionId = 1;\n this._alternativeVersionId = 1;\n this._initialUndoRedoSnapshot = null;\n this._isDisposed = false;\n this._isDisposing = false;\n this._languageIdentifier = languageIdentifier || NULL_LANGUAGE_IDENTIFIER;\n this._languageRegistryListener = LanguageConfigurationRegistry.onDidChange((e) => {\n if (e.languageIdentifier.id === this._languageIdentifier.id) {\n this._onDidChangeLanguageConfiguration.fire({});\n }\n });\n this._instanceId = strings.singleLetterHash(MODEL_ID);\n this._lastDecorationId = 0;\n this._decorations = Object.create(null);\n this._decorationsTree = new DecorationsTrees();\n this._commandManager = new EditStack(this, undoRedoService);\n this._isUndoing = false;\n this._isRedoing = false;\n this._trimAutoWhitespaceLines = null;\n this._tokens = new TokensStore();\n this._tokens2 = new TokensStore2();\n this._tokenization = new TextModelTokenization(this);\n }\n static resolveOptions(textBuffer, options) {\n if (options.detectIndentation) {\n const guessedIndentation = guessIndentation(textBuffer, options.tabSize, options.insertSpaces);\n return new model.TextModelResolvedOptions({\n tabSize: guessedIndentation.tabSize,\n indentSize: guessedIndentation.tabSize,\n insertSpaces: guessedIndentation.insertSpaces,\n trimAutoWhitespace: options.trimAutoWhitespace,\n defaultEOL: options.defaultEOL\n });\n }\n return new model.TextModelResolvedOptions({\n tabSize: options.tabSize,\n indentSize: options.indentSize,\n insertSpaces: options.insertSpaces,\n trimAutoWhitespace: options.trimAutoWhitespace,\n defaultEOL: options.defaultEOL\n });\n }\n onDidChangeRawContentFast(listener) {\n return this._eventEmitter.fastEvent((e) => listener(e.rawContentChangedEvent));\n }\n onDidChangeContentFast(listener) {\n return this._eventEmitter.fastEvent((e) => listener(e.contentChangedEvent));\n }\n onDidChangeContent(listener) {\n return this._eventEmitter.slowEvent((e) => listener(e.contentChangedEvent));\n }\n dispose() {\n this._isDisposing = true;\n this._onWillDispose.fire();\n this._languageRegistryListener.dispose();\n this._tokenization.dispose();\n this._isDisposed = true;\n super.dispose();\n this._bufferDisposable.dispose();\n this._isDisposing = false;\n // Manually release reference to previous text buffer to avoid large leaks\n // in case someone leaks a TextModel reference\n const emptyDisposedTextBuffer = new PieceTreeTextBuffer([], '', '\\n', false, false, true, true);\n emptyDisposedTextBuffer.dispose();\n this._buffer = emptyDisposedTextBuffer;\n }\n _assertNotDisposed() {\n if (this._isDisposed) {\n throw new Error('Model is disposed!');\n }\n }\n _emitContentChangedEvent(rawChange, change) {\n if (this._isDisposing) {\n // Do not confuse listeners by emitting any event after disposing\n return;\n }\n this._eventEmitter.fire(new InternalModelContentChangeEvent(rawChange, change));\n }\n setValue(value) {\n this._assertNotDisposed();\n if (value === null) {\n // There's nothing to do\n return;\n }\n const { textBuffer, disposable } = createTextBuffer(value, this._options.defaultEOL);\n this._setValueFromTextBuffer(textBuffer, disposable);\n }\n _createContentChanged2(range, rangeOffset, rangeLength, text, isUndoing, isRedoing, isFlush) {\n return {\n changes: [{\n range: range,\n rangeOffset: rangeOffset,\n rangeLength: rangeLength,\n text: text,\n }],\n eol: this._buffer.getEOL(),\n versionId: this.getVersionId(),\n isUndoing: isUndoing,\n isRedoing: isRedoing,\n isFlush: isFlush\n };\n }\n _setValueFromTextBuffer(textBuffer, textBufferDisposable) {\n this._assertNotDisposed();\n const oldFullModelRange = this.getFullModelRange();\n const oldModelValueLength = this.getValueLengthInRange(oldFullModelRange);\n const endLineNumber = this.getLineCount();\n const endColumn = this.getLineMaxColumn(endLineNumber);\n this._buffer = textBuffer;\n this._bufferDisposable.dispose();\n this._bufferDisposable = textBufferDisposable;\n this._increaseVersionId();\n // Flush all tokens\n this._tokens.flush();\n this._tokens2.flush();\n // Destroy all my decorations\n this._decorations = Object.create(null);\n this._decorationsTree = new DecorationsTrees();\n // Destroy my edit history and settings\n this._commandManager.clear();\n this._trimAutoWhitespaceLines = null;\n this._emitContentChangedEvent(new ModelRawContentChangedEvent([\n new ModelRawFlush()\n ], this._versionId, false, false), this._createContentChanged2(new Range(1, 1, endLineNumber, endColumn), 0, oldModelValueLength, this.getValue(), false, false, true));\n }\n setEOL(eol) {\n this._assertNotDisposed();\n const newEOL = (eol === 1 /* CRLF */ ? '\\r\\n' : '\\n');\n if (this._buffer.getEOL() === newEOL) {\n // Nothing to do\n return;\n }\n const oldFullModelRange = this.getFullModelRange();\n const oldModelValueLength = this.getValueLengthInRange(oldFullModelRange);\n const endLineNumber = this.getLineCount();\n const endColumn = this.getLineMaxColumn(endLineNumber);\n this._onBeforeEOLChange();\n this._buffer.setEOL(newEOL);\n this._increaseVersionId();\n this._onAfterEOLChange();\n this._emitContentChangedEvent(new ModelRawContentChangedEvent([\n new ModelRawEOLChanged()\n ], this._versionId, false, false), this._createContentChanged2(new Range(1, 1, endLineNumber, endColumn), 0, oldModelValueLength, this.getValue(), false, false, false));\n }\n _onBeforeEOLChange() {\n // Ensure all decorations get their `range` set.\n const versionId = this.getVersionId();\n const allDecorations = this._decorationsTree.search(0, false, false, versionId);\n this._ensureNodesHaveRanges(allDecorations);\n }\n _onAfterEOLChange() {\n // Transform back `range` to offsets\n const versionId = this.getVersionId();\n const allDecorations = this._decorationsTree.collectNodesPostOrder();\n for (let i = 0, len = allDecorations.length; i < len; i++) {\n const node = allDecorations[i];\n const delta = node.cachedAbsoluteStart - node.start;\n const startOffset = this._buffer.getOffsetAt(node.range.startLineNumber, node.range.startColumn);\n const endOffset = this._buffer.getOffsetAt(node.range.endLineNumber, node.range.endColumn);\n node.cachedAbsoluteStart = startOffset;\n node.cachedAbsoluteEnd = endOffset;\n node.cachedVersionId = versionId;\n node.start = startOffset - delta;\n node.end = endOffset - delta;\n recomputeMaxEnd(node);\n }\n }\n onBeforeAttached() {\n this._attachedEditorCount++;\n if (this._attachedEditorCount === 1) {\n this._onDidChangeAttached.fire(undefined);\n }\n }\n onBeforeDetached() {\n this._attachedEditorCount--;\n if (this._attachedEditorCount === 0) {\n this._onDidChangeAttached.fire(undefined);\n }\n }\n isAttachedToEditor() {\n return this._attachedEditorCount > 0;\n }\n getAttachedEditorCount() {\n return this._attachedEditorCount;\n }\n isTooLargeForSyncing() {\n return this._isTooLargeForSyncing;\n }\n isTooLargeForTokenization() {\n return this._isTooLargeForTokenization;\n }\n isDisposed() {\n return this._isDisposed;\n }\n isDominatedByLongLines() {\n this._assertNotDisposed();\n if (this.isTooLargeForTokenization()) {\n // Cannot word wrap huge files anyways, so it doesn't really matter\n return false;\n }\n let smallLineCharCount = 0;\n let longLineCharCount = 0;\n const lineCount = this._buffer.getLineCount();\n for (let lineNumber = 1; lineNumber <= lineCount; lineNumber++) {\n const lineLength = this._buffer.getLineLength(lineNumber);\n if (lineLength >= LONG_LINE_BOUNDARY) {\n longLineCharCount += lineLength;\n }\n else {\n smallLineCharCount += lineLength;\n }\n }\n return (longLineCharCount > smallLineCharCount);\n }\n get uri() {\n return this._associatedResource;\n }\n //#region Options\n getOptions() {\n this._assertNotDisposed();\n return this._options;\n }\n getFormattingOptions() {\n return {\n tabSize: this._options.indentSize,\n insertSpaces: this._options.insertSpaces\n };\n }\n updateOptions(_newOpts) {\n this._assertNotDisposed();\n let tabSize = (typeof _newOpts.tabSize !== 'undefined') ? _newOpts.tabSize : this._options.tabSize;\n let indentSize = (typeof _newOpts.indentSize !== 'undefined') ? _newOpts.indentSize : this._options.indentSize;\n let insertSpaces = (typeof _newOpts.insertSpaces !== 'undefined') ? _newOpts.insertSpaces : this._options.insertSpaces;\n let trimAutoWhitespace = (typeof _newOpts.trimAutoWhitespace !== 'undefined') ? _newOpts.trimAutoWhitespace : this._options.trimAutoWhitespace;\n let newOpts = new model.TextModelResolvedOptions({\n tabSize: tabSize,\n indentSize: indentSize,\n insertSpaces: insertSpaces,\n defaultEOL: this._options.defaultEOL,\n trimAutoWhitespace: trimAutoWhitespace\n });\n if (this._options.equals(newOpts)) {\n return;\n }\n let e = this._options.createChangeEvent(newOpts);\n this._options = newOpts;\n this._onDidChangeOptions.fire(e);\n }\n detectIndentation(defaultInsertSpaces, defaultTabSize) {\n this._assertNotDisposed();\n let guessedIndentation = guessIndentation(this._buffer, defaultTabSize, defaultInsertSpaces);\n this.updateOptions({\n insertSpaces: guessedIndentation.insertSpaces,\n tabSize: guessedIndentation.tabSize,\n indentSize: guessedIndentation.tabSize, // TODO@Alex: guess indentSize independent of tabSize\n });\n }\n static _normalizeIndentationFromWhitespace(str, indentSize, insertSpaces) {\n let spacesCnt = 0;\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) === '\\t') {\n spacesCnt += indentSize;\n }\n else {\n spacesCnt++;\n }\n }\n let result = '';\n if (!insertSpaces) {\n let tabsCnt = Math.floor(spacesCnt / indentSize);\n spacesCnt = spacesCnt % indentSize;\n for (let i = 0; i < tabsCnt; i++) {\n result += '\\t';\n }\n }\n for (let i = 0; i < spacesCnt; i++) {\n result += ' ';\n }\n return result;\n }\n static normalizeIndentation(str, indentSize, insertSpaces) {\n let firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(str);\n if (firstNonWhitespaceIndex === -1) {\n firstNonWhitespaceIndex = str.length;\n }\n return TextModel._normalizeIndentationFromWhitespace(str.substring(0, firstNonWhitespaceIndex), indentSize, insertSpaces) + str.substring(firstNonWhitespaceIndex);\n }\n normalizeIndentation(str) {\n this._assertNotDisposed();\n return TextModel.normalizeIndentation(str, this._options.indentSize, this._options.insertSpaces);\n }\n //#endregion\n //#region Reading\n getVersionId() {\n this._assertNotDisposed();\n return this._versionId;\n }\n mightContainRTL() {\n return this._buffer.mightContainRTL();\n }\n mightContainUnusualLineTerminators() {\n return this._buffer.mightContainUnusualLineTerminators();\n }\n removeUnusualLineTerminators(selections = null) {\n const matches = this.findMatches(strings.UNUSUAL_LINE_TERMINATORS.source, false, true, false, null, false, 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\n this._buffer.resetMightContainUnusualLineTerminators();\n this.pushEditOperations(selections, matches.map(m => ({ range: m.range, text: null })), () => null);\n }\n mightContainNonBasicASCII() {\n return this._buffer.mightContainNonBasicASCII();\n }\n getAlternativeVersionId() {\n this._assertNotDisposed();\n return this._alternativeVersionId;\n }\n getInitialUndoRedoSnapshot() {\n this._assertNotDisposed();\n return this._initialUndoRedoSnapshot;\n }\n getOffsetAt(rawPosition) {\n this._assertNotDisposed();\n let position = this._validatePosition(rawPosition.lineNumber, rawPosition.column, 0 /* Relaxed */);\n return this._buffer.getOffsetAt(position.lineNumber, position.column);\n }\n getPositionAt(rawOffset) {\n this._assertNotDisposed();\n let offset = (Math.min(this._buffer.getLength(), Math.max(0, rawOffset)));\n return this._buffer.getPositionAt(offset);\n }\n _increaseVersionId() {\n this._versionId = this._versionId + 1;\n this._alternativeVersionId = this._versionId;\n }\n _overwriteVersionId(versionId) {\n this._versionId = versionId;\n }\n _overwriteAlternativeVersionId(newAlternativeVersionId) {\n this._alternativeVersionId = newAlternativeVersionId;\n }\n _overwriteInitialUndoRedoSnapshot(newInitialUndoRedoSnapshot) {\n this._initialUndoRedoSnapshot = newInitialUndoRedoSnapshot;\n }\n getValue(eol, preserveBOM = false) {\n this._assertNotDisposed();\n const fullModelRange = this.getFullModelRange();\n const fullModelValue = this.getValueInRange(fullModelRange, eol);\n if (preserveBOM) {\n return this._buffer.getBOM() + fullModelValue;\n }\n return fullModelValue;\n }\n createSnapshot(preserveBOM = false) {\n return new TextModelSnapshot(this._buffer.createSnapshot(preserveBOM));\n }\n getValueLength(eol, preserveBOM = false) {\n this._assertNotDisposed();\n const fullModelRange = this.getFullModelRange();\n const fullModelValue = this.getValueLengthInRange(fullModelRange, eol);\n if (preserveBOM) {\n return this._buffer.getBOM().length + fullModelValue;\n }\n return fullModelValue;\n }\n getValueInRange(rawRange, eol = 0 /* TextDefined */) {\n this._assertNotDisposed();\n return this._buffer.getValueInRange(this.validateRange(rawRange), eol);\n }\n getValueLengthInRange(rawRange, eol = 0 /* TextDefined */) {\n this._assertNotDisposed();\n return this._buffer.getValueLengthInRange(this.validateRange(rawRange), eol);\n }\n getCharacterCountInRange(rawRange, eol = 0 /* TextDefined */) {\n this._assertNotDisposed();\n return this._buffer.getCharacterCountInRange(this.validateRange(rawRange), eol);\n }\n getLineCount() {\n this._assertNotDisposed();\n return this._buffer.getLineCount();\n }\n getLineContent(lineNumber) {\n this._assertNotDisposed();\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._buffer.getLineContent(lineNumber);\n }\n getLineLength(lineNumber) {\n this._assertNotDisposed();\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._buffer.getLineLength(lineNumber);\n }\n getLinesContent() {\n this._assertNotDisposed();\n return this._buffer.getLinesContent();\n }\n getEOL() {\n this._assertNotDisposed();\n return this._buffer.getEOL();\n }\n getEndOfLineSequence() {\n this._assertNotDisposed();\n return (this._buffer.getEOL() === '\\n'\n ? 0 /* LF */\n : 1 /* CRLF */);\n }\n getLineMinColumn(lineNumber) {\n this._assertNotDisposed();\n return 1;\n }\n getLineMaxColumn(lineNumber) {\n this._assertNotDisposed();\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._buffer.getLineLength(lineNumber) + 1;\n }\n getLineFirstNonWhitespaceColumn(lineNumber) {\n this._assertNotDisposed();\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._buffer.getLineFirstNonWhitespaceColumn(lineNumber);\n }\n getLineLastNonWhitespaceColumn(lineNumber) {\n this._assertNotDisposed();\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._buffer.getLineLastNonWhitespaceColumn(lineNumber);\n }\n /**\n * Validates `range` is within buffer bounds, but allows it to sit in between surrogate pairs, etc.\n * Will try to not allocate if possible.\n */\n _validateRangeRelaxedNoAllocations(range) {\n const linesCount = this._buffer.getLineCount();\n const initialStartLineNumber = range.startLineNumber;\n const initialStartColumn = range.startColumn;\n let startLineNumber = Math.floor((typeof initialStartLineNumber === 'number' && !isNaN(initialStartLineNumber)) ? initialStartLineNumber : 1);\n let startColumn = Math.floor((typeof initialStartColumn === 'number' && !isNaN(initialStartColumn)) ? initialStartColumn : 1);\n if (startLineNumber < 1) {\n startLineNumber = 1;\n startColumn = 1;\n }\n else if (startLineNumber > linesCount) {\n startLineNumber = linesCount;\n startColumn = this.getLineMaxColumn(startLineNumber);\n }\n else {\n if (startColumn <= 1) {\n startColumn = 1;\n }\n else {\n const maxColumn = this.getLineMaxColumn(startLineNumber);\n if (startColumn >= maxColumn) {\n startColumn = maxColumn;\n }\n }\n }\n const initialEndLineNumber = range.endLineNumber;\n const initialEndColumn = range.endColumn;\n let endLineNumber = Math.floor((typeof initialEndLineNumber === 'number' && !isNaN(initialEndLineNumber)) ? initialEndLineNumber : 1);\n let endColumn = Math.floor((typeof initialEndColumn === 'number' && !isNaN(initialEndColumn)) ? initialEndColumn : 1);\n if (endLineNumber < 1) {\n endLineNumber = 1;\n endColumn = 1;\n }\n else if (endLineNumber > linesCount) {\n endLineNumber = linesCount;\n endColumn = this.getLineMaxColumn(endLineNumber);\n }\n else {\n if (endColumn <= 1) {\n endColumn = 1;\n }\n else {\n const maxColumn = this.getLineMaxColumn(endLineNumber);\n if (endColumn >= maxColumn) {\n endColumn = maxColumn;\n }\n }\n }\n if (initialStartLineNumber === startLineNumber\n && initialStartColumn === startColumn\n && initialEndLineNumber === endLineNumber\n && initialEndColumn === endColumn\n && range instanceof Range\n && !(range instanceof Selection)) {\n return range;\n }\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n _isValidPosition(lineNumber, column, validationType) {\n if (typeof lineNumber !== 'number' || typeof column !== 'number') {\n return false;\n }\n if (isNaN(lineNumber) || isNaN(column)) {\n return false;\n }\n if (lineNumber < 1 || column < 1) {\n return false;\n }\n if ((lineNumber | 0) !== lineNumber || (column | 0) !== column) {\n return false;\n }\n const lineCount = this._buffer.getLineCount();\n if (lineNumber > lineCount) {\n return false;\n }\n if (column === 1) {\n return true;\n }\n const maxColumn = this.getLineMaxColumn(lineNumber);\n if (column > maxColumn) {\n return false;\n }\n if (validationType === 1 /* SurrogatePairs */) {\n // !!At this point, column > 1\n const charCodeBefore = this._buffer.getLineCharCode(lineNumber, column - 2);\n if (strings.isHighSurrogate(charCodeBefore)) {\n return false;\n }\n }\n return true;\n }\n _validatePosition(_lineNumber, _column, validationType) {\n const lineNumber = Math.floor((typeof _lineNumber === 'number' && !isNaN(_lineNumber)) ? _lineNumber : 1);\n const column = Math.floor((typeof _column === 'number' && !isNaN(_column)) ? _column : 1);\n const lineCount = this._buffer.getLineCount();\n if (lineNumber < 1) {\n return new Position(1, 1);\n }\n if (lineNumber > lineCount) {\n return new Position(lineCount, this.getLineMaxColumn(lineCount));\n }\n if (column <= 1) {\n return new Position(lineNumber, 1);\n }\n const maxColumn = this.getLineMaxColumn(lineNumber);\n if (column >= maxColumn) {\n return new Position(lineNumber, maxColumn);\n }\n if (validationType === 1 /* SurrogatePairs */) {\n // If the position would end up in the middle of a high-low surrogate pair,\n // we move it to before the pair\n // !!At this point, column > 1\n const charCodeBefore = this._buffer.getLineCharCode(lineNumber, column - 2);\n if (strings.isHighSurrogate(charCodeBefore)) {\n return new Position(lineNumber, column - 1);\n }\n }\n return new Position(lineNumber, column);\n }\n validatePosition(position) {\n const validationType = 1 /* SurrogatePairs */;\n this._assertNotDisposed();\n // Avoid object allocation and cover most likely case\n if (position instanceof Position) {\n if (this._isValidPosition(position.lineNumber, position.column, validationType)) {\n return position;\n }\n }\n return this._validatePosition(position.lineNumber, position.column, validationType);\n }\n _isValidRange(range, validationType) {\n const startLineNumber = range.startLineNumber;\n const startColumn = range.startColumn;\n const endLineNumber = range.endLineNumber;\n const endColumn = range.endColumn;\n if (!this._isValidPosition(startLineNumber, startColumn, 0 /* Relaxed */)) {\n return false;\n }\n if (!this._isValidPosition(endLineNumber, endColumn, 0 /* Relaxed */)) {\n return false;\n }\n if (validationType === 1 /* SurrogatePairs */) {\n const charCodeBeforeStart = (startColumn > 1 ? this._buffer.getLineCharCode(startLineNumber, startColumn - 2) : 0);\n const charCodeBeforeEnd = (endColumn > 1 && endColumn <= this._buffer.getLineLength(endLineNumber) ? this._buffer.getLineCharCode(endLineNumber, endColumn - 2) : 0);\n const startInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeStart);\n const endInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeEnd);\n if (!startInsideSurrogatePair && !endInsideSurrogatePair) {\n return true;\n }\n return false;\n }\n return true;\n }\n validateRange(_range) {\n const validationType = 1 /* SurrogatePairs */;\n this._assertNotDisposed();\n // Avoid object allocation and cover most likely case\n if ((_range instanceof Range) && !(_range instanceof Selection)) {\n if (this._isValidRange(_range, validationType)) {\n return _range;\n }\n }\n const start = this._validatePosition(_range.startLineNumber, _range.startColumn, 0 /* Relaxed */);\n const end = this._validatePosition(_range.endLineNumber, _range.endColumn, 0 /* Relaxed */);\n const startLineNumber = start.lineNumber;\n const startColumn = start.column;\n const endLineNumber = end.lineNumber;\n const endColumn = end.column;\n if (validationType === 1 /* SurrogatePairs */) {\n const charCodeBeforeStart = (startColumn > 1 ? this._buffer.getLineCharCode(startLineNumber, startColumn - 2) : 0);\n const charCodeBeforeEnd = (endColumn > 1 && endColumn <= this._buffer.getLineLength(endLineNumber) ? this._buffer.getLineCharCode(endLineNumber, endColumn - 2) : 0);\n const startInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeStart);\n const endInsideSurrogatePair = strings.isHighSurrogate(charCodeBeforeEnd);\n if (!startInsideSurrogatePair && !endInsideSurrogatePair) {\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n if (startLineNumber === endLineNumber && startColumn === endColumn) {\n // do not expand a collapsed range, simply move it to a valid location\n return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn - 1);\n }\n if (startInsideSurrogatePair && endInsideSurrogatePair) {\n // expand range at both ends\n return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn + 1);\n }\n if (startInsideSurrogatePair) {\n // only expand range at the start\n return new Range(startLineNumber, startColumn - 1, endLineNumber, endColumn);\n }\n // only expand range at the end\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn + 1);\n }\n return new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n }\n modifyPosition(rawPosition, offset) {\n this._assertNotDisposed();\n let candidate = this.getOffsetAt(rawPosition) + offset;\n return this.getPositionAt(Math.min(this._buffer.getLength(), Math.max(0, candidate)));\n }\n getFullModelRange() {\n this._assertNotDisposed();\n const lineCount = this.getLineCount();\n return new Range(1, 1, lineCount, this.getLineMaxColumn(lineCount));\n }\n findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount) {\n return this._buffer.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);\n }\n findMatches(searchString, rawSearchScope, isRegex, matchCase, wordSeparators, captureMatches, limitResultCount = LIMIT_FIND_COUNT) {\n this._assertNotDisposed();\n let searchRanges = null;\n if (rawSearchScope !== null) {\n if (!Array.isArray(rawSearchScope)) {\n rawSearchScope = [rawSearchScope];\n }\n if (rawSearchScope.every((searchScope) => Range.isIRange(searchScope))) {\n searchRanges = rawSearchScope.map((searchScope) => this.validateRange(searchScope));\n }\n }\n if (searchRanges === null) {\n searchRanges = [this.getFullModelRange()];\n }\n searchRanges = searchRanges.sort((d1, d2) => d1.startLineNumber - d2.startLineNumber || d1.startColumn - d2.startColumn);\n const uniqueSearchRanges = [];\n uniqueSearchRanges.push(searchRanges.reduce((prev, curr) => {\n if (Range.areIntersecting(prev, curr)) {\n return prev.plusRange(curr);\n }\n uniqueSearchRanges.push(prev);\n return curr;\n }));\n let matchMapper;\n if (!isRegex && searchString.indexOf('\\n') < 0) {\n // not regex, not multi line\n const searchParams = new SearchParams(searchString, isRegex, matchCase, wordSeparators);\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return [];\n }\n matchMapper = (searchRange) => this.findMatchesLineByLine(searchRange, searchData, captureMatches, limitResultCount);\n }\n else {\n matchMapper = (searchRange) => TextModelSearch.findMatches(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchRange, captureMatches, limitResultCount);\n }\n return uniqueSearchRanges.map(matchMapper).reduce((arr, matches) => arr.concat(matches), []);\n }\n findNextMatch(searchString, rawSearchStart, isRegex, matchCase, wordSeparators, captureMatches) {\n this._assertNotDisposed();\n const searchStart = this.validatePosition(rawSearchStart);\n if (!isRegex && searchString.indexOf('\\n') < 0) {\n const searchParams = new SearchParams(searchString, isRegex, matchCase, wordSeparators);\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return null;\n }\n const lineCount = this.getLineCount();\n let searchRange = new Range(searchStart.lineNumber, searchStart.column, lineCount, this.getLineMaxColumn(lineCount));\n let ret = this.findMatchesLineByLine(searchRange, searchData, captureMatches, 1);\n TextModelSearch.findNextMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\n if (ret.length > 0) {\n return ret[0];\n }\n searchRange = new Range(1, 1, searchStart.lineNumber, this.getLineMaxColumn(searchStart.lineNumber));\n ret = this.findMatchesLineByLine(searchRange, searchData, captureMatches, 1);\n if (ret.length > 0) {\n return ret[0];\n }\n return null;\n }\n return TextModelSearch.findNextMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\n }\n findPreviousMatch(searchString, rawSearchStart, isRegex, matchCase, wordSeparators, captureMatches) {\n this._assertNotDisposed();\n const searchStart = this.validatePosition(rawSearchStart);\n return TextModelSearch.findPreviousMatch(this, new SearchParams(searchString, isRegex, matchCase, wordSeparators), searchStart, captureMatches);\n }\n //#endregion\n //#region Editing\n pushStackElement() {\n this._commandManager.pushStackElement();\n }\n popStackElement() {\n this._commandManager.popStackElement();\n }\n pushEOL(eol) {\n const currentEOL = (this.getEOL() === '\\n' ? 0 /* LF */ : 1 /* CRLF */);\n if (currentEOL === eol) {\n return;\n }\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n this._eventEmitter.beginDeferredEmit();\n if (this._initialUndoRedoSnapshot === null) {\n this._initialUndoRedoSnapshot = this._undoRedoService.createSnapshot(this.uri);\n }\n this._commandManager.pushEOL(eol);\n }\n finally {\n this._eventEmitter.endDeferredEmit();\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n _validateEditOperation(rawOperation) {\n if (rawOperation instanceof model.ValidAnnotatedEditOperation) {\n return rawOperation;\n }\n return new model.ValidAnnotatedEditOperation(rawOperation.identifier || null, this.validateRange(rawOperation.range), rawOperation.text, rawOperation.forceMoveMarkers || false, rawOperation.isAutoWhitespaceEdit || false, rawOperation._isTracked || false);\n }\n _validateEditOperations(rawOperations) {\n const result = [];\n for (let i = 0, len = rawOperations.length; i < len; i++) {\n result[i] = this._validateEditOperation(rawOperations[i]);\n }\n return result;\n }\n pushEditOperations(beforeCursorState, editOperations, cursorStateComputer) {\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n this._eventEmitter.beginDeferredEmit();\n return this._pushEditOperations(beforeCursorState, this._validateEditOperations(editOperations), cursorStateComputer);\n }\n finally {\n this._eventEmitter.endDeferredEmit();\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n _pushEditOperations(beforeCursorState, editOperations, cursorStateComputer) {\n if (this._options.trimAutoWhitespace && this._trimAutoWhitespaceLines) {\n // Go through each saved line number and insert a trim whitespace edit\n // if it is safe to do so (no conflicts with other edits).\n let incomingEdits = editOperations.map((op) => {\n return {\n range: this.validateRange(op.range),\n text: op.text\n };\n });\n // Sometimes, auto-formatters change ranges automatically which can cause undesired auto whitespace trimming near the cursor\n // We'll use the following heuristic: if the edits occur near the cursor, then it's ok to trim auto whitespace\n let editsAreNearCursors = true;\n if (beforeCursorState) {\n for (let i = 0, len = beforeCursorState.length; i < len; i++) {\n let sel = beforeCursorState[i];\n let foundEditNearSel = false;\n for (let j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {\n let editRange = incomingEdits[j].range;\n let selIsAbove = editRange.startLineNumber > sel.endLineNumber;\n let selIsBelow = sel.startLineNumber > editRange.endLineNumber;\n if (!selIsAbove && !selIsBelow) {\n foundEditNearSel = true;\n break;\n }\n }\n if (!foundEditNearSel) {\n editsAreNearCursors = false;\n break;\n }\n }\n }\n if (editsAreNearCursors) {\n for (let i = 0, len = this._trimAutoWhitespaceLines.length; i < len; i++) {\n let trimLineNumber = this._trimAutoWhitespaceLines[i];\n let maxLineColumn = this.getLineMaxColumn(trimLineNumber);\n let allowTrimLine = true;\n for (let j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {\n let editRange = incomingEdits[j].range;\n let editText = incomingEdits[j].text;\n if (trimLineNumber < editRange.startLineNumber || trimLineNumber > editRange.endLineNumber) {\n // `trimLine` is completely outside this edit\n continue;\n }\n // At this point:\n // editRange.startLineNumber <= trimLine <= editRange.endLineNumber\n if (trimLineNumber === editRange.startLineNumber && editRange.startColumn === maxLineColumn\n && editRange.isEmpty() && editText && editText.length > 0 && editText.charAt(0) === '\\n') {\n // This edit inserts a new line (and maybe other text) after `trimLine`\n continue;\n }\n if (trimLineNumber === editRange.startLineNumber && editRange.startColumn === 1\n && editRange.isEmpty() && editText && editText.length > 0 && editText.charAt(editText.length - 1) === '\\n') {\n // This edit inserts a new line (and maybe other text) before `trimLine`\n continue;\n }\n // Looks like we can't trim this line as it would interfere with an incoming edit\n allowTrimLine = false;\n break;\n }\n if (allowTrimLine) {\n const trimRange = new Range(trimLineNumber, 1, trimLineNumber, maxLineColumn);\n editOperations.push(new model.ValidAnnotatedEditOperation(null, trimRange, null, false, false, false));\n }\n }\n }\n this._trimAutoWhitespaceLines = null;\n }\n if (this._initialUndoRedoSnapshot === null) {\n this._initialUndoRedoSnapshot = this._undoRedoService.createSnapshot(this.uri);\n }\n return this._commandManager.pushEditOperation(beforeCursorState, editOperations, cursorStateComputer);\n }\n _applyUndo(changes, eol, resultingAlternativeVersionId, resultingSelection) {\n const edits = changes.map((change) => {\n const rangeStart = this.getPositionAt(change.newPosition);\n const rangeEnd = this.getPositionAt(change.newEnd);\n return {\n range: new Range(rangeStart.lineNumber, rangeStart.column, rangeEnd.lineNumber, rangeEnd.column),\n text: change.oldText\n };\n });\n this._applyUndoRedoEdits(edits, eol, true, false, resultingAlternativeVersionId, resultingSelection);\n }\n _applyRedo(changes, eol, resultingAlternativeVersionId, resultingSelection) {\n const edits = changes.map((change) => {\n const rangeStart = this.getPositionAt(change.oldPosition);\n const rangeEnd = this.getPositionAt(change.oldEnd);\n return {\n range: new Range(rangeStart.lineNumber, rangeStart.column, rangeEnd.lineNumber, rangeEnd.column),\n text: change.newText\n };\n });\n this._applyUndoRedoEdits(edits, eol, false, true, resultingAlternativeVersionId, resultingSelection);\n }\n _applyUndoRedoEdits(edits, eol, isUndoing, isRedoing, resultingAlternativeVersionId, resultingSelection) {\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n this._eventEmitter.beginDeferredEmit();\n this._isUndoing = isUndoing;\n this._isRedoing = isRedoing;\n this.applyEdits(edits, false);\n this.setEOL(eol);\n this._overwriteAlternativeVersionId(resultingAlternativeVersionId);\n }\n finally {\n this._isUndoing = false;\n this._isRedoing = false;\n this._eventEmitter.endDeferredEmit(resultingSelection);\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n applyEdits(rawOperations, computeUndoEdits = false) {\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n this._eventEmitter.beginDeferredEmit();\n const operations = this._validateEditOperations(rawOperations);\n return this._doApplyEdits(operations, computeUndoEdits);\n }\n finally {\n this._eventEmitter.endDeferredEmit();\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n _doApplyEdits(rawOperations, computeUndoEdits) {\n const oldLineCount = this._buffer.getLineCount();\n const result = this._buffer.applyEdits(rawOperations, this._options.trimAutoWhitespace, computeUndoEdits);\n const newLineCount = this._buffer.getLineCount();\n const contentChanges = result.changes;\n this._trimAutoWhitespaceLines = result.trimAutoWhitespaceLineNumbers;\n if (contentChanges.length !== 0) {\n let rawContentChanges = [];\n let lineCount = oldLineCount;\n for (let i = 0, len = contentChanges.length; i < len; i++) {\n const change = contentChanges[i];\n const [eolCount, firstLineLength, lastLineLength] = countEOL(change.text);\n this._tokens.acceptEdit(change.range, eolCount, firstLineLength);\n this._tokens2.acceptEdit(change.range, eolCount, firstLineLength, lastLineLength, change.text.length > 0 ? change.text.charCodeAt(0) : 0 /* Null */);\n this._onDidChangeDecorations.fire();\n this._decorationsTree.acceptReplace(change.rangeOffset, change.rangeLength, change.text.length, change.forceMoveMarkers);\n const startLineNumber = change.range.startLineNumber;\n const endLineNumber = change.range.endLineNumber;\n const deletingLinesCnt = endLineNumber - startLineNumber;\n const insertingLinesCnt = eolCount;\n const editingLinesCnt = Math.min(deletingLinesCnt, insertingLinesCnt);\n const changeLineCountDelta = (insertingLinesCnt - deletingLinesCnt);\n for (let j = editingLinesCnt; j >= 0; j--) {\n const editLineNumber = startLineNumber + j;\n const currentEditLineNumber = newLineCount - lineCount - changeLineCountDelta + editLineNumber;\n rawContentChanges.push(new ModelRawLineChanged(editLineNumber, this.getLineContent(currentEditLineNumber)));\n }\n if (editingLinesCnt < deletingLinesCnt) {\n // Must delete some lines\n const spliceStartLineNumber = startLineNumber + editingLinesCnt;\n rawContentChanges.push(new ModelRawLinesDeleted(spliceStartLineNumber + 1, endLineNumber));\n }\n if (editingLinesCnt < insertingLinesCnt) {\n // Must insert some lines\n const spliceLineNumber = startLineNumber + editingLinesCnt;\n const cnt = insertingLinesCnt - editingLinesCnt;\n const fromLineNumber = newLineCount - lineCount - cnt + spliceLineNumber + 1;\n let newLines = [];\n for (let i = 0; i < cnt; i++) {\n let lineNumber = fromLineNumber + i;\n newLines[lineNumber - fromLineNumber] = this.getLineContent(lineNumber);\n }\n rawContentChanges.push(new ModelRawLinesInserted(spliceLineNumber + 1, startLineNumber + insertingLinesCnt, newLines));\n }\n lineCount += changeLineCountDelta;\n }\n this._increaseVersionId();\n this._emitContentChangedEvent(new ModelRawContentChangedEvent(rawContentChanges, this.getVersionId(), this._isUndoing, this._isRedoing), {\n changes: contentChanges,\n eol: this._buffer.getEOL(),\n versionId: this.getVersionId(),\n isUndoing: this._isUndoing,\n isRedoing: this._isRedoing,\n isFlush: false\n });\n }\n return (result.reverseEdits === null ? undefined : result.reverseEdits);\n }\n undo() {\n return this._undoRedoService.undo(this.uri);\n }\n canUndo() {\n return this._undoRedoService.canUndo(this.uri);\n }\n redo() {\n return this._undoRedoService.redo(this.uri);\n }\n canRedo() {\n return this._undoRedoService.canRedo(this.uri);\n }\n //#endregion\n //#region Decorations\n changeDecorations(callback, ownerId = 0) {\n this._assertNotDisposed();\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n return this._changeDecorations(ownerId, callback);\n }\n finally {\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n _changeDecorations(ownerId, callback) {\n let changeAccessor = {\n addDecoration: (range, options) => {\n return this._deltaDecorationsImpl(ownerId, [], [{ range: range, options: options }])[0];\n },\n changeDecoration: (id, newRange) => {\n this._changeDecorationImpl(id, newRange);\n },\n changeDecorationOptions: (id, options) => {\n this._changeDecorationOptionsImpl(id, _normalizeOptions(options));\n },\n removeDecoration: (id) => {\n this._deltaDecorationsImpl(ownerId, [id], []);\n },\n deltaDecorations: (oldDecorations, newDecorations) => {\n if (oldDecorations.length === 0 && newDecorations.length === 0) {\n // nothing to do\n return [];\n }\n return this._deltaDecorationsImpl(ownerId, oldDecorations, newDecorations);\n }\n };\n let result = null;\n try {\n result = callback(changeAccessor);\n }\n catch (e) {\n onUnexpectedError(e);\n }\n // Invalidate change accessor\n changeAccessor.addDecoration = invalidFunc;\n changeAccessor.changeDecoration = invalidFunc;\n changeAccessor.changeDecorationOptions = invalidFunc;\n changeAccessor.removeDecoration = invalidFunc;\n changeAccessor.deltaDecorations = invalidFunc;\n return result;\n }\n deltaDecorations(oldDecorations, newDecorations, ownerId = 0) {\n this._assertNotDisposed();\n if (!oldDecorations) {\n oldDecorations = [];\n }\n if (oldDecorations.length === 0 && newDecorations.length === 0) {\n // nothing to do\n return [];\n }\n try {\n this._onDidChangeDecorations.beginDeferredEmit();\n return this._deltaDecorationsImpl(ownerId, oldDecorations, newDecorations);\n }\n finally {\n this._onDidChangeDecorations.endDeferredEmit();\n }\n }\n _getTrackedRange(id) {\n return this.getDecorationRange(id);\n }\n _setTrackedRange(id, newRange, newStickiness) {\n const node = (id ? this._decorations[id] : null);\n if (!node) {\n if (!newRange) {\n // node doesn't exist, the request is to delete => nothing to do\n return null;\n }\n // node doesn't exist, the request is to set => add the tracked range\n return this._deltaDecorationsImpl(0, [], [{ range: newRange, options: TRACKED_RANGE_OPTIONS[newStickiness] }])[0];\n }\n if (!newRange) {\n // node exists, the request is to delete => delete node\n this._decorationsTree.delete(node);\n delete this._decorations[node.id];\n return null;\n }\n // node exists, the request is to set => change the tracked range and its options\n const range = this._validateRangeRelaxedNoAllocations(newRange);\n const startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\n const endOffset = this._buffer.getOffsetAt(range.endLineNumber, range.endColumn);\n this._decorationsTree.delete(node);\n node.reset(this.getVersionId(), startOffset, endOffset, range);\n node.setOptions(TRACKED_RANGE_OPTIONS[newStickiness]);\n this._decorationsTree.insert(node);\n return node.id;\n }\n removeAllDecorationsWithOwnerId(ownerId) {\n if (this._isDisposed) {\n return;\n }\n const nodes = this._decorationsTree.collectNodesFromOwner(ownerId);\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n this._decorationsTree.delete(node);\n delete this._decorations[node.id];\n }\n }\n getDecorationOptions(decorationId) {\n const node = this._decorations[decorationId];\n if (!node) {\n return null;\n }\n return node.options;\n }\n getDecorationRange(decorationId) {\n const node = this._decorations[decorationId];\n if (!node) {\n return null;\n }\n const versionId = this.getVersionId();\n if (node.cachedVersionId !== versionId) {\n this._decorationsTree.resolveNode(node, versionId);\n }\n if (node.range === null) {\n node.range = this._getRangeAt(node.cachedAbsoluteStart, node.cachedAbsoluteEnd);\n }\n return node.range;\n }\n getLineDecorations(lineNumber, ownerId = 0, filterOutValidation = false) {\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n return [];\n }\n return this.getLinesDecorations(lineNumber, lineNumber, ownerId, filterOutValidation);\n }\n getLinesDecorations(_startLineNumber, _endLineNumber, ownerId = 0, filterOutValidation = false) {\n let lineCount = this.getLineCount();\n let startLineNumber = Math.min(lineCount, Math.max(1, _startLineNumber));\n let endLineNumber = Math.min(lineCount, Math.max(1, _endLineNumber));\n let endColumn = this.getLineMaxColumn(endLineNumber);\n return this._getDecorationsInRange(new Range(startLineNumber, 1, endLineNumber, endColumn), ownerId, filterOutValidation);\n }\n getDecorationsInRange(range, ownerId = 0, filterOutValidation = false) {\n let validatedRange = this.validateRange(range);\n return this._getDecorationsInRange(validatedRange, ownerId, filterOutValidation);\n }\n getOverviewRulerDecorations(ownerId = 0, filterOutValidation = false) {\n const versionId = this.getVersionId();\n const result = this._decorationsTree.search(ownerId, filterOutValidation, true, versionId);\n return this._ensureNodesHaveRanges(result);\n }\n getAllDecorations(ownerId = 0, filterOutValidation = false) {\n const versionId = this.getVersionId();\n const result = this._decorationsTree.search(ownerId, filterOutValidation, false, versionId);\n return this._ensureNodesHaveRanges(result);\n }\n _getDecorationsInRange(filterRange, filterOwnerId, filterOutValidation) {\n const startOffset = this._buffer.getOffsetAt(filterRange.startLineNumber, filterRange.startColumn);\n const endOffset = this._buffer.getOffsetAt(filterRange.endLineNumber, filterRange.endColumn);\n const versionId = this.getVersionId();\n const result = this._decorationsTree.intervalSearch(startOffset, endOffset, filterOwnerId, filterOutValidation, versionId);\n return this._ensureNodesHaveRanges(result);\n }\n _ensureNodesHaveRanges(nodes) {\n for (let i = 0, len = nodes.length; i < len; i++) {\n const node = nodes[i];\n if (node.range === null) {\n node.range = this._getRangeAt(node.cachedAbsoluteStart, node.cachedAbsoluteEnd);\n }\n }\n return nodes;\n }\n _getRangeAt(start, end) {\n return this._buffer.getRangeAt(start, end - start);\n }\n _changeDecorationImpl(decorationId, _range) {\n const node = this._decorations[decorationId];\n if (!node) {\n return;\n }\n const range = this._validateRangeRelaxedNoAllocations(_range);\n const startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\n const endOffset = this._buffer.getOffsetAt(range.endLineNumber, range.endColumn);\n this._decorationsTree.delete(node);\n node.reset(this.getVersionId(), startOffset, endOffset, range);\n this._decorationsTree.insert(node);\n this._onDidChangeDecorations.checkAffectedAndFire(node.options);\n }\n _changeDecorationOptionsImpl(decorationId, options) {\n const node = this._decorations[decorationId];\n if (!node) {\n return;\n }\n const nodeWasInOverviewRuler = (node.options.overviewRuler && node.options.overviewRuler.color ? true : false);\n const nodeIsInOverviewRuler = (options.overviewRuler && options.overviewRuler.color ? true : false);\n this._onDidChangeDecorations.checkAffectedAndFire(node.options);\n this._onDidChangeDecorations.checkAffectedAndFire(options);\n if (nodeWasInOverviewRuler !== nodeIsInOverviewRuler) {\n // Delete + Insert due to an overview ruler status change\n this._decorationsTree.delete(node);\n node.setOptions(options);\n this._decorationsTree.insert(node);\n }\n else {\n node.setOptions(options);\n }\n }\n _deltaDecorationsImpl(ownerId, oldDecorationsIds, newDecorations) {\n const versionId = this.getVersionId();\n const oldDecorationsLen = oldDecorationsIds.length;\n let oldDecorationIndex = 0;\n const newDecorationsLen = newDecorations.length;\n let newDecorationIndex = 0;\n let result = new Array(newDecorationsLen);\n while (oldDecorationIndex < oldDecorationsLen || newDecorationIndex < newDecorationsLen) {\n let node = null;\n if (oldDecorationIndex < oldDecorationsLen) {\n // (1) get ourselves an old node\n do {\n node = this._decorations[oldDecorationsIds[oldDecorationIndex++]];\n } while (!node && oldDecorationIndex < oldDecorationsLen);\n // (2) remove the node from the tree (if it exists)\n if (node) {\n this._decorationsTree.delete(node);\n this._onDidChangeDecorations.checkAffectedAndFire(node.options);\n }\n }\n if (newDecorationIndex < newDecorationsLen) {\n // (3) create a new node if necessary\n if (!node) {\n const internalDecorationId = (++this._lastDecorationId);\n const decorationId = `${this._instanceId};${internalDecorationId}`;\n node = new IntervalNode(decorationId, 0, 0);\n this._decorations[decorationId] = node;\n }\n // (4) initialize node\n const newDecoration = newDecorations[newDecorationIndex];\n const range = this._validateRangeRelaxedNoAllocations(newDecoration.range);\n const options = _normalizeOptions(newDecoration.options);\n const startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\n const endOffset = this._buffer.getOffsetAt(range.endLineNumber, range.endColumn);\n node.ownerId = ownerId;\n node.reset(versionId, startOffset, endOffset, range);\n node.setOptions(options);\n this._onDidChangeDecorations.checkAffectedAndFire(options);\n this._decorationsTree.insert(node);\n result[newDecorationIndex] = node.id;\n newDecorationIndex++;\n }\n else {\n if (node) {\n delete this._decorations[node.id];\n }\n }\n }\n return result;\n }\n setTokens(tokens) {\n if (tokens.length === 0) {\n return;\n }\n let ranges = [];\n for (let i = 0, len = tokens.length; i < len; i++) {\n const element = tokens[i];\n let minChangedLineNumber = 0;\n let maxChangedLineNumber = 0;\n let hasChange = false;\n for (let j = 0, lenJ = element.tokens.length; j < lenJ; j++) {\n const lineNumber = element.startLineNumber + j;\n if (hasChange) {\n this._tokens.setTokens(this._languageIdentifier.id, lineNumber - 1, this._buffer.getLineLength(lineNumber), element.tokens[j], false);\n maxChangedLineNumber = lineNumber;\n }\n else {\n const lineHasChange = this._tokens.setTokens(this._languageIdentifier.id, lineNumber - 1, this._buffer.getLineLength(lineNumber), element.tokens[j], true);\n if (lineHasChange) {\n hasChange = true;\n minChangedLineNumber = lineNumber;\n maxChangedLineNumber = lineNumber;\n }\n }\n }\n if (hasChange) {\n ranges.push({ fromLineNumber: minChangedLineNumber, toLineNumber: maxChangedLineNumber });\n }\n }\n if (ranges.length > 0) {\n this._emitModelTokensChangedEvent({\n tokenizationSupportChanged: false,\n semanticTokensApplied: false,\n ranges: ranges\n });\n }\n }\n setSemanticTokens(tokens, isComplete) {\n this._tokens2.set(tokens, isComplete);\n this._emitModelTokensChangedEvent({\n tokenizationSupportChanged: false,\n semanticTokensApplied: tokens !== null,\n ranges: [{ fromLineNumber: 1, toLineNumber: this.getLineCount() }]\n });\n }\n hasCompleteSemanticTokens() {\n return this._tokens2.isComplete();\n }\n hasSomeSemanticTokens() {\n return !this._tokens2.isEmpty();\n }\n setPartialSemanticTokens(range, tokens) {\n if (this.hasCompleteSemanticTokens()) {\n return;\n }\n const changedRange = this._tokens2.setPartial(range, tokens);\n this._emitModelTokensChangedEvent({\n tokenizationSupportChanged: false,\n semanticTokensApplied: true,\n ranges: [{ fromLineNumber: changedRange.startLineNumber, toLineNumber: changedRange.endLineNumber }]\n });\n }\n tokenizeViewport(startLineNumber, endLineNumber) {\n startLineNumber = Math.max(1, startLineNumber);\n endLineNumber = Math.min(this._buffer.getLineCount(), endLineNumber);\n this._tokenization.tokenizeViewport(startLineNumber, endLineNumber);\n }\n clearTokens() {\n this._tokens.flush();\n this._emitModelTokensChangedEvent({\n tokenizationSupportChanged: true,\n semanticTokensApplied: false,\n ranges: [{\n fromLineNumber: 1,\n toLineNumber: this._buffer.getLineCount()\n }]\n });\n }\n _emitModelTokensChangedEvent(e) {\n if (!this._isDisposing) {\n this._onDidChangeTokens.fire(e);\n }\n }\n resetTokenization() {\n this._tokenization.reset();\n }\n forceTokenization(lineNumber) {\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n this._tokenization.forceTokenization(lineNumber);\n }\n isCheapToTokenize(lineNumber) {\n return this._tokenization.isCheapToTokenize(lineNumber);\n }\n tokenizeIfCheap(lineNumber) {\n if (this.isCheapToTokenize(lineNumber)) {\n this.forceTokenization(lineNumber);\n }\n }\n getLineTokens(lineNumber) {\n if (lineNumber < 1 || lineNumber > this.getLineCount()) {\n throw new Error('Illegal value for lineNumber');\n }\n return this._getLineTokens(lineNumber);\n }\n _getLineTokens(lineNumber) {\n const lineText = this.getLineContent(lineNumber);\n const syntacticTokens = this._tokens.getTokens(this._languageIdentifier.id, lineNumber - 1, lineText);\n return this._tokens2.addSemanticTokens(lineNumber, syntacticTokens);\n }\n getLanguageIdentifier() {\n return this._languageIdentifier;\n }\n getModeId() {\n return this._languageIdentifier.language;\n }\n setMode(languageIdentifier) {\n if (this._languageIdentifier.id === languageIdentifier.id) {\n // There's nothing to do\n return;\n }\n let e = {\n oldLanguage: this._languageIdentifier.language,\n newLanguage: languageIdentifier.language\n };\n this._languageIdentifier = languageIdentifier;\n this._onDidChangeLanguage.fire(e);\n this._onDidChangeLanguageConfiguration.fire({});\n }\n getLanguageIdAtPosition(lineNumber, column) {\n const position = this.validatePosition(new Position(lineNumber, column));\n const lineTokens = this.getLineTokens(position.lineNumber);\n return lineTokens.getLanguageId(lineTokens.findTokenIndexAtOffset(position.column - 1));\n }\n // Having tokens allows implementing additional helper methods\n getWordAtPosition(_position) {\n this._assertNotDisposed();\n const position = this.validatePosition(_position);\n const lineContent = this.getLineContent(position.lineNumber);\n const lineTokens = this._getLineTokens(position.lineNumber);\n const tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n // (1). First try checking right biased word\n const [rbStartOffset, rbEndOffset] = TextModel._findLanguageBoundaries(lineTokens, tokenIndex);\n const rightBiasedWord = getWordAtText(position.column, LanguageConfigurationRegistry.getWordDefinition(lineTokens.getLanguageId(tokenIndex)), lineContent.substring(rbStartOffset, rbEndOffset), rbStartOffset);\n // Make sure the result touches the original passed in position\n if (rightBiasedWord && rightBiasedWord.startColumn <= _position.column && _position.column <= rightBiasedWord.endColumn) {\n return rightBiasedWord;\n }\n // (2). Else, if we were at a language boundary, check the left biased word\n if (tokenIndex > 0 && rbStartOffset === position.column - 1) {\n // edge case, where `position` sits between two tokens belonging to two different languages\n const [lbStartOffset, lbEndOffset] = TextModel._findLanguageBoundaries(lineTokens, tokenIndex - 1);\n const leftBiasedWord = getWordAtText(position.column, LanguageConfigurationRegistry.getWordDefinition(lineTokens.getLanguageId(tokenIndex - 1)), lineContent.substring(lbStartOffset, lbEndOffset), lbStartOffset);\n // Make sure the result touches the original passed in position\n if (leftBiasedWord && leftBiasedWord.startColumn <= _position.column && _position.column <= leftBiasedWord.endColumn) {\n return leftBiasedWord;\n }\n }\n return null;\n }\n static _findLanguageBoundaries(lineTokens, tokenIndex) {\n const languageId = lineTokens.getLanguageId(tokenIndex);\n // go left until a different language is hit\n let startOffset = 0;\n for (let i = tokenIndex; i >= 0 && lineTokens.getLanguageId(i) === languageId; i--) {\n startOffset = lineTokens.getStartOffset(i);\n }\n // go right until a different language is hit\n let endOffset = lineTokens.getLineContent().length;\n for (let i = tokenIndex, tokenCount = lineTokens.getCount(); i < tokenCount && lineTokens.getLanguageId(i) === languageId; i++) {\n endOffset = lineTokens.getEndOffset(i);\n }\n return [startOffset, endOffset];\n }\n getWordUntilPosition(position) {\n const wordAtPosition = this.getWordAtPosition(position);\n if (!wordAtPosition) {\n return {\n word: '',\n startColumn: position.column,\n endColumn: position.column\n };\n }\n return {\n word: wordAtPosition.word.substr(0, position.column - wordAtPosition.startColumn),\n startColumn: wordAtPosition.startColumn,\n endColumn: position.column\n };\n }\n findMatchingBracketUp(_bracket, _position) {\n let bracket = _bracket.toLowerCase();\n let position = this.validatePosition(_position);\n let lineTokens = this._getLineTokens(position.lineNumber);\n let languageId = lineTokens.getLanguageId(lineTokens.findTokenIndexAtOffset(position.column - 1));\n let bracketsSupport = LanguageConfigurationRegistry.getBracketsSupport(languageId);\n if (!bracketsSupport) {\n return null;\n }\n let data = bracketsSupport.textIsBracket[bracket];\n if (!data) {\n return null;\n }\n return stripBracketSearchCanceled(this._findMatchingBracketUp(data, position, null));\n }\n matchBracket(position) {\n return this._matchBracket(this.validatePosition(position));\n }\n _establishBracketSearchOffsets(position, lineTokens, modeBrackets, tokenIndex) {\n const tokenCount = lineTokens.getCount();\n const currentLanguageId = lineTokens.getLanguageId(tokenIndex);\n // limit search to not go before `maxBracketLength`\n let searchStartOffset = Math.max(0, position.column - 1 - modeBrackets.maxBracketLength);\n for (let i = tokenIndex - 1; i >= 0; i--) {\n const tokenEndOffset = lineTokens.getEndOffset(i);\n if (tokenEndOffset <= searchStartOffset) {\n break;\n }\n if (ignoreBracketsInToken(lineTokens.getStandardTokenType(i)) || lineTokens.getLanguageId(i) !== currentLanguageId) {\n searchStartOffset = tokenEndOffset;\n break;\n }\n }\n // limit search to not go after `maxBracketLength`\n let searchEndOffset = Math.min(lineTokens.getLineContent().length, position.column - 1 + modeBrackets.maxBracketLength);\n for (let i = tokenIndex + 1; i < tokenCount; i++) {\n const tokenStartOffset = lineTokens.getStartOffset(i);\n if (tokenStartOffset >= searchEndOffset) {\n break;\n }\n if (ignoreBracketsInToken(lineTokens.getStandardTokenType(i)) || lineTokens.getLanguageId(i) !== currentLanguageId) {\n searchEndOffset = tokenStartOffset;\n break;\n }\n }\n return { searchStartOffset, searchEndOffset };\n }\n _matchBracket(position) {\n const lineNumber = position.lineNumber;\n const lineTokens = this._getLineTokens(lineNumber);\n const lineText = this._buffer.getLineContent(lineNumber);\n const tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n if (tokenIndex < 0) {\n return null;\n }\n const currentModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(lineTokens.getLanguageId(tokenIndex));\n // check that the token is not to be ignored\n if (currentModeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex))) {\n let { searchStartOffset, searchEndOffset } = this._establishBracketSearchOffsets(position, lineTokens, currentModeBrackets, tokenIndex);\n // it might be the case that [currentTokenStart -> currentTokenEnd] contains multiple brackets\n // `bestResult` will contain the most right-side result\n let bestResult = null;\n while (true) {\n const foundBracket = BracketsUtils.findNextBracketInRange(currentModeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (!foundBracket) {\n // there are no more brackets in this text\n break;\n }\n // check that we didn't hit a bracket too far away from position\n if (foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {\n const foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1).toLowerCase();\n const r = this._matchFoundBracket(foundBracket, currentModeBrackets.textIsBracket[foundBracketText], currentModeBrackets.textIsOpenBracket[foundBracketText], null);\n if (r) {\n if (r instanceof BracketSearchCanceled) {\n return null;\n }\n bestResult = r;\n }\n }\n searchStartOffset = foundBracket.endColumn - 1;\n }\n if (bestResult) {\n return bestResult;\n }\n }\n // If position is in between two tokens, try also looking in the previous token\n if (tokenIndex > 0 && lineTokens.getStartOffset(tokenIndex) === position.column - 1) {\n const prevTokenIndex = tokenIndex - 1;\n const prevModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(lineTokens.getLanguageId(prevTokenIndex));\n // check that previous token is not to be ignored\n if (prevModeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(prevTokenIndex))) {\n let { searchStartOffset, searchEndOffset } = this._establishBracketSearchOffsets(position, lineTokens, prevModeBrackets, prevTokenIndex);\n const foundBracket = BracketsUtils.findPrevBracketInRange(prevModeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n // check that we didn't hit a bracket too far away from position\n if (foundBracket && foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {\n const foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1).toLowerCase();\n const r = this._matchFoundBracket(foundBracket, prevModeBrackets.textIsBracket[foundBracketText], prevModeBrackets.textIsOpenBracket[foundBracketText], null);\n if (r) {\n if (r instanceof BracketSearchCanceled) {\n return null;\n }\n return r;\n }\n }\n }\n }\n return null;\n }\n _matchFoundBracket(foundBracket, data, isOpen, continueSearchPredicate) {\n if (!data) {\n return null;\n }\n const matched = (isOpen\n ? this._findMatchingBracketDown(data, foundBracket.getEndPosition(), continueSearchPredicate)\n : this._findMatchingBracketUp(data, foundBracket.getStartPosition(), continueSearchPredicate));\n if (!matched) {\n return null;\n }\n if (matched instanceof BracketSearchCanceled) {\n return matched;\n }\n return [foundBracket, matched];\n }\n _findMatchingBracketUp(bracket, position, continueSearchPredicate) {\n // console.log('_findMatchingBracketUp: ', 'bracket: ', JSON.stringify(bracket), 'startPosition: ', String(position));\n const languageId = bracket.languageIdentifier.id;\n const reversedBracketRegex = bracket.reversedRegex;\n let count = -1;\n let totalCallCount = 0;\n const searchPrevMatchingBracketInRange = (lineNumber, lineText, searchStartOffset, searchEndOffset) => {\n while (true) {\n if (continueSearchPredicate && (++totalCallCount) % 100 === 0 && !continueSearchPredicate()) {\n return BracketSearchCanceled.INSTANCE;\n }\n const r = BracketsUtils.findPrevBracketInRange(reversedBracketRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (!r) {\n break;\n }\n const hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\n if (bracket.isOpen(hitText)) {\n count++;\n }\n else if (bracket.isClose(hitText)) {\n count--;\n }\n if (count === 0) {\n return r;\n }\n searchEndOffset = r.startColumn - 1;\n }\n return null;\n };\n for (let lineNumber = position.lineNumber; lineNumber >= 1; lineNumber--) {\n const lineTokens = this._getLineTokens(lineNumber);\n const tokenCount = lineTokens.getCount();\n const lineText = this._buffer.getLineContent(lineNumber);\n let tokenIndex = tokenCount - 1;\n let searchStartOffset = lineText.length;\n let searchEndOffset = lineText.length;\n if (lineNumber === position.lineNumber) {\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n searchStartOffset = position.column - 1;\n searchEndOffset = position.column - 1;\n }\n let prevSearchInToken = true;\n for (; tokenIndex >= 0; tokenIndex--) {\n const searchInToken = (lineTokens.getLanguageId(tokenIndex) === languageId && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\n if (searchInToken) {\n // this token should be searched\n if (prevSearchInToken) {\n // the previous token should be searched, simply extend searchStartOffset\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n }\n else {\n // the previous token should not be searched\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n }\n else {\n // this token should not be searched\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchPrevMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return r;\n }\n }\n }\n prevSearchInToken = searchInToken;\n }\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchPrevMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return r;\n }\n }\n }\n return null;\n }\n _findMatchingBracketDown(bracket, position, continueSearchPredicate) {\n // console.log('_findMatchingBracketDown: ', 'bracket: ', JSON.stringify(bracket), 'startPosition: ', String(position));\n const languageId = bracket.languageIdentifier.id;\n const bracketRegex = bracket.forwardRegex;\n let count = 1;\n let totalCallCount = 0;\n const searchNextMatchingBracketInRange = (lineNumber, lineText, searchStartOffset, searchEndOffset) => {\n while (true) {\n if (continueSearchPredicate && (++totalCallCount) % 100 === 0 && !continueSearchPredicate()) {\n return BracketSearchCanceled.INSTANCE;\n }\n const r = BracketsUtils.findNextBracketInRange(bracketRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (!r) {\n break;\n }\n const hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\n if (bracket.isOpen(hitText)) {\n count++;\n }\n else if (bracket.isClose(hitText)) {\n count--;\n }\n if (count === 0) {\n return r;\n }\n searchStartOffset = r.endColumn - 1;\n }\n return null;\n };\n const lineCount = this.getLineCount();\n for (let lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\n const lineTokens = this._getLineTokens(lineNumber);\n const tokenCount = lineTokens.getCount();\n const lineText = this._buffer.getLineContent(lineNumber);\n let tokenIndex = 0;\n let searchStartOffset = 0;\n let searchEndOffset = 0;\n if (lineNumber === position.lineNumber) {\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n searchStartOffset = position.column - 1;\n searchEndOffset = position.column - 1;\n }\n let prevSearchInToken = true;\n for (; tokenIndex < tokenCount; tokenIndex++) {\n const searchInToken = (lineTokens.getLanguageId(tokenIndex) === languageId && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\n if (searchInToken) {\n // this token should be searched\n if (prevSearchInToken) {\n // the previous token should be searched, simply extend searchEndOffset\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n else {\n // the previous token should not be searched\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n }\n else {\n // this token should not be searched\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchNextMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return r;\n }\n }\n }\n prevSearchInToken = searchInToken;\n }\n if (prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchNextMatchingBracketInRange(lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return r;\n }\n }\n }\n return null;\n }\n findPrevBracket(_position) {\n const position = this.validatePosition(_position);\n let languageId = -1;\n let modeBrackets = null;\n for (let lineNumber = position.lineNumber; lineNumber >= 1; lineNumber--) {\n const lineTokens = this._getLineTokens(lineNumber);\n const tokenCount = lineTokens.getCount();\n const lineText = this._buffer.getLineContent(lineNumber);\n let tokenIndex = tokenCount - 1;\n let searchStartOffset = lineText.length;\n let searchEndOffset = lineText.length;\n if (lineNumber === position.lineNumber) {\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n searchStartOffset = position.column - 1;\n searchEndOffset = position.column - 1;\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n languageId = tokenLanguageId;\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\n }\n }\n let prevSearchInToken = true;\n for (; tokenIndex >= 0; tokenIndex--) {\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n // language id change!\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n prevSearchInToken = false;\n }\n languageId = tokenLanguageId;\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\n }\n const searchInToken = (!!modeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\n if (searchInToken) {\n // this token should be searched\n if (prevSearchInToken) {\n // the previous token should be searched, simply extend searchStartOffset\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n }\n else {\n // the previous token should not be searched\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n }\n else {\n // this token should not be searched\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n }\n }\n prevSearchInToken = searchInToken;\n }\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n }\n }\n return null;\n }\n findNextBracket(_position) {\n const position = this.validatePosition(_position);\n const lineCount = this.getLineCount();\n let languageId = -1;\n let modeBrackets = null;\n for (let lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\n const lineTokens = this._getLineTokens(lineNumber);\n const tokenCount = lineTokens.getCount();\n const lineText = this._buffer.getLineContent(lineNumber);\n let tokenIndex = 0;\n let searchStartOffset = 0;\n let searchEndOffset = 0;\n if (lineNumber === position.lineNumber) {\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n searchStartOffset = position.column - 1;\n searchEndOffset = position.column - 1;\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n languageId = tokenLanguageId;\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\n }\n }\n let prevSearchInToken = true;\n for (; tokenIndex < tokenCount; tokenIndex++) {\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n // language id change!\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n prevSearchInToken = false;\n }\n languageId = tokenLanguageId;\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\n }\n const searchInToken = (!!modeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\n if (searchInToken) {\n // this token should be searched\n if (prevSearchInToken) {\n // the previous token should be searched, simply extend searchEndOffset\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n else {\n // the previous token should not be searched\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n }\n else {\n // this token should not be searched\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n }\n }\n prevSearchInToken = searchInToken;\n }\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return this._toFoundBracket(modeBrackets, r);\n }\n }\n }\n return null;\n }\n findEnclosingBrackets(_position, maxDuration) {\n let continueSearchPredicate;\n if (typeof maxDuration === 'undefined') {\n continueSearchPredicate = null;\n }\n else {\n const startTime = Date.now();\n continueSearchPredicate = () => {\n return (Date.now() - startTime <= maxDuration);\n };\n }\n const position = this.validatePosition(_position);\n const lineCount = this.getLineCount();\n const savedCounts = new Map();\n let counts = [];\n const resetCounts = (languageId, modeBrackets) => {\n if (!savedCounts.has(languageId)) {\n let tmp = [];\n for (let i = 0, len = modeBrackets ? modeBrackets.brackets.length : 0; i < len; i++) {\n tmp[i] = 0;\n }\n savedCounts.set(languageId, tmp);\n }\n counts = savedCounts.get(languageId);\n };\n let totalCallCount = 0;\n const searchInRange = (modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset) => {\n while (true) {\n if (continueSearchPredicate && (++totalCallCount) % 100 === 0 && !continueSearchPredicate()) {\n return BracketSearchCanceled.INSTANCE;\n }\n const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (!r) {\n break;\n }\n const hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\n const bracket = modeBrackets.textIsBracket[hitText];\n if (bracket) {\n if (bracket.isOpen(hitText)) {\n counts[bracket.index]++;\n }\n else if (bracket.isClose(hitText)) {\n counts[bracket.index]--;\n }\n if (counts[bracket.index] === -1) {\n return this._matchFoundBracket(r, bracket, false, continueSearchPredicate);\n }\n }\n searchStartOffset = r.endColumn - 1;\n }\n return null;\n };\n let languageId = -1;\n let modeBrackets = null;\n for (let lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\n const lineTokens = this._getLineTokens(lineNumber);\n const tokenCount = lineTokens.getCount();\n const lineText = this._buffer.getLineContent(lineNumber);\n let tokenIndex = 0;\n let searchStartOffset = 0;\n let searchEndOffset = 0;\n if (lineNumber === position.lineNumber) {\n tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n searchStartOffset = position.column - 1;\n searchEndOffset = position.column - 1;\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n languageId = tokenLanguageId;\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\n resetCounts(languageId, modeBrackets);\n }\n }\n let prevSearchInToken = true;\n for (; tokenIndex < tokenCount; tokenIndex++) {\n const tokenLanguageId = lineTokens.getLanguageId(tokenIndex);\n if (languageId !== tokenLanguageId) {\n // language id change!\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchInRange(modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return stripBracketSearchCanceled(r);\n }\n prevSearchInToken = false;\n }\n languageId = tokenLanguageId;\n modeBrackets = LanguageConfigurationRegistry.getBracketsSupport(languageId);\n resetCounts(languageId, modeBrackets);\n }\n const searchInToken = (!!modeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(tokenIndex)));\n if (searchInToken) {\n // this token should be searched\n if (prevSearchInToken) {\n // the previous token should be searched, simply extend searchEndOffset\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n else {\n // the previous token should not be searched\n searchStartOffset = lineTokens.getStartOffset(tokenIndex);\n searchEndOffset = lineTokens.getEndOffset(tokenIndex);\n }\n }\n else {\n // this token should not be searched\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchInRange(modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return stripBracketSearchCanceled(r);\n }\n }\n }\n prevSearchInToken = searchInToken;\n }\n if (modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n const r = searchInRange(modeBrackets, lineNumber, lineText, searchStartOffset, searchEndOffset);\n if (r) {\n return stripBracketSearchCanceled(r);\n }\n }\n }\n return null;\n }\n _toFoundBracket(modeBrackets, r) {\n if (!r) {\n return null;\n }\n let text = this.getValueInRange(r);\n text = text.toLowerCase();\n let data = modeBrackets.textIsBracket[text];\n if (!data) {\n return null;\n }\n return {\n range: r,\n open: data.open,\n close: data.close,\n isOpen: modeBrackets.textIsOpenBracket[text]\n };\n }\n /**\n * Returns:\n * - -1 => the line consists of whitespace\n * - otherwise => the indent level is returned value\n */\n static computeIndentLevel(line, tabSize) {\n let indent = 0;\n let i = 0;\n let len = line.length;\n while (i < len) {\n let chCode = line.charCodeAt(i);\n if (chCode === 32 /* Space */) {\n indent++;\n }\n else if (chCode === 9 /* Tab */) {\n indent = indent - indent % tabSize + tabSize;\n }\n else {\n break;\n }\n i++;\n }\n if (i === len) {\n return -1; // line only consists of whitespace\n }\n return indent;\n }\n _computeIndentLevel(lineIndex) {\n return TextModel.computeIndentLevel(this._buffer.getLineContent(lineIndex + 1), this._options.tabSize);\n }\n getActiveIndentGuide(lineNumber, minLineNumber, maxLineNumber) {\n this._assertNotDisposed();\n const lineCount = this.getLineCount();\n if (lineNumber < 1 || lineNumber > lineCount) {\n throw new Error('Illegal value for lineNumber');\n }\n const foldingRules = LanguageConfigurationRegistry.getFoldingRules(this._languageIdentifier.id);\n const offSide = Boolean(foldingRules && foldingRules.offSide);\n let up_aboveContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let up_aboveContentLineIndent = -1;\n let up_belowContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let up_belowContentLineIndent = -1;\n const up_resolveIndents = (lineNumber) => {\n if (up_aboveContentLineIndex !== -1 && (up_aboveContentLineIndex === -2 || up_aboveContentLineIndex > lineNumber - 1)) {\n up_aboveContentLineIndex = -1;\n up_aboveContentLineIndent = -1;\n // must find previous line with content\n for (let lineIndex = lineNumber - 2; lineIndex >= 0; lineIndex--) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n up_aboveContentLineIndex = lineIndex;\n up_aboveContentLineIndent = indent;\n break;\n }\n }\n }\n if (up_belowContentLineIndex === -2) {\n up_belowContentLineIndex = -1;\n up_belowContentLineIndent = -1;\n // must find next line with content\n for (let lineIndex = lineNumber; lineIndex < lineCount; lineIndex++) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n up_belowContentLineIndex = lineIndex;\n up_belowContentLineIndent = indent;\n break;\n }\n }\n }\n };\n let down_aboveContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let down_aboveContentLineIndent = -1;\n let down_belowContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let down_belowContentLineIndent = -1;\n const down_resolveIndents = (lineNumber) => {\n if (down_aboveContentLineIndex === -2) {\n down_aboveContentLineIndex = -1;\n down_aboveContentLineIndent = -1;\n // must find previous line with content\n for (let lineIndex = lineNumber - 2; lineIndex >= 0; lineIndex--) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n down_aboveContentLineIndex = lineIndex;\n down_aboveContentLineIndent = indent;\n break;\n }\n }\n }\n if (down_belowContentLineIndex !== -1 && (down_belowContentLineIndex === -2 || down_belowContentLineIndex < lineNumber - 1)) {\n down_belowContentLineIndex = -1;\n down_belowContentLineIndent = -1;\n // must find next line with content\n for (let lineIndex = lineNumber; lineIndex < lineCount; lineIndex++) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n down_belowContentLineIndex = lineIndex;\n down_belowContentLineIndent = indent;\n break;\n }\n }\n }\n };\n let startLineNumber = 0;\n let goUp = true;\n let endLineNumber = 0;\n let goDown = true;\n let indent = 0;\n let initialIndent = 0;\n for (let distance = 0; goUp || goDown; distance++) {\n const upLineNumber = lineNumber - distance;\n const downLineNumber = lineNumber + distance;\n if (distance > 1 && (upLineNumber < 1 || upLineNumber < minLineNumber)) {\n goUp = false;\n }\n if (distance > 1 && (downLineNumber > lineCount || downLineNumber > maxLineNumber)) {\n goDown = false;\n }\n if (distance > 50000) {\n // stop processing\n goUp = false;\n goDown = false;\n }\n let upLineIndentLevel = -1;\n if (goUp) {\n // compute indent level going up\n const currentIndent = this._computeIndentLevel(upLineNumber - 1);\n if (currentIndent >= 0) {\n // This line has content (besides whitespace)\n // Use the line's indent\n up_belowContentLineIndex = upLineNumber - 1;\n up_belowContentLineIndent = currentIndent;\n upLineIndentLevel = Math.ceil(currentIndent / this._options.indentSize);\n }\n else {\n up_resolveIndents(upLineNumber);\n upLineIndentLevel = this._getIndentLevelForWhitespaceLine(offSide, up_aboveContentLineIndent, up_belowContentLineIndent);\n }\n }\n let downLineIndentLevel = -1;\n if (goDown) {\n // compute indent level going down\n const currentIndent = this._computeIndentLevel(downLineNumber - 1);\n if (currentIndent >= 0) {\n // This line has content (besides whitespace)\n // Use the line's indent\n down_aboveContentLineIndex = downLineNumber - 1;\n down_aboveContentLineIndent = currentIndent;\n downLineIndentLevel = Math.ceil(currentIndent / this._options.indentSize);\n }\n else {\n down_resolveIndents(downLineNumber);\n downLineIndentLevel = this._getIndentLevelForWhitespaceLine(offSide, down_aboveContentLineIndent, down_belowContentLineIndent);\n }\n }\n if (distance === 0) {\n initialIndent = upLineIndentLevel;\n continue;\n }\n if (distance === 1) {\n if (downLineNumber <= lineCount && downLineIndentLevel >= 0 && initialIndent + 1 === downLineIndentLevel) {\n // This is the beginning of a scope, we have special handling here, since we want the\n // child scope indent to be active, not the parent scope\n goUp = false;\n startLineNumber = downLineNumber;\n endLineNumber = downLineNumber;\n indent = downLineIndentLevel;\n continue;\n }\n if (upLineNumber >= 1 && upLineIndentLevel >= 0 && upLineIndentLevel - 1 === initialIndent) {\n // This is the end of a scope, just like above\n goDown = false;\n startLineNumber = upLineNumber;\n endLineNumber = upLineNumber;\n indent = upLineIndentLevel;\n continue;\n }\n startLineNumber = lineNumber;\n endLineNumber = lineNumber;\n indent = initialIndent;\n if (indent === 0) {\n // No need to continue\n return { startLineNumber, endLineNumber, indent };\n }\n }\n if (goUp) {\n if (upLineIndentLevel >= indent) {\n startLineNumber = upLineNumber;\n }\n else {\n goUp = false;\n }\n }\n if (goDown) {\n if (downLineIndentLevel >= indent) {\n endLineNumber = downLineNumber;\n }\n else {\n goDown = false;\n }\n }\n }\n return { startLineNumber, endLineNumber, indent };\n }\n getLinesIndentGuides(startLineNumber, endLineNumber) {\n this._assertNotDisposed();\n const lineCount = this.getLineCount();\n if (startLineNumber < 1 || startLineNumber > lineCount) {\n throw new Error('Illegal value for startLineNumber');\n }\n if (endLineNumber < 1 || endLineNumber > lineCount) {\n throw new Error('Illegal value for endLineNumber');\n }\n const foldingRules = LanguageConfigurationRegistry.getFoldingRules(this._languageIdentifier.id);\n const offSide = Boolean(foldingRules && foldingRules.offSide);\n let result = new Array(endLineNumber - startLineNumber + 1);\n let aboveContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let aboveContentLineIndent = -1;\n let belowContentLineIndex = -2; /* -2 is a marker for not having computed it */\n let belowContentLineIndent = -1;\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n let resultIndex = lineNumber - startLineNumber;\n const currentIndent = this._computeIndentLevel(lineNumber - 1);\n if (currentIndent >= 0) {\n // This line has content (besides whitespace)\n // Use the line's indent\n aboveContentLineIndex = lineNumber - 1;\n aboveContentLineIndent = currentIndent;\n result[resultIndex] = Math.ceil(currentIndent / this._options.indentSize);\n continue;\n }\n if (aboveContentLineIndex === -2) {\n aboveContentLineIndex = -1;\n aboveContentLineIndent = -1;\n // must find previous line with content\n for (let lineIndex = lineNumber - 2; lineIndex >= 0; lineIndex--) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n aboveContentLineIndex = lineIndex;\n aboveContentLineIndent = indent;\n break;\n }\n }\n }\n if (belowContentLineIndex !== -1 && (belowContentLineIndex === -2 || belowContentLineIndex < lineNumber - 1)) {\n belowContentLineIndex = -1;\n belowContentLineIndent = -1;\n // must find next line with content\n for (let lineIndex = lineNumber; lineIndex < lineCount; lineIndex++) {\n let indent = this._computeIndentLevel(lineIndex);\n if (indent >= 0) {\n belowContentLineIndex = lineIndex;\n belowContentLineIndent = indent;\n break;\n }\n }\n }\n result[resultIndex] = this._getIndentLevelForWhitespaceLine(offSide, aboveContentLineIndent, belowContentLineIndent);\n }\n return result;\n }\n _getIndentLevelForWhitespaceLine(offSide, aboveContentLineIndent, belowContentLineIndent) {\n if (aboveContentLineIndent === -1 || belowContentLineIndent === -1) {\n // At the top or bottom of the file\n return 0;\n }\n else if (aboveContentLineIndent < belowContentLineIndent) {\n // we are inside the region above\n return (1 + Math.floor(aboveContentLineIndent / this._options.indentSize));\n }\n else if (aboveContentLineIndent === belowContentLineIndent) {\n // we are in between two regions\n return Math.ceil(belowContentLineIndent / this._options.indentSize);\n }\n else {\n if (offSide) {\n // same level as region below\n return Math.ceil(belowContentLineIndent / this._options.indentSize);\n }\n else {\n // we are inside the region that ends below\n return (1 + Math.floor(belowContentLineIndent / this._options.indentSize));\n }\n }\n }\n}\nTextModel.MODEL_SYNC_LIMIT = 50 * 1024 * 1024; // 50 MB\nTextModel.LARGE_FILE_SIZE_THRESHOLD = 20 * 1024 * 1024; // 20 MB;\nTextModel.LARGE_FILE_LINE_COUNT_THRESHOLD = 300 * 1000; // 300K lines\nTextModel.DEFAULT_CREATION_OPTIONS = {\n isForSimpleWidget: false,\n tabSize: EDITOR_MODEL_DEFAULTS.tabSize,\n indentSize: EDITOR_MODEL_DEFAULTS.indentSize,\n insertSpaces: EDITOR_MODEL_DEFAULTS.insertSpaces,\n detectIndentation: false,\n defaultEOL: 1 /* LF */,\n trimAutoWhitespace: EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,\n largeFileOptimizations: EDITOR_MODEL_DEFAULTS.largeFileOptimizations,\n};\n//#region Decorations\nclass DecorationsTrees {\n constructor() {\n this._decorationsTree0 = new IntervalTree();\n this._decorationsTree1 = new IntervalTree();\n }\n intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId) {\n const r0 = this._decorationsTree0.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId);\n const r1 = this._decorationsTree1.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId);\n return r0.concat(r1);\n }\n search(filterOwnerId, filterOutValidation, overviewRulerOnly, cachedVersionId) {\n if (overviewRulerOnly) {\n return this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId);\n }\n else {\n const r0 = this._decorationsTree0.search(filterOwnerId, filterOutValidation, cachedVersionId);\n const r1 = this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId);\n return r0.concat(r1);\n }\n }\n collectNodesFromOwner(ownerId) {\n const r0 = this._decorationsTree0.collectNodesFromOwner(ownerId);\n const r1 = this._decorationsTree1.collectNodesFromOwner(ownerId);\n return r0.concat(r1);\n }\n collectNodesPostOrder() {\n const r0 = this._decorationsTree0.collectNodesPostOrder();\n const r1 = this._decorationsTree1.collectNodesPostOrder();\n return r0.concat(r1);\n }\n insert(node) {\n if (getNodeIsInOverviewRuler(node)) {\n this._decorationsTree1.insert(node);\n }\n else {\n this._decorationsTree0.insert(node);\n }\n }\n delete(node) {\n if (getNodeIsInOverviewRuler(node)) {\n this._decorationsTree1.delete(node);\n }\n else {\n this._decorationsTree0.delete(node);\n }\n }\n resolveNode(node, cachedVersionId) {\n if (getNodeIsInOverviewRuler(node)) {\n this._decorationsTree1.resolveNode(node, cachedVersionId);\n }\n else {\n this._decorationsTree0.resolveNode(node, cachedVersionId);\n }\n }\n acceptReplace(offset, length, textLength, forceMoveMarkers) {\n this._decorationsTree0.acceptReplace(offset, length, textLength, forceMoveMarkers);\n this._decorationsTree1.acceptReplace(offset, length, textLength, forceMoveMarkers);\n }\n}\nfunction cleanClassName(className) {\n return className.replace(/[^a-z0-9\\-_]/gi, ' ');\n}\nclass DecorationOptions {\n constructor(options) {\n this.color = options.color || '';\n this.darkColor = options.darkColor || '';\n }\n}\nexport class ModelDecorationOverviewRulerOptions extends DecorationOptions {\n constructor(options) {\n super(options);\n this._resolvedColor = null;\n this.position = (typeof options.position === 'number' ? options.position : model.OverviewRulerLane.Center);\n }\n getColor(theme) {\n if (!this._resolvedColor) {\n if (theme.type !== 'light' && this.darkColor) {\n this._resolvedColor = this._resolveColor(this.darkColor, theme);\n }\n else {\n this._resolvedColor = this._resolveColor(this.color, theme);\n }\n }\n return this._resolvedColor;\n }\n invalidateCachedColor() {\n this._resolvedColor = null;\n }\n _resolveColor(color, theme) {\n if (typeof color === 'string') {\n return color;\n }\n let c = color ? theme.getColor(color.id) : null;\n if (!c) {\n return '';\n }\n return c.toString();\n }\n}\nexport class ModelDecorationMinimapOptions extends DecorationOptions {\n constructor(options) {\n super(options);\n this.position = options.position;\n }\n getColor(theme) {\n if (!this._resolvedColor) {\n if (theme.type !== 'light' && this.darkColor) {\n this._resolvedColor = this._resolveColor(this.darkColor, theme);\n }\n else {\n this._resolvedColor = this._resolveColor(this.color, theme);\n }\n }\n return this._resolvedColor;\n }\n invalidateCachedColor() {\n this._resolvedColor = undefined;\n }\n _resolveColor(color, theme) {\n if (typeof color === 'string') {\n return Color.fromHex(color);\n }\n return theme.getColor(color.id);\n }\n}\nexport class ModelDecorationOptions {\n constructor(options) {\n this.stickiness = options.stickiness || 0 /* AlwaysGrowsWhenTypingAtEdges */;\n this.zIndex = options.zIndex || 0;\n this.className = options.className ? cleanClassName(options.className) : null;\n this.hoverMessage = options.hoverMessage || null;\n this.glyphMarginHoverMessage = options.glyphMarginHoverMessage || null;\n this.isWholeLine = options.isWholeLine || false;\n this.showIfCollapsed = options.showIfCollapsed || false;\n this.collapseOnReplaceEdit = options.collapseOnReplaceEdit || false;\n this.overviewRuler = options.overviewRuler ? new ModelDecorationOverviewRulerOptions(options.overviewRuler) : null;\n this.minimap = options.minimap ? new ModelDecorationMinimapOptions(options.minimap) : null;\n this.glyphMarginClassName = options.glyphMarginClassName ? cleanClassName(options.glyphMarginClassName) : null;\n this.linesDecorationsClassName = options.linesDecorationsClassName ? cleanClassName(options.linesDecorationsClassName) : null;\n this.firstLineDecorationClassName = options.firstLineDecorationClassName ? cleanClassName(options.firstLineDecorationClassName) : null;\n this.marginClassName = options.marginClassName ? cleanClassName(options.marginClassName) : null;\n this.inlineClassName = options.inlineClassName ? cleanClassName(options.inlineClassName) : null;\n this.inlineClassNameAffectsLetterSpacing = options.inlineClassNameAffectsLetterSpacing || false;\n this.beforeContentClassName = options.beforeContentClassName ? cleanClassName(options.beforeContentClassName) : null;\n this.afterContentClassName = options.afterContentClassName ? cleanClassName(options.afterContentClassName) : null;\n }\n static register(options) {\n return new ModelDecorationOptions(options);\n }\n static createDynamic(options) {\n return new ModelDecorationOptions(options);\n }\n}\nModelDecorationOptions.EMPTY = ModelDecorationOptions.register({});\n/**\n * The order carefully matches the values of the enum.\n */\nconst TRACKED_RANGE_OPTIONS = [\n ModelDecorationOptions.register({ stickiness: 0 /* AlwaysGrowsWhenTypingAtEdges */ }),\n ModelDecorationOptions.register({ stickiness: 1 /* NeverGrowsWhenTypingAtEdges */ }),\n ModelDecorationOptions.register({ stickiness: 2 /* GrowsOnlyWhenTypingBefore */ }),\n ModelDecorationOptions.register({ stickiness: 3 /* GrowsOnlyWhenTypingAfter */ }),\n];\nfunction _normalizeOptions(options) {\n if (options instanceof ModelDecorationOptions) {\n return options;\n }\n return ModelDecorationOptions.createDynamic(options);\n}\nexport class DidChangeDecorationsEmitter extends Disposable {\n constructor() {\n super();\n this._actual = this._register(new Emitter());\n this.event = this._actual.event;\n this._deferredCnt = 0;\n this._shouldFire = false;\n this._affectsMinimap = false;\n this._affectsOverviewRuler = false;\n }\n beginDeferredEmit() {\n this._deferredCnt++;\n }\n endDeferredEmit() {\n this._deferredCnt--;\n if (this._deferredCnt === 0) {\n if (this._shouldFire) {\n const event = {\n affectsMinimap: this._affectsMinimap,\n affectsOverviewRuler: this._affectsOverviewRuler,\n };\n this._shouldFire = false;\n this._affectsMinimap = false;\n this._affectsOverviewRuler = false;\n this._actual.fire(event);\n }\n }\n }\n checkAffectedAndFire(options) {\n if (!this._affectsMinimap) {\n this._affectsMinimap = options.minimap && options.minimap.position ? true : false;\n }\n if (!this._affectsOverviewRuler) {\n this._affectsOverviewRuler = options.overviewRuler && options.overviewRuler.color ? true : false;\n }\n this._shouldFire = true;\n }\n fire() {\n this._affectsMinimap = true;\n this._affectsOverviewRuler = true;\n this._shouldFire = true;\n }\n}\n//#endregion\nexport class DidChangeContentEmitter extends Disposable {\n constructor() {\n super();\n /**\n * Both `fastEvent` and `slowEvent` work the same way and contain the same events, but first we invoke `fastEvent` and then `slowEvent`.\n */\n this._fastEmitter = this._register(new Emitter());\n this.fastEvent = this._fastEmitter.event;\n this._slowEmitter = this._register(new Emitter());\n this.slowEvent = this._slowEmitter.event;\n this._deferredCnt = 0;\n this._deferredEvent = null;\n }\n beginDeferredEmit() {\n this._deferredCnt++;\n }\n endDeferredEmit(resultingSelection = null) {\n this._deferredCnt--;\n if (this._deferredCnt === 0) {\n if (this._deferredEvent !== null) {\n this._deferredEvent.rawContentChangedEvent.resultingSelection = resultingSelection;\n const e = this._deferredEvent;\n this._deferredEvent = null;\n this._fastEmitter.fire(e);\n this._slowEmitter.fire(e);\n }\n }\n }\n fire(e) {\n if (this._deferredCnt > 0) {\n if (this._deferredEvent) {\n this._deferredEvent = this._deferredEvent.merge(e);\n }\n else {\n this._deferredEvent = e;\n }\n return;\n }\n this._fastEmitter.fire(e);\n this._slowEmitter.fire(e);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { getMapForWordSeparators } from '../controller/wordCharacterClassifier.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { FindMatch } from '../model.js';\nconst LIMIT_FIND_COUNT = 999;\nexport class SearchParams {\n constructor(searchString, isRegex, matchCase, wordSeparators) {\n this.searchString = searchString;\n this.isRegex = isRegex;\n this.matchCase = matchCase;\n this.wordSeparators = wordSeparators;\n }\n parseSearchRequest() {\n if (this.searchString === '') {\n return null;\n }\n // Try to create a RegExp out of the params\n let multiline;\n if (this.isRegex) {\n multiline = isMultilineRegexSource(this.searchString);\n }\n else {\n multiline = (this.searchString.indexOf('\\n') >= 0);\n }\n let regex = null;\n try {\n regex = strings.createRegExp(this.searchString, this.isRegex, {\n matchCase: this.matchCase,\n wholeWord: false,\n multiline: multiline,\n global: true,\n unicode: true\n });\n }\n catch (err) {\n return null;\n }\n if (!regex) {\n return null;\n }\n let canUseSimpleSearch = (!this.isRegex && !multiline);\n if (canUseSimpleSearch && this.searchString.toLowerCase() !== this.searchString.toUpperCase()) {\n // casing might make a difference\n canUseSimpleSearch = this.matchCase;\n }\n return new SearchData(regex, this.wordSeparators ? getMapForWordSeparators(this.wordSeparators) : null, canUseSimpleSearch ? this.searchString : null);\n }\n}\nexport function isMultilineRegexSource(searchString) {\n if (!searchString || searchString.length === 0) {\n return false;\n }\n for (let i = 0, len = searchString.length; i < len; i++) {\n const chCode = searchString.charCodeAt(i);\n if (chCode === 92 /* Backslash */) {\n // move to next char\n i++;\n if (i >= len) {\n // string ends with a \\\n break;\n }\n const nextChCode = searchString.charCodeAt(i);\n if (nextChCode === 110 /* n */ || nextChCode === 114 /* r */ || nextChCode === 87 /* W */ || nextChCode === 119 /* w */) {\n return true;\n }\n }\n }\n return false;\n}\nexport class SearchData {\n constructor(regex, wordSeparators, simpleSearch) {\n this.regex = regex;\n this.wordSeparators = wordSeparators;\n this.simpleSearch = simpleSearch;\n }\n}\nexport function createFindMatch(range, rawMatches, captureMatches) {\n if (!captureMatches) {\n return new FindMatch(range, null);\n }\n let matches = [];\n for (let i = 0, len = rawMatches.length; i < len; i++) {\n matches[i] = rawMatches[i];\n }\n return new FindMatch(range, matches);\n}\nclass LineFeedCounter {\n constructor(text) {\n let lineFeedsOffsets = [];\n let lineFeedsOffsetsLen = 0;\n for (let i = 0, textLen = text.length; i < textLen; i++) {\n if (text.charCodeAt(i) === 10 /* LineFeed */) {\n lineFeedsOffsets[lineFeedsOffsetsLen++] = i;\n }\n }\n this._lineFeedsOffsets = lineFeedsOffsets;\n }\n findLineFeedCountBeforeOffset(offset) {\n const lineFeedsOffsets = this._lineFeedsOffsets;\n let min = 0;\n let max = lineFeedsOffsets.length - 1;\n if (max === -1) {\n // no line feeds\n return 0;\n }\n if (offset <= lineFeedsOffsets[0]) {\n // before first line feed\n return 0;\n }\n while (min < max) {\n const mid = min + ((max - min) / 2 >> 0);\n if (lineFeedsOffsets[mid] >= offset) {\n max = mid - 1;\n }\n else {\n if (lineFeedsOffsets[mid + 1] >= offset) {\n // bingo!\n min = mid;\n max = mid;\n }\n else {\n min = mid + 1;\n }\n }\n }\n return min + 1;\n }\n}\nexport class TextModelSearch {\n static findMatches(model, searchParams, searchRange, captureMatches, limitResultCount) {\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return [];\n }\n if (searchData.regex.multiline) {\n return this._doFindMatchesMultiline(model, searchRange, new Searcher(searchData.wordSeparators, searchData.regex), captureMatches, limitResultCount);\n }\n return this._doFindMatchesLineByLine(model, searchRange, searchData, captureMatches, limitResultCount);\n }\n /**\n * Multiline search always executes on the lines concatenated with \\n.\n * We must therefore compensate for the count of \\n in case the model is CRLF\n */\n static _getMultilineMatchRange(model, deltaOffset, text, lfCounter, matchIndex, match0) {\n let startOffset;\n let lineFeedCountBeforeMatch = 0;\n if (lfCounter) {\n lineFeedCountBeforeMatch = lfCounter.findLineFeedCountBeforeOffset(matchIndex);\n startOffset = deltaOffset + matchIndex + lineFeedCountBeforeMatch /* add as many \\r as there were \\n */;\n }\n else {\n startOffset = deltaOffset + matchIndex;\n }\n let endOffset;\n if (lfCounter) {\n let lineFeedCountBeforeEndOfMatch = lfCounter.findLineFeedCountBeforeOffset(matchIndex + match0.length);\n let lineFeedCountInMatch = lineFeedCountBeforeEndOfMatch - lineFeedCountBeforeMatch;\n endOffset = startOffset + match0.length + lineFeedCountInMatch /* add as many \\r as there were \\n */;\n }\n else {\n endOffset = startOffset + match0.length;\n }\n const startPosition = model.getPositionAt(startOffset);\n const endPosition = model.getPositionAt(endOffset);\n return new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column);\n }\n static _doFindMatchesMultiline(model, searchRange, searcher, captureMatches, limitResultCount) {\n const deltaOffset = model.getOffsetAt(searchRange.getStartPosition());\n // We always execute multiline search over the lines joined with \\n\n // This makes it that \\n will match the EOL for both CRLF and LF models\n // We compensate for offset errors in `_getMultilineMatchRange`\n const text = model.getValueInRange(searchRange, 1 /* LF */);\n const lfCounter = (model.getEOL() === '\\r\\n' ? new LineFeedCounter(text) : null);\n const result = [];\n let counter = 0;\n let m;\n searcher.reset(0);\n while ((m = searcher.next(text))) {\n result[counter++] = createFindMatch(this._getMultilineMatchRange(model, deltaOffset, text, lfCounter, m.index, m[0]), m, captureMatches);\n if (counter >= limitResultCount) {\n return result;\n }\n }\n return result;\n }\n static _doFindMatchesLineByLine(model, searchRange, searchData, captureMatches, limitResultCount) {\n const result = [];\n let resultLen = 0;\n // Early case for a search range that starts & stops on the same line number\n if (searchRange.startLineNumber === searchRange.endLineNumber) {\n const text = model.getLineContent(searchRange.startLineNumber).substring(searchRange.startColumn - 1, searchRange.endColumn - 1);\n resultLen = this._findMatchesInLine(searchData, text, searchRange.startLineNumber, searchRange.startColumn - 1, resultLen, result, captureMatches, limitResultCount);\n return result;\n }\n // Collect results from first line\n const text = model.getLineContent(searchRange.startLineNumber).substring(searchRange.startColumn - 1);\n resultLen = this._findMatchesInLine(searchData, text, searchRange.startLineNumber, searchRange.startColumn - 1, resultLen, result, captureMatches, limitResultCount);\n // Collect results from middle lines\n for (let lineNumber = searchRange.startLineNumber + 1; lineNumber < searchRange.endLineNumber && resultLen < limitResultCount; lineNumber++) {\n resultLen = this._findMatchesInLine(searchData, model.getLineContent(lineNumber), lineNumber, 0, resultLen, result, captureMatches, limitResultCount);\n }\n // Collect results from last line\n if (resultLen < limitResultCount) {\n const text = model.getLineContent(searchRange.endLineNumber).substring(0, searchRange.endColumn - 1);\n resultLen = this._findMatchesInLine(searchData, text, searchRange.endLineNumber, 0, resultLen, result, captureMatches, limitResultCount);\n }\n return result;\n }\n static _findMatchesInLine(searchData, text, lineNumber, deltaOffset, resultLen, result, captureMatches, limitResultCount) {\n const wordSeparators = searchData.wordSeparators;\n if (!captureMatches && searchData.simpleSearch) {\n const searchString = searchData.simpleSearch;\n const searchStringLen = searchString.length;\n const textLength = text.length;\n let lastMatchIndex = -searchStringLen;\n while ((lastMatchIndex = text.indexOf(searchString, lastMatchIndex + searchStringLen)) !== -1) {\n if (!wordSeparators || isValidMatch(wordSeparators, text, textLength, lastMatchIndex, searchStringLen)) {\n result[resultLen++] = new FindMatch(new Range(lineNumber, lastMatchIndex + 1 + deltaOffset, lineNumber, lastMatchIndex + 1 + searchStringLen + deltaOffset), null);\n if (resultLen >= limitResultCount) {\n return resultLen;\n }\n }\n }\n return resultLen;\n }\n const searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n let m;\n // Reset regex to search from the beginning\n searcher.reset(0);\n do {\n m = searcher.next(text);\n if (m) {\n result[resultLen++] = createFindMatch(new Range(lineNumber, m.index + 1 + deltaOffset, lineNumber, m.index + 1 + m[0].length + deltaOffset), m, captureMatches);\n if (resultLen >= limitResultCount) {\n return resultLen;\n }\n }\n } while (m);\n return resultLen;\n }\n static findNextMatch(model, searchParams, searchStart, captureMatches) {\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return null;\n }\n const searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n if (searchData.regex.multiline) {\n return this._doFindNextMatchMultiline(model, searchStart, searcher, captureMatches);\n }\n return this._doFindNextMatchLineByLine(model, searchStart, searcher, captureMatches);\n }\n static _doFindNextMatchMultiline(model, searchStart, searcher, captureMatches) {\n const searchTextStart = new Position(searchStart.lineNumber, 1);\n const deltaOffset = model.getOffsetAt(searchTextStart);\n const lineCount = model.getLineCount();\n // We always execute multiline search over the lines joined with \\n\n // This makes it that \\n will match the EOL for both CRLF and LF models\n // We compensate for offset errors in `_getMultilineMatchRange`\n const text = model.getValueInRange(new Range(searchTextStart.lineNumber, searchTextStart.column, lineCount, model.getLineMaxColumn(lineCount)), 1 /* LF */);\n const lfCounter = (model.getEOL() === '\\r\\n' ? new LineFeedCounter(text) : null);\n searcher.reset(searchStart.column - 1);\n let m = searcher.next(text);\n if (m) {\n return createFindMatch(this._getMultilineMatchRange(model, deltaOffset, text, lfCounter, m.index, m[0]), m, captureMatches);\n }\n if (searchStart.lineNumber !== 1 || searchStart.column !== 1) {\n // Try again from the top\n return this._doFindNextMatchMultiline(model, new Position(1, 1), searcher, captureMatches);\n }\n return null;\n }\n static _doFindNextMatchLineByLine(model, searchStart, searcher, captureMatches) {\n const lineCount = model.getLineCount();\n const startLineNumber = searchStart.lineNumber;\n // Look in first line\n const text = model.getLineContent(startLineNumber);\n const r = this._findFirstMatchInLine(searcher, text, startLineNumber, searchStart.column, captureMatches);\n if (r) {\n return r;\n }\n for (let i = 1; i <= lineCount; i++) {\n const lineIndex = (startLineNumber + i - 1) % lineCount;\n const text = model.getLineContent(lineIndex + 1);\n const r = this._findFirstMatchInLine(searcher, text, lineIndex + 1, 1, captureMatches);\n if (r) {\n return r;\n }\n }\n return null;\n }\n static _findFirstMatchInLine(searcher, text, lineNumber, fromColumn, captureMatches) {\n // Set regex to search from column\n searcher.reset(fromColumn - 1);\n const m = searcher.next(text);\n if (m) {\n return createFindMatch(new Range(lineNumber, m.index + 1, lineNumber, m.index + 1 + m[0].length), m, captureMatches);\n }\n return null;\n }\n static findPreviousMatch(model, searchParams, searchStart, captureMatches) {\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return null;\n }\n const searcher = new Searcher(searchData.wordSeparators, searchData.regex);\n if (searchData.regex.multiline) {\n return this._doFindPreviousMatchMultiline(model, searchStart, searcher, captureMatches);\n }\n return this._doFindPreviousMatchLineByLine(model, searchStart, searcher, captureMatches);\n }\n static _doFindPreviousMatchMultiline(model, searchStart, searcher, captureMatches) {\n const matches = this._doFindMatchesMultiline(model, new Range(1, 1, searchStart.lineNumber, searchStart.column), searcher, captureMatches, 10 * LIMIT_FIND_COUNT);\n if (matches.length > 0) {\n return matches[matches.length - 1];\n }\n const lineCount = model.getLineCount();\n if (searchStart.lineNumber !== lineCount || searchStart.column !== model.getLineMaxColumn(lineCount)) {\n // Try again with all content\n return this._doFindPreviousMatchMultiline(model, new Position(lineCount, model.getLineMaxColumn(lineCount)), searcher, captureMatches);\n }\n return null;\n }\n static _doFindPreviousMatchLineByLine(model, searchStart, searcher, captureMatches) {\n const lineCount = model.getLineCount();\n const startLineNumber = searchStart.lineNumber;\n // Look in first line\n const text = model.getLineContent(startLineNumber).substring(0, searchStart.column - 1);\n const r = this._findLastMatchInLine(searcher, text, startLineNumber, captureMatches);\n if (r) {\n return r;\n }\n for (let i = 1; i <= lineCount; i++) {\n const lineIndex = (lineCount + startLineNumber - i - 1) % lineCount;\n const text = model.getLineContent(lineIndex + 1);\n const r = this._findLastMatchInLine(searcher, text, lineIndex + 1, captureMatches);\n if (r) {\n return r;\n }\n }\n return null;\n }\n static _findLastMatchInLine(searcher, text, lineNumber, captureMatches) {\n let bestResult = null;\n let m;\n searcher.reset(0);\n while ((m = searcher.next(text))) {\n bestResult = createFindMatch(new Range(lineNumber, m.index + 1, lineNumber, m.index + 1 + m[0].length), m, captureMatches);\n }\n return bestResult;\n }\n}\nfunction leftIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength) {\n if (matchStartIndex === 0) {\n // Match starts at start of string\n return true;\n }\n const charBefore = text.charCodeAt(matchStartIndex - 1);\n if (wordSeparators.get(charBefore) !== 0 /* Regular */) {\n // The character before the match is a word separator\n return true;\n }\n if (charBefore === 13 /* CarriageReturn */ || charBefore === 10 /* LineFeed */) {\n // The character before the match is line break or carriage return.\n return true;\n }\n if (matchLength > 0) {\n const firstCharInMatch = text.charCodeAt(matchStartIndex);\n if (wordSeparators.get(firstCharInMatch) !== 0 /* Regular */) {\n // The first character inside the match is a word separator\n return true;\n }\n }\n return false;\n}\nfunction rightIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength) {\n if (matchStartIndex + matchLength === textLength) {\n // Match ends at end of string\n return true;\n }\n const charAfter = text.charCodeAt(matchStartIndex + matchLength);\n if (wordSeparators.get(charAfter) !== 0 /* Regular */) {\n // The character after the match is a word separator\n return true;\n }\n if (charAfter === 13 /* CarriageReturn */ || charAfter === 10 /* LineFeed */) {\n // The character after the match is line break or carriage return.\n return true;\n }\n if (matchLength > 0) {\n const lastCharInMatch = text.charCodeAt(matchStartIndex + matchLength - 1);\n if (wordSeparators.get(lastCharInMatch) !== 0 /* Regular */) {\n // The last character in the match is a word separator\n return true;\n }\n }\n return false;\n}\nexport function isValidMatch(wordSeparators, text, textLength, matchStartIndex, matchLength) {\n return (leftIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength)\n && rightIsWordBounday(wordSeparators, text, textLength, matchStartIndex, matchLength));\n}\nexport class Searcher {\n constructor(wordSeparators, searchRegex) {\n this._wordSeparators = wordSeparators;\n this._searchRegex = searchRegex;\n this._prevMatchStartIndex = -1;\n this._prevMatchLength = 0;\n }\n reset(lastIndex) {\n this._searchRegex.lastIndex = lastIndex;\n this._prevMatchStartIndex = -1;\n this._prevMatchLength = 0;\n }\n next(text) {\n const textLength = text.length;\n let m;\n do {\n if (this._prevMatchStartIndex + this._prevMatchLength === textLength) {\n // Reached the end of the line\n return null;\n }\n m = this._searchRegex.exec(text);\n if (!m) {\n return null;\n }\n const matchStartIndex = m.index;\n const matchLength = m[0].length;\n if (matchStartIndex === this._prevMatchStartIndex && matchLength === this._prevMatchLength) {\n if (matchLength === 0) {\n // the search result is an empty string and won't advance `regex.lastIndex`, so `regex.exec` will stuck here\n // we attempt to recover from that by advancing by two if surrogate pair found and by one otherwise\n if (strings.getNextCodePoint(text, textLength, this._searchRegex.lastIndex) > 0xFFFF) {\n this._searchRegex.lastIndex += 2;\n }\n else {\n this._searchRegex.lastIndex += 1;\n }\n continue;\n }\n // Exit early if the regex matches the same range twice\n return null;\n }\n this._prevMatchStartIndex = matchStartIndex;\n this._prevMatchLength = matchLength;\n if (!this._wordSeparators || isValidMatch(this._wordSeparators, text, textLength, matchStartIndex, matchLength)) {\n return m;\n }\n } while (m);\n return null;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as arrays from '../../../base/common/arrays.js';\nimport { LineTokens } from '../core/lineTokens.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { TokenMetadata } from '../modes.js';\nexport function countEOL(text) {\n let eolCount = 0;\n let firstLineLength = 0;\n let lastLineStart = 0;\n let eol = 0 /* Unknown */;\n for (let i = 0, len = text.length; i < len; i++) {\n const chr = text.charCodeAt(i);\n if (chr === 13 /* CarriageReturn */) {\n if (eolCount === 0) {\n firstLineLength = i;\n }\n eolCount++;\n if (i + 1 < len && text.charCodeAt(i + 1) === 10 /* LineFeed */) {\n // \\r\\n... case\n eol |= 2 /* CRLF */;\n i++; // skip \\n\n }\n else {\n // \\r... case\n eol |= 3 /* Invalid */;\n }\n lastLineStart = i + 1;\n }\n else if (chr === 10 /* LineFeed */) {\n // \\n... case\n eol |= 1 /* LF */;\n if (eolCount === 0) {\n firstLineLength = i;\n }\n eolCount++;\n lastLineStart = i + 1;\n }\n }\n if (eolCount === 0) {\n firstLineLength = text.length;\n }\n return [eolCount, firstLineLength, text.length - lastLineStart, eol];\n}\nfunction getDefaultMetadata(topLevelLanguageId) {\n return ((topLevelLanguageId << 0 /* LANGUAGEID_OFFSET */)\n | (0 /* Other */ << 8 /* TOKEN_TYPE_OFFSET */)\n | (0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\n}\nconst EMPTY_LINE_TOKENS = (new Uint32Array(0)).buffer;\nexport class MultilineTokensBuilder {\n constructor() {\n this.tokens = [];\n }\n add(lineNumber, lineTokens) {\n if (this.tokens.length > 0) {\n const last = this.tokens[this.tokens.length - 1];\n const lastLineNumber = last.startLineNumber + last.tokens.length - 1;\n if (lastLineNumber + 1 === lineNumber) {\n // append\n last.tokens.push(lineTokens);\n return;\n }\n }\n this.tokens.push(new MultilineTokens(lineNumber, [lineTokens]));\n }\n}\nexport class SparseEncodedTokens {\n constructor(tokens) {\n this._tokens = tokens;\n this._tokenCount = tokens.length / 4;\n }\n toString(startLineNumber) {\n let pieces = [];\n for (let i = 0; i < this._tokenCount; i++) {\n pieces.push(`(${this._getDeltaLine(i) + startLineNumber},${this._getStartCharacter(i)}-${this._getEndCharacter(i)})`);\n }\n return `[${pieces.join(',')}]`;\n }\n getMaxDeltaLine() {\n const tokenCount = this._getTokenCount();\n if (tokenCount === 0) {\n return -1;\n }\n return this._getDeltaLine(tokenCount - 1);\n }\n getRange() {\n const tokenCount = this._getTokenCount();\n if (tokenCount === 0) {\n return null;\n }\n const startChar = this._getStartCharacter(0);\n const maxDeltaLine = this._getDeltaLine(tokenCount - 1);\n const endChar = this._getEndCharacter(tokenCount - 1);\n return new Range(0, startChar + 1, maxDeltaLine, endChar + 1);\n }\n _getTokenCount() {\n return this._tokenCount;\n }\n _getDeltaLine(tokenIndex) {\n return this._tokens[4 * tokenIndex];\n }\n _getStartCharacter(tokenIndex) {\n return this._tokens[4 * tokenIndex + 1];\n }\n _getEndCharacter(tokenIndex) {\n return this._tokens[4 * tokenIndex + 2];\n }\n isEmpty() {\n return (this._getTokenCount() === 0);\n }\n getLineTokens(deltaLine) {\n let low = 0;\n let high = this._getTokenCount() - 1;\n while (low < high) {\n const mid = low + Math.floor((high - low) / 2);\n const midDeltaLine = this._getDeltaLine(mid);\n if (midDeltaLine < deltaLine) {\n low = mid + 1;\n }\n else if (midDeltaLine > deltaLine) {\n high = mid - 1;\n }\n else {\n let min = mid;\n while (min > low && this._getDeltaLine(min - 1) === deltaLine) {\n min--;\n }\n let max = mid;\n while (max < high && this._getDeltaLine(max + 1) === deltaLine) {\n max++;\n }\n return new LineTokens2(this._tokens.subarray(4 * min, 4 * max + 4));\n }\n }\n if (this._getDeltaLine(low) === deltaLine) {\n return new LineTokens2(this._tokens.subarray(4 * low, 4 * low + 4));\n }\n return null;\n }\n clear() {\n this._tokenCount = 0;\n }\n removeTokens(startDeltaLine, startChar, endDeltaLine, endChar) {\n const tokens = this._tokens;\n const tokenCount = this._tokenCount;\n let newTokenCount = 0;\n let hasDeletedTokens = false;\n let firstDeltaLine = 0;\n for (let i = 0; i < tokenCount; i++) {\n const srcOffset = 4 * i;\n const tokenDeltaLine = tokens[srcOffset];\n const tokenStartCharacter = tokens[srcOffset + 1];\n const tokenEndCharacter = tokens[srcOffset + 2];\n const tokenMetadata = tokens[srcOffset + 3];\n if ((tokenDeltaLine > startDeltaLine || (tokenDeltaLine === startDeltaLine && tokenEndCharacter >= startChar))\n && (tokenDeltaLine < endDeltaLine || (tokenDeltaLine === endDeltaLine && tokenStartCharacter <= endChar))) {\n hasDeletedTokens = true;\n }\n else {\n if (newTokenCount === 0) {\n firstDeltaLine = tokenDeltaLine;\n }\n if (hasDeletedTokens) {\n // must move the token to the left\n const destOffset = 4 * newTokenCount;\n tokens[destOffset] = tokenDeltaLine - firstDeltaLine;\n tokens[destOffset + 1] = tokenStartCharacter;\n tokens[destOffset + 2] = tokenEndCharacter;\n tokens[destOffset + 3] = tokenMetadata;\n }\n newTokenCount++;\n }\n }\n this._tokenCount = newTokenCount;\n return firstDeltaLine;\n }\n split(startDeltaLine, startChar, endDeltaLine, endChar) {\n const tokens = this._tokens;\n const tokenCount = this._tokenCount;\n let aTokens = [];\n let bTokens = [];\n let destTokens = aTokens;\n let destOffset = 0;\n let destFirstDeltaLine = 0;\n for (let i = 0; i < tokenCount; i++) {\n const srcOffset = 4 * i;\n const tokenDeltaLine = tokens[srcOffset];\n const tokenStartCharacter = tokens[srcOffset + 1];\n const tokenEndCharacter = tokens[srcOffset + 2];\n const tokenMetadata = tokens[srcOffset + 3];\n if ((tokenDeltaLine > startDeltaLine || (tokenDeltaLine === startDeltaLine && tokenEndCharacter >= startChar))) {\n if ((tokenDeltaLine < endDeltaLine || (tokenDeltaLine === endDeltaLine && tokenStartCharacter <= endChar))) {\n // this token is touching the range\n continue;\n }\n else {\n // this token is after the range\n if (destTokens !== bTokens) {\n // this token is the first token after the range\n destTokens = bTokens;\n destOffset = 0;\n destFirstDeltaLine = tokenDeltaLine;\n }\n }\n }\n destTokens[destOffset++] = tokenDeltaLine - destFirstDeltaLine;\n destTokens[destOffset++] = tokenStartCharacter;\n destTokens[destOffset++] = tokenEndCharacter;\n destTokens[destOffset++] = tokenMetadata;\n }\n return [new SparseEncodedTokens(new Uint32Array(aTokens)), new SparseEncodedTokens(new Uint32Array(bTokens)), destFirstDeltaLine];\n }\n acceptDeleteRange(horizontalShiftForFirstLineTokens, startDeltaLine, startCharacter, endDeltaLine, endCharacter) {\n // This is a bit complex, here are the cases I used to think about this:\n //\n // 1. The token starts before the deletion range\n // 1a. The token is completely before the deletion range\n // -----------\n // xxxxxxxxxxx\n // 1b. The token starts before, the deletion range ends after the token\n // -----------\n // xxxxxxxxxxx\n // 1c. The token starts before, the deletion range ends precisely with the token\n // ---------------\n // xxxxxxxx\n // 1d. The token starts before, the deletion range is inside the token\n // ---------------\n // xxxxx\n //\n // 2. The token starts at the same position with the deletion range\n // 2a. The token starts at the same position, and ends inside the deletion range\n // -------\n // xxxxxxxxxxx\n // 2b. The token starts at the same position, and ends at the same position as the deletion range\n // ----------\n // xxxxxxxxxx\n // 2c. The token starts at the same position, and ends after the deletion range\n // -------------\n // xxxxxxx\n //\n // 3. The token starts inside the deletion range\n // 3a. The token is inside the deletion range\n // -------\n // xxxxxxxxxxxxx\n // 3b. The token starts inside the deletion range, and ends at the same position as the deletion range\n // ----------\n // xxxxxxxxxxxxx\n // 3c. The token starts inside the deletion range, and ends after the deletion range\n // ------------\n // xxxxxxxxxxx\n //\n // 4. The token starts after the deletion range\n // -----------\n // xxxxxxxx\n //\n const tokens = this._tokens;\n const tokenCount = this._tokenCount;\n const deletedLineCount = (endDeltaLine - startDeltaLine);\n let newTokenCount = 0;\n let hasDeletedTokens = false;\n for (let i = 0; i < tokenCount; i++) {\n const srcOffset = 4 * i;\n let tokenDeltaLine = tokens[srcOffset];\n let tokenStartCharacter = tokens[srcOffset + 1];\n let tokenEndCharacter = tokens[srcOffset + 2];\n const tokenMetadata = tokens[srcOffset + 3];\n if (tokenDeltaLine < startDeltaLine || (tokenDeltaLine === startDeltaLine && tokenEndCharacter <= startCharacter)) {\n // 1a. The token is completely before the deletion range\n // => nothing to do\n newTokenCount++;\n continue;\n }\n else if (tokenDeltaLine === startDeltaLine && tokenStartCharacter < startCharacter) {\n // 1b, 1c, 1d\n // => the token survives, but it needs to shrink\n if (tokenDeltaLine === endDeltaLine && tokenEndCharacter > endCharacter) {\n // 1d. The token starts before, the deletion range is inside the token\n // => the token shrinks by the deletion character count\n tokenEndCharacter -= (endCharacter - startCharacter);\n }\n else {\n // 1b. The token starts before, the deletion range ends after the token\n // 1c. The token starts before, the deletion range ends precisely with the token\n // => the token shrinks its ending to the deletion start\n tokenEndCharacter = startCharacter;\n }\n }\n else if (tokenDeltaLine === startDeltaLine && tokenStartCharacter === startCharacter) {\n // 2a, 2b, 2c\n if (tokenDeltaLine === endDeltaLine && tokenEndCharacter > endCharacter) {\n // 2c. The token starts at the same position, and ends after the deletion range\n // => the token shrinks by the deletion character count\n tokenEndCharacter -= (endCharacter - startCharacter);\n }\n else {\n // 2a. The token starts at the same position, and ends inside the deletion range\n // 2b. The token starts at the same position, and ends at the same position as the deletion range\n // => the token is deleted\n hasDeletedTokens = true;\n continue;\n }\n }\n else if (tokenDeltaLine < endDeltaLine || (tokenDeltaLine === endDeltaLine && tokenStartCharacter < endCharacter)) {\n // 3a, 3b, 3c\n if (tokenDeltaLine === endDeltaLine && tokenEndCharacter > endCharacter) {\n // 3c. The token starts inside the deletion range, and ends after the deletion range\n // => the token moves left and shrinks\n if (tokenDeltaLine === startDeltaLine) {\n // the deletion started on the same line as the token\n // => the token moves left and shrinks\n tokenStartCharacter = startCharacter;\n tokenEndCharacter = tokenStartCharacter + (tokenEndCharacter - endCharacter);\n }\n else {\n // the deletion started on a line above the token\n // => the token moves to the beginning of the line\n tokenStartCharacter = 0;\n tokenEndCharacter = tokenStartCharacter + (tokenEndCharacter - endCharacter);\n }\n }\n else {\n // 3a. The token is inside the deletion range\n // 3b. The token starts inside the deletion range, and ends at the same position as the deletion range\n // => the token is deleted\n hasDeletedTokens = true;\n continue;\n }\n }\n else if (tokenDeltaLine > endDeltaLine) {\n // 4. (partial) The token starts after the deletion range, on a line below...\n if (deletedLineCount === 0 && !hasDeletedTokens) {\n // early stop, there is no need to walk all the tokens and do nothing...\n newTokenCount = tokenCount;\n break;\n }\n tokenDeltaLine -= deletedLineCount;\n }\n else if (tokenDeltaLine === endDeltaLine && tokenStartCharacter >= endCharacter) {\n // 4. (continued) The token starts after the deletion range, on the last line where a deletion occurs\n if (horizontalShiftForFirstLineTokens && tokenDeltaLine === 0) {\n tokenStartCharacter += horizontalShiftForFirstLineTokens;\n tokenEndCharacter += horizontalShiftForFirstLineTokens;\n }\n tokenDeltaLine -= deletedLineCount;\n tokenStartCharacter -= (endCharacter - startCharacter);\n tokenEndCharacter -= (endCharacter - startCharacter);\n }\n else {\n throw new Error(`Not possible!`);\n }\n const destOffset = 4 * newTokenCount;\n tokens[destOffset] = tokenDeltaLine;\n tokens[destOffset + 1] = tokenStartCharacter;\n tokens[destOffset + 2] = tokenEndCharacter;\n tokens[destOffset + 3] = tokenMetadata;\n newTokenCount++;\n }\n this._tokenCount = newTokenCount;\n }\n acceptInsertText(deltaLine, character, eolCount, firstLineLength, lastLineLength, firstCharCode) {\n // Here are the cases I used to think about this:\n //\n // 1. The token is completely before the insertion point\n // ----------- |\n // 2. The token ends precisely at the insertion point\n // -----------|\n // 3. The token contains the insertion point\n // -----|------\n // 4. The token starts precisely at the insertion point\n // |-----------\n // 5. The token is completely after the insertion point\n // | -----------\n //\n const isInsertingPreciselyOneWordCharacter = (eolCount === 0\n && firstLineLength === 1\n && ((firstCharCode >= 48 /* Digit0 */ && firstCharCode <= 57 /* Digit9 */)\n || (firstCharCode >= 65 /* A */ && firstCharCode <= 90 /* Z */)\n || (firstCharCode >= 97 /* a */ && firstCharCode <= 122 /* z */)));\n const tokens = this._tokens;\n const tokenCount = this._tokenCount;\n for (let i = 0; i < tokenCount; i++) {\n const offset = 4 * i;\n let tokenDeltaLine = tokens[offset];\n let tokenStartCharacter = tokens[offset + 1];\n let tokenEndCharacter = tokens[offset + 2];\n if (tokenDeltaLine < deltaLine || (tokenDeltaLine === deltaLine && tokenEndCharacter < character)) {\n // 1. The token is completely before the insertion point\n // => nothing to do\n continue;\n }\n else if (tokenDeltaLine === deltaLine && tokenEndCharacter === character) {\n // 2. The token ends precisely at the insertion point\n // => expand the end character only if inserting precisely one character that is a word character\n if (isInsertingPreciselyOneWordCharacter) {\n tokenEndCharacter += 1;\n }\n else {\n continue;\n }\n }\n else if (tokenDeltaLine === deltaLine && tokenStartCharacter < character && character < tokenEndCharacter) {\n // 3. The token contains the insertion point\n if (eolCount === 0) {\n // => just expand the end character\n tokenEndCharacter += firstLineLength;\n }\n else {\n // => cut off the token\n tokenEndCharacter = character;\n }\n }\n else {\n // 4. or 5.\n if (tokenDeltaLine === deltaLine && tokenStartCharacter === character) {\n // 4. The token starts precisely at the insertion point\n // => grow the token (by keeping its start constant) only if inserting precisely one character that is a word character\n // => otherwise behave as in case 5.\n if (isInsertingPreciselyOneWordCharacter) {\n continue;\n }\n }\n // => the token must move and keep its size constant\n if (tokenDeltaLine === deltaLine) {\n tokenDeltaLine += eolCount;\n // this token is on the line where the insertion is taking place\n if (eolCount === 0) {\n tokenStartCharacter += firstLineLength;\n tokenEndCharacter += firstLineLength;\n }\n else {\n const tokenLength = tokenEndCharacter - tokenStartCharacter;\n tokenStartCharacter = lastLineLength + (tokenStartCharacter - character);\n tokenEndCharacter = tokenStartCharacter + tokenLength;\n }\n }\n else {\n tokenDeltaLine += eolCount;\n }\n }\n tokens[offset] = tokenDeltaLine;\n tokens[offset + 1] = tokenStartCharacter;\n tokens[offset + 2] = tokenEndCharacter;\n }\n }\n}\nexport class LineTokens2 {\n constructor(tokens) {\n this._tokens = tokens;\n }\n getCount() {\n return this._tokens.length / 4;\n }\n getStartCharacter(tokenIndex) {\n return this._tokens[4 * tokenIndex + 1];\n }\n getEndCharacter(tokenIndex) {\n return this._tokens[4 * tokenIndex + 2];\n }\n getMetadata(tokenIndex) {\n return this._tokens[4 * tokenIndex + 3];\n }\n}\nexport class MultilineTokens2 {\n constructor(startLineNumber, tokens) {\n this.startLineNumber = startLineNumber;\n this.tokens = tokens;\n this.endLineNumber = this.startLineNumber + this.tokens.getMaxDeltaLine();\n }\n toString() {\n return this.tokens.toString(this.startLineNumber);\n }\n _updateEndLineNumber() {\n this.endLineNumber = this.startLineNumber + this.tokens.getMaxDeltaLine();\n }\n isEmpty() {\n return this.tokens.isEmpty();\n }\n getLineTokens(lineNumber) {\n if (this.startLineNumber <= lineNumber && lineNumber <= this.endLineNumber) {\n return this.tokens.getLineTokens(lineNumber - this.startLineNumber);\n }\n return null;\n }\n getRange() {\n const deltaRange = this.tokens.getRange();\n if (!deltaRange) {\n return deltaRange;\n }\n return new Range(this.startLineNumber + deltaRange.startLineNumber, deltaRange.startColumn, this.startLineNumber + deltaRange.endLineNumber, deltaRange.endColumn);\n }\n removeTokens(range) {\n const startLineIndex = range.startLineNumber - this.startLineNumber;\n const endLineIndex = range.endLineNumber - this.startLineNumber;\n this.startLineNumber += this.tokens.removeTokens(startLineIndex, range.startColumn - 1, endLineIndex, range.endColumn - 1);\n this._updateEndLineNumber();\n }\n split(range) {\n // split tokens to two:\n // a) all the tokens before `range`\n // b) all the tokens after `range`\n const startLineIndex = range.startLineNumber - this.startLineNumber;\n const endLineIndex = range.endLineNumber - this.startLineNumber;\n const [a, b, bDeltaLine] = this.tokens.split(startLineIndex, range.startColumn - 1, endLineIndex, range.endColumn - 1);\n return [new MultilineTokens2(this.startLineNumber, a), new MultilineTokens2(this.startLineNumber + bDeltaLine, b)];\n }\n applyEdit(range, text) {\n const [eolCount, firstLineLength, lastLineLength] = countEOL(text);\n this.acceptEdit(range, eolCount, firstLineLength, lastLineLength, text.length > 0 ? text.charCodeAt(0) : 0 /* Null */);\n }\n acceptEdit(range, eolCount, firstLineLength, lastLineLength, firstCharCode) {\n this._acceptDeleteRange(range);\n this._acceptInsertText(new Position(range.startLineNumber, range.startColumn), eolCount, firstLineLength, lastLineLength, firstCharCode);\n this._updateEndLineNumber();\n }\n _acceptDeleteRange(range) {\n if (range.startLineNumber === range.endLineNumber && range.startColumn === range.endColumn) {\n // Nothing to delete\n return;\n }\n const firstLineIndex = range.startLineNumber - this.startLineNumber;\n const lastLineIndex = range.endLineNumber - this.startLineNumber;\n if (lastLineIndex < 0) {\n // this deletion occurs entirely before this block, so we only need to adjust line numbers\n const deletedLinesCount = lastLineIndex - firstLineIndex;\n this.startLineNumber -= deletedLinesCount;\n return;\n }\n const tokenMaxDeltaLine = this.tokens.getMaxDeltaLine();\n if (firstLineIndex >= tokenMaxDeltaLine + 1) {\n // this deletion occurs entirely after this block, so there is nothing to do\n return;\n }\n if (firstLineIndex < 0 && lastLineIndex >= tokenMaxDeltaLine + 1) {\n // this deletion completely encompasses this block\n this.startLineNumber = 0;\n this.tokens.clear();\n return;\n }\n if (firstLineIndex < 0) {\n const deletedBefore = -firstLineIndex;\n this.startLineNumber -= deletedBefore;\n this.tokens.acceptDeleteRange(range.startColumn - 1, 0, 0, lastLineIndex, range.endColumn - 1);\n }\n else {\n this.tokens.acceptDeleteRange(0, firstLineIndex, range.startColumn - 1, lastLineIndex, range.endColumn - 1);\n }\n }\n _acceptInsertText(position, eolCount, firstLineLength, lastLineLength, firstCharCode) {\n if (eolCount === 0 && firstLineLength === 0) {\n // Nothing to insert\n return;\n }\n const lineIndex = position.lineNumber - this.startLineNumber;\n if (lineIndex < 0) {\n // this insertion occurs before this block, so we only need to adjust line numbers\n this.startLineNumber += eolCount;\n return;\n }\n const tokenMaxDeltaLine = this.tokens.getMaxDeltaLine();\n if (lineIndex >= tokenMaxDeltaLine + 1) {\n // this insertion occurs after this block, so there is nothing to do\n return;\n }\n this.tokens.acceptInsertText(lineIndex, position.column - 1, eolCount, firstLineLength, lastLineLength, firstCharCode);\n }\n}\nexport class MultilineTokens {\n constructor(startLineNumber, tokens) {\n this.startLineNumber = startLineNumber;\n this.tokens = tokens;\n }\n}\nfunction toUint32Array(arr) {\n if (arr instanceof Uint32Array) {\n return arr;\n }\n else {\n return new Uint32Array(arr);\n }\n}\nexport class TokensStore2 {\n constructor() {\n this._pieces = [];\n this._isComplete = false;\n }\n flush() {\n this._pieces = [];\n this._isComplete = false;\n }\n isEmpty() {\n return (this._pieces.length === 0);\n }\n set(pieces, isComplete) {\n this._pieces = pieces || [];\n this._isComplete = isComplete;\n }\n setPartial(_range, pieces) {\n // console.log(`setPartial ${_range} ${pieces.map(p => p.toString()).join(', ')}`);\n let range = _range;\n if (pieces.length > 0) {\n const _firstRange = pieces[0].getRange();\n const _lastRange = pieces[pieces.length - 1].getRange();\n if (!_firstRange || !_lastRange) {\n return _range;\n }\n range = _range.plusRange(_firstRange).plusRange(_lastRange);\n }\n let insertPosition = null;\n for (let i = 0, len = this._pieces.length; i < len; i++) {\n const piece = this._pieces[i];\n if (piece.endLineNumber < range.startLineNumber) {\n // this piece is before the range\n continue;\n }\n if (piece.startLineNumber > range.endLineNumber) {\n // this piece is after the range, so mark the spot before this piece\n // as a good insertion position and stop looping\n insertPosition = insertPosition || { index: i };\n break;\n }\n // this piece might intersect with the range\n piece.removeTokens(range);\n if (piece.isEmpty()) {\n // remove the piece if it became empty\n this._pieces.splice(i, 1);\n i--;\n len--;\n continue;\n }\n if (piece.endLineNumber < range.startLineNumber) {\n // after removal, this piece is before the range\n continue;\n }\n if (piece.startLineNumber > range.endLineNumber) {\n // after removal, this piece is after the range\n insertPosition = insertPosition || { index: i };\n continue;\n }\n // after removal, this piece contains the range\n const [a, b] = piece.split(range);\n if (a.isEmpty()) {\n // this piece is actually after the range\n insertPosition = insertPosition || { index: i };\n continue;\n }\n if (b.isEmpty()) {\n // this piece is actually before the range\n continue;\n }\n this._pieces.splice(i, 1, a, b);\n i++;\n len++;\n insertPosition = insertPosition || { index: i };\n }\n insertPosition = insertPosition || { index: this._pieces.length };\n if (pieces.length > 0) {\n this._pieces = arrays.arrayInsert(this._pieces, insertPosition.index, pieces);\n }\n // console.log(`I HAVE ${this._pieces.length} pieces`);\n // console.log(`${this._pieces.map(p => p.toString()).join('\\n')}`);\n return range;\n }\n isComplete() {\n return this._isComplete;\n }\n addSemanticTokens(lineNumber, aTokens) {\n const pieces = this._pieces;\n if (pieces.length === 0) {\n return aTokens;\n }\n const pieceIndex = TokensStore2._findFirstPieceWithLine(pieces, lineNumber);\n const bTokens = pieces[pieceIndex].getLineTokens(lineNumber);\n if (!bTokens) {\n return aTokens;\n }\n const aLen = aTokens.getCount();\n const bLen = bTokens.getCount();\n let aIndex = 0;\n let result = [], resultLen = 0;\n let lastEndOffset = 0;\n const emitToken = (endOffset, metadata) => {\n if (endOffset === lastEndOffset) {\n return;\n }\n lastEndOffset = endOffset;\n result[resultLen++] = endOffset;\n result[resultLen++] = metadata;\n };\n for (let bIndex = 0; bIndex < bLen; bIndex++) {\n const bStartCharacter = bTokens.getStartCharacter(bIndex);\n const bEndCharacter = bTokens.getEndCharacter(bIndex);\n const bMetadata = bTokens.getMetadata(bIndex);\n const bMask = (((bMetadata & 1 /* SEMANTIC_USE_ITALIC */) ? 2048 /* ITALIC_MASK */ : 0)\n | ((bMetadata & 2 /* SEMANTIC_USE_BOLD */) ? 4096 /* BOLD_MASK */ : 0)\n | ((bMetadata & 4 /* SEMANTIC_USE_UNDERLINE */) ? 8192 /* UNDERLINE_MASK */ : 0)\n | ((bMetadata & 8 /* SEMANTIC_USE_FOREGROUND */) ? 8372224 /* FOREGROUND_MASK */ : 0)\n | ((bMetadata & 16 /* SEMANTIC_USE_BACKGROUND */) ? 4286578688 /* BACKGROUND_MASK */ : 0)) >>> 0;\n const aMask = (~bMask) >>> 0;\n // push any token from `a` that is before `b`\n while (aIndex < aLen && aTokens.getEndOffset(aIndex) <= bStartCharacter) {\n emitToken(aTokens.getEndOffset(aIndex), aTokens.getMetadata(aIndex));\n aIndex++;\n }\n // push the token from `a` if it intersects the token from `b`\n if (aIndex < aLen && aTokens.getStartOffset(aIndex) < bStartCharacter) {\n emitToken(bStartCharacter, aTokens.getMetadata(aIndex));\n }\n // skip any tokens from `a` that are contained inside `b`\n while (aIndex < aLen && aTokens.getEndOffset(aIndex) < bEndCharacter) {\n emitToken(aTokens.getEndOffset(aIndex), (aTokens.getMetadata(aIndex) & aMask) | (bMetadata & bMask));\n aIndex++;\n }\n if (aIndex < aLen) {\n emitToken(bEndCharacter, (aTokens.getMetadata(aIndex) & aMask) | (bMetadata & bMask));\n if (aTokens.getEndOffset(aIndex) === bEndCharacter) {\n // `a` ends exactly at the same spot as `b`!\n aIndex++;\n }\n }\n else {\n const aMergeIndex = Math.min(Math.max(0, aIndex - 1), aLen - 1);\n // push the token from `b`\n emitToken(bEndCharacter, (aTokens.getMetadata(aMergeIndex) & aMask) | (bMetadata & bMask));\n }\n }\n // push the remaining tokens from `a`\n while (aIndex < aLen) {\n emitToken(aTokens.getEndOffset(aIndex), aTokens.getMetadata(aIndex));\n aIndex++;\n }\n return new LineTokens(new Uint32Array(result), aTokens.getLineContent());\n }\n static _findFirstPieceWithLine(pieces, lineNumber) {\n let low = 0;\n let high = pieces.length - 1;\n while (low < high) {\n let mid = low + Math.floor((high - low) / 2);\n if (pieces[mid].endLineNumber < lineNumber) {\n low = mid + 1;\n }\n else if (pieces[mid].startLineNumber > lineNumber) {\n high = mid - 1;\n }\n else {\n while (mid > low && pieces[mid - 1].startLineNumber <= lineNumber && lineNumber <= pieces[mid - 1].endLineNumber) {\n mid--;\n }\n return mid;\n }\n }\n return low;\n }\n //#region Editing\n acceptEdit(range, eolCount, firstLineLength, lastLineLength, firstCharCode) {\n for (const piece of this._pieces) {\n piece.acceptEdit(range, eolCount, firstLineLength, lastLineLength, firstCharCode);\n }\n }\n}\nexport class TokensStore {\n constructor() {\n this._lineTokens = [];\n this._len = 0;\n }\n flush() {\n this._lineTokens = [];\n this._len = 0;\n }\n getTokens(topLevelLanguageId, lineIndex, lineText) {\n let rawLineTokens = null;\n if (lineIndex < this._len) {\n rawLineTokens = this._lineTokens[lineIndex];\n }\n if (rawLineTokens !== null && rawLineTokens !== EMPTY_LINE_TOKENS) {\n return new LineTokens(toUint32Array(rawLineTokens), lineText);\n }\n let lineTokens = new Uint32Array(2);\n lineTokens[0] = lineText.length;\n lineTokens[1] = getDefaultMetadata(topLevelLanguageId);\n return new LineTokens(lineTokens, lineText);\n }\n static _massageTokens(topLevelLanguageId, lineTextLength, _tokens) {\n const tokens = _tokens ? toUint32Array(_tokens) : null;\n if (lineTextLength === 0) {\n let hasDifferentLanguageId = false;\n if (tokens && tokens.length > 1) {\n hasDifferentLanguageId = (TokenMetadata.getLanguageId(tokens[1]) !== topLevelLanguageId);\n }\n if (!hasDifferentLanguageId) {\n return EMPTY_LINE_TOKENS;\n }\n }\n if (!tokens || tokens.length === 0) {\n const tokens = new Uint32Array(2);\n tokens[0] = lineTextLength;\n tokens[1] = getDefaultMetadata(topLevelLanguageId);\n return tokens.buffer;\n }\n // Ensure the last token covers the end of the text\n tokens[tokens.length - 2] = lineTextLength;\n if (tokens.byteOffset === 0 && tokens.byteLength === tokens.buffer.byteLength) {\n // Store directly the ArrayBuffer pointer to save an object\n return tokens.buffer;\n }\n return tokens;\n }\n _ensureLine(lineIndex) {\n while (lineIndex >= this._len) {\n this._lineTokens[this._len] = null;\n this._len++;\n }\n }\n _deleteLines(start, deleteCount) {\n if (deleteCount === 0) {\n return;\n }\n if (start + deleteCount > this._len) {\n deleteCount = this._len - start;\n }\n this._lineTokens.splice(start, deleteCount);\n this._len -= deleteCount;\n }\n _insertLines(insertIndex, insertCount) {\n if (insertCount === 0) {\n return;\n }\n let lineTokens = [];\n for (let i = 0; i < insertCount; i++) {\n lineTokens[i] = null;\n }\n this._lineTokens = arrays.arrayInsert(this._lineTokens, insertIndex, lineTokens);\n this._len += insertCount;\n }\n setTokens(topLevelLanguageId, lineIndex, lineTextLength, _tokens, checkEquality) {\n const tokens = TokensStore._massageTokens(topLevelLanguageId, lineTextLength, _tokens);\n this._ensureLine(lineIndex);\n const oldTokens = this._lineTokens[lineIndex];\n this._lineTokens[lineIndex] = tokens;\n if (checkEquality) {\n return !TokensStore._equals(oldTokens, tokens);\n }\n return false;\n }\n static _equals(_a, _b) {\n if (!_a || !_b) {\n return !_a && !_b;\n }\n const a = toUint32Array(_a);\n const b = toUint32Array(_b);\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0, len = a.length; i < len; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n //#region Editing\n acceptEdit(range, eolCount, firstLineLength) {\n this._acceptDeleteRange(range);\n this._acceptInsertText(new Position(range.startLineNumber, range.startColumn), eolCount, firstLineLength);\n }\n _acceptDeleteRange(range) {\n const firstLineIndex = range.startLineNumber - 1;\n if (firstLineIndex >= this._len) {\n return;\n }\n if (range.startLineNumber === range.endLineNumber) {\n if (range.startColumn === range.endColumn) {\n // Nothing to delete\n return;\n }\n this._lineTokens[firstLineIndex] = TokensStore._delete(this._lineTokens[firstLineIndex], range.startColumn - 1, range.endColumn - 1);\n return;\n }\n this._lineTokens[firstLineIndex] = TokensStore._deleteEnding(this._lineTokens[firstLineIndex], range.startColumn - 1);\n const lastLineIndex = range.endLineNumber - 1;\n let lastLineTokens = null;\n if (lastLineIndex < this._len) {\n lastLineTokens = TokensStore._deleteBeginning(this._lineTokens[lastLineIndex], range.endColumn - 1);\n }\n // Take remaining text on last line and append it to remaining text on first line\n this._lineTokens[firstLineIndex] = TokensStore._append(this._lineTokens[firstLineIndex], lastLineTokens);\n // Delete middle lines\n this._deleteLines(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n }\n _acceptInsertText(position, eolCount, firstLineLength) {\n if (eolCount === 0 && firstLineLength === 0) {\n // Nothing to insert\n return;\n }\n const lineIndex = position.lineNumber - 1;\n if (lineIndex >= this._len) {\n return;\n }\n if (eolCount === 0) {\n // Inserting text on one line\n this._lineTokens[lineIndex] = TokensStore._insert(this._lineTokens[lineIndex], position.column - 1, firstLineLength);\n return;\n }\n this._lineTokens[lineIndex] = TokensStore._deleteEnding(this._lineTokens[lineIndex], position.column - 1);\n this._lineTokens[lineIndex] = TokensStore._insert(this._lineTokens[lineIndex], position.column - 1, firstLineLength);\n this._insertLines(position.lineNumber, eolCount);\n }\n static _deleteBeginning(lineTokens, toChIndex) {\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS) {\n return lineTokens;\n }\n return TokensStore._delete(lineTokens, 0, toChIndex);\n }\n static _deleteEnding(lineTokens, fromChIndex) {\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS) {\n return lineTokens;\n }\n const tokens = toUint32Array(lineTokens);\n const lineTextLength = tokens[tokens.length - 2];\n return TokensStore._delete(lineTokens, fromChIndex, lineTextLength);\n }\n static _delete(lineTokens, fromChIndex, toChIndex) {\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS || fromChIndex === toChIndex) {\n return lineTokens;\n }\n const tokens = toUint32Array(lineTokens);\n const tokensCount = (tokens.length >>> 1);\n // special case: deleting everything\n if (fromChIndex === 0 && tokens[tokens.length - 2] === toChIndex) {\n return EMPTY_LINE_TOKENS;\n }\n const fromTokenIndex = LineTokens.findIndexInTokensArray(tokens, fromChIndex);\n const fromTokenStartOffset = (fromTokenIndex > 0 ? tokens[(fromTokenIndex - 1) << 1] : 0);\n const fromTokenEndOffset = tokens[fromTokenIndex << 1];\n if (toChIndex < fromTokenEndOffset) {\n // the delete range is inside a single token\n const delta = (toChIndex - fromChIndex);\n for (let i = fromTokenIndex; i < tokensCount; i++) {\n tokens[i << 1] -= delta;\n }\n return lineTokens;\n }\n let dest;\n let lastEnd;\n if (fromTokenStartOffset !== fromChIndex) {\n tokens[fromTokenIndex << 1] = fromChIndex;\n dest = ((fromTokenIndex + 1) << 1);\n lastEnd = fromChIndex;\n }\n else {\n dest = (fromTokenIndex << 1);\n lastEnd = fromTokenStartOffset;\n }\n const delta = (toChIndex - fromChIndex);\n for (let tokenIndex = fromTokenIndex + 1; tokenIndex < tokensCount; tokenIndex++) {\n const tokenEndOffset = tokens[tokenIndex << 1] - delta;\n if (tokenEndOffset > lastEnd) {\n tokens[dest++] = tokenEndOffset;\n tokens[dest++] = tokens[(tokenIndex << 1) + 1];\n lastEnd = tokenEndOffset;\n }\n }\n if (dest === tokens.length) {\n // nothing to trim\n return lineTokens;\n }\n let tmp = new Uint32Array(dest);\n tmp.set(tokens.subarray(0, dest), 0);\n return tmp.buffer;\n }\n static _append(lineTokens, _otherTokens) {\n if (_otherTokens === EMPTY_LINE_TOKENS) {\n return lineTokens;\n }\n if (lineTokens === EMPTY_LINE_TOKENS) {\n return _otherTokens;\n }\n if (lineTokens === null) {\n return lineTokens;\n }\n if (_otherTokens === null) {\n // cannot determine combined line length...\n return null;\n }\n const myTokens = toUint32Array(lineTokens);\n const otherTokens = toUint32Array(_otherTokens);\n const otherTokensCount = (otherTokens.length >>> 1);\n let result = new Uint32Array(myTokens.length + otherTokens.length);\n result.set(myTokens, 0);\n let dest = myTokens.length;\n const delta = myTokens[myTokens.length - 2];\n for (let i = 0; i < otherTokensCount; i++) {\n result[dest++] = otherTokens[(i << 1)] + delta;\n result[dest++] = otherTokens[(i << 1) + 1];\n }\n return result.buffer;\n }\n static _insert(lineTokens, chIndex, textLength) {\n if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS) {\n // nothing to do\n return lineTokens;\n }\n const tokens = toUint32Array(lineTokens);\n const tokensCount = (tokens.length >>> 1);\n let fromTokenIndex = LineTokens.findIndexInTokensArray(tokens, chIndex);\n if (fromTokenIndex > 0) {\n const fromTokenStartOffset = tokens[(fromTokenIndex - 1) << 1];\n if (fromTokenStartOffset === chIndex) {\n fromTokenIndex--;\n }\n }\n for (let tokenIndex = fromTokenIndex; tokenIndex < tokensCount; tokenIndex++) {\n tokens[tokenIndex << 1] += textLength;\n }\n return lineTokens;\n }\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 *--------------------------------------------------------------------------------------------*/\nexport const USUAL_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\\\|;:\\'\",.<>/?';\n/**\n * Create a word definition regular expression based on default word separators.\n * Optionally provide allowed separators that should be included in words.\n *\n * The default would look like this:\n * /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g\n */\nfunction createWordRegExp(allowInWords = '') {\n let source = '(-?\\\\d*\\\\.\\\\d\\\\w*)|([^';\n for (const sep of USUAL_WORD_SEPARATORS) {\n if (allowInWords.indexOf(sep) >= 0) {\n continue;\n }\n source += '\\\\' + sep;\n }\n source += '\\\\s]+)';\n return new RegExp(source, 'g');\n}\n// catches numbers (including floating numbers) in the first group, and alphanum in the second\nexport const DEFAULT_WORD_REGEXP = createWordRegExp();\nexport function ensureValidWordDefinition(wordDefinition) {\n let result = DEFAULT_WORD_REGEXP;\n if (wordDefinition && (wordDefinition instanceof RegExp)) {\n if (!wordDefinition.global) {\n let flags = 'g';\n if (wordDefinition.ignoreCase) {\n flags += 'i';\n }\n if (wordDefinition.multiline) {\n flags += 'm';\n }\n if (wordDefinition.unicode) {\n flags += 'u';\n }\n result = new RegExp(wordDefinition.source, flags);\n }\n else {\n result = wordDefinition;\n }\n }\n result.lastIndex = 0;\n return result;\n}\nconst _defaultConfig = {\n maxLen: 1000,\n windowSize: 15,\n timeBudget: 150\n};\nexport function getWordAtText(column, wordDefinition, text, textOffset, config = _defaultConfig) {\n if (text.length > config.maxLen) {\n // don't throw strings that long at the regexp\n // but use a sub-string in which a word must occur\n let start = column - config.maxLen / 2;\n if (start < 0) {\n start = 0;\n }\n else {\n textOffset += start;\n }\n text = text.substring(start, column + config.maxLen / 2);\n return getWordAtText(column, wordDefinition, text, textOffset, config);\n }\n const t1 = Date.now();\n const pos = column - 1 - textOffset;\n let prevRegexIndex = -1;\n let match = null;\n for (let i = 1;; i++) {\n // check time budget\n if (Date.now() - t1 >= config.timeBudget) {\n break;\n }\n // reset the index at which the regexp should start matching, also know where it\n // should stop so that subsequent search don't repeat previous searches\n const regexIndex = pos - config.windowSize * i;\n wordDefinition.lastIndex = Math.max(0, regexIndex);\n const thisMatch = _findRegexMatchEnclosingPosition(wordDefinition, text, pos, prevRegexIndex);\n if (!thisMatch && match) {\n // stop: we have something\n break;\n }\n match = thisMatch;\n // stop: searched at start\n if (regexIndex <= 0) {\n break;\n }\n prevRegexIndex = regexIndex;\n }\n if (match) {\n let result = {\n word: match[0],\n startColumn: textOffset + 1 + match.index,\n endColumn: textOffset + 1 + match.index + match[0].length\n };\n wordDefinition.lastIndex = 0;\n return result;\n }\n return null;\n}\nfunction _findRegexMatchEnclosingPosition(wordDefinition, text, pos, stopPos) {\n let match;\n while (match = wordDefinition.exec(text)) {\n const matchIndex = match.index || 0;\n if (matchIndex <= pos && wordDefinition.lastIndex >= pos) {\n return match;\n }\n else if (stopPos > 0 && matchIndex > stopPos) {\n return null;\n }\n }\n return null;\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 *--------------------------------------------------------------------------------------------*/\nimport { URI } from '../../base/common/uri.js';\nimport { Range } from './core/range.js';\nimport { LanguageFeatureRegistry } from './modes/languageFeatureRegistry.js';\nimport { TokenizationRegistryImpl } from './modes/tokenizationRegistry.js';\nimport { iconRegistry, Codicon } from '../../base/common/codicons.js';\n/**\n * @internal\n */\nexport class LanguageIdentifier {\n constructor(language, id) {\n this.language = language;\n this.id = id;\n }\n}\n/**\n * @internal\n */\nexport class TokenMetadata {\n static getLanguageId(metadata) {\n return (metadata & 255 /* LANGUAGEID_MASK */) >>> 0 /* LANGUAGEID_OFFSET */;\n }\n static getTokenType(metadata) {\n return (metadata & 1792 /* TOKEN_TYPE_MASK */) >>> 8 /* TOKEN_TYPE_OFFSET */;\n }\n static getFontStyle(metadata) {\n return (metadata & 14336 /* FONT_STYLE_MASK */) >>> 11 /* FONT_STYLE_OFFSET */;\n }\n static getForeground(metadata) {\n return (metadata & 8372224 /* FOREGROUND_MASK */) >>> 14 /* FOREGROUND_OFFSET */;\n }\n static getBackground(metadata) {\n return (metadata & 4286578688 /* BACKGROUND_MASK */) >>> 23 /* BACKGROUND_OFFSET */;\n }\n static getClassNameFromMetadata(metadata) {\n let foreground = this.getForeground(metadata);\n let className = 'mtk' + foreground;\n let fontStyle = this.getFontStyle(metadata);\n if (fontStyle & 1 /* Italic */) {\n className += ' mtki';\n }\n if (fontStyle & 2 /* Bold */) {\n className += ' mtkb';\n }\n if (fontStyle & 4 /* Underline */) {\n className += ' mtku';\n }\n return className;\n }\n static getInlineStyleFromMetadata(metadata, colorMap) {\n const foreground = this.getForeground(metadata);\n const fontStyle = this.getFontStyle(metadata);\n let result = `color: ${colorMap[foreground]};`;\n if (fontStyle & 1 /* Italic */) {\n result += 'font-style: italic;';\n }\n if (fontStyle & 2 /* Bold */) {\n result += 'font-weight: bold;';\n }\n if (fontStyle & 4 /* Underline */) {\n result += 'text-decoration: underline;';\n }\n return result;\n }\n}\n/**\n * @internal\n */\nexport const completionKindToCssClass = (function () {\n let data = Object.create(null);\n data[0 /* Method */] = 'symbol-method';\n data[1 /* Function */] = 'symbol-function';\n data[2 /* Constructor */] = 'symbol-constructor';\n data[3 /* Field */] = 'symbol-field';\n data[4 /* Variable */] = 'symbol-variable';\n data[5 /* Class */] = 'symbol-class';\n data[6 /* Struct */] = 'symbol-struct';\n data[7 /* Interface */] = 'symbol-interface';\n data[8 /* Module */] = 'symbol-module';\n data[9 /* Property */] = 'symbol-property';\n data[10 /* Event */] = 'symbol-event';\n data[11 /* Operator */] = 'symbol-operator';\n data[12 /* Unit */] = 'symbol-unit';\n data[13 /* Value */] = 'symbol-value';\n data[14 /* Constant */] = 'symbol-constant';\n data[15 /* Enum */] = 'symbol-enum';\n data[16 /* EnumMember */] = 'symbol-enum-member';\n data[17 /* Keyword */] = 'symbol-keyword';\n data[27 /* Snippet */] = 'symbol-snippet';\n data[18 /* Text */] = 'symbol-text';\n data[19 /* Color */] = 'symbol-color';\n data[20 /* File */] = 'symbol-file';\n data[21 /* Reference */] = 'symbol-reference';\n data[22 /* Customcolor */] = 'symbol-customcolor';\n data[23 /* Folder */] = 'symbol-folder';\n data[24 /* TypeParameter */] = 'symbol-type-parameter';\n data[25 /* User */] = 'account';\n data[26 /* Issue */] = 'issues';\n return function (kind) {\n const name = data[kind];\n let codicon = name && iconRegistry.get(name);\n if (!codicon) {\n console.info('No codicon found for CompletionItemKind ' + kind);\n codicon = Codicon.symbolProperty;\n }\n return codicon.classNames;\n };\n})();\n/**\n * @internal\n */\nexport let completionKindFromString = (function () {\n let data = Object.create(null);\n data['method'] = 0 /* Method */;\n data['function'] = 1 /* Function */;\n data['constructor'] = 2 /* Constructor */;\n data['field'] = 3 /* Field */;\n data['variable'] = 4 /* Variable */;\n data['class'] = 5 /* Class */;\n data['struct'] = 6 /* Struct */;\n data['interface'] = 7 /* Interface */;\n data['module'] = 8 /* Module */;\n data['property'] = 9 /* Property */;\n data['event'] = 10 /* Event */;\n data['operator'] = 11 /* Operator */;\n data['unit'] = 12 /* Unit */;\n data['value'] = 13 /* Value */;\n data['constant'] = 14 /* Constant */;\n data['enum'] = 15 /* Enum */;\n data['enum-member'] = 16 /* EnumMember */;\n data['enumMember'] = 16 /* EnumMember */;\n data['keyword'] = 17 /* Keyword */;\n data['snippet'] = 27 /* Snippet */;\n data['text'] = 18 /* Text */;\n data['color'] = 19 /* Color */;\n data['file'] = 20 /* File */;\n data['reference'] = 21 /* Reference */;\n data['customcolor'] = 22 /* Customcolor */;\n data['folder'] = 23 /* Folder */;\n data['type-parameter'] = 24 /* TypeParameter */;\n data['typeParameter'] = 24 /* TypeParameter */;\n data['account'] = 25 /* User */;\n data['issue'] = 26 /* Issue */;\n return function (value, strict) {\n let res = data[value];\n if (typeof res === 'undefined' && !strict) {\n res = 9 /* Property */;\n }\n return res;\n };\n})();\nexport var SignatureHelpTriggerKind;\n(function (SignatureHelpTriggerKind) {\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"Invoke\"] = 1] = \"Invoke\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"TriggerCharacter\"] = 2] = \"TriggerCharacter\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"ContentChange\"] = 3] = \"ContentChange\";\n})(SignatureHelpTriggerKind || (SignatureHelpTriggerKind = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Text\"] = 0] = \"Text\";\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Read\"] = 1] = \"Read\";\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Write\"] = 2] = \"Write\";\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * @internal\n */\nexport function isLocationLink(thing) {\n return thing\n && URI.isUri(thing.uri)\n && Range.isIRange(thing.range)\n && (Range.isIRange(thing.originSelectionRange) || Range.isIRange(thing.targetSelectionRange));\n}\n/**\n * @internal\n */\nexport var SymbolKinds;\n(function (SymbolKinds) {\n const byName = new Map();\n byName.set('file', 0 /* File */);\n byName.set('module', 1 /* Module */);\n byName.set('namespace', 2 /* Namespace */);\n byName.set('package', 3 /* Package */);\n byName.set('class', 4 /* Class */);\n byName.set('method', 5 /* Method */);\n byName.set('property', 6 /* Property */);\n byName.set('field', 7 /* Field */);\n byName.set('constructor', 8 /* Constructor */);\n byName.set('enum', 9 /* Enum */);\n byName.set('interface', 10 /* Interface */);\n byName.set('function', 11 /* Function */);\n byName.set('variable', 12 /* Variable */);\n byName.set('constant', 13 /* Constant */);\n byName.set('string', 14 /* String */);\n byName.set('number', 15 /* Number */);\n byName.set('boolean', 16 /* Boolean */);\n byName.set('array', 17 /* Array */);\n byName.set('object', 18 /* Object */);\n byName.set('key', 19 /* Key */);\n byName.set('null', 20 /* Null */);\n byName.set('enum-member', 21 /* EnumMember */);\n byName.set('struct', 22 /* Struct */);\n byName.set('event', 23 /* Event */);\n byName.set('operator', 24 /* Operator */);\n byName.set('type-parameter', 25 /* TypeParameter */);\n const byKind = new Map();\n byKind.set(0 /* File */, 'file');\n byKind.set(1 /* Module */, 'module');\n byKind.set(2 /* Namespace */, 'namespace');\n byKind.set(3 /* Package */, 'package');\n byKind.set(4 /* Class */, 'class');\n byKind.set(5 /* Method */, 'method');\n byKind.set(6 /* Property */, 'property');\n byKind.set(7 /* Field */, 'field');\n byKind.set(8 /* Constructor */, 'constructor');\n byKind.set(9 /* Enum */, 'enum');\n byKind.set(10 /* Interface */, 'interface');\n byKind.set(11 /* Function */, 'function');\n byKind.set(12 /* Variable */, 'variable');\n byKind.set(13 /* Constant */, 'constant');\n byKind.set(14 /* String */, 'string');\n byKind.set(15 /* Number */, 'number');\n byKind.set(16 /* Boolean */, 'boolean');\n byKind.set(17 /* Array */, 'array');\n byKind.set(18 /* Object */, 'object');\n byKind.set(19 /* Key */, 'key');\n byKind.set(20 /* Null */, 'null');\n byKind.set(21 /* EnumMember */, 'enum-member');\n byKind.set(22 /* Struct */, 'struct');\n byKind.set(23 /* Event */, 'event');\n byKind.set(24 /* Operator */, 'operator');\n byKind.set(25 /* TypeParameter */, 'type-parameter');\n /**\n * @internal\n */\n function fromString(value) {\n return byName.get(value);\n }\n SymbolKinds.fromString = fromString;\n /**\n * @internal\n */\n function toString(kind) {\n return byKind.get(kind);\n }\n SymbolKinds.toString = toString;\n /**\n * @internal\n */\n function toCssClassName(kind, inline) {\n const symbolName = byKind.get(kind);\n let codicon = symbolName && iconRegistry.get('symbol-' + symbolName);\n if (!codicon) {\n console.info('No codicon found for SymbolKind ' + kind);\n codicon = Codicon.symbolProperty;\n }\n return `${inline ? 'inline' : 'block'} ${codicon.classNames}`;\n }\n SymbolKinds.toCssClassName = toCssClassName;\n})(SymbolKinds || (SymbolKinds = {}));\nexport class FoldingRangeKind {\n /**\n * Creates a new [FoldingRangeKind](#FoldingRangeKind).\n *\n * @param value of the kind.\n */\n constructor(value) {\n this.value = value;\n }\n}\n/**\n * Kind for folding range representing a comment. The value of the kind is 'comment'.\n */\nFoldingRangeKind.Comment = new FoldingRangeKind('comment');\n/**\n * Kind for folding range representing a import. The value of the kind is 'imports'.\n */\nFoldingRangeKind.Imports = new FoldingRangeKind('imports');\n/**\n * Kind for folding range representing regions (for example marked by `#region`, `#endregion`).\n * The value of the kind is 'region'.\n */\nFoldingRangeKind.Region = new FoldingRangeKind('region');\nexport var InlineHintKind;\n(function (InlineHintKind) {\n InlineHintKind[InlineHintKind[\"Other\"] = 0] = \"Other\";\n InlineHintKind[InlineHintKind[\"Type\"] = 1] = \"Type\";\n InlineHintKind[InlineHintKind[\"Parameter\"] = 2] = \"Parameter\";\n})(InlineHintKind || (InlineHintKind = {}));\n// --- feature registries ------\n/**\n * @internal\n */\nexport const ReferenceProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const RenameProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const CompletionProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const SignatureHelpProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const HoverProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentSymbolProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentHighlightProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const LinkedEditingRangeProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DefinitionProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DeclarationProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const ImplementationProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const TypeDefinitionProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const CodeLensProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const InlineHintsProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const CodeActionProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentFormattingEditProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentRangeFormattingEditProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const OnTypeFormattingEditProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const LinkProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const ColorProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const SelectionRangeRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const FoldingRangeProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentSemanticTokensProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const DocumentRangeSemanticTokensProviderRegistry = new LanguageFeatureRegistry();\n/**\n * @internal\n */\nexport const TokenizationRegistry = new TokenizationRegistryImpl();\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nexport class TokenizationRegistryImpl {\n constructor() {\n this._map = new Map();\n this._promises = new Map();\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this._colorMap = null;\n }\n fire(languages) {\n this._onDidChange.fire({\n changedLanguages: languages,\n changedColorMap: false\n });\n }\n register(language, support) {\n this._map.set(language, support);\n this.fire([language]);\n return toDisposable(() => {\n if (this._map.get(language) !== support) {\n return;\n }\n this._map.delete(language);\n this.fire([language]);\n });\n }\n registerPromise(language, supportPromise) {\n let registration = null;\n let isDisposed = false;\n this._promises.set(language, supportPromise.then(support => {\n this._promises.delete(language);\n if (isDisposed || !support) {\n return;\n }\n registration = this.register(language, support);\n }));\n return toDisposable(() => {\n isDisposed = true;\n if (registration) {\n registration.dispose();\n }\n });\n }\n getPromise(language) {\n const support = this.get(language);\n if (support) {\n return Promise.resolve(support);\n }\n const promise = this._promises.get(language);\n if (promise) {\n return promise.then(_ => this.get(language));\n }\n return null;\n }\n get(language) {\n return (this._map.get(language) || null);\n }\n setColorMap(colorMap) {\n this._colorMap = colorMap;\n this._onDidChange.fire({\n changedLanguages: Array.from(this._map.keys()),\n changedColorMap: true\n });\n }\n getColorMap() {\n return this._colorMap;\n }\n getDefaultBackground() {\n if (this._colorMap && this._colorMap.length > 2 /* DefaultBackground */) {\n return this._colorMap[2 /* DefaultBackground */];\n }\n return null;\n }\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/**\n * Describes what to do with the indentation when pressing Enter.\n */\nexport var IndentAction;\n(function (IndentAction) {\n /**\n * Insert new line and copy the previous line's indentation.\n */\n IndentAction[IndentAction[\"None\"] = 0] = \"None\";\n /**\n * Insert new line and indent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Indent\"] = 1] = \"Indent\";\n /**\n * Insert two new lines:\n * - the first one indented which will hold the cursor\n * - the second one at the same indentation level\n */\n IndentAction[IndentAction[\"IndentOutdent\"] = 2] = \"IndentOutdent\";\n /**\n * Insert new line and outdent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Outdent\"] = 3] = \"Outdent\";\n})(IndentAction || (IndentAction = {}));\n/**\n * @internal\n */\nexport class StandardAutoClosingPairConditional {\n constructor(source) {\n this.open = source.open;\n this.close = source.close;\n // initially allowed in all tokens\n this._standardTokenMask = 0;\n if (Array.isArray(source.notIn)) {\n for (let i = 0, len = source.notIn.length; i < len; i++) {\n const notIn = source.notIn[i];\n switch (notIn) {\n case 'string':\n this._standardTokenMask |= 2 /* String */;\n break;\n case 'comment':\n this._standardTokenMask |= 1 /* Comment */;\n break;\n case 'regex':\n this._standardTokenMask |= 4 /* RegEx */;\n break;\n }\n }\n }\n }\n isOK(standardToken) {\n return (this._standardTokenMask & standardToken) === 0;\n }\n}\n/**\n * @internal\n */\nexport class AutoClosingPairs {\n constructor(autoClosingPairs) {\n this.autoClosingPairsOpenByStart = new Map();\n this.autoClosingPairsOpenByEnd = new Map();\n this.autoClosingPairsCloseByStart = new Map();\n this.autoClosingPairsCloseByEnd = new Map();\n this.autoClosingPairsCloseSingleChar = new Map();\n for (const pair of autoClosingPairs) {\n appendEntry(this.autoClosingPairsOpenByStart, pair.open.charAt(0), pair);\n appendEntry(this.autoClosingPairsOpenByEnd, pair.open.charAt(pair.open.length - 1), pair);\n appendEntry(this.autoClosingPairsCloseByStart, pair.close.charAt(0), pair);\n appendEntry(this.autoClosingPairsCloseByEnd, pair.close.charAt(pair.close.length - 1), pair);\n if (pair.close.length === 1 && pair.open.length === 1) {\n appendEntry(this.autoClosingPairsCloseSingleChar, pair.close, pair);\n }\n }\n }\n}\nfunction appendEntry(target, key, value) {\n if (target.has(key)) {\n target.get(key).push(value);\n }\n else {\n target.set(key, [value]);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { StandardAutoClosingPairConditional } from '../languageConfiguration.js';\nexport class CharacterPairSupport {\n constructor(config) {\n if (config.autoClosingPairs) {\n this._autoClosingPairs = config.autoClosingPairs.map(el => new StandardAutoClosingPairConditional(el));\n }\n else if (config.brackets) {\n this._autoClosingPairs = config.brackets.map(b => new StandardAutoClosingPairConditional({ open: b[0], close: b[1] }));\n }\n else {\n this._autoClosingPairs = [];\n }\n if (config.__electricCharacterSupport && config.__electricCharacterSupport.docComment) {\n const docComment = config.__electricCharacterSupport.docComment;\n // IDocComment is legacy, only partially supported\n this._autoClosingPairs.push(new StandardAutoClosingPairConditional({ open: docComment.open, close: docComment.close || '' }));\n }\n this._autoCloseBefore = typeof config.autoCloseBefore === 'string' ? config.autoCloseBefore : CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED;\n this._surroundingPairs = config.surroundingPairs || this._autoClosingPairs;\n }\n getAutoClosingPairs() {\n return this._autoClosingPairs;\n }\n getAutoCloseBeforeSet() {\n return this._autoCloseBefore;\n }\n static shouldAutoClosePair(autoClosingPair, context, column) {\n // Always complete on empty line\n if (context.getTokenCount() === 0) {\n return true;\n }\n const tokenIndex = context.findTokenIndexAtOffset(column - 2);\n const standardTokenType = context.getStandardTokenType(tokenIndex);\n return autoClosingPair.isOK(standardTokenType);\n }\n getSurroundingPairs() {\n return this._surroundingPairs;\n }\n}\nCharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED = ';:.,=}])> \\n\\t';\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 *--------------------------------------------------------------------------------------------*/\nimport { ignoreBracketsInToken } from '../supports.js';\nimport { BracketsUtils } from './richEditBrackets.js';\nexport class BracketElectricCharacterSupport {\n constructor(richEditBrackets) {\n this._richEditBrackets = richEditBrackets;\n }\n getElectricCharacters() {\n let result = [];\n if (this._richEditBrackets) {\n for (const bracket of this._richEditBrackets.brackets) {\n for (const close of bracket.close) {\n const lastChar = close.charAt(close.length - 1);\n result.push(lastChar);\n }\n }\n }\n // Filter duplicate entries\n result = result.filter((item, pos, array) => {\n return array.indexOf(item) === pos;\n });\n return result;\n }\n onElectricCharacter(character, context, column) {\n if (!this._richEditBrackets || this._richEditBrackets.brackets.length === 0) {\n return null;\n }\n const tokenIndex = context.findTokenIndexAtOffset(column - 1);\n if (ignoreBracketsInToken(context.getStandardTokenType(tokenIndex))) {\n return null;\n }\n const reversedBracketRegex = this._richEditBrackets.reversedRegex;\n const text = context.getLineContent().substring(0, column - 1) + character;\n const r = BracketsUtils.findPrevBracketInRange(reversedBracketRegex, 1, text, 0, text.length);\n if (!r) {\n return null;\n }\n const bracketText = text.substring(r.startColumn - 1, r.endColumn - 1).toLowerCase();\n const isOpen = this._richEditBrackets.textIsOpenBracket[bracketText];\n if (isOpen) {\n return null;\n }\n const textBeforeBracket = context.getActualLineContentBefore(r.startColumn - 1);\n if (!/^\\s*$/.test(textBeforeBracket)) {\n // There is other text on the line before the bracket\n return null;\n }\n return {\n matchOpenBracket: bracketText\n };\n }\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 *--------------------------------------------------------------------------------------------*/\nfunction resetGlobalRegex(reg) {\n if (reg.global) {\n reg.lastIndex = 0;\n }\n return true;\n}\nexport class IndentRulesSupport {\n constructor(indentationRules) {\n this._indentationRules = indentationRules;\n }\n shouldIncrease(text) {\n if (this._indentationRules) {\n if (this._indentationRules.increaseIndentPattern && resetGlobalRegex(this._indentationRules.increaseIndentPattern) && this._indentationRules.increaseIndentPattern.test(text)) {\n return true;\n }\n // if (this._indentationRules.indentNextLinePattern && this._indentationRules.indentNextLinePattern.test(text)) {\n // \treturn true;\n // }\n }\n return false;\n }\n shouldDecrease(text) {\n if (this._indentationRules && this._indentationRules.decreaseIndentPattern && resetGlobalRegex(this._indentationRules.decreaseIndentPattern) && this._indentationRules.decreaseIndentPattern.test(text)) {\n return true;\n }\n return false;\n }\n shouldIndentNextLine(text) {\n if (this._indentationRules && this._indentationRules.indentNextLinePattern && resetGlobalRegex(this._indentationRules.indentNextLinePattern) && this._indentationRules.indentNextLinePattern.test(text)) {\n return true;\n }\n return false;\n }\n shouldIgnore(text) {\n // the text matches `unIndentedLinePattern`\n if (this._indentationRules && this._indentationRules.unIndentedLinePattern && resetGlobalRegex(this._indentationRules.unIndentedLinePattern) && this._indentationRules.unIndentedLinePattern.test(text)) {\n return true;\n }\n return false;\n }\n getIndentMetadata(text) {\n let ret = 0;\n if (this.shouldIncrease(text)) {\n ret += 1 /* INCREASE_MASK */;\n }\n if (this.shouldDecrease(text)) {\n ret += 2 /* DECREASE_MASK */;\n }\n if (this.shouldIndentNextLine(text)) {\n ret += 4 /* INDENT_NEXTLINE_MASK */;\n }\n if (this.shouldIgnore(text)) {\n ret += 8 /* UNINDENT_MASK */;\n }\n return ret;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { IndentAction } from '../languageConfiguration.js';\nexport class OnEnterSupport {\n constructor(opts) {\n opts = opts || {};\n opts.brackets = opts.brackets || [\n ['(', ')'],\n ['{', '}'],\n ['[', ']']\n ];\n this._brackets = [];\n opts.brackets.forEach((bracket) => {\n const openRegExp = OnEnterSupport._createOpenBracketRegExp(bracket[0]);\n const closeRegExp = OnEnterSupport._createCloseBracketRegExp(bracket[1]);\n if (openRegExp && closeRegExp) {\n this._brackets.push({\n open: bracket[0],\n openRegExp: openRegExp,\n close: bracket[1],\n closeRegExp: closeRegExp,\n });\n }\n });\n this._regExpRules = opts.onEnterRules || [];\n }\n onEnter(autoIndent, previousLineText, beforeEnterText, afterEnterText) {\n // (1): `regExpRules`\n if (autoIndent >= 3 /* Advanced */) {\n for (let i = 0, len = this._regExpRules.length; i < len; i++) {\n let rule = this._regExpRules[i];\n const regResult = [{\n reg: rule.beforeText,\n text: beforeEnterText\n }, {\n reg: rule.afterText,\n text: afterEnterText\n }, {\n reg: rule.previousLineText,\n text: previousLineText\n }].every((obj) => {\n return obj.reg ? obj.reg.test(obj.text) : true;\n });\n if (regResult) {\n return rule.action;\n }\n }\n }\n // (2): Special indent-outdent\n if (autoIndent >= 2 /* Brackets */) {\n if (beforeEnterText.length > 0 && afterEnterText.length > 0) {\n for (let i = 0, len = this._brackets.length; i < len; i++) {\n let bracket = this._brackets[i];\n if (bracket.openRegExp.test(beforeEnterText) && bracket.closeRegExp.test(afterEnterText)) {\n return { indentAction: IndentAction.IndentOutdent };\n }\n }\n }\n }\n // (4): Open bracket based logic\n if (autoIndent >= 2 /* Brackets */) {\n if (beforeEnterText.length > 0) {\n for (let i = 0, len = this._brackets.length; i < len; i++) {\n let bracket = this._brackets[i];\n if (bracket.openRegExp.test(beforeEnterText)) {\n return { indentAction: IndentAction.Indent };\n }\n }\n }\n }\n return null;\n }\n static _createOpenBracketRegExp(bracket) {\n let str = strings.escapeRegExpCharacters(bracket);\n if (!/\\B/.test(str.charAt(0))) {\n str = '\\\\b' + str;\n }\n str += '\\\\s*$';\n return OnEnterSupport._safeRegExp(str);\n }\n static _createCloseBracketRegExp(bracket) {\n let str = strings.escapeRegExpCharacters(bracket);\n if (!/\\B/.test(str.charAt(str.length - 1))) {\n str = str + '\\\\b';\n }\n str = '^\\\\s*' + str;\n return OnEnterSupport._safeRegExp(str);\n }\n static _safeRegExp(def) {\n try {\n return new RegExp(def);\n }\n catch (err) {\n onUnexpectedError(err);\n return null;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { DEFAULT_WORD_REGEXP, ensureValidWordDefinition } from '../model/wordHelper.js';\nimport { IndentAction, AutoClosingPairs } from './languageConfiguration.js';\nimport { createScopedLineTokens } from './supports.js';\nimport { CharacterPairSupport } from './supports/characterPair.js';\nimport { BracketElectricCharacterSupport } from './supports/electricCharacter.js';\nimport { IndentRulesSupport } from './supports/indentRules.js';\nimport { OnEnterSupport } from './supports/onEnter.js';\nimport { RichEditBrackets } from './supports/richEditBrackets.js';\nexport class RichEditSupport {\n constructor(languageIdentifier, rawConf) {\n this._languageIdentifier = languageIdentifier;\n this._brackets = null;\n this._electricCharacter = null;\n this._conf = rawConf;\n this._onEnterSupport = (this._conf.brackets || this._conf.indentationRules || this._conf.onEnterRules ? new OnEnterSupport(this._conf) : null);\n this.comments = RichEditSupport._handleComments(this._conf);\n this.characterPair = new CharacterPairSupport(this._conf);\n this.wordDefinition = this._conf.wordPattern || DEFAULT_WORD_REGEXP;\n this.indentationRules = this._conf.indentationRules;\n if (this._conf.indentationRules) {\n this.indentRulesSupport = new IndentRulesSupport(this._conf.indentationRules);\n }\n else {\n this.indentRulesSupport = null;\n }\n this.foldingRules = this._conf.folding || {};\n }\n get brackets() {\n if (!this._brackets && this._conf.brackets) {\n this._brackets = new RichEditBrackets(this._languageIdentifier, this._conf.brackets);\n }\n return this._brackets;\n }\n get electricCharacter() {\n if (!this._electricCharacter) {\n this._electricCharacter = new BracketElectricCharacterSupport(this.brackets);\n }\n return this._electricCharacter;\n }\n onEnter(autoIndent, previousLineText, beforeEnterText, afterEnterText) {\n if (!this._onEnterSupport) {\n return null;\n }\n return this._onEnterSupport.onEnter(autoIndent, previousLineText, beforeEnterText, afterEnterText);\n }\n static _handleComments(conf) {\n let commentRule = conf.comments;\n if (!commentRule) {\n return null;\n }\n // comment configuration\n let comments = {};\n if (commentRule.lineComment) {\n comments.lineCommentToken = commentRule.lineComment;\n }\n if (commentRule.blockComment) {\n let [blockStart, blockEnd] = commentRule.blockComment;\n comments.blockCommentStartToken = blockStart;\n comments.blockCommentEndToken = blockEnd;\n }\n return comments;\n }\n}\nexport class LanguageConfigurationChangeEvent {\n constructor(languageIdentifier) {\n this.languageIdentifier = languageIdentifier;\n }\n}\nclass LanguageConfigurationEntry {\n constructor(configuration, priority, order) {\n this.configuration = configuration;\n this.priority = priority;\n this.order = order;\n }\n static cmp(a, b) {\n if (a.priority === b.priority) {\n // higher order last\n return a.order - b.order;\n }\n // higher priority last\n return a.priority - b.priority;\n }\n}\nclass LanguageConfigurationEntries {\n constructor(languageIdentifier) {\n this.languageIdentifier = languageIdentifier;\n this._resolved = null;\n this._entries = [];\n this._order = 0;\n this._resolved = null;\n }\n register(configuration, priority) {\n const entry = new LanguageConfigurationEntry(configuration, priority, ++this._order);\n this._entries.push(entry);\n this._resolved = null;\n return toDisposable(() => {\n for (let i = 0; i < this._entries.length; i++) {\n if (this._entries[i] === entry) {\n this._entries.splice(i, 1);\n this._resolved = null;\n break;\n }\n }\n });\n }\n getRichEditSupport() {\n if (!this._resolved) {\n const config = this._resolve();\n if (config) {\n this._resolved = new RichEditSupport(this.languageIdentifier, config);\n }\n }\n return this._resolved;\n }\n _resolve() {\n if (this._entries.length === 0) {\n return null;\n }\n this._entries.sort(LanguageConfigurationEntry.cmp);\n const result = {};\n for (const entry of this._entries) {\n const conf = entry.configuration;\n result.comments = conf.comments || result.comments;\n result.brackets = conf.brackets || result.brackets;\n result.wordPattern = conf.wordPattern || result.wordPattern;\n result.indentationRules = conf.indentationRules || result.indentationRules;\n result.onEnterRules = conf.onEnterRules || result.onEnterRules;\n result.autoClosingPairs = conf.autoClosingPairs || result.autoClosingPairs;\n result.surroundingPairs = conf.surroundingPairs || result.surroundingPairs;\n result.autoCloseBefore = conf.autoCloseBefore || result.autoCloseBefore;\n result.folding = conf.folding || result.folding;\n result.__electricCharacterSupport = conf.__electricCharacterSupport || result.__electricCharacterSupport;\n }\n return result;\n }\n}\nexport class LanguageConfigurationRegistryImpl {\n constructor() {\n this._entries2 = new Map();\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n }\n /**\n * @param priority Use a higher number for higher priority\n */\n register(languageIdentifier, configuration, priority = 0) {\n let entries = this._entries2.get(languageIdentifier.id);\n if (!entries) {\n entries = new LanguageConfigurationEntries(languageIdentifier);\n this._entries2.set(languageIdentifier.id, entries);\n }\n const disposable = entries.register(configuration, priority);\n this._onDidChange.fire(new LanguageConfigurationChangeEvent(languageIdentifier));\n return toDisposable(() => {\n disposable.dispose();\n this._onDidChange.fire(new LanguageConfigurationChangeEvent(languageIdentifier));\n });\n }\n _getRichEditSupport(languageId) {\n const entries = this._entries2.get(languageId);\n return entries ? entries.getRichEditSupport() : null;\n }\n getIndentationRules(languageId) {\n const value = this._getRichEditSupport(languageId);\n return value ? value.indentationRules || null : null;\n }\n // begin electricCharacter\n _getElectricCharacterSupport(languageId) {\n let value = this._getRichEditSupport(languageId);\n if (!value) {\n return null;\n }\n return value.electricCharacter || null;\n }\n getElectricCharacters(languageId) {\n let electricCharacterSupport = this._getElectricCharacterSupport(languageId);\n if (!electricCharacterSupport) {\n return [];\n }\n return electricCharacterSupport.getElectricCharacters();\n }\n /**\n * Should return opening bracket type to match indentation with\n */\n onElectricCharacter(character, context, column) {\n let scopedLineTokens = createScopedLineTokens(context, column - 1);\n let electricCharacterSupport = this._getElectricCharacterSupport(scopedLineTokens.languageId);\n if (!electricCharacterSupport) {\n return null;\n }\n return electricCharacterSupport.onElectricCharacter(character, scopedLineTokens, column - scopedLineTokens.firstCharOffset);\n }\n // end electricCharacter\n getComments(languageId) {\n let value = this._getRichEditSupport(languageId);\n if (!value) {\n return null;\n }\n return value.comments || null;\n }\n // begin characterPair\n _getCharacterPairSupport(languageId) {\n let value = this._getRichEditSupport(languageId);\n if (!value) {\n return null;\n }\n return value.characterPair || null;\n }\n getAutoClosingPairs(languageId) {\n const characterPairSupport = this._getCharacterPairSupport(languageId);\n return new AutoClosingPairs(characterPairSupport ? characterPairSupport.getAutoClosingPairs() : []);\n }\n getAutoCloseBeforeSet(languageId) {\n let characterPairSupport = this._getCharacterPairSupport(languageId);\n if (!characterPairSupport) {\n return CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED;\n }\n return characterPairSupport.getAutoCloseBeforeSet();\n }\n getSurroundingPairs(languageId) {\n let characterPairSupport = this._getCharacterPairSupport(languageId);\n if (!characterPairSupport) {\n return [];\n }\n return characterPairSupport.getSurroundingPairs();\n }\n shouldAutoClosePair(autoClosingPair, context, column) {\n const scopedLineTokens = createScopedLineTokens(context, column - 1);\n return CharacterPairSupport.shouldAutoClosePair(autoClosingPair, scopedLineTokens, column - scopedLineTokens.firstCharOffset);\n }\n // end characterPair\n getWordDefinition(languageId) {\n let value = this._getRichEditSupport(languageId);\n if (!value) {\n return ensureValidWordDefinition(null);\n }\n return ensureValidWordDefinition(value.wordDefinition || null);\n }\n getFoldingRules(languageId) {\n let value = this._getRichEditSupport(languageId);\n if (!value) {\n return {};\n }\n return value.foldingRules;\n }\n // begin Indent Rules\n getIndentRulesSupport(languageId) {\n let value = this._getRichEditSupport(languageId);\n if (!value) {\n return null;\n }\n return value.indentRulesSupport || null;\n }\n /**\n * Get nearest preceiding line which doesn't match unIndentPattern or contains all whitespace.\n * Result:\n * -1: run into the boundary of embedded languages\n * 0: every line above are invalid\n * else: nearest preceding line of the same language\n */\n getPrecedingValidLine(model, lineNumber, indentRulesSupport) {\n let languageID = model.getLanguageIdAtPosition(lineNumber, 0);\n if (lineNumber > 1) {\n let lastLineNumber;\n let resultLineNumber = -1;\n for (lastLineNumber = lineNumber - 1; lastLineNumber >= 1; lastLineNumber--) {\n if (model.getLanguageIdAtPosition(lastLineNumber, 0) !== languageID) {\n return resultLineNumber;\n }\n let text = model.getLineContent(lastLineNumber);\n if (indentRulesSupport.shouldIgnore(text) || /^\\s+$/.test(text) || text === '') {\n resultLineNumber = lastLineNumber;\n continue;\n }\n return lastLineNumber;\n }\n }\n return -1;\n }\n /**\n * Get inherited indentation from above lines.\n * 1. Find the nearest preceding line which doesn't match unIndentedLinePattern.\n * 2. If this line matches indentNextLinePattern or increaseIndentPattern, it means that the indent level of `lineNumber` should be 1 greater than this line.\n * 3. If this line doesn't match any indent rules\n * a. check whether the line above it matches indentNextLinePattern\n * b. If not, the indent level of this line is the result\n * c. If so, it means the indent of this line is *temporary*, go upward utill we find a line whose indent is not temporary (the same workflow a -> b -> c).\n * 4. Otherwise, we fail to get an inherited indent from aboves. Return null and we should not touch the indent of `lineNumber`\n *\n * This function only return the inherited indent based on above lines, it doesn't check whether current line should decrease or not.\n */\n getInheritIndentForLine(autoIndent, model, lineNumber, honorIntentialIndent = true) {\n if (autoIndent < 4 /* Full */) {\n return null;\n }\n const indentRulesSupport = this.getIndentRulesSupport(model.getLanguageIdentifier().id);\n if (!indentRulesSupport) {\n return null;\n }\n if (lineNumber <= 1) {\n return {\n indentation: '',\n action: null\n };\n }\n const precedingUnIgnoredLine = this.getPrecedingValidLine(model, lineNumber, indentRulesSupport);\n if (precedingUnIgnoredLine < 0) {\n return null;\n }\n else if (precedingUnIgnoredLine < 1) {\n return {\n indentation: '',\n action: null\n };\n }\n const precedingUnIgnoredLineContent = model.getLineContent(precedingUnIgnoredLine);\n if (indentRulesSupport.shouldIncrease(precedingUnIgnoredLineContent) || indentRulesSupport.shouldIndentNextLine(precedingUnIgnoredLineContent)) {\n return {\n indentation: strings.getLeadingWhitespace(precedingUnIgnoredLineContent),\n action: IndentAction.Indent,\n line: precedingUnIgnoredLine\n };\n }\n else if (indentRulesSupport.shouldDecrease(precedingUnIgnoredLineContent)) {\n return {\n indentation: strings.getLeadingWhitespace(precedingUnIgnoredLineContent),\n action: null,\n line: precedingUnIgnoredLine\n };\n }\n else {\n // precedingUnIgnoredLine can not be ignored.\n // it doesn't increase indent of following lines\n // it doesn't increase just next line\n // so current line is not affect by precedingUnIgnoredLine\n // and then we should get a correct inheritted indentation from above lines\n if (precedingUnIgnoredLine === 1) {\n return {\n indentation: strings.getLeadingWhitespace(model.getLineContent(precedingUnIgnoredLine)),\n action: null,\n line: precedingUnIgnoredLine\n };\n }\n const previousLine = precedingUnIgnoredLine - 1;\n const previousLineIndentMetadata = indentRulesSupport.getIndentMetadata(model.getLineContent(previousLine));\n if (!(previousLineIndentMetadata & (1 /* INCREASE_MASK */ | 2 /* DECREASE_MASK */)) &&\n (previousLineIndentMetadata & 4 /* INDENT_NEXTLINE_MASK */)) {\n let stopLine = 0;\n for (let i = previousLine - 1; i > 0; i--) {\n if (indentRulesSupport.shouldIndentNextLine(model.getLineContent(i))) {\n continue;\n }\n stopLine = i;\n break;\n }\n return {\n indentation: strings.getLeadingWhitespace(model.getLineContent(stopLine + 1)),\n action: null,\n line: stopLine + 1\n };\n }\n if (honorIntentialIndent) {\n return {\n indentation: strings.getLeadingWhitespace(model.getLineContent(precedingUnIgnoredLine)),\n action: null,\n line: precedingUnIgnoredLine\n };\n }\n else {\n // search from precedingUnIgnoredLine until we find one whose indent is not temporary\n for (let i = precedingUnIgnoredLine; i > 0; i--) {\n const lineContent = model.getLineContent(i);\n if (indentRulesSupport.shouldIncrease(lineContent)) {\n return {\n indentation: strings.getLeadingWhitespace(lineContent),\n action: IndentAction.Indent,\n line: i\n };\n }\n else if (indentRulesSupport.shouldIndentNextLine(lineContent)) {\n let stopLine = 0;\n for (let j = i - 1; j > 0; j--) {\n if (indentRulesSupport.shouldIndentNextLine(model.getLineContent(i))) {\n continue;\n }\n stopLine = j;\n break;\n }\n return {\n indentation: strings.getLeadingWhitespace(model.getLineContent(stopLine + 1)),\n action: null,\n line: stopLine + 1\n };\n }\n else if (indentRulesSupport.shouldDecrease(lineContent)) {\n return {\n indentation: strings.getLeadingWhitespace(lineContent),\n action: null,\n line: i\n };\n }\n }\n return {\n indentation: strings.getLeadingWhitespace(model.getLineContent(1)),\n action: null,\n line: 1\n };\n }\n }\n }\n getGoodIndentForLine(autoIndent, virtualModel, languageId, lineNumber, indentConverter) {\n if (autoIndent < 4 /* Full */) {\n return null;\n }\n const richEditSupport = this._getRichEditSupport(languageId);\n if (!richEditSupport) {\n return null;\n }\n const indentRulesSupport = this.getIndentRulesSupport(languageId);\n if (!indentRulesSupport) {\n return null;\n }\n const indent = this.getInheritIndentForLine(autoIndent, virtualModel, lineNumber);\n const lineContent = virtualModel.getLineContent(lineNumber);\n if (indent) {\n const inheritLine = indent.line;\n if (inheritLine !== undefined) {\n const enterResult = richEditSupport.onEnter(autoIndent, '', virtualModel.getLineContent(inheritLine), '');\n if (enterResult) {\n let indentation = strings.getLeadingWhitespace(virtualModel.getLineContent(inheritLine));\n if (enterResult.removeText) {\n indentation = indentation.substring(0, indentation.length - enterResult.removeText);\n }\n if ((enterResult.indentAction === IndentAction.Indent) ||\n (enterResult.indentAction === IndentAction.IndentOutdent)) {\n indentation = indentConverter.shiftIndent(indentation);\n }\n else if (enterResult.indentAction === IndentAction.Outdent) {\n indentation = indentConverter.unshiftIndent(indentation);\n }\n if (indentRulesSupport.shouldDecrease(lineContent)) {\n indentation = indentConverter.unshiftIndent(indentation);\n }\n if (enterResult.appendText) {\n indentation += enterResult.appendText;\n }\n return strings.getLeadingWhitespace(indentation);\n }\n }\n if (indentRulesSupport.shouldDecrease(lineContent)) {\n if (indent.action === IndentAction.Indent) {\n return indent.indentation;\n }\n else {\n return indentConverter.unshiftIndent(indent.indentation);\n }\n }\n else {\n if (indent.action === IndentAction.Indent) {\n return indentConverter.shiftIndent(indent.indentation);\n }\n else {\n return indent.indentation;\n }\n }\n }\n return null;\n }\n getIndentForEnter(autoIndent, model, range, indentConverter) {\n if (autoIndent < 4 /* Full */) {\n return null;\n }\n model.forceTokenization(range.startLineNumber);\n const lineTokens = model.getLineTokens(range.startLineNumber);\n const scopedLineTokens = createScopedLineTokens(lineTokens, range.startColumn - 1);\n const scopedLineText = scopedLineTokens.getLineContent();\n let embeddedLanguage = false;\n let beforeEnterText;\n if (scopedLineTokens.firstCharOffset > 0 && lineTokens.getLanguageId(0) !== scopedLineTokens.languageId) {\n // we are in the embeded language content\n embeddedLanguage = true; // if embeddedLanguage is true, then we don't touch the indentation of current line\n beforeEnterText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n else {\n beforeEnterText = lineTokens.getLineContent().substring(0, range.startColumn - 1);\n }\n let afterEnterText;\n if (range.isEmpty()) {\n afterEnterText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n else {\n const endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\n afterEnterText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n const indentRulesSupport = this.getIndentRulesSupport(scopedLineTokens.languageId);\n if (!indentRulesSupport) {\n return null;\n }\n const beforeEnterResult = beforeEnterText;\n const beforeEnterIndent = strings.getLeadingWhitespace(beforeEnterText);\n const virtualModel = {\n getLineTokens: (lineNumber) => {\n return model.getLineTokens(lineNumber);\n },\n getLanguageIdentifier: () => {\n return model.getLanguageIdentifier();\n },\n getLanguageIdAtPosition: (lineNumber, column) => {\n return model.getLanguageIdAtPosition(lineNumber, column);\n },\n getLineContent: (lineNumber) => {\n if (lineNumber === range.startLineNumber) {\n return beforeEnterResult;\n }\n else {\n return model.getLineContent(lineNumber);\n }\n }\n };\n const currentLineIndent = strings.getLeadingWhitespace(lineTokens.getLineContent());\n const afterEnterAction = this.getInheritIndentForLine(autoIndent, virtualModel, range.startLineNumber + 1);\n if (!afterEnterAction) {\n const beforeEnter = embeddedLanguage ? currentLineIndent : beforeEnterIndent;\n return {\n beforeEnter: beforeEnter,\n afterEnter: beforeEnter\n };\n }\n let afterEnterIndent = embeddedLanguage ? currentLineIndent : afterEnterAction.indentation;\n if (afterEnterAction.action === IndentAction.Indent) {\n afterEnterIndent = indentConverter.shiftIndent(afterEnterIndent);\n }\n if (indentRulesSupport.shouldDecrease(afterEnterText)) {\n afterEnterIndent = indentConverter.unshiftIndent(afterEnterIndent);\n }\n return {\n beforeEnter: embeddedLanguage ? currentLineIndent : beforeEnterIndent,\n afterEnter: afterEnterIndent\n };\n }\n /**\n * We should always allow intentional indentation. It means, if users change the indentation of `lineNumber` and the content of\n * this line doesn't match decreaseIndentPattern, we should not adjust the indentation.\n */\n getIndentActionForType(autoIndent, model, range, ch, indentConverter) {\n if (autoIndent < 4 /* Full */) {\n return null;\n }\n const scopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber, range.startColumn);\n if (scopedLineTokens.firstCharOffset) {\n // this line has mixed languages and indentation rules will not work\n return null;\n }\n const indentRulesSupport = this.getIndentRulesSupport(scopedLineTokens.languageId);\n if (!indentRulesSupport) {\n return null;\n }\n const scopedLineText = scopedLineTokens.getLineContent();\n const beforeTypeText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n // selection support\n let afterTypeText;\n if (range.isEmpty()) {\n afterTypeText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n else {\n const endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\n afterTypeText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n // If previous content already matches decreaseIndentPattern, it means indentation of this line should already be adjusted\n // Users might change the indentation by purpose and we should honor that instead of readjusting.\n if (!indentRulesSupport.shouldDecrease(beforeTypeText + afterTypeText) && indentRulesSupport.shouldDecrease(beforeTypeText + ch + afterTypeText)) {\n // after typing `ch`, the content matches decreaseIndentPattern, we should adjust the indent to a good manner.\n // 1. Get inherited indent action\n const r = this.getInheritIndentForLine(autoIndent, model, range.startLineNumber, false);\n if (!r) {\n return null;\n }\n let indentation = r.indentation;\n if (r.action !== IndentAction.Indent) {\n indentation = indentConverter.unshiftIndent(indentation);\n }\n return indentation;\n }\n return null;\n }\n getIndentMetadata(model, lineNumber) {\n const indentRulesSupport = this.getIndentRulesSupport(model.getLanguageIdentifier().id);\n if (!indentRulesSupport) {\n return null;\n }\n if (lineNumber < 1 || lineNumber > model.getLineCount()) {\n return null;\n }\n return indentRulesSupport.getIndentMetadata(model.getLineContent(lineNumber));\n }\n // end Indent Rules\n // begin onEnter\n getEnterAction(autoIndent, model, range) {\n const scopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber, range.startColumn);\n const richEditSupport = this._getRichEditSupport(scopedLineTokens.languageId);\n if (!richEditSupport) {\n return null;\n }\n const scopedLineText = scopedLineTokens.getLineContent();\n const beforeEnterText = scopedLineText.substr(0, range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n // selection support\n let afterEnterText;\n if (range.isEmpty()) {\n afterEnterText = scopedLineText.substr(range.startColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n else {\n const endScopedLineTokens = this.getScopedLineTokens(model, range.endLineNumber, range.endColumn);\n afterEnterText = endScopedLineTokens.getLineContent().substr(range.endColumn - 1 - scopedLineTokens.firstCharOffset);\n }\n let previousLineText = '';\n if (range.startLineNumber > 1 && scopedLineTokens.firstCharOffset === 0) {\n // This is not the first line and the entire line belongs to this mode\n const oneLineAboveScopedLineTokens = this.getScopedLineTokens(model, range.startLineNumber - 1);\n if (oneLineAboveScopedLineTokens.languageId === scopedLineTokens.languageId) {\n // The line above ends with text belonging to the same mode\n previousLineText = oneLineAboveScopedLineTokens.getLineContent();\n }\n }\n const enterResult = richEditSupport.onEnter(autoIndent, previousLineText, beforeEnterText, afterEnterText);\n if (!enterResult) {\n return null;\n }\n const indentAction = enterResult.indentAction;\n let appendText = enterResult.appendText;\n const removeText = enterResult.removeText || 0;\n // Here we add `\\t` to appendText first because enterAction is leveraging appendText and removeText to change indentation.\n if (!appendText) {\n if ((indentAction === IndentAction.Indent) ||\n (indentAction === IndentAction.IndentOutdent)) {\n appendText = '\\t';\n }\n else {\n appendText = '';\n }\n }\n else if (indentAction === IndentAction.Indent) {\n appendText = '\\t' + appendText;\n }\n let indentation = this.getIndentationAtPosition(model, range.startLineNumber, range.startColumn);\n if (removeText) {\n indentation = indentation.substring(0, indentation.length - removeText);\n }\n return {\n indentAction: indentAction,\n appendText: appendText,\n removeText: removeText,\n indentation: indentation\n };\n }\n getIndentationAtPosition(model, lineNumber, column) {\n const lineText = model.getLineContent(lineNumber);\n let indentation = strings.getLeadingWhitespace(lineText);\n if (indentation.length > column - 1) {\n indentation = indentation.substring(0, column - 1);\n }\n return indentation;\n }\n getScopedLineTokens(model, lineNumber, columnNumber) {\n model.forceTokenization(lineNumber);\n const lineTokens = model.getLineTokens(lineNumber);\n const column = (typeof columnNumber === 'undefined' ? model.getLineMaxColumn(lineNumber) - 1 : columnNumber - 1);\n return createScopedLineTokens(lineTokens, column);\n }\n // end onEnter\n getBracketsSupport(languageId) {\n const value = this._getRichEditSupport(languageId);\n if (!value) {\n return null;\n }\n return value.brackets || null;\n }\n}\nexport const LanguageConfigurationRegistry = new LanguageConfigurationRegistryImpl();\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 *--------------------------------------------------------------------------------------------*/\nimport { match as matchGlobPattern } from '../../../base/common/glob.js';\nimport { normalize } from '../../../base/common/path.js';\nexport function score(selector, candidateUri, candidateLanguage, candidateIsSynchronized) {\n if (Array.isArray(selector)) {\n // array -> take max individual value\n let ret = 0;\n for (const filter of selector) {\n const value = score(filter, candidateUri, candidateLanguage, candidateIsSynchronized);\n if (value === 10) {\n return value; // already at the highest\n }\n if (value > ret) {\n ret = value;\n }\n }\n return ret;\n }\n else if (typeof selector === 'string') {\n if (!candidateIsSynchronized) {\n return 0;\n }\n // short-hand notion, desugars to\n // 'fooLang' -> { language: 'fooLang'}\n // '*' -> { language: '*' }\n if (selector === '*') {\n return 5;\n }\n else if (selector === candidateLanguage) {\n return 10;\n }\n else {\n return 0;\n }\n }\n else if (selector) {\n // filter -> select accordingly, use defaults for scheme\n const { language, pattern, scheme, hasAccessToAllModels } = selector; // TODO: microsoft/TypeScript#42768\n if (!candidateIsSynchronized && !hasAccessToAllModels) {\n return 0;\n }\n let ret = 0;\n if (scheme) {\n if (scheme === candidateUri.scheme) {\n ret = 10;\n }\n else if (scheme === '*') {\n ret = 5;\n }\n else {\n return 0;\n }\n }\n if (language) {\n if (language === candidateLanguage) {\n ret = 10;\n }\n else if (language === '*') {\n ret = Math.max(ret, 5);\n }\n else {\n return 0;\n }\n }\n if (pattern) {\n let normalizedPattern;\n if (typeof pattern === 'string') {\n normalizedPattern = pattern;\n }\n else {\n // Since this pattern has a `base` property, we need\n // to normalize this path first before passing it on\n // because we will compare it against `Uri.fsPath`\n // which uses platform specific separators.\n // Refs: https://github.com/microsoft/vscode/issues/99938\n normalizedPattern = Object.assign(Object.assign({}, pattern), { base: normalize(pattern.base) });\n }\n if (normalizedPattern === candidateUri.fsPath || matchGlobPattern(normalizedPattern, candidateUri.fsPath)) {\n ret = 10;\n }\n else {\n return 0;\n }\n }\n return ret;\n }\n else {\n return 0;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { hash } from '../../../base/common/hash.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nimport { LRUCache } from '../../../base/common/map.js';\nimport { MovingAverage } from '../../../base/common/numbers.js';\nimport { score } from './languageSelector.js';\nimport { shouldSynchronizeModel } from '../services/modelService.js';\nfunction isExclusive(selector) {\n if (typeof selector === 'string') {\n return false;\n }\n else if (Array.isArray(selector)) {\n return selector.every(isExclusive);\n }\n else {\n return !!selector.exclusive; // TODO: microsoft/TypeScript#42768\n }\n}\nexport class LanguageFeatureRegistry {\n constructor() {\n this._clock = 0;\n this._entries = [];\n this._onDidChange = new Emitter();\n }\n get onDidChange() {\n return this._onDidChange.event;\n }\n register(selector, provider) {\n let entry = {\n selector,\n provider,\n _score: -1,\n _time: this._clock++\n };\n this._entries.push(entry);\n this._lastCandidate = undefined;\n this._onDidChange.fire(this._entries.length);\n return toDisposable(() => {\n if (entry) {\n let idx = this._entries.indexOf(entry);\n if (idx >= 0) {\n this._entries.splice(idx, 1);\n this._lastCandidate = undefined;\n this._onDidChange.fire(this._entries.length);\n entry = undefined;\n }\n }\n });\n }\n has(model) {\n return this.all(model).length > 0;\n }\n all(model) {\n if (!model) {\n return [];\n }\n this._updateScores(model);\n const result = [];\n // from registry\n for (let entry of this._entries) {\n if (entry._score > 0) {\n result.push(entry.provider);\n }\n }\n return result;\n }\n ordered(model) {\n const result = [];\n this._orderedForEach(model, entry => result.push(entry.provider));\n return result;\n }\n orderedGroups(model) {\n const result = [];\n let lastBucket;\n let lastBucketScore;\n this._orderedForEach(model, entry => {\n if (lastBucket && lastBucketScore === entry._score) {\n lastBucket.push(entry.provider);\n }\n else {\n lastBucketScore = entry._score;\n lastBucket = [entry.provider];\n result.push(lastBucket);\n }\n });\n return result;\n }\n _orderedForEach(model, callback) {\n if (!model) {\n return;\n }\n this._updateScores(model);\n for (const entry of this._entries) {\n if (entry._score > 0) {\n callback(entry);\n }\n }\n }\n _updateScores(model) {\n let candidate = {\n uri: model.uri.toString(),\n language: model.getLanguageIdentifier().language\n };\n if (this._lastCandidate\n && this._lastCandidate.language === candidate.language\n && this._lastCandidate.uri === candidate.uri) {\n // nothing has changed\n return;\n }\n this._lastCandidate = candidate;\n for (let entry of this._entries) {\n entry._score = score(entry.selector, model.uri, model.getLanguageIdentifier().language, shouldSynchronizeModel(model));\n if (isExclusive(entry.selector) && entry._score > 0) {\n // support for one exclusive selector that overwrites\n // any other selector\n for (let entry of this._entries) {\n entry._score = 0;\n }\n entry._score = 1000;\n break;\n }\n }\n // needs sorting\n this._entries.sort(LanguageFeatureRegistry._compareByScoreAndTime);\n }\n static _compareByScoreAndTime(a, b) {\n if (a._score < b._score) {\n return 1;\n }\n else if (a._score > b._score) {\n return -1;\n }\n else if (a._time < b._time) {\n return 1;\n }\n else if (a._time > b._time) {\n return -1;\n }\n else {\n return 0;\n }\n }\n}\n/**\n * Keeps moving average per model and set of providers so that requests\n * can be debounce according to the provider performance\n */\nexport class LanguageFeatureRequestDelays {\n constructor(_registry, min, max = Number.MAX_SAFE_INTEGER) {\n this._registry = _registry;\n this.min = min;\n this.max = max;\n this._cache = new LRUCache(50, 0.7);\n }\n _key(model) {\n return model.id + hash(this._registry.all(model));\n }\n _clamp(value) {\n if (value === undefined) {\n return this.min;\n }\n else {\n return Math.min(this.max, Math.max(this.min, Math.floor(value * 1.3)));\n }\n }\n get(model) {\n const key = this._key(model);\n const avg = this._cache.get(key);\n return this._clamp(avg === null || avg === void 0 ? void 0 : avg.value);\n }\n update(model, value) {\n const key = this._key(model);\n let avg = this._cache.get(key);\n if (!avg) {\n avg = new MovingAverage();\n this._cache.set(key, avg);\n }\n avg.update(value);\n return this.get(model);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { LanguageIdentifier } from '../modes.js';\nimport { LanguageConfigurationRegistry } from './languageConfigurationRegistry.js';\nimport { Registry } from '../../../platform/registry/common/platform.js';\n// Define extension point ids\nexport const Extensions = {\n ModesRegistry: 'editor.modesRegistry'\n};\nexport class EditorModesRegistry {\n constructor() {\n this._onDidChangeLanguages = new Emitter();\n this.onDidChangeLanguages = this._onDidChangeLanguages.event;\n this._languages = [];\n this._dynamicLanguages = [];\n }\n // --- languages\n registerLanguage(def) {\n this._languages.push(def);\n this._onDidChangeLanguages.fire(undefined);\n return {\n dispose: () => {\n for (let i = 0, len = this._languages.length; i < len; i++) {\n if (this._languages[i] === def) {\n this._languages.splice(i, 1);\n return;\n }\n }\n }\n };\n }\n getLanguages() {\n return [].concat(this._languages).concat(this._dynamicLanguages);\n }\n}\nexport const ModesRegistry = new EditorModesRegistry();\nRegistry.add(Extensions.ModesRegistry, ModesRegistry);\nexport const PLAINTEXT_MODE_ID = 'plaintext';\nexport const PLAINTEXT_EXTENSION = '.txt';\nexport const PLAINTEXT_LANGUAGE_IDENTIFIER = new LanguageIdentifier(PLAINTEXT_MODE_ID, 1 /* PlainText */);\nModesRegistry.registerLanguage({\n id: PLAINTEXT_MODE_ID,\n extensions: [PLAINTEXT_EXTENSION],\n aliases: [nls.localize('plainText.alias', \"Plain Text\"), 'text'],\n mimetypes: ['text/plain']\n});\nLanguageConfigurationRegistry.register(PLAINTEXT_LANGUAGE_IDENTIFIER, {\n brackets: [\n ['(', ')'],\n ['[', ']'],\n ['{', '}'],\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '[', close: ']' },\n { open: '(', close: ')' },\n { open: '<', close: '>' },\n { open: '\\\"', close: '\\\"' },\n { open: '\\'', close: '\\'' },\n { open: '`', close: '`' },\n ],\n folding: {\n offSide: true\n }\n}, 0);\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 *--------------------------------------------------------------------------------------------*/\nimport { Token, TokenizationResult, TokenizationResult2 } from '../core/token.js';\nimport { LanguageIdentifier } from '../modes.js';\nclass NullStateImpl {\n clone() {\n return this;\n }\n equals(other) {\n return (this === other);\n }\n}\nexport const NULL_STATE = new NullStateImpl();\nexport const NULL_MODE_ID = 'vs.editor.nullMode';\nexport const NULL_LANGUAGE_IDENTIFIER = new LanguageIdentifier(NULL_MODE_ID, 0 /* Null */);\nexport function nullTokenize(modeId, buffer, state, deltaOffset) {\n return new TokenizationResult([new Token(deltaOffset, '', modeId)], state);\n}\nexport function nullTokenize2(languageId, buffer, state, deltaOffset) {\n let tokens = new Uint32Array(2);\n tokens[0] = deltaOffset;\n tokens[1] = ((languageId << 0 /* LANGUAGEID_OFFSET */)\n | (0 /* Other */ << 8 /* TOKEN_TYPE_OFFSET */)\n | (0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\n return new TokenizationResult2(tokens, state === null ? NULL_STATE : state);\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 *--------------------------------------------------------------------------------------------*/\nexport function createScopedLineTokens(context, offset) {\n let tokenCount = context.getCount();\n let tokenIndex = context.findTokenIndexAtOffset(offset);\n let desiredLanguageId = context.getLanguageId(tokenIndex);\n let lastTokenIndex = tokenIndex;\n while (lastTokenIndex + 1 < tokenCount && context.getLanguageId(lastTokenIndex + 1) === desiredLanguageId) {\n lastTokenIndex++;\n }\n let firstTokenIndex = tokenIndex;\n while (firstTokenIndex > 0 && context.getLanguageId(firstTokenIndex - 1) === desiredLanguageId) {\n firstTokenIndex--;\n }\n return new ScopedLineTokens(context, desiredLanguageId, firstTokenIndex, lastTokenIndex + 1, context.getStartOffset(firstTokenIndex), context.getEndOffset(lastTokenIndex));\n}\nexport class ScopedLineTokens {\n constructor(actual, languageId, firstTokenIndex, lastTokenIndex, firstCharOffset, lastCharOffset) {\n this._actual = actual;\n this.languageId = languageId;\n this._firstTokenIndex = firstTokenIndex;\n this._lastTokenIndex = lastTokenIndex;\n this.firstCharOffset = firstCharOffset;\n this._lastCharOffset = lastCharOffset;\n }\n getLineContent() {\n const actualLineContent = this._actual.getLineContent();\n return actualLineContent.substring(this.firstCharOffset, this._lastCharOffset);\n }\n getActualLineContentBefore(offset) {\n const actualLineContent = this._actual.getLineContent();\n return actualLineContent.substring(0, this.firstCharOffset + offset);\n }\n getTokenCount() {\n return this._lastTokenIndex - this._firstTokenIndex;\n }\n findTokenIndexAtOffset(offset) {\n return this._actual.findTokenIndexAtOffset(offset + this.firstCharOffset) - this._firstTokenIndex;\n }\n getStandardTokenType(tokenIndex) {\n return this._actual.getStandardTokenType(tokenIndex + this._firstTokenIndex);\n }\n}\nexport function ignoreBracketsInToken(standardTokenType) {\n return (standardTokenType & 7 /* value */) !== 0;\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../../base/common/strings.js';\nimport * as stringBuilder from '../../core/stringBuilder.js';\nimport { Range } from '../../core/range.js';\nexport class RichEditBracket {\n constructor(languageIdentifier, index, open, close, forwardRegex, reversedRegex) {\n this.languageIdentifier = languageIdentifier;\n this.index = index;\n this.open = open;\n this.close = close;\n this.forwardRegex = forwardRegex;\n this.reversedRegex = reversedRegex;\n this._openSet = RichEditBracket._toSet(this.open);\n this._closeSet = RichEditBracket._toSet(this.close);\n }\n isOpen(text) {\n return this._openSet.has(text);\n }\n isClose(text) {\n return this._closeSet.has(text);\n }\n static _toSet(arr) {\n const result = new Set();\n for (const element of arr) {\n result.add(element);\n }\n return result;\n }\n}\nfunction groupFuzzyBrackets(brackets) {\n const N = brackets.length;\n brackets = brackets.map(b => [b[0].toLowerCase(), b[1].toLowerCase()]);\n const group = [];\n for (let i = 0; i < N; i++) {\n group[i] = i;\n }\n const areOverlapping = (a, b) => {\n const [aOpen, aClose] = a;\n const [bOpen, bClose] = b;\n return (aOpen === bOpen || aOpen === bClose || aClose === bOpen || aClose === bClose);\n };\n const mergeGroups = (g1, g2) => {\n const newG = Math.min(g1, g2);\n const oldG = Math.max(g1, g2);\n for (let i = 0; i < N; i++) {\n if (group[i] === oldG) {\n group[i] = newG;\n }\n }\n };\n // group together brackets that have the same open or the same close sequence\n for (let i = 0; i < N; i++) {\n const a = brackets[i];\n for (let j = i + 1; j < N; j++) {\n const b = brackets[j];\n if (areOverlapping(a, b)) {\n mergeGroups(group[i], group[j]);\n }\n }\n }\n const result = [];\n for (let g = 0; g < N; g++) {\n let currentOpen = [];\n let currentClose = [];\n for (let i = 0; i < N; i++) {\n if (group[i] === g) {\n const [open, close] = brackets[i];\n currentOpen.push(open);\n currentClose.push(close);\n }\n }\n if (currentOpen.length > 0) {\n result.push({\n open: currentOpen,\n close: currentClose\n });\n }\n }\n return result;\n}\nexport class RichEditBrackets {\n constructor(languageIdentifier, _brackets) {\n const brackets = groupFuzzyBrackets(_brackets);\n this.brackets = brackets.map((b, index) => {\n return new RichEditBracket(languageIdentifier, index, b.open, b.close, getRegexForBracketPair(b.open, b.close, brackets, index), getReversedRegexForBracketPair(b.open, b.close, brackets, index));\n });\n this.forwardRegex = getRegexForBrackets(this.brackets);\n this.reversedRegex = getReversedRegexForBrackets(this.brackets);\n this.textIsBracket = {};\n this.textIsOpenBracket = {};\n this.maxBracketLength = 0;\n for (const bracket of this.brackets) {\n for (const open of bracket.open) {\n this.textIsBracket[open] = bracket;\n this.textIsOpenBracket[open] = true;\n this.maxBracketLength = Math.max(this.maxBracketLength, open.length);\n }\n for (const close of bracket.close) {\n this.textIsBracket[close] = bracket;\n this.textIsOpenBracket[close] = false;\n this.maxBracketLength = Math.max(this.maxBracketLength, close.length);\n }\n }\n }\n}\nfunction collectSuperstrings(str, brackets, currentIndex, dest) {\n for (let i = 0, len = brackets.length; i < len; i++) {\n if (i === currentIndex) {\n continue;\n }\n const bracket = brackets[i];\n for (const open of bracket.open) {\n if (open.indexOf(str) >= 0) {\n dest.push(open);\n }\n }\n for (const close of bracket.close) {\n if (close.indexOf(str) >= 0) {\n dest.push(close);\n }\n }\n }\n}\nfunction lengthcmp(a, b) {\n return a.length - b.length;\n}\nfunction unique(arr) {\n if (arr.length <= 1) {\n return arr;\n }\n const result = [];\n const seen = new Set();\n for (const element of arr) {\n if (seen.has(element)) {\n continue;\n }\n result.push(element);\n seen.add(element);\n }\n return result;\n}\nfunction getRegexForBracketPair(open, close, brackets, currentIndex) {\n // search in all brackets for other brackets that are a superstring of these brackets\n let pieces = [];\n pieces = pieces.concat(open);\n pieces = pieces.concat(close);\n for (let i = 0, len = pieces.length; i < len; i++) {\n collectSuperstrings(pieces[i], brackets, currentIndex, pieces);\n }\n pieces = unique(pieces);\n pieces.sort(lengthcmp);\n pieces.reverse();\n return createBracketOrRegExp(pieces);\n}\nfunction getReversedRegexForBracketPair(open, close, brackets, currentIndex) {\n // search in all brackets for other brackets that are a superstring of these brackets\n let pieces = [];\n pieces = pieces.concat(open);\n pieces = pieces.concat(close);\n for (let i = 0, len = pieces.length; i < len; i++) {\n collectSuperstrings(pieces[i], brackets, currentIndex, pieces);\n }\n pieces = unique(pieces);\n pieces.sort(lengthcmp);\n pieces.reverse();\n return createBracketOrRegExp(pieces.map(toReversedString));\n}\nfunction getRegexForBrackets(brackets) {\n let pieces = [];\n for (const bracket of brackets) {\n for (const open of bracket.open) {\n pieces.push(open);\n }\n for (const close of bracket.close) {\n pieces.push(close);\n }\n }\n pieces = unique(pieces);\n return createBracketOrRegExp(pieces);\n}\nfunction getReversedRegexForBrackets(brackets) {\n let pieces = [];\n for (const bracket of brackets) {\n for (const open of bracket.open) {\n pieces.push(open);\n }\n for (const close of bracket.close) {\n pieces.push(close);\n }\n }\n pieces = unique(pieces);\n return createBracketOrRegExp(pieces.map(toReversedString));\n}\nfunction prepareBracketForRegExp(str) {\n // This bracket pair uses letters like e.g. \"begin\" - \"end\"\n const insertWordBoundaries = (/^[\\w ]+$/.test(str));\n str = strings.escapeRegExpCharacters(str);\n return (insertWordBoundaries ? `\\\\b${str}\\\\b` : str);\n}\nfunction createBracketOrRegExp(pieces) {\n let regexStr = `(${pieces.map(prepareBracketForRegExp).join(')|(')})`;\n return strings.createRegExp(regexStr, true);\n}\nconst toReversedString = (function () {\n function reverse(str) {\n if (stringBuilder.hasTextDecoder) {\n // create a Uint16Array and then use a TextDecoder to create a string\n const arr = new Uint16Array(str.length);\n let offset = 0;\n for (let i = str.length - 1; i >= 0; i--) {\n arr[offset++] = str.charCodeAt(i);\n }\n return stringBuilder.getPlatformTextDecoder().decode(arr);\n }\n else {\n let result = [], resultLen = 0;\n for (let i = str.length - 1; i >= 0; i--) {\n result[resultLen++] = str.charAt(i);\n }\n return result.join('');\n }\n }\n let lastInput = null;\n let lastOutput = null;\n return function toReversedString(str) {\n if (lastInput !== str) {\n lastInput = str;\n lastOutput = reverse(lastInput);\n }\n return lastOutput;\n };\n})();\nexport class BracketsUtils {\n static _findPrevBracketInText(reversedBracketRegex, lineNumber, reversedText, offset) {\n let m = reversedText.match(reversedBracketRegex);\n if (!m) {\n return null;\n }\n let matchOffset = reversedText.length - (m.index || 0);\n let matchLength = m[0].length;\n let absoluteMatchOffset = offset + matchOffset;\n return new Range(lineNumber, absoluteMatchOffset - matchLength + 1, lineNumber, absoluteMatchOffset + 1);\n }\n static findPrevBracketInRange(reversedBracketRegex, lineNumber, lineText, startOffset, endOffset) {\n // Because JS does not support backwards regex search, we search forwards in a reversed string with a reversed regex ;)\n const reversedLineText = toReversedString(lineText);\n const reversedSubstr = reversedLineText.substring(lineText.length - endOffset, lineText.length - startOffset);\n return this._findPrevBracketInText(reversedBracketRegex, lineNumber, reversedSubstr, startOffset);\n }\n static findNextBracketInText(bracketRegex, lineNumber, text, offset) {\n let m = text.match(bracketRegex);\n if (!m) {\n return null;\n }\n let matchOffset = m.index || 0;\n let matchLength = m[0].length;\n if (matchLength === 0) {\n return null;\n }\n let absoluteMatchOffset = offset + matchOffset;\n return new Range(lineNumber, absoluteMatchOffset + 1, lineNumber, absoluteMatchOffset + 1 + matchLength);\n }\n static findNextBracketInRange(bracketRegex, lineNumber, lineText, startOffset, endOffset) {\n const substr = lineText.substring(startOffset, endOffset);\n return this.findNextBracketInText(bracketRegex, lineNumber, substr, startOffset);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { LineTokens } from '../core/lineTokens.js';\nimport { NULL_STATE, nullTokenize2 } from './nullMode.js';\nconst fallback = {\n getInitialState: () => NULL_STATE,\n tokenize2: (buffer, hasEOL, state, deltaOffset) => nullTokenize2(0 /* Null */, buffer, state, deltaOffset)\n};\nexport function tokenizeToString(text, tokenizationSupport = fallback) {\n return _tokenizeToString(text, tokenizationSupport || fallback);\n}\nexport function tokenizeLineToHTML(text, viewLineTokens, colorMap, startOffset, endOffset, tabSize, useNbsp) {\n let result = `<div>`;\n let charIndex = startOffset;\n let tabsCharDelta = 0;\n for (let tokenIndex = 0, tokenCount = viewLineTokens.getCount(); tokenIndex < tokenCount; tokenIndex++) {\n const tokenEndIndex = viewLineTokens.getEndOffset(tokenIndex);\n if (tokenEndIndex <= startOffset) {\n continue;\n }\n let partContent = '';\n for (; charIndex < tokenEndIndex && charIndex < endOffset; charIndex++) {\n const charCode = text.charCodeAt(charIndex);\n switch (charCode) {\n case 9 /* Tab */:\n let insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\n tabsCharDelta += insertSpacesCount - 1;\n while (insertSpacesCount > 0) {\n partContent += useNbsp ? '&#160;' : ' ';\n insertSpacesCount--;\n }\n break;\n case 60 /* LessThan */:\n partContent += '&lt;';\n break;\n case 62 /* GreaterThan */:\n partContent += '&gt;';\n break;\n case 38 /* Ampersand */:\n partContent += '&amp;';\n break;\n case 0 /* Null */:\n partContent += '&#00;';\n break;\n case 65279 /* UTF8_BOM */:\n case 8232 /* LINE_SEPARATOR */:\n case 8233 /* PARAGRAPH_SEPARATOR */:\n case 133 /* NEXT_LINE */:\n partContent += '\\ufffd';\n break;\n case 13 /* CarriageReturn */:\n // zero width space, because carriage return would introduce a line break\n partContent += '&#8203';\n break;\n case 32 /* Space */:\n partContent += useNbsp ? '&#160;' : ' ';\n break;\n default:\n partContent += String.fromCharCode(charCode);\n }\n }\n result += `<span style=\"${viewLineTokens.getInlineStyle(tokenIndex, colorMap)}\">${partContent}</span>`;\n if (tokenEndIndex > endOffset || charIndex >= endOffset) {\n break;\n }\n }\n result += `</div>`;\n return result;\n}\nfunction _tokenizeToString(text, tokenizationSupport) {\n let result = `<div class=\"monaco-tokenized-source\">`;\n let lines = strings.splitLines(text);\n let currentState = tokenizationSupport.getInitialState();\n for (let i = 0, len = lines.length; i < len; i++) {\n let line = lines[i];\n if (i > 0) {\n result += `<br/>`;\n }\n let tokenizationResult = tokenizationSupport.tokenize2(line, true, currentState, 0);\n LineTokens.convertToEndOffset(tokenizationResult.tokens, line.length);\n let lineTokens = new LineTokens(tokenizationResult.tokens, line);\n let viewLineTokens = lineTokens.inflate();\n let startOffset = 0;\n for (let j = 0, lenJ = viewLineTokens.getCount(); j < lenJ; j++) {\n const type = viewLineTokens.getClassName(j);\n const endIndex = viewLineTokens.getEndOffset(j);\n result += `<span class=\"${type}\">${strings.escape(line.substring(startOffset, endIndex))}</span>`;\n startOffset = endIndex;\n }\n currentState = tokenizationResult.endState;\n }\n result += `</div>`;\n return result;\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const ID_EDITOR_WORKER_SERVICE = 'editorWorkerService';\nexport const IEditorWorkerService = createDecorator(ID_EDITOR_WORKER_SERVICE);\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 *--------------------------------------------------------------------------------------------*/\nimport { VSBuffer } from '../../../base/common/buffer.js';\nimport * as platform from '../../../base/common/platform.js';\nfunction reverseEndianness(arr) {\n for (let i = 0, len = arr.length; i < len; i += 4) {\n // flip bytes 0<->3 and 1<->2\n const b0 = arr[i + 0];\n const b1 = arr[i + 1];\n const b2 = arr[i + 2];\n const b3 = arr[i + 3];\n arr[i + 0] = b3;\n arr[i + 1] = b2;\n arr[i + 2] = b1;\n arr[i + 3] = b0;\n }\n}\nfunction toLittleEndianBuffer(arr) {\n const uint8Arr = new Uint8Array(arr.buffer, arr.byteOffset, arr.length * 4);\n if (!platform.isLittleEndian()) {\n // the byte order must be changed\n reverseEndianness(uint8Arr);\n }\n return VSBuffer.wrap(uint8Arr);\n}\nexport function encodeSemanticTokensDto(semanticTokens) {\n const dest = new Uint32Array(encodeSemanticTokensDtoSize(semanticTokens));\n let offset = 0;\n dest[offset++] = semanticTokens.id;\n if (semanticTokens.type === 'full') {\n dest[offset++] = 1 /* Full */;\n dest[offset++] = semanticTokens.data.length;\n dest.set(semanticTokens.data, offset);\n offset += semanticTokens.data.length;\n }\n else {\n dest[offset++] = 2 /* Delta */;\n dest[offset++] = semanticTokens.deltas.length;\n for (const delta of semanticTokens.deltas) {\n dest[offset++] = delta.start;\n dest[offset++] = delta.deleteCount;\n if (delta.data) {\n dest[offset++] = delta.data.length;\n dest.set(delta.data, offset);\n offset += delta.data.length;\n }\n else {\n dest[offset++] = 0;\n }\n }\n }\n return toLittleEndianBuffer(dest);\n}\nfunction encodeSemanticTokensDtoSize(semanticTokens) {\n let result = 0;\n result += (+1 // id\n + 1 // type\n );\n if (semanticTokens.type === 'full') {\n result += (+1 // data length\n + semanticTokens.data.length);\n }\n else {\n result += (+1 // delta count\n );\n result += (+1 // start\n + 1 // deleteCount\n + 1 // data length\n ) * semanticTokens.deltas.length;\n for (const delta of semanticTokens.deltas) {\n if (delta.data) {\n result += delta.data.length;\n }\n }\n }\n return result;\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { DocumentSemanticTokensProviderRegistry, DocumentRangeSemanticTokensProviderRegistry } from '../modes.js';\nimport { IModelService } from './modelService.js';\nimport { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js';\nimport { assertType } from '../../../base/common/types.js';\nimport { encodeSemanticTokensDto } from './semanticTokensDto.js';\nimport { Range } from '../core/range.js';\nexport function isSemanticTokens(v) {\n return v && !!(v.data);\n}\nexport function isSemanticTokensEdits(v) {\n return v && Array.isArray(v.edits);\n}\nexport function getDocumentSemanticTokens(model, lastResultId, token) {\n const provider = _getDocumentSemanticTokensProvider(model);\n if (!provider) {\n return null;\n }\n return {\n provider: provider,\n request: Promise.resolve(provider.provideDocumentSemanticTokens(model, lastResultId, token))\n };\n}\nfunction _getDocumentSemanticTokensProvider(model) {\n const result = DocumentSemanticTokensProviderRegistry.ordered(model);\n return (result.length > 0 ? result[0] : null);\n}\nexport function getDocumentRangeSemanticTokensProvider(model) {\n const result = DocumentRangeSemanticTokensProviderRegistry.ordered(model);\n return (result.length > 0 ? result[0] : null);\n}\nCommandsRegistry.registerCommand('_provideDocumentSemanticTokensLegend', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {\n const [uri] = args;\n assertType(uri instanceof URI);\n const model = accessor.get(IModelService).getModel(uri);\n if (!model) {\n return undefined;\n }\n const provider = _getDocumentSemanticTokensProvider(model);\n if (!provider) {\n // there is no provider => fall back to a document range semantic tokens provider\n return accessor.get(ICommandService).executeCommand('_provideDocumentRangeSemanticTokensLegend', uri);\n }\n return provider.getLegend();\n}));\nCommandsRegistry.registerCommand('_provideDocumentSemanticTokens', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {\n const [uri] = args;\n assertType(uri instanceof URI);\n const model = accessor.get(IModelService).getModel(uri);\n if (!model) {\n return undefined;\n }\n const r = getDocumentSemanticTokens(model, null, CancellationToken.None);\n if (!r) {\n // there is no provider => fall back to a document range semantic tokens provider\n return accessor.get(ICommandService).executeCommand('_provideDocumentRangeSemanticTokens', uri, model.getFullModelRange());\n }\n const { provider, request } = r;\n let result;\n try {\n result = yield request;\n }\n catch (err) {\n onUnexpectedExternalError(err);\n return undefined;\n }\n if (!result || !isSemanticTokens(result)) {\n return undefined;\n }\n const buff = encodeSemanticTokensDto({\n id: 0,\n type: 'full',\n data: result.data\n });\n if (result.resultId) {\n provider.releaseDocumentSemanticTokens(result.resultId);\n }\n return buff;\n}));\nCommandsRegistry.registerCommand('_provideDocumentRangeSemanticTokensLegend', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {\n const [uri] = args;\n assertType(uri instanceof URI);\n const model = accessor.get(IModelService).getModel(uri);\n if (!model) {\n return undefined;\n }\n const provider = getDocumentRangeSemanticTokensProvider(model);\n if (!provider) {\n return undefined;\n }\n return provider.getLegend();\n}));\nCommandsRegistry.registerCommand('_provideDocumentRangeSemanticTokens', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {\n const [uri, range] = args;\n assertType(uri instanceof URI);\n assertType(Range.isIRange(range));\n const model = accessor.get(IModelService).getModel(uri);\n if (!model) {\n return undefined;\n }\n const provider = getDocumentRangeSemanticTokensProvider(model);\n if (!provider) {\n // there is no provider\n return undefined;\n }\n let result;\n try {\n result = yield provider.provideDocumentRangeSemanticTokens(model, Range.lift(range), CancellationToken.None);\n }\n catch (err) {\n onUnexpectedExternalError(err);\n return undefined;\n }\n if (!result || !isSemanticTokens(result)) {\n return undefined;\n }\n return encodeSemanticTokensDto({\n id: 0,\n type: 'full',\n data: result.data\n });\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const IMarkerDecorationsService = createDecorator('markerDecorationsService');\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const IModeService = createDecorator('modeService');\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const IModelService = createDecorator('modelService');\nexport function shouldSynchronizeModel(model) {\n return (!model.isTooLargeForSyncing() && !model.isForSimpleWidget);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable, DisposableStore, dispose } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport * as errors from '../../../base/common/errors.js';\nimport { EDITOR_MODEL_DEFAULTS } from '../config/editorOptions.js';\nimport { TextModel } from '../model/textModel.js';\nimport { DocumentSemanticTokensProviderRegistry } from '../modes.js';\nimport { PLAINTEXT_LANGUAGE_IDENTIFIER } from '../modes/modesRegistry.js';\nimport { ITextResourcePropertiesService } from './textResourceConfigurationService.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nimport { ILogService } from '../../../platform/log/common/log.js';\nimport { IUndoRedoService } from '../../../platform/undoRedo/common/undoRedo.js';\nimport { StringSHA1 } from '../../../base/common/hash.js';\nimport { isEditStackElement } from '../model/editStack.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { SemanticTokensProviderStyling, toMultilineTokens2 } from './semanticTokensProviderStyling.js';\nimport { getDocumentSemanticTokens, isSemanticTokens, isSemanticTokensEdits } from './getSemanticTokens.js';\nfunction MODEL_ID(resource) {\n return resource.toString();\n}\nfunction computeModelSha1(model) {\n // compute the sha1\n const shaComputer = new StringSHA1();\n const snapshot = model.createSnapshot();\n let text;\n while ((text = snapshot.read())) {\n shaComputer.update(text);\n }\n return shaComputer.digest();\n}\nclass ModelData {\n constructor(model, onWillDispose, onDidChangeLanguage) {\n this._modelEventListeners = new DisposableStore();\n this.model = model;\n this._languageSelection = null;\n this._languageSelectionListener = null;\n this._modelEventListeners.add(model.onWillDispose(() => onWillDispose(model)));\n this._modelEventListeners.add(model.onDidChangeLanguage((e) => onDidChangeLanguage(model, e)));\n }\n _disposeLanguageSelection() {\n if (this._languageSelectionListener) {\n this._languageSelectionListener.dispose();\n this._languageSelectionListener = null;\n }\n }\n dispose() {\n this._modelEventListeners.dispose();\n this._disposeLanguageSelection();\n }\n setLanguage(languageSelection) {\n this._disposeLanguageSelection();\n this._languageSelection = languageSelection;\n this._languageSelectionListener = this._languageSelection.onDidChange(() => this.model.setMode(languageSelection.languageIdentifier));\n this.model.setMode(languageSelection.languageIdentifier);\n }\n}\nconst DEFAULT_EOL = (platform.isLinux || platform.isMacintosh) ? 1 /* LF */ : 2 /* CRLF */;\nclass DisposedModelInfo {\n constructor(uri, initialUndoRedoSnapshot, time, sharesUndoRedoStack, heapSize, sha1, versionId, alternativeVersionId) {\n this.uri = uri;\n this.initialUndoRedoSnapshot = initialUndoRedoSnapshot;\n this.time = time;\n this.sharesUndoRedoStack = sharesUndoRedoStack;\n this.heapSize = heapSize;\n this.sha1 = sha1;\n this.versionId = versionId;\n this.alternativeVersionId = alternativeVersionId;\n }\n}\nfunction schemaShouldMaintainUndoRedoElements(resource) {\n return (resource.scheme === Schemas.file\n || resource.scheme === Schemas.vscodeRemote\n || resource.scheme === Schemas.userData\n || resource.scheme === 'fake-fs' // for tests\n );\n}\nlet ModelServiceImpl = class ModelServiceImpl extends Disposable {\n constructor(_configurationService, _resourcePropertiesService, _themeService, _logService, _undoRedoService) {\n super();\n this._configurationService = _configurationService;\n this._resourcePropertiesService = _resourcePropertiesService;\n this._themeService = _themeService;\n this._logService = _logService;\n this._undoRedoService = _undoRedoService;\n this._onModelAdded = this._register(new Emitter());\n this.onModelAdded = this._onModelAdded.event;\n this._onModelRemoved = this._register(new Emitter());\n this.onModelRemoved = this._onModelRemoved.event;\n this._onModelModeChanged = this._register(new Emitter());\n this.onModelModeChanged = this._onModelModeChanged.event;\n this._modelCreationOptionsByLanguageAndResource = Object.create(null);\n this._models = {};\n this._disposedModels = new Map();\n this._disposedModelsHeapSize = 0;\n this._semanticStyling = this._register(new SemanticStyling(this._themeService, this._logService));\n this._register(this._configurationService.onDidChangeConfiguration(() => this._updateModelOptions()));\n this._updateModelOptions();\n this._register(new SemanticColoringFeature(this, this._themeService, this._configurationService, this._semanticStyling));\n }\n static _readModelOptions(config, isForSimpleWidget) {\n let tabSize = EDITOR_MODEL_DEFAULTS.tabSize;\n if (config.editor && typeof config.editor.tabSize !== 'undefined') {\n const parsedTabSize = parseInt(config.editor.tabSize, 10);\n if (!isNaN(parsedTabSize)) {\n tabSize = parsedTabSize;\n }\n if (tabSize < 1) {\n tabSize = 1;\n }\n }\n let indentSize = tabSize;\n if (config.editor && typeof config.editor.indentSize !== 'undefined' && config.editor.indentSize !== 'tabSize') {\n const parsedIndentSize = parseInt(config.editor.indentSize, 10);\n if (!isNaN(parsedIndentSize)) {\n indentSize = parsedIndentSize;\n }\n if (indentSize < 1) {\n indentSize = 1;\n }\n }\n let insertSpaces = EDITOR_MODEL_DEFAULTS.insertSpaces;\n if (config.editor && typeof config.editor.insertSpaces !== 'undefined') {\n insertSpaces = (config.editor.insertSpaces === 'false' ? false : Boolean(config.editor.insertSpaces));\n }\n let newDefaultEOL = DEFAULT_EOL;\n const eol = config.eol;\n if (eol === '\\r\\n') {\n newDefaultEOL = 2 /* CRLF */;\n }\n else if (eol === '\\n') {\n newDefaultEOL = 1 /* LF */;\n }\n let trimAutoWhitespace = EDITOR_MODEL_DEFAULTS.trimAutoWhitespace;\n if (config.editor && typeof config.editor.trimAutoWhitespace !== 'undefined') {\n trimAutoWhitespace = (config.editor.trimAutoWhitespace === 'false' ? false : Boolean(config.editor.trimAutoWhitespace));\n }\n let detectIndentation = EDITOR_MODEL_DEFAULTS.detectIndentation;\n if (config.editor && typeof config.editor.detectIndentation !== 'undefined') {\n detectIndentation = (config.editor.detectIndentation === 'false' ? false : Boolean(config.editor.detectIndentation));\n }\n let largeFileOptimizations = EDITOR_MODEL_DEFAULTS.largeFileOptimizations;\n if (config.editor && typeof config.editor.largeFileOptimizations !== 'undefined') {\n largeFileOptimizations = (config.editor.largeFileOptimizations === 'false' ? false : Boolean(config.editor.largeFileOptimizations));\n }\n return {\n isForSimpleWidget: isForSimpleWidget,\n tabSize: tabSize,\n indentSize: indentSize,\n insertSpaces: insertSpaces,\n detectIndentation: detectIndentation,\n defaultEOL: newDefaultEOL,\n trimAutoWhitespace: trimAutoWhitespace,\n largeFileOptimizations: largeFileOptimizations\n };\n }\n _getEOL(resource, language) {\n if (resource) {\n return this._resourcePropertiesService.getEOL(resource, language);\n }\n const eol = this._configurationService.getValue('files.eol', { overrideIdentifier: language });\n if (eol && eol !== 'auto') {\n return eol;\n }\n return platform.OS === 3 /* Linux */ || platform.OS === 2 /* Macintosh */ ? '\\n' : '\\r\\n';\n }\n _shouldRestoreUndoStack() {\n const result = this._configurationService.getValue('files.restoreUndoStack');\n if (typeof result === 'boolean') {\n return result;\n }\n return true;\n }\n getCreationOptions(language, resource, isForSimpleWidget) {\n let creationOptions = this._modelCreationOptionsByLanguageAndResource[language + resource];\n if (!creationOptions) {\n const editor = this._configurationService.getValue('editor', { overrideIdentifier: language, resource });\n const eol = this._getEOL(resource, language);\n creationOptions = ModelServiceImpl._readModelOptions({ editor, eol }, isForSimpleWidget);\n this._modelCreationOptionsByLanguageAndResource[language + resource] = creationOptions;\n }\n return creationOptions;\n }\n _updateModelOptions() {\n const oldOptionsByLanguageAndResource = this._modelCreationOptionsByLanguageAndResource;\n this._modelCreationOptionsByLanguageAndResource = Object.create(null);\n // Update options on all models\n const keys = Object.keys(this._models);\n for (let i = 0, len = keys.length; i < len; i++) {\n const modelId = keys[i];\n const modelData = this._models[modelId];\n const language = modelData.model.getLanguageIdentifier().language;\n const uri = modelData.model.uri;\n const oldOptions = oldOptionsByLanguageAndResource[language + uri];\n const newOptions = this.getCreationOptions(language, uri, modelData.model.isForSimpleWidget);\n ModelServiceImpl._setModelOptionsForModel(modelData.model, newOptions, oldOptions);\n }\n }\n static _setModelOptionsForModel(model, newOptions, currentOptions) {\n if (currentOptions && currentOptions.defaultEOL !== newOptions.defaultEOL && model.getLineCount() === 1) {\n model.setEOL(newOptions.defaultEOL === 1 /* LF */ ? 0 /* LF */ : 1 /* CRLF */);\n }\n if (currentOptions\n && (currentOptions.detectIndentation === newOptions.detectIndentation)\n && (currentOptions.insertSpaces === newOptions.insertSpaces)\n && (currentOptions.tabSize === newOptions.tabSize)\n && (currentOptions.indentSize === newOptions.indentSize)\n && (currentOptions.trimAutoWhitespace === newOptions.trimAutoWhitespace)) {\n // Same indent opts, no need to touch the model\n return;\n }\n if (newOptions.detectIndentation) {\n model.detectIndentation(newOptions.insertSpaces, newOptions.tabSize);\n model.updateOptions({\n trimAutoWhitespace: newOptions.trimAutoWhitespace\n });\n }\n else {\n model.updateOptions({\n insertSpaces: newOptions.insertSpaces,\n tabSize: newOptions.tabSize,\n indentSize: newOptions.indentSize,\n trimAutoWhitespace: newOptions.trimAutoWhitespace\n });\n }\n }\n // --- begin IModelService\n _insertDisposedModel(disposedModelData) {\n this._disposedModels.set(MODEL_ID(disposedModelData.uri), disposedModelData);\n this._disposedModelsHeapSize += disposedModelData.heapSize;\n }\n _removeDisposedModel(resource) {\n const disposedModelData = this._disposedModels.get(MODEL_ID(resource));\n if (disposedModelData) {\n this._disposedModelsHeapSize -= disposedModelData.heapSize;\n }\n this._disposedModels.delete(MODEL_ID(resource));\n return disposedModelData;\n }\n _ensureDisposedModelsHeapSize(maxModelsHeapSize) {\n if (this._disposedModelsHeapSize > maxModelsHeapSize) {\n // we must remove some old undo stack elements to free up some memory\n const disposedModels = [];\n this._disposedModels.forEach(entry => {\n if (!entry.sharesUndoRedoStack) {\n disposedModels.push(entry);\n }\n });\n disposedModels.sort((a, b) => a.time - b.time);\n while (disposedModels.length > 0 && this._disposedModelsHeapSize > maxModelsHeapSize) {\n const disposedModel = disposedModels.shift();\n this._removeDisposedModel(disposedModel.uri);\n if (disposedModel.initialUndoRedoSnapshot !== null) {\n this._undoRedoService.restoreSnapshot(disposedModel.initialUndoRedoSnapshot);\n }\n }\n }\n }\n _createModelData(value, languageIdentifier, resource, isForSimpleWidget) {\n // create & save the model\n const options = this.getCreationOptions(languageIdentifier.language, resource, isForSimpleWidget);\n const model = new TextModel(value, options, languageIdentifier, resource, this._undoRedoService);\n if (resource && this._disposedModels.has(MODEL_ID(resource))) {\n const disposedModelData = this._removeDisposedModel(resource);\n const elements = this._undoRedoService.getElements(resource);\n const sha1IsEqual = (computeModelSha1(model) === disposedModelData.sha1);\n if (sha1IsEqual || disposedModelData.sharesUndoRedoStack) {\n for (const element of elements.past) {\n if (isEditStackElement(element) && element.matchesResource(resource)) {\n element.setModel(model);\n }\n }\n for (const element of elements.future) {\n if (isEditStackElement(element) && element.matchesResource(resource)) {\n element.setModel(model);\n }\n }\n this._undoRedoService.setElementsValidFlag(resource, true, (element) => (isEditStackElement(element) && element.matchesResource(resource)));\n if (sha1IsEqual) {\n model._overwriteVersionId(disposedModelData.versionId);\n model._overwriteAlternativeVersionId(disposedModelData.alternativeVersionId);\n model._overwriteInitialUndoRedoSnapshot(disposedModelData.initialUndoRedoSnapshot);\n }\n }\n else {\n if (disposedModelData.initialUndoRedoSnapshot !== null) {\n this._undoRedoService.restoreSnapshot(disposedModelData.initialUndoRedoSnapshot);\n }\n }\n }\n const modelId = MODEL_ID(model.uri);\n if (this._models[modelId]) {\n // There already exists a model with this id => this is a programmer error\n throw new Error('ModelService: Cannot add model because it already exists!');\n }\n const modelData = new ModelData(model, (model) => this._onWillDispose(model), (model, e) => this._onDidChangeLanguage(model, e));\n this._models[modelId] = modelData;\n return modelData;\n }\n createModel(value, languageSelection, resource, isForSimpleWidget = false) {\n let modelData;\n if (languageSelection) {\n modelData = this._createModelData(value, languageSelection.languageIdentifier, resource, isForSimpleWidget);\n this.setMode(modelData.model, languageSelection);\n }\n else {\n modelData = this._createModelData(value, PLAINTEXT_LANGUAGE_IDENTIFIER, resource, isForSimpleWidget);\n }\n this._onModelAdded.fire(modelData.model);\n return modelData.model;\n }\n setMode(model, languageSelection) {\n if (!languageSelection) {\n return;\n }\n const modelData = this._models[MODEL_ID(model.uri)];\n if (!modelData) {\n return;\n }\n modelData.setLanguage(languageSelection);\n }\n getModels() {\n const ret = [];\n const keys = Object.keys(this._models);\n for (let i = 0, len = keys.length; i < len; i++) {\n const modelId = keys[i];\n ret.push(this._models[modelId].model);\n }\n return ret;\n }\n getModel(resource) {\n const modelId = MODEL_ID(resource);\n const modelData = this._models[modelId];\n if (!modelData) {\n return null;\n }\n return modelData.model;\n }\n getSemanticTokensProviderStyling(provider) {\n return this._semanticStyling.get(provider);\n }\n // --- end IModelService\n _onWillDispose(model) {\n const modelId = MODEL_ID(model.uri);\n const modelData = this._models[modelId];\n const sharesUndoRedoStack = (this._undoRedoService.getUriComparisonKey(model.uri) !== model.uri.toString());\n let maintainUndoRedoStack = false;\n let heapSize = 0;\n if (sharesUndoRedoStack || (this._shouldRestoreUndoStack() && schemaShouldMaintainUndoRedoElements(model.uri))) {\n const elements = this._undoRedoService.getElements(model.uri);\n if (elements.past.length > 0 || elements.future.length > 0) {\n for (const element of elements.past) {\n if (isEditStackElement(element) && element.matchesResource(model.uri)) {\n maintainUndoRedoStack = true;\n heapSize += element.heapSize(model.uri);\n element.setModel(model.uri); // remove reference from text buffer instance\n }\n }\n for (const element of elements.future) {\n if (isEditStackElement(element) && element.matchesResource(model.uri)) {\n maintainUndoRedoStack = true;\n heapSize += element.heapSize(model.uri);\n element.setModel(model.uri); // remove reference from text buffer instance\n }\n }\n }\n }\n const maxMemory = ModelServiceImpl.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK;\n if (!maintainUndoRedoStack) {\n if (!sharesUndoRedoStack) {\n const initialUndoRedoSnapshot = modelData.model.getInitialUndoRedoSnapshot();\n if (initialUndoRedoSnapshot !== null) {\n this._undoRedoService.restoreSnapshot(initialUndoRedoSnapshot);\n }\n }\n }\n else if (!sharesUndoRedoStack && heapSize > maxMemory) {\n // the undo stack for this file would never fit in the configured memory, so don't bother with it.\n const initialUndoRedoSnapshot = modelData.model.getInitialUndoRedoSnapshot();\n if (initialUndoRedoSnapshot !== null) {\n this._undoRedoService.restoreSnapshot(initialUndoRedoSnapshot);\n }\n }\n else {\n this._ensureDisposedModelsHeapSize(maxMemory - heapSize);\n // We only invalidate the elements, but they remain in the undo-redo service.\n this._undoRedoService.setElementsValidFlag(model.uri, false, (element) => (isEditStackElement(element) && element.matchesResource(model.uri)));\n this._insertDisposedModel(new DisposedModelInfo(model.uri, modelData.model.getInitialUndoRedoSnapshot(), Date.now(), sharesUndoRedoStack, heapSize, computeModelSha1(model), model.getVersionId(), model.getAlternativeVersionId()));\n }\n delete this._models[modelId];\n modelData.dispose();\n // clean up cache\n delete this._modelCreationOptionsByLanguageAndResource[model.getLanguageIdentifier().language + model.uri];\n this._onModelRemoved.fire(model);\n }\n _onDidChangeLanguage(model, e) {\n const oldModeId = e.oldLanguage;\n const newModeId = model.getLanguageIdentifier().language;\n const oldOptions = this.getCreationOptions(oldModeId, model.uri, model.isForSimpleWidget);\n const newOptions = this.getCreationOptions(newModeId, model.uri, model.isForSimpleWidget);\n ModelServiceImpl._setModelOptionsForModel(model, newOptions, oldOptions);\n this._onModelModeChanged.fire({ model, oldModeId });\n }\n};\nModelServiceImpl.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK = 20 * 1024 * 1024;\nModelServiceImpl = __decorate([\n __param(0, IConfigurationService),\n __param(1, ITextResourcePropertiesService),\n __param(2, IThemeService),\n __param(3, ILogService),\n __param(4, IUndoRedoService)\n], ModelServiceImpl);\nexport { ModelServiceImpl };\nexport const SEMANTIC_HIGHLIGHTING_SETTING_ID = 'editor.semanticHighlighting';\nexport function isSemanticColoringEnabled(model, themeService, configurationService) {\n var _a;\n const setting = (_a = configurationService.getValue(SEMANTIC_HIGHLIGHTING_SETTING_ID, { overrideIdentifier: model.getLanguageIdentifier().language, resource: model.uri })) === null || _a === void 0 ? void 0 : _a.enabled;\n if (typeof setting === 'boolean') {\n return setting;\n }\n return themeService.getColorTheme().semanticHighlighting;\n}\nclass SemanticColoringFeature extends Disposable {\n constructor(modelService, themeService, configurationService, semanticStyling) {\n super();\n this._watchers = Object.create(null);\n this._semanticStyling = semanticStyling;\n const register = (model) => {\n this._watchers[model.uri.toString()] = new ModelSemanticColoring(model, themeService, this._semanticStyling);\n };\n const deregister = (model, modelSemanticColoring) => {\n modelSemanticColoring.dispose();\n delete this._watchers[model.uri.toString()];\n };\n const handleSettingOrThemeChange = () => {\n for (let model of modelService.getModels()) {\n const curr = this._watchers[model.uri.toString()];\n if (isSemanticColoringEnabled(model, themeService, configurationService)) {\n if (!curr) {\n register(model);\n }\n }\n else {\n if (curr) {\n deregister(model, curr);\n }\n }\n }\n };\n this._register(modelService.onModelAdded((model) => {\n if (isSemanticColoringEnabled(model, themeService, configurationService)) {\n register(model);\n }\n }));\n this._register(modelService.onModelRemoved((model) => {\n const curr = this._watchers[model.uri.toString()];\n if (curr) {\n deregister(model, curr);\n }\n }));\n this._register(configurationService.onDidChangeConfiguration(e => {\n if (e.affectsConfiguration(SEMANTIC_HIGHLIGHTING_SETTING_ID)) {\n handleSettingOrThemeChange();\n }\n }));\n this._register(themeService.onDidColorThemeChange(handleSettingOrThemeChange));\n }\n}\nclass SemanticStyling extends Disposable {\n constructor(_themeService, _logService) {\n super();\n this._themeService = _themeService;\n this._logService = _logService;\n this._caches = new WeakMap();\n this._register(this._themeService.onDidColorThemeChange(() => {\n this._caches = new WeakMap();\n }));\n }\n get(provider) {\n if (!this._caches.has(provider)) {\n this._caches.set(provider, new SemanticTokensProviderStyling(provider.getLegend(), this._themeService, this._logService));\n }\n return this._caches.get(provider);\n }\n}\nclass SemanticTokensResponse {\n constructor(_provider, resultId, data) {\n this._provider = _provider;\n this.resultId = resultId;\n this.data = data;\n }\n dispose() {\n this._provider.releaseDocumentSemanticTokens(this.resultId);\n }\n}\nexport class ModelSemanticColoring extends Disposable {\n constructor(model, themeService, stylingProvider) {\n super();\n this._isDisposed = false;\n this._model = model;\n this._semanticStyling = stylingProvider;\n this._fetchDocumentSemanticTokens = this._register(new RunOnceScheduler(() => this._fetchDocumentSemanticTokensNow(), ModelSemanticColoring.FETCH_DOCUMENT_SEMANTIC_TOKENS_DELAY));\n this._currentDocumentResponse = null;\n this._currentDocumentRequestCancellationTokenSource = null;\n this._documentProvidersChangeListeners = [];\n this._register(this._model.onDidChangeContent(() => {\n if (!this._fetchDocumentSemanticTokens.isScheduled()) {\n this._fetchDocumentSemanticTokens.schedule();\n }\n }));\n this._register(this._model.onDidChangeLanguage(() => {\n // clear any outstanding state\n if (this._currentDocumentResponse) {\n this._currentDocumentResponse.dispose();\n this._currentDocumentResponse = null;\n }\n if (this._currentDocumentRequestCancellationTokenSource) {\n this._currentDocumentRequestCancellationTokenSource.cancel();\n this._currentDocumentRequestCancellationTokenSource = null;\n }\n this._setDocumentSemanticTokens(null, null, null, []);\n this._fetchDocumentSemanticTokens.schedule(0);\n }));\n const bindDocumentChangeListeners = () => {\n dispose(this._documentProvidersChangeListeners);\n this._documentProvidersChangeListeners = [];\n for (const provider of DocumentSemanticTokensProviderRegistry.all(model)) {\n if (typeof provider.onDidChange === 'function') {\n this._documentProvidersChangeListeners.push(provider.onDidChange(() => this._fetchDocumentSemanticTokens.schedule(0)));\n }\n }\n };\n bindDocumentChangeListeners();\n this._register(DocumentSemanticTokensProviderRegistry.onDidChange(() => {\n bindDocumentChangeListeners();\n this._fetchDocumentSemanticTokens.schedule();\n }));\n this._register(themeService.onDidColorThemeChange(_ => {\n // clear out existing tokens\n this._setDocumentSemanticTokens(null, null, null, []);\n this._fetchDocumentSemanticTokens.schedule();\n }));\n this._fetchDocumentSemanticTokens.schedule(0);\n }\n dispose() {\n if (this._currentDocumentResponse) {\n this._currentDocumentResponse.dispose();\n this._currentDocumentResponse = null;\n }\n if (this._currentDocumentRequestCancellationTokenSource) {\n this._currentDocumentRequestCancellationTokenSource.cancel();\n this._currentDocumentRequestCancellationTokenSource = null;\n }\n this._setDocumentSemanticTokens(null, null, null, []);\n this._isDisposed = true;\n super.dispose();\n }\n _fetchDocumentSemanticTokensNow() {\n if (this._currentDocumentRequestCancellationTokenSource) {\n // there is already a request running, let it finish...\n return;\n }\n const cancellationTokenSource = new CancellationTokenSource();\n const lastResultId = this._currentDocumentResponse ? this._currentDocumentResponse.resultId || null : null;\n const r = getDocumentSemanticTokens(this._model, lastResultId, cancellationTokenSource.token);\n if (!r) {\n // there is no provider\n if (this._currentDocumentResponse) {\n // there are semantic tokens set\n this._model.setSemanticTokens(null, false);\n }\n return;\n }\n const { provider, request } = r;\n this._currentDocumentRequestCancellationTokenSource = cancellationTokenSource;\n const pendingChanges = [];\n const contentChangeListener = this._model.onDidChangeContent((e) => {\n pendingChanges.push(e);\n });\n const styling = this._semanticStyling.get(provider);\n request.then((res) => {\n this._currentDocumentRequestCancellationTokenSource = null;\n contentChangeListener.dispose();\n this._setDocumentSemanticTokens(provider, res || null, styling, pendingChanges);\n }, (err) => {\n const isExpectedError = err && (errors.isPromiseCanceledError(err) || (typeof err.message === 'string' && err.message.indexOf('busy') !== -1));\n if (!isExpectedError) {\n errors.onUnexpectedError(err);\n }\n // Semantic tokens eats up all errors and considers errors to mean that the result is temporarily not available\n // The API does not have a special error kind to express this...\n this._currentDocumentRequestCancellationTokenSource = null;\n contentChangeListener.dispose();\n if (pendingChanges.length > 0) {\n // More changes occurred while the request was running\n if (!this._fetchDocumentSemanticTokens.isScheduled()) {\n this._fetchDocumentSemanticTokens.schedule();\n }\n }\n });\n }\n static _copy(src, srcOffset, dest, destOffset, length) {\n for (let i = 0; i < length; i++) {\n dest[destOffset + i] = src[srcOffset + i];\n }\n }\n _setDocumentSemanticTokens(provider, tokens, styling, pendingChanges) {\n const currentResponse = this._currentDocumentResponse;\n const rescheduleIfNeeded = () => {\n if (pendingChanges.length > 0 && !this._fetchDocumentSemanticTokens.isScheduled()) {\n this._fetchDocumentSemanticTokens.schedule();\n }\n };\n if (this._currentDocumentResponse) {\n this._currentDocumentResponse.dispose();\n this._currentDocumentResponse = null;\n }\n if (this._isDisposed) {\n // disposed!\n if (provider && tokens) {\n provider.releaseDocumentSemanticTokens(tokens.resultId);\n }\n return;\n }\n if (!provider || !styling) {\n this._model.setSemanticTokens(null, false);\n return;\n }\n if (!tokens) {\n this._model.setSemanticTokens(null, true);\n rescheduleIfNeeded();\n return;\n }\n if (isSemanticTokensEdits(tokens)) {\n if (!currentResponse) {\n // not possible!\n this._model.setSemanticTokens(null, true);\n return;\n }\n if (tokens.edits.length === 0) {\n // nothing to do!\n tokens = {\n resultId: tokens.resultId,\n data: currentResponse.data\n };\n }\n else {\n let deltaLength = 0;\n for (const edit of tokens.edits) {\n deltaLength += (edit.data ? edit.data.length : 0) - edit.deleteCount;\n }\n const srcData = currentResponse.data;\n const destData = new Uint32Array(srcData.length + deltaLength);\n let srcLastStart = srcData.length;\n let destLastStart = destData.length;\n for (let i = tokens.edits.length - 1; i >= 0; i--) {\n const edit = tokens.edits[i];\n const copyCount = srcLastStart - (edit.start + edit.deleteCount);\n if (copyCount > 0) {\n ModelSemanticColoring._copy(srcData, srcLastStart - copyCount, destData, destLastStart - copyCount, copyCount);\n destLastStart -= copyCount;\n }\n if (edit.data) {\n ModelSemanticColoring._copy(edit.data, 0, destData, destLastStart - edit.data.length, edit.data.length);\n destLastStart -= edit.data.length;\n }\n srcLastStart = edit.start;\n }\n if (srcLastStart > 0) {\n ModelSemanticColoring._copy(srcData, 0, destData, 0, srcLastStart);\n }\n tokens = {\n resultId: tokens.resultId,\n data: destData\n };\n }\n }\n if (isSemanticTokens(tokens)) {\n this._currentDocumentResponse = new SemanticTokensResponse(provider, tokens.resultId, tokens.data);\n const result = toMultilineTokens2(tokens, styling, this._model.getLanguageIdentifier());\n // Adjust incoming semantic tokens\n if (pendingChanges.length > 0) {\n // More changes occurred while the request was running\n // We need to:\n // 1. Adjust incoming semantic tokens\n // 2. Request them again\n for (const change of pendingChanges) {\n for (const area of result) {\n for (const singleChange of change.changes) {\n area.applyEdit(singleChange.range, singleChange.text);\n }\n }\n }\n }\n this._model.setSemanticTokens(result, true);\n }\n else {\n this._model.setSemanticTokens(null, true);\n }\n rescheduleIfNeeded();\n }\n}\nModelSemanticColoring.FETCH_DOCUMENT_SEMANTIC_TOKENS_DELAY = 300;\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const ITextModelService = createDecorator('textModelService');\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 *--------------------------------------------------------------------------------------------*/\nimport { TokenMetadata } from '../modes.js';\nimport { LogLevel } from '../../../platform/log/common/log.js';\nimport { MultilineTokens2, SparseEncodedTokens } from '../model/tokensStore.js';\nexport class SemanticTokensProviderStyling {\n constructor(_legend, _themeService, _logService) {\n this._legend = _legend;\n this._themeService = _themeService;\n this._logService = _logService;\n this._hashTable = new HashTable();\n this._hasWarnedOverlappingTokens = false;\n }\n getMetadata(tokenTypeIndex, tokenModifierSet, languageId) {\n const entry = this._hashTable.get(tokenTypeIndex, tokenModifierSet, languageId.id);\n let metadata;\n if (entry) {\n metadata = entry.metadata;\n if (this._logService.getLevel() === LogLevel.Trace) {\n this._logService.trace(`SemanticTokensProviderStyling [CACHED] ${tokenTypeIndex} / ${tokenModifierSet}: foreground ${TokenMetadata.getForeground(metadata)}, fontStyle ${TokenMetadata.getFontStyle(metadata).toString(2)}`);\n }\n }\n else {\n let tokenType = this._legend.tokenTypes[tokenTypeIndex];\n const tokenModifiers = [];\n if (tokenType) {\n let modifierSet = tokenModifierSet;\n for (let modifierIndex = 0; modifierSet > 0 && modifierIndex < this._legend.tokenModifiers.length; modifierIndex++) {\n if (modifierSet & 1) {\n tokenModifiers.push(this._legend.tokenModifiers[modifierIndex]);\n }\n modifierSet = modifierSet >> 1;\n }\n if (modifierSet > 0 && this._logService.getLevel() === LogLevel.Trace) {\n this._logService.trace(`SemanticTokensProviderStyling: unknown token modifier index: ${tokenModifierSet.toString(2)} for legend: ${JSON.stringify(this._legend.tokenModifiers)}`);\n tokenModifiers.push('not-in-legend');\n }\n const tokenStyle = this._themeService.getColorTheme().getTokenStyleMetadata(tokenType, tokenModifiers, languageId.language);\n if (typeof tokenStyle === 'undefined') {\n metadata = 2147483647 /* NO_STYLING */;\n }\n else {\n metadata = 0;\n if (typeof tokenStyle.italic !== 'undefined') {\n const italicBit = (tokenStyle.italic ? 1 /* Italic */ : 0) << 11 /* FONT_STYLE_OFFSET */;\n metadata |= italicBit | 1 /* SEMANTIC_USE_ITALIC */;\n }\n if (typeof tokenStyle.bold !== 'undefined') {\n const boldBit = (tokenStyle.bold ? 2 /* Bold */ : 0) << 11 /* FONT_STYLE_OFFSET */;\n metadata |= boldBit | 2 /* SEMANTIC_USE_BOLD */;\n }\n if (typeof tokenStyle.underline !== 'undefined') {\n const underlineBit = (tokenStyle.underline ? 4 /* Underline */ : 0) << 11 /* FONT_STYLE_OFFSET */;\n metadata |= underlineBit | 4 /* SEMANTIC_USE_UNDERLINE */;\n }\n if (tokenStyle.foreground) {\n const foregroundBits = (tokenStyle.foreground) << 14 /* FOREGROUND_OFFSET */;\n metadata |= foregroundBits | 8 /* SEMANTIC_USE_FOREGROUND */;\n }\n if (metadata === 0) {\n // Nothing!\n metadata = 2147483647 /* NO_STYLING */;\n }\n }\n }\n else {\n if (this._logService.getLevel() === LogLevel.Trace) {\n this._logService.trace(`SemanticTokensProviderStyling: unknown token type index: ${tokenTypeIndex} for legend: ${JSON.stringify(this._legend.tokenTypes)}`);\n }\n metadata = 2147483647 /* NO_STYLING */;\n tokenType = 'not-in-legend';\n }\n this._hashTable.add(tokenTypeIndex, tokenModifierSet, languageId.id, metadata);\n if (this._logService.getLevel() === LogLevel.Trace) {\n this._logService.trace(`SemanticTokensProviderStyling ${tokenTypeIndex} (${tokenType}) / ${tokenModifierSet} (${tokenModifiers.join(' ')}): foreground ${TokenMetadata.getForeground(metadata)}, fontStyle ${TokenMetadata.getFontStyle(metadata).toString(2)}`);\n }\n }\n return metadata;\n }\n warnOverlappingSemanticTokens(lineNumber, startColumn) {\n if (!this._hasWarnedOverlappingTokens) {\n this._hasWarnedOverlappingTokens = true;\n console.warn(`Overlapping semantic tokens detected at lineNumber ${lineNumber}, column ${startColumn}`);\n }\n }\n}\nexport function toMultilineTokens2(tokens, styling, languageId) {\n const srcData = tokens.data;\n const tokenCount = (tokens.data.length / 5) | 0;\n const tokensPerArea = Math.max(Math.ceil(tokenCount / 1024 /* DesiredMaxAreas */), 400 /* DesiredTokensPerArea */);\n const result = [];\n let tokenIndex = 0;\n let lastLineNumber = 1;\n let lastStartCharacter = 0;\n while (tokenIndex < tokenCount) {\n const tokenStartIndex = tokenIndex;\n let tokenEndIndex = Math.min(tokenStartIndex + tokensPerArea, tokenCount);\n // Keep tokens on the same line in the same area...\n if (tokenEndIndex < tokenCount) {\n let smallTokenEndIndex = tokenEndIndex;\n while (smallTokenEndIndex - 1 > tokenStartIndex && srcData[5 * smallTokenEndIndex] === 0) {\n smallTokenEndIndex--;\n }\n if (smallTokenEndIndex - 1 === tokenStartIndex) {\n // there are so many tokens on this line that our area would be empty, we must now go right\n let bigTokenEndIndex = tokenEndIndex;\n while (bigTokenEndIndex + 1 < tokenCount && srcData[5 * bigTokenEndIndex] === 0) {\n bigTokenEndIndex++;\n }\n tokenEndIndex = bigTokenEndIndex;\n }\n else {\n tokenEndIndex = smallTokenEndIndex;\n }\n }\n let destData = new Uint32Array((tokenEndIndex - tokenStartIndex) * 4);\n let destOffset = 0;\n let areaLine = 0;\n let prevLineNumber = 0;\n let prevStartCharacter = 0;\n let prevEndCharacter = 0;\n while (tokenIndex < tokenEndIndex) {\n const srcOffset = 5 * tokenIndex;\n const deltaLine = srcData[srcOffset];\n const deltaCharacter = srcData[srcOffset + 1];\n const lineNumber = lastLineNumber + deltaLine;\n const startCharacter = (deltaLine === 0 ? lastStartCharacter + deltaCharacter : deltaCharacter);\n const length = srcData[srcOffset + 2];\n const tokenTypeIndex = srcData[srcOffset + 3];\n const tokenModifierSet = srcData[srcOffset + 4];\n const metadata = styling.getMetadata(tokenTypeIndex, tokenModifierSet, languageId);\n if (metadata !== 2147483647 /* NO_STYLING */) {\n if (areaLine === 0) {\n areaLine = lineNumber;\n }\n if (prevLineNumber === lineNumber && prevEndCharacter > startCharacter) {\n styling.warnOverlappingSemanticTokens(lineNumber, startCharacter + 1);\n if (prevStartCharacter < startCharacter) {\n // the previous token survives after the overlapping one\n destData[destOffset - 4 + 2] = startCharacter;\n }\n else {\n // the previous token is entirely covered by the overlapping one\n destOffset -= 4;\n }\n }\n destData[destOffset] = lineNumber - areaLine;\n destData[destOffset + 1] = startCharacter;\n destData[destOffset + 2] = startCharacter + length;\n destData[destOffset + 3] = metadata;\n destOffset += 4;\n prevLineNumber = lineNumber;\n prevStartCharacter = startCharacter;\n prevEndCharacter = startCharacter + length;\n }\n lastLineNumber = lineNumber;\n lastStartCharacter = startCharacter;\n tokenIndex++;\n }\n if (destOffset !== destData.length) {\n destData = destData.subarray(0, destOffset);\n }\n const tokens = new MultilineTokens2(areaLine, new SparseEncodedTokens(destData));\n result.push(tokens);\n }\n return result;\n}\nclass HashTableEntry {\n constructor(tokenTypeIndex, tokenModifierSet, languageId, metadata) {\n this.tokenTypeIndex = tokenTypeIndex;\n this.tokenModifierSet = tokenModifierSet;\n this.languageId = languageId;\n this.metadata = metadata;\n this.next = null;\n }\n}\nclass HashTable {\n constructor() {\n this._elementsCount = 0;\n this._currentLengthIndex = 0;\n this._currentLength = HashTable._SIZES[this._currentLengthIndex];\n this._growCount = Math.round(this._currentLengthIndex + 1 < HashTable._SIZES.length ? 2 / 3 * this._currentLength : 0);\n this._elements = [];\n HashTable._nullOutEntries(this._elements, this._currentLength);\n }\n static _nullOutEntries(entries, length) {\n for (let i = 0; i < length; i++) {\n entries[i] = null;\n }\n }\n _hash2(n1, n2) {\n return (((n1 << 5) - n1) + n2) | 0; // n1 * 31 + n2, keep as int32\n }\n _hashFunc(tokenTypeIndex, tokenModifierSet, languageId) {\n return this._hash2(this._hash2(tokenTypeIndex, tokenModifierSet), languageId) % this._currentLength;\n }\n get(tokenTypeIndex, tokenModifierSet, languageId) {\n const hash = this._hashFunc(tokenTypeIndex, tokenModifierSet, languageId);\n let p = this._elements[hash];\n while (p) {\n if (p.tokenTypeIndex === tokenTypeIndex && p.tokenModifierSet === tokenModifierSet && p.languageId === languageId) {\n return p;\n }\n p = p.next;\n }\n return null;\n }\n add(tokenTypeIndex, tokenModifierSet, languageId, metadata) {\n this._elementsCount++;\n if (this._growCount !== 0 && this._elementsCount >= this._growCount) {\n // expand!\n const oldElements = this._elements;\n this._currentLengthIndex++;\n this._currentLength = HashTable._SIZES[this._currentLengthIndex];\n this._growCount = Math.round(this._currentLengthIndex + 1 < HashTable._SIZES.length ? 2 / 3 * this._currentLength : 0);\n this._elements = [];\n HashTable._nullOutEntries(this._elements, this._currentLength);\n for (const first of oldElements) {\n let p = first;\n while (p) {\n const oldNext = p.next;\n p.next = null;\n this._add(p);\n p = oldNext;\n }\n }\n }\n this._add(new HashTableEntry(tokenTypeIndex, tokenModifierSet, languageId, metadata));\n }\n _add(element) {\n const hash = this._hashFunc(element.tokenTypeIndex, element.tokenModifierSet, element.languageId);\n element.next = this._elements[hash];\n this._elements[hash] = element;\n }\n}\nHashTable._SIZES = [3, 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381, 32749, 65521, 131071, 262139, 524287, 1048573, 2097143];\n","import { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const ITextResourceConfigurationService = createDecorator('textResourceConfigurationService');\nexport const ITextResourcePropertiesService = createDecorator('textResourcePropertiesService');\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../nls.js';\nexport var AccessibilityHelpNLS;\n(function (AccessibilityHelpNLS) {\n AccessibilityHelpNLS.noSelection = nls.localize(\"noSelection\", \"No selection\");\n AccessibilityHelpNLS.singleSelectionRange = nls.localize(\"singleSelectionRange\", \"Line {0}, Column {1} ({2} selected)\");\n AccessibilityHelpNLS.singleSelection = nls.localize(\"singleSelection\", \"Line {0}, Column {1}\");\n AccessibilityHelpNLS.multiSelectionRange = nls.localize(\"multiSelectionRange\", \"{0} selections ({1} characters selected)\");\n AccessibilityHelpNLS.multiSelection = nls.localize(\"multiSelection\", \"{0} selections\");\n AccessibilityHelpNLS.emergencyConfOn = nls.localize(\"emergencyConfOn\", \"Now changing the setting `accessibilitySupport` to 'on'.\");\n AccessibilityHelpNLS.openingDocs = nls.localize(\"openingDocs\", \"Now opening the Editor Accessibility documentation page.\");\n AccessibilityHelpNLS.readonlyDiffEditor = nls.localize(\"readonlyDiffEditor\", \" in a read-only pane of a diff editor.\");\n AccessibilityHelpNLS.editableDiffEditor = nls.localize(\"editableDiffEditor\", \" in a pane of a diff editor.\");\n AccessibilityHelpNLS.readonlyEditor = nls.localize(\"readonlyEditor\", \" in a read-only code editor\");\n AccessibilityHelpNLS.editableEditor = nls.localize(\"editableEditor\", \" in a code editor\");\n AccessibilityHelpNLS.changeConfigToOnMac = nls.localize(\"changeConfigToOnMac\", \"To configure the editor to be optimized for usage with a Screen Reader press Command+E now.\");\n AccessibilityHelpNLS.changeConfigToOnWinLinux = nls.localize(\"changeConfigToOnWinLinux\", \"To configure the editor to be optimized for usage with a Screen Reader press Control+E now.\");\n AccessibilityHelpNLS.auto_on = nls.localize(\"auto_on\", \"The editor is configured to be optimized for usage with a Screen Reader.\");\n AccessibilityHelpNLS.auto_off = nls.localize(\"auto_off\", \"The editor is configured to never be optimized for usage with a Screen Reader, which is not the case at this time.\");\n AccessibilityHelpNLS.tabFocusModeOnMsg = nls.localize(\"tabFocusModeOnMsg\", \"Pressing Tab in the current editor will move focus to the next focusable element. Toggle this behavior by pressing {0}.\");\n AccessibilityHelpNLS.tabFocusModeOnMsgNoKb = nls.localize(\"tabFocusModeOnMsgNoKb\", \"Pressing Tab in the current editor will move focus to the next focusable element. The command {0} is currently not triggerable by a keybinding.\");\n AccessibilityHelpNLS.tabFocusModeOffMsg = nls.localize(\"tabFocusModeOffMsg\", \"Pressing Tab in the current editor will insert the tab character. Toggle this behavior by pressing {0}.\");\n AccessibilityHelpNLS.tabFocusModeOffMsgNoKb = nls.localize(\"tabFocusModeOffMsgNoKb\", \"Pressing Tab in the current editor will insert the tab character. The command {0} is currently not triggerable by a keybinding.\");\n AccessibilityHelpNLS.openDocMac = nls.localize(\"openDocMac\", \"Press Command+H now to open a browser window with more information related to editor accessibility.\");\n AccessibilityHelpNLS.openDocWinLinux = nls.localize(\"openDocWinLinux\", \"Press Control+H now to open a browser window with more information related to editor accessibility.\");\n AccessibilityHelpNLS.outroMsg = nls.localize(\"outroMsg\", \"You can dismiss this tooltip and return to the editor by pressing Escape or Shift+Escape.\");\n AccessibilityHelpNLS.showAccessibilityHelpAction = nls.localize(\"showAccessibilityHelpAction\", \"Show Accessibility Help\");\n})(AccessibilityHelpNLS || (AccessibilityHelpNLS = {}));\nexport var InspectTokensNLS;\n(function (InspectTokensNLS) {\n InspectTokensNLS.inspectTokensAction = nls.localize('inspectTokens', \"Developer: Inspect Tokens\");\n})(InspectTokensNLS || (InspectTokensNLS = {}));\nexport var GoToLineNLS;\n(function (GoToLineNLS) {\n GoToLineNLS.gotoLineActionLabel = nls.localize('gotoLineActionLabel', \"Go to Line/Column...\");\n})(GoToLineNLS || (GoToLineNLS = {}));\nexport var QuickHelpNLS;\n(function (QuickHelpNLS) {\n QuickHelpNLS.helpQuickAccessActionLabel = nls.localize('helpQuickAccess', \"Show all Quick Access Providers\");\n})(QuickHelpNLS || (QuickHelpNLS = {}));\nexport var QuickCommandNLS;\n(function (QuickCommandNLS) {\n QuickCommandNLS.quickCommandActionLabel = nls.localize('quickCommandActionLabel', \"Command Palette\");\n QuickCommandNLS.quickCommandHelp = nls.localize('quickCommandActionHelp', \"Show And Run Commands\");\n})(QuickCommandNLS || (QuickCommandNLS = {}));\nexport var QuickOutlineNLS;\n(function (QuickOutlineNLS) {\n QuickOutlineNLS.quickOutlineActionLabel = nls.localize('quickOutlineActionLabel', \"Go to Symbol...\");\n QuickOutlineNLS.quickOutlineByCategoryActionLabel = nls.localize('quickOutlineByCategoryActionLabel', \"Go to Symbol by Category...\");\n})(QuickOutlineNLS || (QuickOutlineNLS = {}));\nexport var StandaloneCodeEditorNLS;\n(function (StandaloneCodeEditorNLS) {\n StandaloneCodeEditorNLS.editorViewAccessibleLabel = nls.localize('editorViewAccessibleLabel', \"Editor content\");\n StandaloneCodeEditorNLS.accessibilityHelpMessage = nls.localize('accessibilityHelpMessage', \"Press Alt+F1 for Accessibility Options.\");\n})(StandaloneCodeEditorNLS || (StandaloneCodeEditorNLS = {}));\nexport var ToggleHighContrastNLS;\n(function (ToggleHighContrastNLS) {\n ToggleHighContrastNLS.toggleHighContrast = nls.localize('toggleHighContrast', \"Toggle High Contrast Theme\");\n})(ToggleHighContrastNLS || (ToggleHighContrastNLS = {}));\nexport var SimpleServicesNLS;\n(function (SimpleServicesNLS) {\n SimpleServicesNLS.bulkEditServiceSummary = nls.localize('bulkEditServiceSummary', \"Made {0} edits in {1} files\");\n})(SimpleServicesNLS || (SimpleServicesNLS = {}));\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { Color, RGBA } from '../../../base/common/color.js';\nimport { activeContrastBorder, editorBackground, editorForeground, registerColor, editorWarningForeground, editorInfoForeground, editorWarningBorder, editorInfoBorder, contrastBorder, editorFindMatchHighlight } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\n/**\n * Definition of the editor colors\n */\nexport const editorLineHighlight = registerColor('editor.lineHighlightBackground', { dark: null, light: null, hc: null }, nls.localize('lineHighlight', 'Background color for the highlight of line at the cursor position.'));\nexport const editorLineHighlightBorder = registerColor('editor.lineHighlightBorder', { dark: '#282828', light: '#eeeeee', hc: '#f38518' }, nls.localize('lineHighlightBorderBox', 'Background color for the border around the line at the cursor position.'));\nexport const editorRangeHighlight = registerColor('editor.rangeHighlightBackground', { dark: '#ffffff0b', light: '#fdff0033', hc: null }, nls.localize('rangeHighlight', 'Background color of highlighted ranges, like by quick open and find features. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorRangeHighlightBorder = registerColor('editor.rangeHighlightBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('rangeHighlightBorder', 'Background color of the border around highlighted ranges.'), true);\nexport const editorSymbolHighlight = registerColor('editor.symbolHighlightBackground', { dark: editorFindMatchHighlight, light: editorFindMatchHighlight, hc: null }, nls.localize('symbolHighlight', 'Background color of highlighted symbol, like for go to definition or go next/previous symbol. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorSymbolHighlightBorder = registerColor('editor.symbolHighlightBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('symbolHighlightBorder', 'Background color of the border around highlighted symbols.'), true);\nexport const editorCursorForeground = registerColor('editorCursor.foreground', { dark: '#AEAFAD', light: Color.black, hc: Color.white }, nls.localize('caret', 'Color of the editor cursor.'));\nexport const editorCursorBackground = registerColor('editorCursor.background', null, nls.localize('editorCursorBackground', 'The background color of the editor cursor. Allows customizing the color of a character overlapped by a block cursor.'));\nexport const editorWhitespaces = registerColor('editorWhitespace.foreground', { dark: '#e3e4e229', light: '#33333333', hc: '#e3e4e229' }, nls.localize('editorWhitespaces', 'Color of whitespace characters in the editor.'));\nexport const editorIndentGuides = registerColor('editorIndentGuide.background', { dark: editorWhitespaces, light: editorWhitespaces, hc: editorWhitespaces }, nls.localize('editorIndentGuides', 'Color of the editor indentation guides.'));\nexport const editorActiveIndentGuides = registerColor('editorIndentGuide.activeBackground', { dark: editorWhitespaces, light: editorWhitespaces, hc: editorWhitespaces }, nls.localize('editorActiveIndentGuide', 'Color of the active editor indentation guides.'));\nexport const editorLineNumbers = registerColor('editorLineNumber.foreground', { dark: '#858585', light: '#237893', hc: Color.white }, nls.localize('editorLineNumbers', 'Color of editor line numbers.'));\nconst deprecatedEditorActiveLineNumber = registerColor('editorActiveLineNumber.foreground', { dark: '#c6c6c6', light: '#0B216F', hc: activeContrastBorder }, nls.localize('editorActiveLineNumber', 'Color of editor active line number'), false, nls.localize('deprecatedEditorActiveLineNumber', 'Id is deprecated. Use \\'editorLineNumber.activeForeground\\' instead.'));\nexport const editorActiveLineNumber = registerColor('editorLineNumber.activeForeground', { dark: deprecatedEditorActiveLineNumber, light: deprecatedEditorActiveLineNumber, hc: deprecatedEditorActiveLineNumber }, nls.localize('editorActiveLineNumber', 'Color of editor active line number'));\nexport const editorRuler = registerColor('editorRuler.foreground', { dark: '#5A5A5A', light: Color.lightgrey, hc: Color.white }, nls.localize('editorRuler', 'Color of the editor rulers.'));\nexport const editorCodeLensForeground = registerColor('editorCodeLens.foreground', { dark: '#999999', light: '#999999', hc: '#999999' }, nls.localize('editorCodeLensForeground', 'Foreground color of editor CodeLens'));\nexport const editorBracketMatchBackground = registerColor('editorBracketMatch.background', { dark: '#0064001a', light: '#0064001a', hc: '#0064001a' }, nls.localize('editorBracketMatchBackground', 'Background color behind matching brackets'));\nexport const editorBracketMatchBorder = registerColor('editorBracketMatch.border', { dark: '#888', light: '#B9B9B9', hc: contrastBorder }, nls.localize('editorBracketMatchBorder', 'Color for matching brackets boxes'));\nexport const editorOverviewRulerBorder = registerColor('editorOverviewRuler.border', { dark: '#7f7f7f4d', light: '#7f7f7f4d', hc: '#7f7f7f4d' }, nls.localize('editorOverviewRulerBorder', 'Color of the overview ruler border.'));\nexport const editorOverviewRulerBackground = registerColor('editorOverviewRuler.background', null, nls.localize('editorOverviewRulerBackground', 'Background color of the editor overview ruler. Only used when the minimap is enabled and placed on the right side of the editor.'));\nexport const editorGutter = registerColor('editorGutter.background', { dark: editorBackground, light: editorBackground, hc: editorBackground }, nls.localize('editorGutter', 'Background color of the editor gutter. The gutter contains the glyph margins and the line numbers.'));\nexport const editorUnnecessaryCodeBorder = registerColor('editorUnnecessaryCode.border', { dark: null, light: null, hc: Color.fromHex('#fff').transparent(0.8) }, nls.localize('unnecessaryCodeBorder', 'Border color of unnecessary (unused) source code in the editor.'));\nexport const editorUnnecessaryCodeOpacity = registerColor('editorUnnecessaryCode.opacity', { dark: Color.fromHex('#000a'), light: Color.fromHex('#0007'), hc: null }, nls.localize('unnecessaryCodeOpacity', 'Opacity of unnecessary (unused) source code in the editor. For example, \"#000000c0\" will render the code with 75% opacity. For high contrast themes, use the \\'editorUnnecessaryCode.border\\' theme color to underline unnecessary code instead of fading it out.'));\nconst rulerRangeDefault = new Color(new RGBA(0, 122, 204, 0.6));\nexport const overviewRulerRangeHighlight = registerColor('editorOverviewRuler.rangeHighlightForeground', { dark: rulerRangeDefault, light: rulerRangeDefault, hc: rulerRangeDefault }, nls.localize('overviewRulerRangeHighlight', 'Overview ruler marker color for range highlights. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const overviewRulerError = registerColor('editorOverviewRuler.errorForeground', { dark: new Color(new RGBA(255, 18, 18, 0.7)), light: new Color(new RGBA(255, 18, 18, 0.7)), hc: new Color(new RGBA(255, 50, 50, 1)) }, nls.localize('overviewRuleError', 'Overview ruler marker color for errors.'));\nexport const overviewRulerWarning = registerColor('editorOverviewRuler.warningForeground', { dark: editorWarningForeground, light: editorWarningForeground, hc: editorWarningBorder }, nls.localize('overviewRuleWarning', 'Overview ruler marker color for warnings.'));\nexport const overviewRulerInfo = registerColor('editorOverviewRuler.infoForeground', { dark: editorInfoForeground, light: editorInfoForeground, hc: editorInfoBorder }, nls.localize('overviewRuleInfo', 'Overview ruler marker color for infos.'));\n// contains all color rules that used to defined in editor/browser/widget/editor.css\nregisterThemingParticipant((theme, collector) => {\n const background = theme.getColor(editorBackground);\n if (background) {\n collector.addRule(`.monaco-editor, .monaco-editor-background, .monaco-editor .inputarea.ime-input { background-color: ${background}; }`);\n }\n const foreground = theme.getColor(editorForeground);\n if (foreground) {\n collector.addRule(`.monaco-editor, .monaco-editor .inputarea.ime-input { color: ${foreground}; }`);\n }\n const gutter = theme.getColor(editorGutter);\n if (gutter) {\n collector.addRule(`.monaco-editor .margin { background-color: ${gutter}; }`);\n }\n const rangeHighlight = theme.getColor(editorRangeHighlight);\n if (rangeHighlight) {\n collector.addRule(`.monaco-editor .rangeHighlight { background-color: ${rangeHighlight}; }`);\n }\n const rangeHighlightBorder = theme.getColor(editorRangeHighlightBorder);\n if (rangeHighlightBorder) {\n collector.addRule(`.monaco-editor .rangeHighlight { border: 1px ${theme.type === 'hc' ? 'dotted' : 'solid'} ${rangeHighlightBorder}; }`);\n }\n const symbolHighlight = theme.getColor(editorSymbolHighlight);\n if (symbolHighlight) {\n collector.addRule(`.monaco-editor .symbolHighlight { background-color: ${symbolHighlight}; }`);\n }\n const symbolHighlightBorder = theme.getColor(editorSymbolHighlightBorder);\n if (symbolHighlightBorder) {\n collector.addRule(`.monaco-editor .symbolHighlight { border: 1px ${theme.type === 'hc' ? 'dotted' : 'solid'} ${symbolHighlightBorder}; }`);\n }\n const invisibles = theme.getColor(editorWhitespaces);\n if (invisibles) {\n collector.addRule(`.monaco-editor .mtkw { color: ${invisibles} !important; }`);\n collector.addRule(`.monaco-editor .mtkz { color: ${invisibles} !important; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nexport class ColorZone {\n constructor(from, to, colorId) {\n this.from = from | 0;\n this.to = to | 0;\n this.colorId = colorId | 0;\n }\n static compare(a, b) {\n if (a.colorId === b.colorId) {\n if (a.from === b.from) {\n return a.to - b.to;\n }\n return a.from - b.from;\n }\n return a.colorId - b.colorId;\n }\n}\n/**\n * A zone in the overview ruler\n */\nexport class OverviewRulerZone {\n constructor(startLineNumber, endLineNumber, color) {\n this.startLineNumber = startLineNumber;\n this.endLineNumber = endLineNumber;\n this.color = color;\n this._colorZone = null;\n }\n static compare(a, b) {\n if (a.color === b.color) {\n if (a.startLineNumber === b.startLineNumber) {\n return a.endLineNumber - b.endLineNumber;\n }\n return a.startLineNumber - b.startLineNumber;\n }\n return a.color < b.color ? -1 : 1;\n }\n setColorZone(colorZone) {\n this._colorZone = colorZone;\n }\n getColorZones() {\n return this._colorZone;\n }\n}\nexport class OverviewZoneManager {\n constructor(getVerticalOffsetForLine) {\n this._getVerticalOffsetForLine = getVerticalOffsetForLine;\n this._zones = [];\n this._colorZonesInvalid = false;\n this._lineHeight = 0;\n this._domWidth = 0;\n this._domHeight = 0;\n this._outerHeight = 0;\n this._pixelRatio = 1;\n this._lastAssignedId = 0;\n this._color2Id = Object.create(null);\n this._id2Color = [];\n }\n getId2Color() {\n return this._id2Color;\n }\n setZones(newZones) {\n this._zones = newZones;\n this._zones.sort(OverviewRulerZone.compare);\n }\n setLineHeight(lineHeight) {\n if (this._lineHeight === lineHeight) {\n return false;\n }\n this._lineHeight = lineHeight;\n this._colorZonesInvalid = true;\n return true;\n }\n setPixelRatio(pixelRatio) {\n this._pixelRatio = pixelRatio;\n this._colorZonesInvalid = true;\n }\n getDOMWidth() {\n return this._domWidth;\n }\n getCanvasWidth() {\n return this._domWidth * this._pixelRatio;\n }\n setDOMWidth(width) {\n if (this._domWidth === width) {\n return false;\n }\n this._domWidth = width;\n this._colorZonesInvalid = true;\n return true;\n }\n getDOMHeight() {\n return this._domHeight;\n }\n getCanvasHeight() {\n return this._domHeight * this._pixelRatio;\n }\n setDOMHeight(height) {\n if (this._domHeight === height) {\n return false;\n }\n this._domHeight = height;\n this._colorZonesInvalid = true;\n return true;\n }\n getOuterHeight() {\n return this._outerHeight;\n }\n setOuterHeight(outerHeight) {\n if (this._outerHeight === outerHeight) {\n return false;\n }\n this._outerHeight = outerHeight;\n this._colorZonesInvalid = true;\n return true;\n }\n resolveColorZones() {\n const colorZonesInvalid = this._colorZonesInvalid;\n const lineHeight = Math.floor(this._lineHeight); // @perf\n const totalHeight = Math.floor(this.getCanvasHeight()); // @perf\n const outerHeight = Math.floor(this._outerHeight); // @perf\n const heightRatio = totalHeight / outerHeight;\n const halfMinimumHeight = Math.floor(4 /* MINIMUM_HEIGHT */ * this._pixelRatio / 2);\n let allColorZones = [];\n for (let i = 0, len = this._zones.length; i < len; i++) {\n const zone = this._zones[i];\n if (!colorZonesInvalid) {\n const colorZone = zone.getColorZones();\n if (colorZone) {\n allColorZones.push(colorZone);\n continue;\n }\n }\n const y1 = Math.floor(heightRatio * (this._getVerticalOffsetForLine(zone.startLineNumber)));\n const y2 = Math.floor(heightRatio * (this._getVerticalOffsetForLine(zone.endLineNumber) + lineHeight));\n let ycenter = Math.floor((y1 + y2) / 2);\n let halfHeight = (y2 - ycenter);\n if (halfHeight < halfMinimumHeight) {\n halfHeight = halfMinimumHeight;\n }\n if (ycenter - halfHeight < 0) {\n ycenter = halfHeight;\n }\n if (ycenter + halfHeight > totalHeight) {\n ycenter = totalHeight - halfHeight;\n }\n const color = zone.color;\n let colorId = this._color2Id[color];\n if (!colorId) {\n colorId = (++this._lastAssignedId);\n this._color2Id[color] = colorId;\n this._id2Color[colorId] = color;\n }\n const colorZone = new ColorZone(ycenter - halfHeight, ycenter + halfHeight, colorId);\n zone.setColorZone(colorZone);\n allColorZones.push(colorZone);\n }\n this._colorZonesInvalid = false;\n allColorZones.sort(ColorZone.compare);\n return allColorZones;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nexport class LineDecoration {\n constructor(startColumn, endColumn, className, type) {\n this.startColumn = startColumn;\n this.endColumn = endColumn;\n this.className = className;\n this.type = type;\n }\n static _equals(a, b) {\n return (a.startColumn === b.startColumn\n && a.endColumn === b.endColumn\n && a.className === b.className\n && a.type === b.type);\n }\n static equalsArr(a, b) {\n const aLen = a.length;\n const bLen = b.length;\n if (aLen !== bLen) {\n return false;\n }\n for (let i = 0; i < aLen; i++) {\n if (!LineDecoration._equals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n static extractWrapped(arr, startOffset, endOffset) {\n if (arr.length === 0) {\n return arr;\n }\n const startColumn = startOffset + 1;\n const endColumn = endOffset + 1;\n const lineLength = endOffset - startOffset;\n const r = [];\n let rLength = 0;\n for (const dec of arr) {\n if (dec.endColumn <= startColumn || dec.startColumn >= endColumn) {\n continue;\n }\n r[rLength++] = new LineDecoration(Math.max(1, dec.startColumn - startColumn + 1), Math.min(lineLength + 1, dec.endColumn - startColumn + 1), dec.className, dec.type);\n }\n return r;\n }\n static filter(lineDecorations, lineNumber, minLineColumn, maxLineColumn) {\n if (lineDecorations.length === 0) {\n return [];\n }\n let result = [], resultLen = 0;\n for (let i = 0, len = lineDecorations.length; i < len; i++) {\n const d = lineDecorations[i];\n const range = d.range;\n if (range.endLineNumber < lineNumber || range.startLineNumber > lineNumber) {\n // Ignore decorations that sit outside this line\n continue;\n }\n if (range.isEmpty() && (d.type === 0 /* Regular */ || d.type === 3 /* RegularAffectingLetterSpacing */)) {\n // Ignore empty range decorations\n continue;\n }\n const startColumn = (range.startLineNumber === lineNumber ? range.startColumn : minLineColumn);\n const endColumn = (range.endLineNumber === lineNumber ? range.endColumn : maxLineColumn);\n result[resultLen++] = new LineDecoration(startColumn, endColumn, d.inlineClassName, d.type);\n }\n return result;\n }\n static _typeCompare(a, b) {\n const ORDER = [2, 0, 1, 3];\n return ORDER[a] - ORDER[b];\n }\n static compare(a, b) {\n if (a.startColumn === b.startColumn) {\n if (a.endColumn === b.endColumn) {\n const typeCmp = LineDecoration._typeCompare(a.type, b.type);\n if (typeCmp === 0) {\n if (a.className < b.className) {\n return -1;\n }\n if (a.className > b.className) {\n return 1;\n }\n return 0;\n }\n return typeCmp;\n }\n return a.endColumn - b.endColumn;\n }\n return a.startColumn - b.startColumn;\n }\n}\nexport class DecorationSegment {\n constructor(startOffset, endOffset, className, metadata) {\n this.startOffset = startOffset;\n this.endOffset = endOffset;\n this.className = className;\n this.metadata = metadata;\n }\n}\nclass Stack {\n constructor() {\n this.stopOffsets = [];\n this.classNames = [];\n this.metadata = [];\n this.count = 0;\n }\n static _metadata(metadata) {\n let result = 0;\n for (let i = 0, len = metadata.length; i < len; i++) {\n result |= metadata[i];\n }\n return result;\n }\n consumeLowerThan(maxStopOffset, nextStartOffset, result) {\n while (this.count > 0 && this.stopOffsets[0] < maxStopOffset) {\n let i = 0;\n // Take all equal stopping offsets\n while (i + 1 < this.count && this.stopOffsets[i] === this.stopOffsets[i + 1]) {\n i++;\n }\n // Basically we are consuming the first i + 1 elements of the stack\n result.push(new DecorationSegment(nextStartOffset, this.stopOffsets[i], this.classNames.join(' '), Stack._metadata(this.metadata)));\n nextStartOffset = this.stopOffsets[i] + 1;\n // Consume them\n this.stopOffsets.splice(0, i + 1);\n this.classNames.splice(0, i + 1);\n this.metadata.splice(0, i + 1);\n this.count -= (i + 1);\n }\n if (this.count > 0 && nextStartOffset < maxStopOffset) {\n result.push(new DecorationSegment(nextStartOffset, maxStopOffset - 1, this.classNames.join(' '), Stack._metadata(this.metadata)));\n nextStartOffset = maxStopOffset;\n }\n return nextStartOffset;\n }\n insert(stopOffset, className, metadata) {\n if (this.count === 0 || this.stopOffsets[this.count - 1] <= stopOffset) {\n // Insert at the end\n this.stopOffsets.push(stopOffset);\n this.classNames.push(className);\n this.metadata.push(metadata);\n }\n else {\n // Find the insertion position for `stopOffset`\n for (let i = 0; i < this.count; i++) {\n if (this.stopOffsets[i] >= stopOffset) {\n this.stopOffsets.splice(i, 0, stopOffset);\n this.classNames.splice(i, 0, className);\n this.metadata.splice(i, 0, metadata);\n break;\n }\n }\n }\n this.count++;\n return;\n }\n}\nexport class LineDecorationsNormalizer {\n /**\n * Normalize line decorations. Overlapping decorations will generate multiple segments\n */\n static normalize(lineContent, lineDecorations) {\n if (lineDecorations.length === 0) {\n return [];\n }\n let result = [];\n const stack = new Stack();\n let nextStartOffset = 0;\n for (let i = 0, len = lineDecorations.length; i < len; i++) {\n const d = lineDecorations[i];\n let startColumn = d.startColumn;\n let endColumn = d.endColumn;\n const className = d.className;\n const metadata = (d.type === 1 /* Before */\n ? 2 /* PSEUDO_BEFORE */\n : d.type === 2 /* After */\n ? 4 /* PSEUDO_AFTER */\n : 0);\n // If the position would end up in the middle of a high-low surrogate pair, we move it to before the pair\n if (startColumn > 1) {\n const charCodeBefore = lineContent.charCodeAt(startColumn - 2);\n if (strings.isHighSurrogate(charCodeBefore)) {\n startColumn--;\n }\n }\n if (endColumn > 1) {\n const charCodeBefore = lineContent.charCodeAt(endColumn - 2);\n if (strings.isHighSurrogate(charCodeBefore)) {\n endColumn--;\n }\n }\n const currentStartOffset = startColumn - 1;\n const currentEndOffset = endColumn - 2;\n nextStartOffset = stack.consumeLowerThan(currentStartOffset, nextStartOffset, result);\n if (stack.count === 0) {\n nextStartOffset = currentStartOffset;\n }\n stack.insert(currentEndOffset, className, metadata);\n }\n stack.consumeLowerThan(1073741824 /* MAX_SAFE_SMALL_INTEGER */, nextStartOffset, result);\n return result;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { createStringBuilder } from '../core/stringBuilder.js';\nimport { LineDecoration, LineDecorationsNormalizer } from './lineDecorations.js';\nclass LinePart {\n constructor(endIndex, type, metadata) {\n this.endIndex = endIndex;\n this.type = type;\n this.metadata = metadata;\n }\n isWhitespace() {\n return (this.metadata & 1 /* IS_WHITESPACE_MASK */ ? true : false);\n }\n}\nexport class LineRange {\n constructor(startIndex, endIndex) {\n this.startOffset = startIndex;\n this.endOffset = endIndex;\n }\n equals(otherLineRange) {\n return this.startOffset === otherLineRange.startOffset\n && this.endOffset === otherLineRange.endOffset;\n }\n}\nexport class RenderLineInput {\n constructor(useMonospaceOptimizations, canUseHalfwidthRightwardsArrow, lineContent, continuesWithWrappedLine, isBasicASCII, containsRTL, fauxIndentLength, lineTokens, lineDecorations, tabSize, startVisibleColumn, spaceWidth, middotWidth, wsmiddotWidth, stopRenderingLineAfter, renderWhitespace, renderControlCharacters, fontLigatures, selectionsOnLine) {\n this.useMonospaceOptimizations = useMonospaceOptimizations;\n this.canUseHalfwidthRightwardsArrow = canUseHalfwidthRightwardsArrow;\n this.lineContent = lineContent;\n this.continuesWithWrappedLine = continuesWithWrappedLine;\n this.isBasicASCII = isBasicASCII;\n this.containsRTL = containsRTL;\n this.fauxIndentLength = fauxIndentLength;\n this.lineTokens = lineTokens;\n this.lineDecorations = lineDecorations.sort(LineDecoration.compare);\n this.tabSize = tabSize;\n this.startVisibleColumn = startVisibleColumn;\n this.spaceWidth = spaceWidth;\n this.stopRenderingLineAfter = stopRenderingLineAfter;\n this.renderWhitespace = (renderWhitespace === 'all'\n ? 4 /* All */\n : renderWhitespace === 'boundary'\n ? 1 /* Boundary */\n : renderWhitespace === 'selection'\n ? 2 /* Selection */\n : renderWhitespace === 'trailing'\n ? 3 /* Trailing */\n : 0 /* None */);\n this.renderControlCharacters = renderControlCharacters;\n this.fontLigatures = fontLigatures;\n this.selectionsOnLine = selectionsOnLine && selectionsOnLine.sort((a, b) => a.startOffset < b.startOffset ? -1 : 1);\n const wsmiddotDiff = Math.abs(wsmiddotWidth - spaceWidth);\n const middotDiff = Math.abs(middotWidth - spaceWidth);\n if (wsmiddotDiff < middotDiff) {\n this.renderSpaceWidth = wsmiddotWidth;\n this.renderSpaceCharCode = 0x2E31; // U+2E31 - WORD SEPARATOR MIDDLE DOT\n }\n else {\n this.renderSpaceWidth = middotWidth;\n this.renderSpaceCharCode = 0xB7; // U+00B7 - MIDDLE DOT\n }\n }\n sameSelection(otherSelections) {\n if (this.selectionsOnLine === null) {\n return otherSelections === null;\n }\n if (otherSelections === null) {\n return false;\n }\n if (otherSelections.length !== this.selectionsOnLine.length) {\n return false;\n }\n for (let i = 0; i < this.selectionsOnLine.length; i++) {\n if (!this.selectionsOnLine[i].equals(otherSelections[i])) {\n return false;\n }\n }\n return true;\n }\n equals(other) {\n return (this.useMonospaceOptimizations === other.useMonospaceOptimizations\n && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n && this.lineContent === other.lineContent\n && this.continuesWithWrappedLine === other.continuesWithWrappedLine\n && this.isBasicASCII === other.isBasicASCII\n && this.containsRTL === other.containsRTL\n && this.fauxIndentLength === other.fauxIndentLength\n && this.tabSize === other.tabSize\n && this.startVisibleColumn === other.startVisibleColumn\n && this.spaceWidth === other.spaceWidth\n && this.renderSpaceWidth === other.renderSpaceWidth\n && this.renderSpaceCharCode === other.renderSpaceCharCode\n && this.stopRenderingLineAfter === other.stopRenderingLineAfter\n && this.renderWhitespace === other.renderWhitespace\n && this.renderControlCharacters === other.renderControlCharacters\n && this.fontLigatures === other.fontLigatures\n && LineDecoration.equalsArr(this.lineDecorations, other.lineDecorations)\n && this.lineTokens.equals(other.lineTokens)\n && this.sameSelection(other.selectionsOnLine));\n }\n}\n/**\n * Provides a both direction mapping between a line's character and its rendered position.\n */\nexport class CharacterMapping {\n constructor(length, partCount) {\n this.length = length;\n this._data = new Uint32Array(this.length);\n this._absoluteOffsets = new Uint32Array(this.length);\n }\n static getPartIndex(partData) {\n return (partData & 4294901760 /* PART_INDEX_MASK */) >>> 16 /* PART_INDEX_OFFSET */;\n }\n static getCharIndex(partData) {\n return (partData & 65535 /* CHAR_INDEX_MASK */) >>> 0 /* CHAR_INDEX_OFFSET */;\n }\n setPartData(charOffset, partIndex, charIndex, partAbsoluteOffset) {\n let partData = ((partIndex << 16 /* PART_INDEX_OFFSET */)\n | (charIndex << 0 /* CHAR_INDEX_OFFSET */)) >>> 0;\n this._data[charOffset] = partData;\n this._absoluteOffsets[charOffset] = partAbsoluteOffset + charIndex;\n }\n getAbsoluteOffsets() {\n return this._absoluteOffsets;\n }\n charOffsetToPartData(charOffset) {\n if (this.length === 0) {\n return 0;\n }\n if (charOffset < 0) {\n return this._data[0];\n }\n if (charOffset >= this.length) {\n return this._data[this.length - 1];\n }\n return this._data[charOffset];\n }\n partDataToCharOffset(partIndex, partLength, charIndex) {\n if (this.length === 0) {\n return 0;\n }\n let searchEntry = ((partIndex << 16 /* PART_INDEX_OFFSET */)\n | (charIndex << 0 /* CHAR_INDEX_OFFSET */)) >>> 0;\n let min = 0;\n let max = this.length - 1;\n while (min + 1 < max) {\n let mid = ((min + max) >>> 1);\n let midEntry = this._data[mid];\n if (midEntry === searchEntry) {\n return mid;\n }\n else if (midEntry > searchEntry) {\n max = mid;\n }\n else {\n min = mid;\n }\n }\n if (min === max) {\n return min;\n }\n let minEntry = this._data[min];\n let maxEntry = this._data[max];\n if (minEntry === searchEntry) {\n return min;\n }\n if (maxEntry === searchEntry) {\n return max;\n }\n let minPartIndex = CharacterMapping.getPartIndex(minEntry);\n let minCharIndex = CharacterMapping.getCharIndex(minEntry);\n let maxPartIndex = CharacterMapping.getPartIndex(maxEntry);\n let maxCharIndex;\n if (minPartIndex !== maxPartIndex) {\n // sitting between parts\n maxCharIndex = partLength;\n }\n else {\n maxCharIndex = CharacterMapping.getCharIndex(maxEntry);\n }\n let minEntryDistance = charIndex - minCharIndex;\n let maxEntryDistance = maxCharIndex - charIndex;\n if (minEntryDistance <= maxEntryDistance) {\n return min;\n }\n return max;\n }\n}\nexport class RenderLineOutput {\n constructor(characterMapping, containsRTL, containsForeignElements) {\n this.characterMapping = characterMapping;\n this.containsRTL = containsRTL;\n this.containsForeignElements = containsForeignElements;\n }\n}\nexport function renderViewLine(input, sb) {\n if (input.lineContent.length === 0) {\n if (input.lineDecorations.length > 0) {\n // This line is empty, but it contains inline decorations\n sb.appendASCIIString(`<span>`);\n let beforeCount = 0;\n let afterCount = 0;\n let containsForeignElements = 0 /* None */;\n for (const lineDecoration of input.lineDecorations) {\n if (lineDecoration.type === 1 /* Before */ || lineDecoration.type === 2 /* After */) {\n sb.appendASCIIString(`<span class=\"`);\n sb.appendASCIIString(lineDecoration.className);\n sb.appendASCIIString(`\"></span>`);\n if (lineDecoration.type === 1 /* Before */) {\n containsForeignElements |= 1 /* Before */;\n beforeCount++;\n }\n if (lineDecoration.type === 2 /* After */) {\n containsForeignElements |= 2 /* After */;\n afterCount++;\n }\n }\n }\n sb.appendASCIIString(`</span>`);\n const characterMapping = new CharacterMapping(1, beforeCount + afterCount);\n characterMapping.setPartData(0, beforeCount, 0, 0);\n return new RenderLineOutput(characterMapping, false, containsForeignElements);\n }\n // completely empty line\n sb.appendASCIIString('<span><span></span></span>');\n return new RenderLineOutput(new CharacterMapping(0, 0), false, 0 /* None */);\n }\n return _renderLine(resolveRenderLineInput(input), sb);\n}\nexport class RenderLineOutput2 {\n constructor(characterMapping, html, containsRTL, containsForeignElements) {\n this.characterMapping = characterMapping;\n this.html = html;\n this.containsRTL = containsRTL;\n this.containsForeignElements = containsForeignElements;\n }\n}\nexport function renderViewLine2(input) {\n let sb = createStringBuilder(10000);\n let out = renderViewLine(input, sb);\n return new RenderLineOutput2(out.characterMapping, sb.build(), out.containsRTL, out.containsForeignElements);\n}\nclass ResolvedRenderLineInput {\n constructor(fontIsMonospace, canUseHalfwidthRightwardsArrow, lineContent, len, isOverflowing, parts, containsForeignElements, fauxIndentLength, tabSize, startVisibleColumn, containsRTL, spaceWidth, renderSpaceCharCode, renderWhitespace, renderControlCharacters) {\n this.fontIsMonospace = fontIsMonospace;\n this.canUseHalfwidthRightwardsArrow = canUseHalfwidthRightwardsArrow;\n this.lineContent = lineContent;\n this.len = len;\n this.isOverflowing = isOverflowing;\n this.parts = parts;\n this.containsForeignElements = containsForeignElements;\n this.fauxIndentLength = fauxIndentLength;\n this.tabSize = tabSize;\n this.startVisibleColumn = startVisibleColumn;\n this.containsRTL = containsRTL;\n this.spaceWidth = spaceWidth;\n this.renderSpaceCharCode = renderSpaceCharCode;\n this.renderWhitespace = renderWhitespace;\n this.renderControlCharacters = renderControlCharacters;\n //\n }\n}\nfunction resolveRenderLineInput(input) {\n const lineContent = input.lineContent;\n let isOverflowing;\n let len;\n if (input.stopRenderingLineAfter !== -1 && input.stopRenderingLineAfter < lineContent.length) {\n isOverflowing = true;\n len = input.stopRenderingLineAfter;\n }\n else {\n isOverflowing = false;\n len = lineContent.length;\n }\n let tokens = transformAndRemoveOverflowing(input.lineTokens, input.fauxIndentLength, len);\n if (input.renderWhitespace === 4 /* All */ ||\n input.renderWhitespace === 1 /* Boundary */ ||\n (input.renderWhitespace === 2 /* Selection */ && !!input.selectionsOnLine) ||\n input.renderWhitespace === 3 /* Trailing */) {\n tokens = _applyRenderWhitespace(input, lineContent, len, tokens);\n }\n let containsForeignElements = 0 /* None */;\n if (input.lineDecorations.length > 0) {\n for (let i = 0, len = input.lineDecorations.length; i < len; i++) {\n const lineDecoration = input.lineDecorations[i];\n if (lineDecoration.type === 3 /* RegularAffectingLetterSpacing */) {\n // Pretend there are foreign elements... although not 100% accurate.\n containsForeignElements |= 1 /* Before */;\n }\n else if (lineDecoration.type === 1 /* Before */) {\n containsForeignElements |= 1 /* Before */;\n }\n else if (lineDecoration.type === 2 /* After */) {\n containsForeignElements |= 2 /* After */;\n }\n }\n tokens = _applyInlineDecorations(lineContent, len, tokens, input.lineDecorations);\n }\n if (!input.containsRTL) {\n // We can never split RTL text, as it ruins the rendering\n tokens = splitLargeTokens(lineContent, tokens, !input.isBasicASCII || input.fontLigatures);\n }\n return new ResolvedRenderLineInput(input.useMonospaceOptimizations, input.canUseHalfwidthRightwardsArrow, lineContent, len, isOverflowing, tokens, containsForeignElements, input.fauxIndentLength, input.tabSize, input.startVisibleColumn, input.containsRTL, input.spaceWidth, input.renderSpaceCharCode, input.renderWhitespace, input.renderControlCharacters);\n}\n/**\n * In the rendering phase, characters are always looped until token.endIndex.\n * Ensure that all tokens end before `len` and the last one ends precisely at `len`.\n */\nfunction transformAndRemoveOverflowing(tokens, fauxIndentLength, len) {\n let result = [], resultLen = 0;\n // The faux indent part of the line should have no token type\n if (fauxIndentLength > 0) {\n result[resultLen++] = new LinePart(fauxIndentLength, '', 0);\n }\n for (let tokenIndex = 0, tokensLen = tokens.getCount(); tokenIndex < tokensLen; tokenIndex++) {\n const endIndex = tokens.getEndOffset(tokenIndex);\n if (endIndex <= fauxIndentLength) {\n // The faux indent part of the line should have no token type\n continue;\n }\n const type = tokens.getClassName(tokenIndex);\n if (endIndex >= len) {\n result[resultLen++] = new LinePart(len, type, 0);\n break;\n }\n result[resultLen++] = new LinePart(endIndex, type, 0);\n }\n return result;\n}\n/**\n * See https://github.com/microsoft/vscode/issues/6885.\n * It appears that having very large spans causes very slow reading of character positions.\n * So here we try to avoid that.\n */\nfunction splitLargeTokens(lineContent, tokens, onlyAtSpaces) {\n let lastTokenEndIndex = 0;\n let result = [], resultLen = 0;\n if (onlyAtSpaces) {\n // Split only at spaces => we need to walk each character\n for (let i = 0, len = tokens.length; i < len; i++) {\n const token = tokens[i];\n const tokenEndIndex = token.endIndex;\n if (lastTokenEndIndex + 50 /* LongToken */ < tokenEndIndex) {\n const tokenType = token.type;\n const tokenMetadata = token.metadata;\n let lastSpaceOffset = -1;\n let currTokenStart = lastTokenEndIndex;\n for (let j = lastTokenEndIndex; j < tokenEndIndex; j++) {\n if (lineContent.charCodeAt(j) === 32 /* Space */) {\n lastSpaceOffset = j;\n }\n if (lastSpaceOffset !== -1 && j - currTokenStart >= 50 /* LongToken */) {\n // Split at `lastSpaceOffset` + 1\n result[resultLen++] = new LinePart(lastSpaceOffset + 1, tokenType, tokenMetadata);\n currTokenStart = lastSpaceOffset + 1;\n lastSpaceOffset = -1;\n }\n }\n if (currTokenStart !== tokenEndIndex) {\n result[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata);\n }\n }\n else {\n result[resultLen++] = token;\n }\n lastTokenEndIndex = tokenEndIndex;\n }\n }\n else {\n // Split anywhere => we don't need to walk each character\n for (let i = 0, len = tokens.length; i < len; i++) {\n const token = tokens[i];\n const tokenEndIndex = token.endIndex;\n let diff = (tokenEndIndex - lastTokenEndIndex);\n if (diff > 50 /* LongToken */) {\n const tokenType = token.type;\n const tokenMetadata = token.metadata;\n const piecesCount = Math.ceil(diff / 50 /* LongToken */);\n for (let j = 1; j < piecesCount; j++) {\n let pieceEndIndex = lastTokenEndIndex + (j * 50 /* LongToken */);\n result[resultLen++] = new LinePart(pieceEndIndex, tokenType, tokenMetadata);\n }\n result[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata);\n }\n else {\n result[resultLen++] = token;\n }\n lastTokenEndIndex = tokenEndIndex;\n }\n }\n return result;\n}\n/**\n * Whitespace is rendered by \"replacing\" tokens with a special-purpose `mtkw` type that is later recognized in the rendering phase.\n * Moreover, a token is created for every visual indent because on some fonts the glyphs used for rendering whitespace (&rarr; or &middot;) do not have the same width as &nbsp;.\n * The rendering phase will generate `style=\"width:...\"` for these tokens.\n */\nfunction _applyRenderWhitespace(input, lineContent, len, tokens) {\n const continuesWithWrappedLine = input.continuesWithWrappedLine;\n const fauxIndentLength = input.fauxIndentLength;\n const tabSize = input.tabSize;\n const startVisibleColumn = input.startVisibleColumn;\n const useMonospaceOptimizations = input.useMonospaceOptimizations;\n const selections = input.selectionsOnLine;\n const onlyBoundary = (input.renderWhitespace === 1 /* Boundary */);\n const onlyTrailing = (input.renderWhitespace === 3 /* Trailing */);\n const generateLinePartForEachWhitespace = (input.renderSpaceWidth !== input.spaceWidth);\n let result = [], resultLen = 0;\n let tokenIndex = 0;\n let tokenType = tokens[tokenIndex].type;\n let tokenEndIndex = tokens[tokenIndex].endIndex;\n const tokensLength = tokens.length;\n let lineIsEmptyOrWhitespace = false;\n let firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n let lastNonWhitespaceIndex;\n if (firstNonWhitespaceIndex === -1) {\n lineIsEmptyOrWhitespace = true;\n firstNonWhitespaceIndex = len;\n lastNonWhitespaceIndex = len;\n }\n else {\n lastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\n }\n let wasInWhitespace = false;\n let currentSelectionIndex = 0;\n let currentSelection = selections && selections[currentSelectionIndex];\n let tmpIndent = startVisibleColumn % tabSize;\n for (let charIndex = fauxIndentLength; charIndex < len; charIndex++) {\n const chCode = lineContent.charCodeAt(charIndex);\n if (currentSelection && charIndex >= currentSelection.endOffset) {\n currentSelectionIndex++;\n currentSelection = selections && selections[currentSelectionIndex];\n }\n let isInWhitespace;\n if (charIndex < firstNonWhitespaceIndex || charIndex > lastNonWhitespaceIndex) {\n // in leading or trailing whitespace\n isInWhitespace = true;\n }\n else if (chCode === 9 /* Tab */) {\n // a tab character is rendered both in all and boundary cases\n isInWhitespace = true;\n }\n else if (chCode === 32 /* Space */) {\n // hit a space character\n if (onlyBoundary) {\n // rendering only boundary whitespace\n if (wasInWhitespace) {\n isInWhitespace = true;\n }\n else {\n const nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : 0 /* Null */);\n isInWhitespace = (nextChCode === 32 /* Space */ || nextChCode === 9 /* Tab */);\n }\n }\n else {\n isInWhitespace = true;\n }\n }\n else {\n isInWhitespace = false;\n }\n // If rendering whitespace on selection, check that the charIndex falls within a selection\n if (isInWhitespace && selections) {\n isInWhitespace = !!currentSelection && currentSelection.startOffset <= charIndex && currentSelection.endOffset > charIndex;\n }\n // If rendering only trailing whitespace, check that the charIndex points to trailing whitespace.\n if (isInWhitespace && onlyTrailing) {\n isInWhitespace = lineIsEmptyOrWhitespace || charIndex > lastNonWhitespaceIndex;\n }\n if (wasInWhitespace) {\n // was in whitespace token\n if (!isInWhitespace || (!useMonospaceOptimizations && tmpIndent >= tabSize)) {\n // leaving whitespace token or entering a new indent\n if (generateLinePartForEachWhitespace) {\n const lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n for (let i = lastEndIndex + 1; i <= charIndex; i++) {\n result[resultLen++] = new LinePart(i, 'mtkw', 1 /* IS_WHITESPACE */);\n }\n }\n else {\n result[resultLen++] = new LinePart(charIndex, 'mtkw', 1 /* IS_WHITESPACE */);\n }\n tmpIndent = tmpIndent % tabSize;\n }\n }\n else {\n // was in regular token\n if (charIndex === tokenEndIndex || (isInWhitespace && charIndex > fauxIndentLength)) {\n result[resultLen++] = new LinePart(charIndex, tokenType, 0);\n tmpIndent = tmpIndent % tabSize;\n }\n }\n if (chCode === 9 /* Tab */) {\n tmpIndent = tabSize;\n }\n else if (strings.isFullWidthCharacter(chCode)) {\n tmpIndent += 2;\n }\n else {\n tmpIndent++;\n }\n wasInWhitespace = isInWhitespace;\n while (charIndex === tokenEndIndex) {\n tokenIndex++;\n if (tokenIndex < tokensLength) {\n tokenType = tokens[tokenIndex].type;\n tokenEndIndex = tokens[tokenIndex].endIndex;\n }\n }\n }\n let generateWhitespace = false;\n if (wasInWhitespace) {\n // was in whitespace token\n if (continuesWithWrappedLine && onlyBoundary) {\n let lastCharCode = (len > 0 ? lineContent.charCodeAt(len - 1) : 0 /* Null */);\n let prevCharCode = (len > 1 ? lineContent.charCodeAt(len - 2) : 0 /* Null */);\n let isSingleTrailingSpace = (lastCharCode === 32 /* Space */ && (prevCharCode !== 32 /* Space */ && prevCharCode !== 9 /* Tab */));\n if (!isSingleTrailingSpace) {\n generateWhitespace = true;\n }\n }\n else {\n generateWhitespace = true;\n }\n }\n if (generateWhitespace) {\n if (generateLinePartForEachWhitespace) {\n const lastEndIndex = (resultLen > 0 ? result[resultLen - 1].endIndex : fauxIndentLength);\n for (let i = lastEndIndex + 1; i <= len; i++) {\n result[resultLen++] = new LinePart(i, 'mtkw', 1 /* IS_WHITESPACE */);\n }\n }\n else {\n result[resultLen++] = new LinePart(len, 'mtkw', 1 /* IS_WHITESPACE */);\n }\n }\n else {\n result[resultLen++] = new LinePart(len, tokenType, 0);\n }\n return result;\n}\n/**\n * Inline decorations are \"merged\" on top of tokens.\n * Special care must be taken when multiple inline decorations are at play and they overlap.\n */\nfunction _applyInlineDecorations(lineContent, len, tokens, _lineDecorations) {\n _lineDecorations.sort(LineDecoration.compare);\n const lineDecorations = LineDecorationsNormalizer.normalize(lineContent, _lineDecorations);\n const lineDecorationsLen = lineDecorations.length;\n let lineDecorationIndex = 0;\n let result = [], resultLen = 0, lastResultEndIndex = 0;\n for (let tokenIndex = 0, len = tokens.length; tokenIndex < len; tokenIndex++) {\n const token = tokens[tokenIndex];\n const tokenEndIndex = token.endIndex;\n const tokenType = token.type;\n const tokenMetadata = token.metadata;\n while (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset < tokenEndIndex) {\n const lineDecoration = lineDecorations[lineDecorationIndex];\n if (lineDecoration.startOffset > lastResultEndIndex) {\n lastResultEndIndex = lineDecoration.startOffset;\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata);\n }\n if (lineDecoration.endOffset + 1 <= tokenEndIndex) {\n // This line decoration ends before this token ends\n lastResultEndIndex = lineDecoration.endOffset + 1;\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata);\n lineDecorationIndex++;\n }\n else {\n // This line decoration continues on to the next token\n lastResultEndIndex = tokenEndIndex;\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType + ' ' + lineDecoration.className, tokenMetadata | lineDecoration.metadata);\n break;\n }\n }\n if (tokenEndIndex > lastResultEndIndex) {\n lastResultEndIndex = tokenEndIndex;\n result[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata);\n }\n }\n const lastTokenEndIndex = tokens[tokens.length - 1].endIndex;\n if (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n let classNames = [];\n let metadata = 0;\n while (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n classNames.push(lineDecorations[lineDecorationIndex].className);\n metadata |= lineDecorations[lineDecorationIndex].metadata;\n lineDecorationIndex++;\n }\n result[resultLen++] = new LinePart(lastResultEndIndex, classNames.join(' '), metadata);\n }\n return result;\n}\n/**\n * This function is on purpose not split up into multiple functions to allow runtime type inference (i.e. performance reasons).\n * Notice how all the needed data is fully resolved and passed in (i.e. no other calls).\n */\nfunction _renderLine(input, sb) {\n const fontIsMonospace = input.fontIsMonospace;\n const canUseHalfwidthRightwardsArrow = input.canUseHalfwidthRightwardsArrow;\n const containsForeignElements = input.containsForeignElements;\n const lineContent = input.lineContent;\n const len = input.len;\n const isOverflowing = input.isOverflowing;\n const parts = input.parts;\n const fauxIndentLength = input.fauxIndentLength;\n const tabSize = input.tabSize;\n const startVisibleColumn = input.startVisibleColumn;\n const containsRTL = input.containsRTL;\n const spaceWidth = input.spaceWidth;\n const renderSpaceCharCode = input.renderSpaceCharCode;\n const renderWhitespace = input.renderWhitespace;\n const renderControlCharacters = input.renderControlCharacters;\n const characterMapping = new CharacterMapping(len + 1, parts.length);\n let charIndex = 0;\n let visibleColumn = startVisibleColumn;\n let charOffsetInPart = 0;\n let partDisplacement = 0;\n let prevPartContentCnt = 0;\n let partAbsoluteOffset = 0;\n if (containsRTL) {\n sb.appendASCIIString('<span dir=\"ltr\">');\n }\n else {\n sb.appendASCIIString('<span>');\n }\n for (let partIndex = 0, tokensLen = parts.length; partIndex < tokensLen; partIndex++) {\n partAbsoluteOffset += prevPartContentCnt;\n const part = parts[partIndex];\n const partEndIndex = part.endIndex;\n const partType = part.type;\n const partRendersWhitespace = (renderWhitespace !== 0 /* None */ && part.isWhitespace());\n const partRendersWhitespaceWithWidth = partRendersWhitespace && !fontIsMonospace && (partType === 'mtkw' /*only whitespace*/ || !containsForeignElements);\n const partIsEmptyAndHasPseudoAfter = (charIndex === partEndIndex && part.metadata === 4 /* PSEUDO_AFTER */);\n charOffsetInPart = 0;\n sb.appendASCIIString('<span class=\"');\n sb.appendASCIIString(partRendersWhitespaceWithWidth ? 'mtkz' : partType);\n sb.appendASCII(34 /* DoubleQuote */);\n if (partRendersWhitespace) {\n let partContentCnt = 0;\n {\n let _charIndex = charIndex;\n let _visibleColumn = visibleColumn;\n for (; _charIndex < partEndIndex; _charIndex++) {\n const charCode = lineContent.charCodeAt(_charIndex);\n const charWidth = (charCode === 9 /* Tab */ ? (tabSize - (_visibleColumn % tabSize)) : 1) | 0;\n partContentCnt += charWidth;\n if (_charIndex >= fauxIndentLength) {\n _visibleColumn += charWidth;\n }\n }\n }\n if (partRendersWhitespaceWithWidth) {\n sb.appendASCIIString(' style=\"width:');\n sb.appendASCIIString(String(spaceWidth * partContentCnt));\n sb.appendASCIIString('px\"');\n }\n sb.appendASCII(62 /* GreaterThan */);\n for (; charIndex < partEndIndex; charIndex++) {\n characterMapping.setPartData(charIndex, partIndex - partDisplacement, charOffsetInPart, partAbsoluteOffset);\n partDisplacement = 0;\n const charCode = lineContent.charCodeAt(charIndex);\n let charWidth;\n if (charCode === 9 /* Tab */) {\n charWidth = (tabSize - (visibleColumn % tabSize)) | 0;\n if (!canUseHalfwidthRightwardsArrow || charWidth > 1) {\n sb.write1(0x2192); // RIGHTWARDS ARROW\n }\n else {\n sb.write1(0xFFEB); // HALFWIDTH RIGHTWARDS ARROW\n }\n for (let space = 2; space <= charWidth; space++) {\n sb.write1(0xA0); // &nbsp;\n }\n }\n else { // must be CharCode.Space\n charWidth = 1;\n sb.write1(renderSpaceCharCode); // &middot; or word separator middle dot\n }\n charOffsetInPart += charWidth;\n if (charIndex >= fauxIndentLength) {\n visibleColumn += charWidth;\n }\n }\n prevPartContentCnt = partContentCnt;\n }\n else {\n let partContentCnt = 0;\n sb.appendASCII(62 /* GreaterThan */);\n for (; charIndex < partEndIndex; charIndex++) {\n characterMapping.setPartData(charIndex, partIndex - partDisplacement, charOffsetInPart, partAbsoluteOffset);\n partDisplacement = 0;\n const charCode = lineContent.charCodeAt(charIndex);\n let producedCharacters = 1;\n let charWidth = 1;\n switch (charCode) {\n case 9 /* Tab */:\n producedCharacters = (tabSize - (visibleColumn % tabSize));\n charWidth = producedCharacters;\n for (let space = 1; space <= producedCharacters; space++) {\n sb.write1(0xA0); // &nbsp;\n }\n break;\n case 32 /* Space */:\n sb.write1(0xA0); // &nbsp;\n break;\n case 60 /* LessThan */:\n sb.appendASCIIString('&lt;');\n break;\n case 62 /* GreaterThan */:\n sb.appendASCIIString('&gt;');\n break;\n case 38 /* Ampersand */:\n sb.appendASCIIString('&amp;');\n break;\n case 0 /* Null */:\n if (renderControlCharacters) {\n // See https://unicode-table.com/en/blocks/control-pictures/\n sb.write1(9216);\n }\n else {\n sb.appendASCIIString('&#00;');\n }\n break;\n case 65279 /* UTF8_BOM */:\n case 8232 /* LINE_SEPARATOR */:\n case 8233 /* PARAGRAPH_SEPARATOR */:\n case 133 /* NEXT_LINE */:\n sb.write1(0xFFFD);\n break;\n default:\n if (strings.isFullWidthCharacter(charCode)) {\n charWidth++;\n }\n // See https://unicode-table.com/en/blocks/control-pictures/\n if (renderControlCharacters && charCode < 32) {\n sb.write1(9216 + charCode);\n }\n else if (renderControlCharacters && charCode === 127) {\n // DEL\n sb.write1(9249);\n }\n else {\n sb.write1(charCode);\n }\n }\n charOffsetInPart += producedCharacters;\n partContentCnt += producedCharacters;\n if (charIndex >= fauxIndentLength) {\n visibleColumn += charWidth;\n }\n }\n prevPartContentCnt = partContentCnt;\n }\n if (partIsEmptyAndHasPseudoAfter) {\n partDisplacement++;\n }\n else {\n partDisplacement = 0;\n }\n sb.appendASCIIString('</span>');\n }\n // When getting client rects for the last character, we will position the\n // text range at the end of the span, insteaf of at the beginning of next span\n characterMapping.setPartData(len, parts.length - 1, charOffsetInPart, partAbsoluteOffset);\n if (isOverflowing) {\n sb.appendASCIIString('<span>&hellip;</span>');\n }\n sb.appendASCIIString('</span>');\n return new RenderLineOutput(characterMapping, containsRTL, containsForeignElements);\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 *--------------------------------------------------------------------------------------------*/\nimport { toUint32 } from '../../../base/common/uint.js';\nexport class PrefixSumIndexOfResult {\n constructor(index, remainder) {\n this.index = index;\n this.remainder = remainder;\n }\n}\nexport class PrefixSumComputer {\n constructor(values) {\n this.values = values;\n this.prefixSum = new Uint32Array(values.length);\n this.prefixSumValidIndex = new Int32Array(1);\n this.prefixSumValidIndex[0] = -1;\n }\n insertValues(insertIndex, insertValues) {\n insertIndex = toUint32(insertIndex);\n const oldValues = this.values;\n const oldPrefixSum = this.prefixSum;\n const insertValuesLen = insertValues.length;\n if (insertValuesLen === 0) {\n return false;\n }\n this.values = new Uint32Array(oldValues.length + insertValuesLen);\n this.values.set(oldValues.subarray(0, insertIndex), 0);\n this.values.set(oldValues.subarray(insertIndex), insertIndex + insertValuesLen);\n this.values.set(insertValues, insertIndex);\n if (insertIndex - 1 < this.prefixSumValidIndex[0]) {\n this.prefixSumValidIndex[0] = insertIndex - 1;\n }\n this.prefixSum = new Uint32Array(this.values.length);\n if (this.prefixSumValidIndex[0] >= 0) {\n this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\n }\n return true;\n }\n changeValue(index, value) {\n index = toUint32(index);\n value = toUint32(value);\n if (this.values[index] === value) {\n return false;\n }\n this.values[index] = value;\n if (index - 1 < this.prefixSumValidIndex[0]) {\n this.prefixSumValidIndex[0] = index - 1;\n }\n return true;\n }\n removeValues(startIndex, cnt) {\n startIndex = toUint32(startIndex);\n cnt = toUint32(cnt);\n const oldValues = this.values;\n const oldPrefixSum = this.prefixSum;\n if (startIndex >= oldValues.length) {\n return false;\n }\n let maxCnt = oldValues.length - startIndex;\n if (cnt >= maxCnt) {\n cnt = maxCnt;\n }\n if (cnt === 0) {\n return false;\n }\n this.values = new Uint32Array(oldValues.length - cnt);\n this.values.set(oldValues.subarray(0, startIndex), 0);\n this.values.set(oldValues.subarray(startIndex + cnt), startIndex);\n this.prefixSum = new Uint32Array(this.values.length);\n if (startIndex - 1 < this.prefixSumValidIndex[0]) {\n this.prefixSumValidIndex[0] = startIndex - 1;\n }\n if (this.prefixSumValidIndex[0] >= 0) {\n this.prefixSum.set(oldPrefixSum.subarray(0, this.prefixSumValidIndex[0] + 1));\n }\n return true;\n }\n getTotalValue() {\n if (this.values.length === 0) {\n return 0;\n }\n return this._getAccumulatedValue(this.values.length - 1);\n }\n getAccumulatedValue(index) {\n if (index < 0) {\n return 0;\n }\n index = toUint32(index);\n return this._getAccumulatedValue(index);\n }\n _getAccumulatedValue(index) {\n if (index <= this.prefixSumValidIndex[0]) {\n return this.prefixSum[index];\n }\n let startIndex = this.prefixSumValidIndex[0] + 1;\n if (startIndex === 0) {\n this.prefixSum[0] = this.values[0];\n startIndex++;\n }\n if (index >= this.values.length) {\n index = this.values.length - 1;\n }\n for (let i = startIndex; i <= index; i++) {\n this.prefixSum[i] = this.prefixSum[i - 1] + this.values[i];\n }\n this.prefixSumValidIndex[0] = Math.max(this.prefixSumValidIndex[0], index);\n return this.prefixSum[index];\n }\n getIndexOf(accumulatedValue) {\n accumulatedValue = Math.floor(accumulatedValue); //@perf\n // Compute all sums (to get a fully valid prefixSum)\n this.getTotalValue();\n let low = 0;\n let high = this.values.length - 1;\n let mid = 0;\n let midStop = 0;\n let midStart = 0;\n while (low <= high) {\n mid = low + ((high - low) / 2) | 0;\n midStop = this.prefixSum[mid];\n midStart = midStop - this.values[mid];\n if (accumulatedValue < midStart) {\n high = mid - 1;\n }\n else if (accumulatedValue >= midStop) {\n low = mid + 1;\n }\n else {\n break;\n }\n }\n return new PrefixSumIndexOfResult(mid, accumulatedValue - midStart);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nexport class Viewport {\n constructor(top, left, width, height) {\n this.top = top | 0;\n this.left = left | 0;\n this.width = width | 0;\n this.height = height | 0;\n }\n}\nexport class OutputPosition {\n constructor(outputLineIndex, outputOffset) {\n this.outputLineIndex = outputLineIndex;\n this.outputOffset = outputOffset;\n }\n}\nexport class LineBreakData {\n constructor(breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength) {\n this.breakOffsets = breakOffsets;\n this.breakOffsetsVisibleColumn = breakOffsetsVisibleColumn;\n this.wrappedTextIndentLength = wrappedTextIndentLength;\n }\n static getInputOffsetOfOutputPosition(breakOffsets, outputLineIndex, outputOffset) {\n if (outputLineIndex === 0) {\n return outputOffset;\n }\n else {\n return breakOffsets[outputLineIndex - 1] + outputOffset;\n }\n }\n static getOutputPositionOfInputOffset(breakOffsets, inputOffset) {\n let low = 0;\n let high = breakOffsets.length - 1;\n let mid = 0;\n let midStart = 0;\n while (low <= high) {\n mid = low + ((high - low) / 2) | 0;\n const midStop = breakOffsets[mid];\n midStart = mid > 0 ? breakOffsets[mid - 1] : 0;\n if (inputOffset < midStart) {\n high = mid - 1;\n }\n else if (inputOffset >= midStop) {\n low = mid + 1;\n }\n else {\n break;\n }\n }\n return new OutputPosition(mid, inputOffset - midStart);\n }\n}\nexport class MinimapLinesRenderingData {\n constructor(tabSize, data) {\n this.tabSize = tabSize;\n this.data = data;\n }\n}\nexport class ViewLineData {\n constructor(content, continuesWithWrappedLine, minColumn, maxColumn, startVisibleColumn, tokens) {\n this.content = content;\n this.continuesWithWrappedLine = continuesWithWrappedLine;\n this.minColumn = minColumn;\n this.maxColumn = maxColumn;\n this.startVisibleColumn = startVisibleColumn;\n this.tokens = tokens;\n }\n}\nexport class ViewLineRenderingData {\n constructor(minColumn, maxColumn, content, continuesWithWrappedLine, mightContainRTL, mightContainNonBasicASCII, tokens, inlineDecorations, tabSize, startVisibleColumn) {\n this.minColumn = minColumn;\n this.maxColumn = maxColumn;\n this.content = content;\n this.continuesWithWrappedLine = continuesWithWrappedLine;\n this.isBasicASCII = ViewLineRenderingData.isBasicASCII(content, mightContainNonBasicASCII);\n this.containsRTL = ViewLineRenderingData.containsRTL(content, this.isBasicASCII, mightContainRTL);\n this.tokens = tokens;\n this.inlineDecorations = inlineDecorations;\n this.tabSize = tabSize;\n this.startVisibleColumn = startVisibleColumn;\n }\n static isBasicASCII(lineContent, mightContainNonBasicASCII) {\n if (mightContainNonBasicASCII) {\n return strings.isBasicASCII(lineContent);\n }\n return true;\n }\n static containsRTL(lineContent, isBasicASCII, mightContainRTL) {\n if (!isBasicASCII && mightContainRTL) {\n return strings.containsRTL(lineContent);\n }\n return false;\n }\n}\nexport class InlineDecoration {\n constructor(range, inlineClassName, type) {\n this.range = range;\n this.inlineClassName = inlineClassName;\n this.type = type;\n }\n}\nexport class ViewModelDecoration {\n constructor(range, options) {\n this.range = range;\n this.options = options;\n }\n}\n","/**\n * **!Do not construct directly!**\n *\n * **!Only static methods because it gets serialized!**\n *\n * This represents the \"canonical\" version for an extension identifier. Extension ids\n * have to be case-insensitive (due to the marketplace), but we must ensure case\n * preservation because the extension API is already public at this time.\n *\n * For example, given an extension with the publisher `\"Hello\"` and the name `\"World\"`,\n * its canonical extension identifier is `\"Hello.World\"`. This extension could be\n * referenced in some other extension's dependencies using the string `\"hello.world\"`.\n *\n * To make matters more complicated, an extension can optionally have an UUID. When two\n * extensions have the same UUID, they are considered equal even if their identifier is different.\n */\nexport class ExtensionIdentifier {\n constructor(value) {\n this.value = value;\n this._lower = value.toLowerCase();\n }\n /**\n * Gives the value by which to index (for equality).\n */\n static toKey(id) {\n if (typeof id === 'string') {\n return id.toLowerCase();\n }\n return id._lower;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { alert } from '../../../base/browser/ui/aria/aria.js';\nimport { asArray, isNonEmptyArray } from '../../../base/common/arrays.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { illegalArgument, onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { EditorStateCancellationTokenSource, TextModelCancellationTokenSource } from '../../browser/core/editorState.js';\nimport { isCodeEditor } from '../../browser/editorBrowser.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { DocumentFormattingEditProviderRegistry, DocumentRangeFormattingEditProviderRegistry, OnTypeFormattingEditProviderRegistry } from '../../common/modes.js';\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { FormattingEdit } from './formattingEdit.js';\nimport * as nls from '../../../nls.js';\nimport { ExtensionIdentifier } from '../../../platform/extensions/common/extensions.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { assertType } from '../../../base/common/types.js';\nimport { Iterable } from '../../../base/common/iterator.js';\nexport function alertFormattingEdits(edits) {\n edits = edits.filter(edit => edit.range);\n if (!edits.length) {\n return;\n }\n let { range } = edits[0];\n for (let i = 1; i < edits.length; i++) {\n range = Range.plusRange(range, edits[i].range);\n }\n const { startLineNumber, endLineNumber } = range;\n if (startLineNumber === endLineNumber) {\n if (edits.length === 1) {\n alert(nls.localize('hint11', \"Made 1 formatting edit on line {0}\", startLineNumber));\n }\n else {\n alert(nls.localize('hintn1', \"Made {0} formatting edits on line {1}\", edits.length, startLineNumber));\n }\n }\n else {\n if (edits.length === 1) {\n alert(nls.localize('hint1n', \"Made 1 formatting edit between lines {0} and {1}\", startLineNumber, endLineNumber));\n }\n else {\n alert(nls.localize('hintnn', \"Made {0} formatting edits between lines {1} and {2}\", edits.length, startLineNumber, endLineNumber));\n }\n }\n}\nexport function getRealAndSyntheticDocumentFormattersOrdered(model) {\n const result = [];\n const seen = new Set();\n // (1) add all document formatter\n const docFormatter = DocumentFormattingEditProviderRegistry.ordered(model);\n for (const formatter of docFormatter) {\n result.push(formatter);\n if (formatter.extensionId) {\n seen.add(ExtensionIdentifier.toKey(formatter.extensionId));\n }\n }\n // (2) add all range formatter as document formatter (unless the same extension already did that)\n const rangeFormatter = DocumentRangeFormattingEditProviderRegistry.ordered(model);\n for (const formatter of rangeFormatter) {\n if (formatter.extensionId) {\n if (seen.has(ExtensionIdentifier.toKey(formatter.extensionId))) {\n continue;\n }\n seen.add(ExtensionIdentifier.toKey(formatter.extensionId));\n }\n result.push({\n displayName: formatter.displayName,\n extensionId: formatter.extensionId,\n provideDocumentFormattingEdits(model, options, token) {\n return formatter.provideDocumentRangeFormattingEdits(model, model.getFullModelRange(), options, token);\n }\n });\n }\n return result;\n}\nexport class FormattingConflicts {\n static setFormatterSelector(selector) {\n const remove = FormattingConflicts._selectors.unshift(selector);\n return { dispose: remove };\n }\n static select(formatter, document, mode) {\n return __awaiter(this, void 0, void 0, function* () {\n if (formatter.length === 0) {\n return undefined;\n }\n const selector = Iterable.first(FormattingConflicts._selectors);\n if (selector) {\n return yield selector(formatter, document, mode);\n }\n return undefined;\n });\n }\n}\nFormattingConflicts._selectors = new LinkedList();\nexport function formatDocumentRangesWithSelectedProvider(accessor, editorOrModel, rangeOrRanges, mode, progress, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const instaService = accessor.get(IInstantiationService);\n const model = isCodeEditor(editorOrModel) ? editorOrModel.getModel() : editorOrModel;\n const provider = DocumentRangeFormattingEditProviderRegistry.ordered(model);\n const selected = yield FormattingConflicts.select(provider, model, mode);\n if (selected) {\n progress.report(selected);\n yield instaService.invokeFunction(formatDocumentRangesWithProvider, selected, editorOrModel, rangeOrRanges, token);\n }\n });\n}\nexport function formatDocumentRangesWithProvider(accessor, provider, editorOrModel, rangeOrRanges, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const workerService = accessor.get(IEditorWorkerService);\n let model;\n let cts;\n if (isCodeEditor(editorOrModel)) {\n model = editorOrModel.getModel();\n cts = new EditorStateCancellationTokenSource(editorOrModel, 1 /* Value */ | 4 /* Position */, undefined, token);\n }\n else {\n model = editorOrModel;\n cts = new TextModelCancellationTokenSource(editorOrModel, token);\n }\n // make sure that ranges don't overlap nor touch each other\n let ranges = [];\n let len = 0;\n for (let range of asArray(rangeOrRanges).sort(Range.compareRangesUsingStarts)) {\n if (len > 0 && Range.areIntersectingOrTouching(ranges[len - 1], range)) {\n ranges[len - 1] = Range.fromPositions(ranges[len - 1].getStartPosition(), range.getEndPosition());\n }\n else {\n len = ranges.push(range);\n }\n }\n const allEdits = [];\n for (let range of ranges) {\n try {\n const rawEdits = yield provider.provideDocumentRangeFormattingEdits(model, range, model.getFormattingOptions(), cts.token);\n const minEdits = yield workerService.computeMoreMinimalEdits(model.uri, rawEdits);\n if (minEdits) {\n allEdits.push(...minEdits);\n }\n if (cts.token.isCancellationRequested) {\n return true;\n }\n }\n finally {\n cts.dispose();\n }\n }\n if (allEdits.length === 0) {\n return false;\n }\n if (isCodeEditor(editorOrModel)) {\n // use editor to apply edits\n FormattingEdit.execute(editorOrModel, allEdits, true);\n alertFormattingEdits(allEdits);\n editorOrModel.revealPositionInCenterIfOutsideViewport(editorOrModel.getPosition(), 1 /* Immediate */);\n }\n else {\n // use model to apply edits\n const [{ range }] = allEdits;\n const initialSelection = new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n model.pushEditOperations([initialSelection], allEdits.map(edit => {\n return {\n text: edit.text,\n range: Range.lift(edit.range),\n forceMoveMarkers: true\n };\n }), undoEdits => {\n for (const { range } of undoEdits) {\n if (Range.areIntersectingOrTouching(range, initialSelection)) {\n return [new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn)];\n }\n }\n return null;\n });\n }\n return true;\n });\n}\nexport function formatDocumentWithSelectedProvider(accessor, editorOrModel, mode, progress, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const instaService = accessor.get(IInstantiationService);\n const model = isCodeEditor(editorOrModel) ? editorOrModel.getModel() : editorOrModel;\n const provider = getRealAndSyntheticDocumentFormattersOrdered(model);\n const selected = yield FormattingConflicts.select(provider, model, mode);\n if (selected) {\n progress.report(selected);\n yield instaService.invokeFunction(formatDocumentWithProvider, selected, editorOrModel, mode, token);\n }\n });\n}\nexport function formatDocumentWithProvider(accessor, provider, editorOrModel, mode, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const workerService = accessor.get(IEditorWorkerService);\n let model;\n let cts;\n if (isCodeEditor(editorOrModel)) {\n model = editorOrModel.getModel();\n cts = new EditorStateCancellationTokenSource(editorOrModel, 1 /* Value */ | 4 /* Position */, undefined, token);\n }\n else {\n model = editorOrModel;\n cts = new TextModelCancellationTokenSource(editorOrModel, token);\n }\n let edits;\n try {\n const rawEdits = yield provider.provideDocumentFormattingEdits(model, model.getFormattingOptions(), cts.token);\n edits = yield workerService.computeMoreMinimalEdits(model.uri, rawEdits);\n if (cts.token.isCancellationRequested) {\n return true;\n }\n }\n finally {\n cts.dispose();\n }\n if (!edits || edits.length === 0) {\n return false;\n }\n if (isCodeEditor(editorOrModel)) {\n // use editor to apply edits\n FormattingEdit.execute(editorOrModel, edits, mode !== 2 /* Silent */);\n if (mode !== 2 /* Silent */) {\n alertFormattingEdits(edits);\n editorOrModel.revealPositionInCenterIfOutsideViewport(editorOrModel.getPosition(), 1 /* Immediate */);\n }\n }\n else {\n // use model to apply edits\n const [{ range }] = edits;\n const initialSelection = new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n model.pushEditOperations([initialSelection], edits.map(edit => {\n return {\n text: edit.text,\n range: Range.lift(edit.range),\n forceMoveMarkers: true\n };\n }), undoEdits => {\n for (const { range } of undoEdits) {\n if (Range.areIntersectingOrTouching(range, initialSelection)) {\n return [new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn)];\n }\n }\n return null;\n });\n }\n return true;\n });\n}\nexport function getDocumentRangeFormattingEditsUntilResult(workerService, model, range, options, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const providers = DocumentRangeFormattingEditProviderRegistry.ordered(model);\n for (const provider of providers) {\n let rawEdits = yield Promise.resolve(provider.provideDocumentRangeFormattingEdits(model, range, options, token)).catch(onUnexpectedExternalError);\n if (isNonEmptyArray(rawEdits)) {\n return yield workerService.computeMoreMinimalEdits(model.uri, rawEdits);\n }\n }\n return undefined;\n });\n}\nexport function getDocumentFormattingEditsUntilResult(workerService, model, options, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const providers = getRealAndSyntheticDocumentFormattersOrdered(model);\n for (const provider of providers) {\n let rawEdits = yield Promise.resolve(provider.provideDocumentFormattingEdits(model, options, token)).catch(onUnexpectedExternalError);\n if (isNonEmptyArray(rawEdits)) {\n return yield workerService.computeMoreMinimalEdits(model.uri, rawEdits);\n }\n }\n return undefined;\n });\n}\nexport function getOnTypeFormattingEdits(workerService, model, position, ch, options) {\n const providers = OnTypeFormattingEditProviderRegistry.ordered(model);\n if (providers.length === 0) {\n return Promise.resolve(undefined);\n }\n if (providers[0].autoFormatTriggerCharacters.indexOf(ch) < 0) {\n return Promise.resolve(undefined);\n }\n return Promise.resolve(providers[0].provideOnTypeFormattingEdits(model, position, ch, options, CancellationToken.None)).catch(onUnexpectedExternalError).then(edits => {\n return workerService.computeMoreMinimalEdits(model.uri, edits);\n });\n}\nCommandsRegistry.registerCommand('_executeFormatRangeProvider', function (accessor, ...args) {\n const [resource, range, options] = args;\n assertType(URI.isUri(resource));\n assertType(Range.isIRange(range));\n const model = accessor.get(IModelService).getModel(resource);\n if (!model) {\n throw illegalArgument('resource');\n }\n return getDocumentRangeFormattingEditsUntilResult(accessor.get(IEditorWorkerService), model, Range.lift(range), options, CancellationToken.None);\n});\nCommandsRegistry.registerCommand('_executeFormatDocumentProvider', function (accessor, ...args) {\n const [resource, options] = args;\n assertType(URI.isUri(resource));\n const model = accessor.get(IModelService).getModel(resource);\n if (!model) {\n throw illegalArgument('resource');\n }\n return getDocumentFormattingEditsUntilResult(accessor.get(IEditorWorkerService), model, options, CancellationToken.None);\n});\nCommandsRegistry.registerCommand('_executeFormatOnTypeProvider', function (accessor, ...args) {\n const [resource, position, ch, options] = args;\n assertType(URI.isUri(resource));\n assertType(Position.isIPosition(position));\n assertType(typeof ch === 'string');\n const model = accessor.get(IModelService).getModel(resource);\n if (!model) {\n throw illegalArgument('resource');\n }\n return getOnTypeFormattingEdits(accessor.get(IEditorWorkerService), model, Position.lift(position), ch, options);\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 *--------------------------------------------------------------------------------------------*/\nimport { EditOperation } from '../../common/core/editOperation.js';\nimport { Range } from '../../common/core/range.js';\nexport class FormattingEdit {\n static _handleEolEdits(editor, edits) {\n let newEol = undefined;\n let singleEdits = [];\n for (let edit of edits) {\n if (typeof edit.eol === 'number') {\n newEol = edit.eol;\n }\n if (edit.range && typeof edit.text === 'string') {\n singleEdits.push(edit);\n }\n }\n if (typeof newEol === 'number') {\n if (editor.hasModel()) {\n editor.getModel().pushEOL(newEol);\n }\n }\n return singleEdits;\n }\n static _isFullModelReplaceEdit(editor, edit) {\n if (!editor.hasModel()) {\n return false;\n }\n const model = editor.getModel();\n const editRange = model.validateRange(edit.range);\n const fullModelRange = model.getFullModelRange();\n return fullModelRange.equalsRange(editRange);\n }\n static execute(editor, _edits, addUndoStops) {\n if (addUndoStops) {\n editor.pushUndoStop();\n }\n const edits = FormattingEdit._handleEolEdits(editor, _edits);\n if (edits.length === 1 && FormattingEdit._isFullModelReplaceEdit(editor, edits[0])) {\n // We use replace semantics and hope that markers stay put...\n editor.executeEdits('formatEditsCommand', edits.map(edit => EditOperation.replace(Range.lift(edit.range), edit.text)));\n }\n else {\n editor.executeEdits('formatEditsCommand', edits.map(edit => EditOperation.replaceMove(Range.lift(edit.range), edit.text)));\n }\n if (addUndoStops) {\n editor.pushUndoStop();\n }\n }\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// THIS IS A GENERATED FILE. DO NOT EDIT DIRECTLY.\nexport var AccessibilitySupport;\n(function (AccessibilitySupport) {\n /**\n * This should be the browser case where it is not known if a screen reader is attached or no.\n */\n AccessibilitySupport[AccessibilitySupport[\"Unknown\"] = 0] = \"Unknown\";\n AccessibilitySupport[AccessibilitySupport[\"Disabled\"] = 1] = \"Disabled\";\n AccessibilitySupport[AccessibilitySupport[\"Enabled\"] = 2] = \"Enabled\";\n})(AccessibilitySupport || (AccessibilitySupport = {}));\nexport var CompletionItemInsertTextRule;\n(function (CompletionItemInsertTextRule) {\n /**\n * Adjust whitespace/indentation of multiline insert texts to\n * match the current line indentation.\n */\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"KeepWhitespace\"] = 1] = \"KeepWhitespace\";\n /**\n * `insertText` is a snippet.\n */\n CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"InsertAsSnippet\"] = 4] = \"InsertAsSnippet\";\n})(CompletionItemInsertTextRule || (CompletionItemInsertTextRule = {}));\nexport var CompletionItemKind;\n(function (CompletionItemKind) {\n CompletionItemKind[CompletionItemKind[\"Method\"] = 0] = \"Method\";\n CompletionItemKind[CompletionItemKind[\"Function\"] = 1] = \"Function\";\n CompletionItemKind[CompletionItemKind[\"Constructor\"] = 2] = \"Constructor\";\n CompletionItemKind[CompletionItemKind[\"Field\"] = 3] = \"Field\";\n CompletionItemKind[CompletionItemKind[\"Variable\"] = 4] = \"Variable\";\n CompletionItemKind[CompletionItemKind[\"Class\"] = 5] = \"Class\";\n CompletionItemKind[CompletionItemKind[\"Struct\"] = 6] = \"Struct\";\n CompletionItemKind[CompletionItemKind[\"Interface\"] = 7] = \"Interface\";\n CompletionItemKind[CompletionItemKind[\"Module\"] = 8] = \"Module\";\n CompletionItemKind[CompletionItemKind[\"Property\"] = 9] = \"Property\";\n CompletionItemKind[CompletionItemKind[\"Event\"] = 10] = \"Event\";\n CompletionItemKind[CompletionItemKind[\"Operator\"] = 11] = \"Operator\";\n CompletionItemKind[CompletionItemKind[\"Unit\"] = 12] = \"Unit\";\n CompletionItemKind[CompletionItemKind[\"Value\"] = 13] = \"Value\";\n CompletionItemKind[CompletionItemKind[\"Constant\"] = 14] = \"Constant\";\n CompletionItemKind[CompletionItemKind[\"Enum\"] = 15] = \"Enum\";\n CompletionItemKind[CompletionItemKind[\"EnumMember\"] = 16] = \"EnumMember\";\n CompletionItemKind[CompletionItemKind[\"Keyword\"] = 17] = \"Keyword\";\n CompletionItemKind[CompletionItemKind[\"Text\"] = 18] = \"Text\";\n CompletionItemKind[CompletionItemKind[\"Color\"] = 19] = \"Color\";\n CompletionItemKind[CompletionItemKind[\"File\"] = 20] = \"File\";\n CompletionItemKind[CompletionItemKind[\"Reference\"] = 21] = \"Reference\";\n CompletionItemKind[CompletionItemKind[\"Customcolor\"] = 22] = \"Customcolor\";\n CompletionItemKind[CompletionItemKind[\"Folder\"] = 23] = \"Folder\";\n CompletionItemKind[CompletionItemKind[\"TypeParameter\"] = 24] = \"TypeParameter\";\n CompletionItemKind[CompletionItemKind[\"User\"] = 25] = \"User\";\n CompletionItemKind[CompletionItemKind[\"Issue\"] = 26] = \"Issue\";\n CompletionItemKind[CompletionItemKind[\"Snippet\"] = 27] = \"Snippet\";\n})(CompletionItemKind || (CompletionItemKind = {}));\nexport var CompletionItemTag;\n(function (CompletionItemTag) {\n CompletionItemTag[CompletionItemTag[\"Deprecated\"] = 1] = \"Deprecated\";\n})(CompletionItemTag || (CompletionItemTag = {}));\n/**\n * How a suggest provider was triggered.\n */\nexport var CompletionTriggerKind;\n(function (CompletionTriggerKind) {\n CompletionTriggerKind[CompletionTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n CompletionTriggerKind[CompletionTriggerKind[\"TriggerCharacter\"] = 1] = \"TriggerCharacter\";\n CompletionTriggerKind[CompletionTriggerKind[\"TriggerForIncompleteCompletions\"] = 2] = \"TriggerForIncompleteCompletions\";\n})(CompletionTriggerKind || (CompletionTriggerKind = {}));\n/**\n * A positioning preference for rendering content widgets.\n */\nexport var ContentWidgetPositionPreference;\n(function (ContentWidgetPositionPreference) {\n /**\n * Place the content widget exactly at a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"EXACT\"] = 0] = \"EXACT\";\n /**\n * Place the content widget above a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"ABOVE\"] = 1] = \"ABOVE\";\n /**\n * Place the content widget below a position\n */\n ContentWidgetPositionPreference[ContentWidgetPositionPreference[\"BELOW\"] = 2] = \"BELOW\";\n})(ContentWidgetPositionPreference || (ContentWidgetPositionPreference = {}));\n/**\n * Describes the reason the cursor has changed its position.\n */\nexport var CursorChangeReason;\n(function (CursorChangeReason) {\n /**\n * Unknown or not set.\n */\n CursorChangeReason[CursorChangeReason[\"NotSet\"] = 0] = \"NotSet\";\n /**\n * A `model.setValue()` was called.\n */\n CursorChangeReason[CursorChangeReason[\"ContentFlush\"] = 1] = \"ContentFlush\";\n /**\n * The `model` has been changed outside of this cursor and the cursor recovers its position from associated markers.\n */\n CursorChangeReason[CursorChangeReason[\"RecoverFromMarkers\"] = 2] = \"RecoverFromMarkers\";\n /**\n * There was an explicit user gesture.\n */\n CursorChangeReason[CursorChangeReason[\"Explicit\"] = 3] = \"Explicit\";\n /**\n * There was a Paste.\n */\n CursorChangeReason[CursorChangeReason[\"Paste\"] = 4] = \"Paste\";\n /**\n * There was an Undo.\n */\n CursorChangeReason[CursorChangeReason[\"Undo\"] = 5] = \"Undo\";\n /**\n * There was a Redo.\n */\n CursorChangeReason[CursorChangeReason[\"Redo\"] = 6] = \"Redo\";\n})(CursorChangeReason || (CursorChangeReason = {}));\n/**\n * The default end of line to use when instantiating models.\n */\nexport var DefaultEndOfLine;\n(function (DefaultEndOfLine) {\n /**\n * Use line feed (\\n) as the end of line character.\n */\n DefaultEndOfLine[DefaultEndOfLine[\"LF\"] = 1] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n DefaultEndOfLine[DefaultEndOfLine[\"CRLF\"] = 2] = \"CRLF\";\n})(DefaultEndOfLine || (DefaultEndOfLine = {}));\n/**\n * A document highlight kind.\n */\nexport var DocumentHighlightKind;\n(function (DocumentHighlightKind) {\n /**\n * A textual occurrence.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Text\"] = 0] = \"Text\";\n /**\n * Read-access of a symbol, like reading a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Read\"] = 1] = \"Read\";\n /**\n * Write-access of a symbol, like writing to a variable.\n */\n DocumentHighlightKind[DocumentHighlightKind[\"Write\"] = 2] = \"Write\";\n})(DocumentHighlightKind || (DocumentHighlightKind = {}));\n/**\n * Configuration options for auto indentation in the editor\n */\nexport var EditorAutoIndentStrategy;\n(function (EditorAutoIndentStrategy) {\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"None\"] = 0] = \"None\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Keep\"] = 1] = \"Keep\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Brackets\"] = 2] = \"Brackets\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Advanced\"] = 3] = \"Advanced\";\n EditorAutoIndentStrategy[EditorAutoIndentStrategy[\"Full\"] = 4] = \"Full\";\n})(EditorAutoIndentStrategy || (EditorAutoIndentStrategy = {}));\nexport var EditorOption;\n(function (EditorOption) {\n EditorOption[EditorOption[\"acceptSuggestionOnCommitCharacter\"] = 0] = \"acceptSuggestionOnCommitCharacter\";\n EditorOption[EditorOption[\"acceptSuggestionOnEnter\"] = 1] = \"acceptSuggestionOnEnter\";\n EditorOption[EditorOption[\"accessibilitySupport\"] = 2] = \"accessibilitySupport\";\n EditorOption[EditorOption[\"accessibilityPageSize\"] = 3] = \"accessibilityPageSize\";\n EditorOption[EditorOption[\"ariaLabel\"] = 4] = \"ariaLabel\";\n EditorOption[EditorOption[\"autoClosingBrackets\"] = 5] = \"autoClosingBrackets\";\n EditorOption[EditorOption[\"autoClosingDelete\"] = 6] = \"autoClosingDelete\";\n EditorOption[EditorOption[\"autoClosingOvertype\"] = 7] = \"autoClosingOvertype\";\n EditorOption[EditorOption[\"autoClosingQuotes\"] = 8] = \"autoClosingQuotes\";\n EditorOption[EditorOption[\"autoIndent\"] = 9] = \"autoIndent\";\n EditorOption[EditorOption[\"automaticLayout\"] = 10] = \"automaticLayout\";\n EditorOption[EditorOption[\"autoSurround\"] = 11] = \"autoSurround\";\n EditorOption[EditorOption[\"codeLens\"] = 12] = \"codeLens\";\n EditorOption[EditorOption[\"codeLensFontFamily\"] = 13] = \"codeLensFontFamily\";\n EditorOption[EditorOption[\"codeLensFontSize\"] = 14] = \"codeLensFontSize\";\n EditorOption[EditorOption[\"colorDecorators\"] = 15] = \"colorDecorators\";\n EditorOption[EditorOption[\"columnSelection\"] = 16] = \"columnSelection\";\n EditorOption[EditorOption[\"comments\"] = 17] = \"comments\";\n EditorOption[EditorOption[\"contextmenu\"] = 18] = \"contextmenu\";\n EditorOption[EditorOption[\"copyWithSyntaxHighlighting\"] = 19] = \"copyWithSyntaxHighlighting\";\n EditorOption[EditorOption[\"cursorBlinking\"] = 20] = \"cursorBlinking\";\n EditorOption[EditorOption[\"cursorSmoothCaretAnimation\"] = 21] = \"cursorSmoothCaretAnimation\";\n EditorOption[EditorOption[\"cursorStyle\"] = 22] = \"cursorStyle\";\n EditorOption[EditorOption[\"cursorSurroundingLines\"] = 23] = \"cursorSurroundingLines\";\n EditorOption[EditorOption[\"cursorSurroundingLinesStyle\"] = 24] = \"cursorSurroundingLinesStyle\";\n EditorOption[EditorOption[\"cursorWidth\"] = 25] = \"cursorWidth\";\n EditorOption[EditorOption[\"disableLayerHinting\"] = 26] = \"disableLayerHinting\";\n EditorOption[EditorOption[\"disableMonospaceOptimizations\"] = 27] = \"disableMonospaceOptimizations\";\n EditorOption[EditorOption[\"domReadOnly\"] = 28] = \"domReadOnly\";\n EditorOption[EditorOption[\"dragAndDrop\"] = 29] = \"dragAndDrop\";\n EditorOption[EditorOption[\"emptySelectionClipboard\"] = 30] = \"emptySelectionClipboard\";\n EditorOption[EditorOption[\"extraEditorClassName\"] = 31] = \"extraEditorClassName\";\n EditorOption[EditorOption[\"fastScrollSensitivity\"] = 32] = \"fastScrollSensitivity\";\n EditorOption[EditorOption[\"find\"] = 33] = \"find\";\n EditorOption[EditorOption[\"fixedOverflowWidgets\"] = 34] = \"fixedOverflowWidgets\";\n EditorOption[EditorOption[\"folding\"] = 35] = \"folding\";\n EditorOption[EditorOption[\"foldingStrategy\"] = 36] = \"foldingStrategy\";\n EditorOption[EditorOption[\"foldingHighlight\"] = 37] = \"foldingHighlight\";\n EditorOption[EditorOption[\"unfoldOnClickAfterEndOfLine\"] = 38] = \"unfoldOnClickAfterEndOfLine\";\n EditorOption[EditorOption[\"fontFamily\"] = 39] = \"fontFamily\";\n EditorOption[EditorOption[\"fontInfo\"] = 40] = \"fontInfo\";\n EditorOption[EditorOption[\"fontLigatures\"] = 41] = \"fontLigatures\";\n EditorOption[EditorOption[\"fontSize\"] = 42] = \"fontSize\";\n EditorOption[EditorOption[\"fontWeight\"] = 43] = \"fontWeight\";\n EditorOption[EditorOption[\"formatOnPaste\"] = 44] = \"formatOnPaste\";\n EditorOption[EditorOption[\"formatOnType\"] = 45] = \"formatOnType\";\n EditorOption[EditorOption[\"glyphMargin\"] = 46] = \"glyphMargin\";\n EditorOption[EditorOption[\"gotoLocation\"] = 47] = \"gotoLocation\";\n EditorOption[EditorOption[\"hideCursorInOverviewRuler\"] = 48] = \"hideCursorInOverviewRuler\";\n EditorOption[EditorOption[\"highlightActiveIndentGuide\"] = 49] = \"highlightActiveIndentGuide\";\n EditorOption[EditorOption[\"hover\"] = 50] = \"hover\";\n EditorOption[EditorOption[\"inDiffEditor\"] = 51] = \"inDiffEditor\";\n EditorOption[EditorOption[\"letterSpacing\"] = 52] = \"letterSpacing\";\n EditorOption[EditorOption[\"lightbulb\"] = 53] = \"lightbulb\";\n EditorOption[EditorOption[\"lineDecorationsWidth\"] = 54] = \"lineDecorationsWidth\";\n EditorOption[EditorOption[\"lineHeight\"] = 55] = \"lineHeight\";\n EditorOption[EditorOption[\"lineNumbers\"] = 56] = \"lineNumbers\";\n EditorOption[EditorOption[\"lineNumbersMinChars\"] = 57] = \"lineNumbersMinChars\";\n EditorOption[EditorOption[\"linkedEditing\"] = 58] = \"linkedEditing\";\n EditorOption[EditorOption[\"links\"] = 59] = \"links\";\n EditorOption[EditorOption[\"matchBrackets\"] = 60] = \"matchBrackets\";\n EditorOption[EditorOption[\"minimap\"] = 61] = \"minimap\";\n EditorOption[EditorOption[\"mouseStyle\"] = 62] = \"mouseStyle\";\n EditorOption[EditorOption[\"mouseWheelScrollSensitivity\"] = 63] = \"mouseWheelScrollSensitivity\";\n EditorOption[EditorOption[\"mouseWheelZoom\"] = 64] = \"mouseWheelZoom\";\n EditorOption[EditorOption[\"multiCursorMergeOverlapping\"] = 65] = \"multiCursorMergeOverlapping\";\n EditorOption[EditorOption[\"multiCursorModifier\"] = 66] = \"multiCursorModifier\";\n EditorOption[EditorOption[\"multiCursorPaste\"] = 67] = \"multiCursorPaste\";\n EditorOption[EditorOption[\"occurrencesHighlight\"] = 68] = \"occurrencesHighlight\";\n EditorOption[EditorOption[\"overviewRulerBorder\"] = 69] = \"overviewRulerBorder\";\n EditorOption[EditorOption[\"overviewRulerLanes\"] = 70] = \"overviewRulerLanes\";\n EditorOption[EditorOption[\"padding\"] = 71] = \"padding\";\n EditorOption[EditorOption[\"parameterHints\"] = 72] = \"parameterHints\";\n EditorOption[EditorOption[\"peekWidgetDefaultFocus\"] = 73] = \"peekWidgetDefaultFocus\";\n EditorOption[EditorOption[\"definitionLinkOpensInPeek\"] = 74] = \"definitionLinkOpensInPeek\";\n EditorOption[EditorOption[\"quickSuggestions\"] = 75] = \"quickSuggestions\";\n EditorOption[EditorOption[\"quickSuggestionsDelay\"] = 76] = \"quickSuggestionsDelay\";\n EditorOption[EditorOption[\"readOnly\"] = 77] = \"readOnly\";\n EditorOption[EditorOption[\"renameOnType\"] = 78] = \"renameOnType\";\n EditorOption[EditorOption[\"renderControlCharacters\"] = 79] = \"renderControlCharacters\";\n EditorOption[EditorOption[\"renderIndentGuides\"] = 80] = \"renderIndentGuides\";\n EditorOption[EditorOption[\"renderFinalNewline\"] = 81] = \"renderFinalNewline\";\n EditorOption[EditorOption[\"renderLineHighlight\"] = 82] = \"renderLineHighlight\";\n EditorOption[EditorOption[\"renderLineHighlightOnlyWhenFocus\"] = 83] = \"renderLineHighlightOnlyWhenFocus\";\n EditorOption[EditorOption[\"renderValidationDecorations\"] = 84] = \"renderValidationDecorations\";\n EditorOption[EditorOption[\"renderWhitespace\"] = 85] = \"renderWhitespace\";\n EditorOption[EditorOption[\"revealHorizontalRightPadding\"] = 86] = \"revealHorizontalRightPadding\";\n EditorOption[EditorOption[\"roundedSelection\"] = 87] = \"roundedSelection\";\n EditorOption[EditorOption[\"rulers\"] = 88] = \"rulers\";\n EditorOption[EditorOption[\"scrollbar\"] = 89] = \"scrollbar\";\n EditorOption[EditorOption[\"scrollBeyondLastColumn\"] = 90] = \"scrollBeyondLastColumn\";\n EditorOption[EditorOption[\"scrollBeyondLastLine\"] = 91] = \"scrollBeyondLastLine\";\n EditorOption[EditorOption[\"scrollPredominantAxis\"] = 92] = \"scrollPredominantAxis\";\n EditorOption[EditorOption[\"selectionClipboard\"] = 93] = \"selectionClipboard\";\n EditorOption[EditorOption[\"selectionHighlight\"] = 94] = \"selectionHighlight\";\n EditorOption[EditorOption[\"selectOnLineNumbers\"] = 95] = \"selectOnLineNumbers\";\n EditorOption[EditorOption[\"showFoldingControls\"] = 96] = \"showFoldingControls\";\n EditorOption[EditorOption[\"showUnused\"] = 97] = \"showUnused\";\n EditorOption[EditorOption[\"snippetSuggestions\"] = 98] = \"snippetSuggestions\";\n EditorOption[EditorOption[\"smartSelect\"] = 99] = \"smartSelect\";\n EditorOption[EditorOption[\"smoothScrolling\"] = 100] = \"smoothScrolling\";\n EditorOption[EditorOption[\"stickyTabStops\"] = 101] = \"stickyTabStops\";\n EditorOption[EditorOption[\"stopRenderingLineAfter\"] = 102] = \"stopRenderingLineAfter\";\n EditorOption[EditorOption[\"suggest\"] = 103] = \"suggest\";\n EditorOption[EditorOption[\"suggestFontSize\"] = 104] = \"suggestFontSize\";\n EditorOption[EditorOption[\"suggestLineHeight\"] = 105] = \"suggestLineHeight\";\n EditorOption[EditorOption[\"suggestOnTriggerCharacters\"] = 106] = \"suggestOnTriggerCharacters\";\n EditorOption[EditorOption[\"suggestSelection\"] = 107] = \"suggestSelection\";\n EditorOption[EditorOption[\"tabCompletion\"] = 108] = \"tabCompletion\";\n EditorOption[EditorOption[\"tabIndex\"] = 109] = \"tabIndex\";\n EditorOption[EditorOption[\"unusualLineTerminators\"] = 110] = \"unusualLineTerminators\";\n EditorOption[EditorOption[\"useShadowDOM\"] = 111] = \"useShadowDOM\";\n EditorOption[EditorOption[\"useTabStops\"] = 112] = \"useTabStops\";\n EditorOption[EditorOption[\"wordSeparators\"] = 113] = \"wordSeparators\";\n EditorOption[EditorOption[\"wordWrap\"] = 114] = \"wordWrap\";\n EditorOption[EditorOption[\"wordWrapBreakAfterCharacters\"] = 115] = \"wordWrapBreakAfterCharacters\";\n EditorOption[EditorOption[\"wordWrapBreakBeforeCharacters\"] = 116] = \"wordWrapBreakBeforeCharacters\";\n EditorOption[EditorOption[\"wordWrapColumn\"] = 117] = \"wordWrapColumn\";\n EditorOption[EditorOption[\"wordWrapOverride1\"] = 118] = \"wordWrapOverride1\";\n EditorOption[EditorOption[\"wordWrapOverride2\"] = 119] = \"wordWrapOverride2\";\n EditorOption[EditorOption[\"wrappingIndent\"] = 120] = \"wrappingIndent\";\n EditorOption[EditorOption[\"wrappingStrategy\"] = 121] = \"wrappingStrategy\";\n EditorOption[EditorOption[\"showDeprecated\"] = 122] = \"showDeprecated\";\n EditorOption[EditorOption[\"inlineHints\"] = 123] = \"inlineHints\";\n EditorOption[EditorOption[\"editorClassName\"] = 124] = \"editorClassName\";\n EditorOption[EditorOption[\"pixelRatio\"] = 125] = \"pixelRatio\";\n EditorOption[EditorOption[\"tabFocusMode\"] = 126] = \"tabFocusMode\";\n EditorOption[EditorOption[\"layoutInfo\"] = 127] = \"layoutInfo\";\n EditorOption[EditorOption[\"wrappingInfo\"] = 128] = \"wrappingInfo\";\n})(EditorOption || (EditorOption = {}));\n/**\n * End of line character preference.\n */\nexport var EndOfLinePreference;\n(function (EndOfLinePreference) {\n /**\n * Use the end of line character identified in the text buffer.\n */\n EndOfLinePreference[EndOfLinePreference[\"TextDefined\"] = 0] = \"TextDefined\";\n /**\n * Use line feed (\\n) as the end of line character.\n */\n EndOfLinePreference[EndOfLinePreference[\"LF\"] = 1] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n EndOfLinePreference[EndOfLinePreference[\"CRLF\"] = 2] = \"CRLF\";\n})(EndOfLinePreference || (EndOfLinePreference = {}));\n/**\n * End of line character preference.\n */\nexport var EndOfLineSequence;\n(function (EndOfLineSequence) {\n /**\n * Use line feed (\\n) as the end of line character.\n */\n EndOfLineSequence[EndOfLineSequence[\"LF\"] = 0] = \"LF\";\n /**\n * Use carriage return and line feed (\\r\\n) as the end of line character.\n */\n EndOfLineSequence[EndOfLineSequence[\"CRLF\"] = 1] = \"CRLF\";\n})(EndOfLineSequence || (EndOfLineSequence = {}));\n/**\n * Describes what to do with the indentation when pressing Enter.\n */\nexport var IndentAction;\n(function (IndentAction) {\n /**\n * Insert new line and copy the previous line's indentation.\n */\n IndentAction[IndentAction[\"None\"] = 0] = \"None\";\n /**\n * Insert new line and indent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Indent\"] = 1] = \"Indent\";\n /**\n * Insert two new lines:\n * - the first one indented which will hold the cursor\n * - the second one at the same indentation level\n */\n IndentAction[IndentAction[\"IndentOutdent\"] = 2] = \"IndentOutdent\";\n /**\n * Insert new line and outdent once (relative to the previous line's indentation).\n */\n IndentAction[IndentAction[\"Outdent\"] = 3] = \"Outdent\";\n})(IndentAction || (IndentAction = {}));\nexport var InlineHintKind;\n(function (InlineHintKind) {\n InlineHintKind[InlineHintKind[\"Other\"] = 0] = \"Other\";\n InlineHintKind[InlineHintKind[\"Type\"] = 1] = \"Type\";\n InlineHintKind[InlineHintKind[\"Parameter\"] = 2] = \"Parameter\";\n})(InlineHintKind || (InlineHintKind = {}));\n/**\n * Virtual Key Codes, the value does not hold any inherent meaning.\n * Inspired somewhat from https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx\n * But these are \"more general\", as they should work across browsers & OS`s.\n */\nexport var KeyCode;\n(function (KeyCode) {\n KeyCode[KeyCode[\"DependsOnKbLayout\"] = -1] = \"DependsOnKbLayout\";\n /**\n * Placed first to cover the 0 value of the enum.\n */\n KeyCode[KeyCode[\"Unknown\"] = 0] = \"Unknown\";\n KeyCode[KeyCode[\"Backspace\"] = 1] = \"Backspace\";\n KeyCode[KeyCode[\"Tab\"] = 2] = \"Tab\";\n KeyCode[KeyCode[\"Enter\"] = 3] = \"Enter\";\n KeyCode[KeyCode[\"Shift\"] = 4] = \"Shift\";\n KeyCode[KeyCode[\"Ctrl\"] = 5] = \"Ctrl\";\n KeyCode[KeyCode[\"Alt\"] = 6] = \"Alt\";\n KeyCode[KeyCode[\"PauseBreak\"] = 7] = \"PauseBreak\";\n KeyCode[KeyCode[\"CapsLock\"] = 8] = \"CapsLock\";\n KeyCode[KeyCode[\"Escape\"] = 9] = \"Escape\";\n KeyCode[KeyCode[\"Space\"] = 10] = \"Space\";\n KeyCode[KeyCode[\"PageUp\"] = 11] = \"PageUp\";\n KeyCode[KeyCode[\"PageDown\"] = 12] = \"PageDown\";\n KeyCode[KeyCode[\"End\"] = 13] = \"End\";\n KeyCode[KeyCode[\"Home\"] = 14] = \"Home\";\n KeyCode[KeyCode[\"LeftArrow\"] = 15] = \"LeftArrow\";\n KeyCode[KeyCode[\"UpArrow\"] = 16] = \"UpArrow\";\n KeyCode[KeyCode[\"RightArrow\"] = 17] = \"RightArrow\";\n KeyCode[KeyCode[\"DownArrow\"] = 18] = \"DownArrow\";\n KeyCode[KeyCode[\"Insert\"] = 19] = \"Insert\";\n KeyCode[KeyCode[\"Delete\"] = 20] = \"Delete\";\n KeyCode[KeyCode[\"KEY_0\"] = 21] = \"KEY_0\";\n KeyCode[KeyCode[\"KEY_1\"] = 22] = \"KEY_1\";\n KeyCode[KeyCode[\"KEY_2\"] = 23] = \"KEY_2\";\n KeyCode[KeyCode[\"KEY_3\"] = 24] = \"KEY_3\";\n KeyCode[KeyCode[\"KEY_4\"] = 25] = \"KEY_4\";\n KeyCode[KeyCode[\"KEY_5\"] = 26] = \"KEY_5\";\n KeyCode[KeyCode[\"KEY_6\"] = 27] = \"KEY_6\";\n KeyCode[KeyCode[\"KEY_7\"] = 28] = \"KEY_7\";\n KeyCode[KeyCode[\"KEY_8\"] = 29] = \"KEY_8\";\n KeyCode[KeyCode[\"KEY_9\"] = 30] = \"KEY_9\";\n KeyCode[KeyCode[\"KEY_A\"] = 31] = \"KEY_A\";\n KeyCode[KeyCode[\"KEY_B\"] = 32] = \"KEY_B\";\n KeyCode[KeyCode[\"KEY_C\"] = 33] = \"KEY_C\";\n KeyCode[KeyCode[\"KEY_D\"] = 34] = \"KEY_D\";\n KeyCode[KeyCode[\"KEY_E\"] = 35] = \"KEY_E\";\n KeyCode[KeyCode[\"KEY_F\"] = 36] = \"KEY_F\";\n KeyCode[KeyCode[\"KEY_G\"] = 37] = \"KEY_G\";\n KeyCode[KeyCode[\"KEY_H\"] = 38] = \"KEY_H\";\n KeyCode[KeyCode[\"KEY_I\"] = 39] = \"KEY_I\";\n KeyCode[KeyCode[\"KEY_J\"] = 40] = \"KEY_J\";\n KeyCode[KeyCode[\"KEY_K\"] = 41] = \"KEY_K\";\n KeyCode[KeyCode[\"KEY_L\"] = 42] = \"KEY_L\";\n KeyCode[KeyCode[\"KEY_M\"] = 43] = \"KEY_M\";\n KeyCode[KeyCode[\"KEY_N\"] = 44] = \"KEY_N\";\n KeyCode[KeyCode[\"KEY_O\"] = 45] = \"KEY_O\";\n KeyCode[KeyCode[\"KEY_P\"] = 46] = \"KEY_P\";\n KeyCode[KeyCode[\"KEY_Q\"] = 47] = \"KEY_Q\";\n KeyCode[KeyCode[\"KEY_R\"] = 48] = \"KEY_R\";\n KeyCode[KeyCode[\"KEY_S\"] = 49] = \"KEY_S\";\n KeyCode[KeyCode[\"KEY_T\"] = 50] = \"KEY_T\";\n KeyCode[KeyCode[\"KEY_U\"] = 51] = \"KEY_U\";\n KeyCode[KeyCode[\"KEY_V\"] = 52] = \"KEY_V\";\n KeyCode[KeyCode[\"KEY_W\"] = 53] = \"KEY_W\";\n KeyCode[KeyCode[\"KEY_X\"] = 54] = \"KEY_X\";\n KeyCode[KeyCode[\"KEY_Y\"] = 55] = \"KEY_Y\";\n KeyCode[KeyCode[\"KEY_Z\"] = 56] = \"KEY_Z\";\n KeyCode[KeyCode[\"Meta\"] = 57] = \"Meta\";\n KeyCode[KeyCode[\"ContextMenu\"] = 58] = \"ContextMenu\";\n KeyCode[KeyCode[\"F1\"] = 59] = \"F1\";\n KeyCode[KeyCode[\"F2\"] = 60] = \"F2\";\n KeyCode[KeyCode[\"F3\"] = 61] = \"F3\";\n KeyCode[KeyCode[\"F4\"] = 62] = \"F4\";\n KeyCode[KeyCode[\"F5\"] = 63] = \"F5\";\n KeyCode[KeyCode[\"F6\"] = 64] = \"F6\";\n KeyCode[KeyCode[\"F7\"] = 65] = \"F7\";\n KeyCode[KeyCode[\"F8\"] = 66] = \"F8\";\n KeyCode[KeyCode[\"F9\"] = 67] = \"F9\";\n KeyCode[KeyCode[\"F10\"] = 68] = \"F10\";\n KeyCode[KeyCode[\"F11\"] = 69] = \"F11\";\n KeyCode[KeyCode[\"F12\"] = 70] = \"F12\";\n KeyCode[KeyCode[\"F13\"] = 71] = \"F13\";\n KeyCode[KeyCode[\"F14\"] = 72] = \"F14\";\n KeyCode[KeyCode[\"F15\"] = 73] = \"F15\";\n KeyCode[KeyCode[\"F16\"] = 74] = \"F16\";\n KeyCode[KeyCode[\"F17\"] = 75] = \"F17\";\n KeyCode[KeyCode[\"F18\"] = 76] = \"F18\";\n KeyCode[KeyCode[\"F19\"] = 77] = \"F19\";\n KeyCode[KeyCode[\"NumLock\"] = 78] = \"NumLock\";\n KeyCode[KeyCode[\"ScrollLock\"] = 79] = \"ScrollLock\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ';:' key\n */\n KeyCode[KeyCode[\"US_SEMICOLON\"] = 80] = \"US_SEMICOLON\";\n /**\n * For any country/region, the '+' key\n * For the US standard keyboard, the '=+' key\n */\n KeyCode[KeyCode[\"US_EQUAL\"] = 81] = \"US_EQUAL\";\n /**\n * For any country/region, the ',' key\n * For the US standard keyboard, the ',<' key\n */\n KeyCode[KeyCode[\"US_COMMA\"] = 82] = \"US_COMMA\";\n /**\n * For any country/region, the '-' key\n * For the US standard keyboard, the '-_' key\n */\n KeyCode[KeyCode[\"US_MINUS\"] = 83] = \"US_MINUS\";\n /**\n * For any country/region, the '.' key\n * For the US standard keyboard, the '.>' key\n */\n KeyCode[KeyCode[\"US_DOT\"] = 84] = \"US_DOT\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '/?' key\n */\n KeyCode[KeyCode[\"US_SLASH\"] = 85] = \"US_SLASH\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '`~' key\n */\n KeyCode[KeyCode[\"US_BACKTICK\"] = 86] = \"US_BACKTICK\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '[{' key\n */\n KeyCode[KeyCode[\"US_OPEN_SQUARE_BRACKET\"] = 87] = \"US_OPEN_SQUARE_BRACKET\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the '\\|' key\n */\n KeyCode[KeyCode[\"US_BACKSLASH\"] = 88] = \"US_BACKSLASH\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ']}' key\n */\n KeyCode[KeyCode[\"US_CLOSE_SQUARE_BRACKET\"] = 89] = \"US_CLOSE_SQUARE_BRACKET\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n * For the US standard keyboard, the ''\"' key\n */\n KeyCode[KeyCode[\"US_QUOTE\"] = 90] = \"US_QUOTE\";\n /**\n * Used for miscellaneous characters; it can vary by keyboard.\n */\n KeyCode[KeyCode[\"OEM_8\"] = 91] = \"OEM_8\";\n /**\n * Either the angle bracket key or the backslash key on the RT 102-key keyboard.\n */\n KeyCode[KeyCode[\"OEM_102\"] = 92] = \"OEM_102\";\n KeyCode[KeyCode[\"NUMPAD_0\"] = 93] = \"NUMPAD_0\";\n KeyCode[KeyCode[\"NUMPAD_1\"] = 94] = \"NUMPAD_1\";\n KeyCode[KeyCode[\"NUMPAD_2\"] = 95] = \"NUMPAD_2\";\n KeyCode[KeyCode[\"NUMPAD_3\"] = 96] = \"NUMPAD_3\";\n KeyCode[KeyCode[\"NUMPAD_4\"] = 97] = \"NUMPAD_4\";\n KeyCode[KeyCode[\"NUMPAD_5\"] = 98] = \"NUMPAD_5\";\n KeyCode[KeyCode[\"NUMPAD_6\"] = 99] = \"NUMPAD_6\";\n KeyCode[KeyCode[\"NUMPAD_7\"] = 100] = \"NUMPAD_7\";\n KeyCode[KeyCode[\"NUMPAD_8\"] = 101] = \"NUMPAD_8\";\n KeyCode[KeyCode[\"NUMPAD_9\"] = 102] = \"NUMPAD_9\";\n KeyCode[KeyCode[\"NUMPAD_MULTIPLY\"] = 103] = \"NUMPAD_MULTIPLY\";\n KeyCode[KeyCode[\"NUMPAD_ADD\"] = 104] = \"NUMPAD_ADD\";\n KeyCode[KeyCode[\"NUMPAD_SEPARATOR\"] = 105] = \"NUMPAD_SEPARATOR\";\n KeyCode[KeyCode[\"NUMPAD_SUBTRACT\"] = 106] = \"NUMPAD_SUBTRACT\";\n KeyCode[KeyCode[\"NUMPAD_DECIMAL\"] = 107] = \"NUMPAD_DECIMAL\";\n KeyCode[KeyCode[\"NUMPAD_DIVIDE\"] = 108] = \"NUMPAD_DIVIDE\";\n /**\n * Cover all key codes when IME is processing input.\n */\n KeyCode[KeyCode[\"KEY_IN_COMPOSITION\"] = 109] = \"KEY_IN_COMPOSITION\";\n KeyCode[KeyCode[\"ABNT_C1\"] = 110] = \"ABNT_C1\";\n KeyCode[KeyCode[\"ABNT_C2\"] = 111] = \"ABNT_C2\";\n /**\n * Placed last to cover the length of the enum.\n * Please do not depend on this value!\n */\n KeyCode[KeyCode[\"MAX_VALUE\"] = 112] = \"MAX_VALUE\";\n})(KeyCode || (KeyCode = {}));\nexport var MarkerSeverity;\n(function (MarkerSeverity) {\n MarkerSeverity[MarkerSeverity[\"Hint\"] = 1] = \"Hint\";\n MarkerSeverity[MarkerSeverity[\"Info\"] = 2] = \"Info\";\n MarkerSeverity[MarkerSeverity[\"Warning\"] = 4] = \"Warning\";\n MarkerSeverity[MarkerSeverity[\"Error\"] = 8] = \"Error\";\n})(MarkerSeverity || (MarkerSeverity = {}));\nexport var MarkerTag;\n(function (MarkerTag) {\n MarkerTag[MarkerTag[\"Unnecessary\"] = 1] = \"Unnecessary\";\n MarkerTag[MarkerTag[\"Deprecated\"] = 2] = \"Deprecated\";\n})(MarkerTag || (MarkerTag = {}));\n/**\n * Position in the minimap to render the decoration.\n */\nexport var MinimapPosition;\n(function (MinimapPosition) {\n MinimapPosition[MinimapPosition[\"Inline\"] = 1] = \"Inline\";\n MinimapPosition[MinimapPosition[\"Gutter\"] = 2] = \"Gutter\";\n})(MinimapPosition || (MinimapPosition = {}));\n/**\n * Type of hit element with the mouse in the editor.\n */\nexport var MouseTargetType;\n(function (MouseTargetType) {\n /**\n * Mouse is on top of an unknown element.\n */\n MouseTargetType[MouseTargetType[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n /**\n * Mouse is on top of the textarea used for input.\n */\n MouseTargetType[MouseTargetType[\"TEXTAREA\"] = 1] = \"TEXTAREA\";\n /**\n * Mouse is on top of the glyph margin\n */\n MouseTargetType[MouseTargetType[\"GUTTER_GLYPH_MARGIN\"] = 2] = \"GUTTER_GLYPH_MARGIN\";\n /**\n * Mouse is on top of the line numbers\n */\n MouseTargetType[MouseTargetType[\"GUTTER_LINE_NUMBERS\"] = 3] = \"GUTTER_LINE_NUMBERS\";\n /**\n * Mouse is on top of the line decorations\n */\n MouseTargetType[MouseTargetType[\"GUTTER_LINE_DECORATIONS\"] = 4] = \"GUTTER_LINE_DECORATIONS\";\n /**\n * Mouse is on top of the whitespace left in the gutter by a view zone.\n */\n MouseTargetType[MouseTargetType[\"GUTTER_VIEW_ZONE\"] = 5] = \"GUTTER_VIEW_ZONE\";\n /**\n * Mouse is on top of text in the content.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_TEXT\"] = 6] = \"CONTENT_TEXT\";\n /**\n * Mouse is on top of empty space in the content (e.g. after line text or below last line)\n */\n MouseTargetType[MouseTargetType[\"CONTENT_EMPTY\"] = 7] = \"CONTENT_EMPTY\";\n /**\n * Mouse is on top of a view zone in the content.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_VIEW_ZONE\"] = 8] = \"CONTENT_VIEW_ZONE\";\n /**\n * Mouse is on top of a content widget.\n */\n MouseTargetType[MouseTargetType[\"CONTENT_WIDGET\"] = 9] = \"CONTENT_WIDGET\";\n /**\n * Mouse is on top of the decorations overview ruler.\n */\n MouseTargetType[MouseTargetType[\"OVERVIEW_RULER\"] = 10] = \"OVERVIEW_RULER\";\n /**\n * Mouse is on top of a scrollbar.\n */\n MouseTargetType[MouseTargetType[\"SCROLLBAR\"] = 11] = \"SCROLLBAR\";\n /**\n * Mouse is on top of an overlay widget.\n */\n MouseTargetType[MouseTargetType[\"OVERLAY_WIDGET\"] = 12] = \"OVERLAY_WIDGET\";\n /**\n * Mouse is outside of the editor.\n */\n MouseTargetType[MouseTargetType[\"OUTSIDE_EDITOR\"] = 13] = \"OUTSIDE_EDITOR\";\n})(MouseTargetType || (MouseTargetType = {}));\n/**\n * A positioning preference for rendering overlay widgets.\n */\nexport var OverlayWidgetPositionPreference;\n(function (OverlayWidgetPositionPreference) {\n /**\n * Position the overlay widget in the top right corner\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"TOP_RIGHT_CORNER\"] = 0] = \"TOP_RIGHT_CORNER\";\n /**\n * Position the overlay widget in the bottom right corner\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"BOTTOM_RIGHT_CORNER\"] = 1] = \"BOTTOM_RIGHT_CORNER\";\n /**\n * Position the overlay widget in the top center\n */\n OverlayWidgetPositionPreference[OverlayWidgetPositionPreference[\"TOP_CENTER\"] = 2] = \"TOP_CENTER\";\n})(OverlayWidgetPositionPreference || (OverlayWidgetPositionPreference = {}));\n/**\n * Vertical Lane in the overview ruler of the editor.\n */\nexport var OverviewRulerLane;\n(function (OverviewRulerLane) {\n OverviewRulerLane[OverviewRulerLane[\"Left\"] = 1] = \"Left\";\n OverviewRulerLane[OverviewRulerLane[\"Center\"] = 2] = \"Center\";\n OverviewRulerLane[OverviewRulerLane[\"Right\"] = 4] = \"Right\";\n OverviewRulerLane[OverviewRulerLane[\"Full\"] = 7] = \"Full\";\n})(OverviewRulerLane || (OverviewRulerLane = {}));\nexport var RenderLineNumbersType;\n(function (RenderLineNumbersType) {\n RenderLineNumbersType[RenderLineNumbersType[\"Off\"] = 0] = \"Off\";\n RenderLineNumbersType[RenderLineNumbersType[\"On\"] = 1] = \"On\";\n RenderLineNumbersType[RenderLineNumbersType[\"Relative\"] = 2] = \"Relative\";\n RenderLineNumbersType[RenderLineNumbersType[\"Interval\"] = 3] = \"Interval\";\n RenderLineNumbersType[RenderLineNumbersType[\"Custom\"] = 4] = \"Custom\";\n})(RenderLineNumbersType || (RenderLineNumbersType = {}));\nexport var RenderMinimap;\n(function (RenderMinimap) {\n RenderMinimap[RenderMinimap[\"None\"] = 0] = \"None\";\n RenderMinimap[RenderMinimap[\"Text\"] = 1] = \"Text\";\n RenderMinimap[RenderMinimap[\"Blocks\"] = 2] = \"Blocks\";\n})(RenderMinimap || (RenderMinimap = {}));\nexport var ScrollType;\n(function (ScrollType) {\n ScrollType[ScrollType[\"Smooth\"] = 0] = \"Smooth\";\n ScrollType[ScrollType[\"Immediate\"] = 1] = \"Immediate\";\n})(ScrollType || (ScrollType = {}));\nexport var ScrollbarVisibility;\n(function (ScrollbarVisibility) {\n ScrollbarVisibility[ScrollbarVisibility[\"Auto\"] = 1] = \"Auto\";\n ScrollbarVisibility[ScrollbarVisibility[\"Hidden\"] = 2] = \"Hidden\";\n ScrollbarVisibility[ScrollbarVisibility[\"Visible\"] = 3] = \"Visible\";\n})(ScrollbarVisibility || (ScrollbarVisibility = {}));\n/**\n * The direction of a selection.\n */\nexport var SelectionDirection;\n(function (SelectionDirection) {\n /**\n * The selection starts above where it ends.\n */\n SelectionDirection[SelectionDirection[\"LTR\"] = 0] = \"LTR\";\n /**\n * The selection starts below where it ends.\n */\n SelectionDirection[SelectionDirection[\"RTL\"] = 1] = \"RTL\";\n})(SelectionDirection || (SelectionDirection = {}));\nexport var SignatureHelpTriggerKind;\n(function (SignatureHelpTriggerKind) {\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"Invoke\"] = 1] = \"Invoke\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"TriggerCharacter\"] = 2] = \"TriggerCharacter\";\n SignatureHelpTriggerKind[SignatureHelpTriggerKind[\"ContentChange\"] = 3] = \"ContentChange\";\n})(SignatureHelpTriggerKind || (SignatureHelpTriggerKind = {}));\n/**\n * A symbol kind.\n */\nexport var SymbolKind;\n(function (SymbolKind) {\n SymbolKind[SymbolKind[\"File\"] = 0] = \"File\";\n SymbolKind[SymbolKind[\"Module\"] = 1] = \"Module\";\n SymbolKind[SymbolKind[\"Namespace\"] = 2] = \"Namespace\";\n SymbolKind[SymbolKind[\"Package\"] = 3] = \"Package\";\n SymbolKind[SymbolKind[\"Class\"] = 4] = \"Class\";\n SymbolKind[SymbolKind[\"Method\"] = 5] = \"Method\";\n SymbolKind[SymbolKind[\"Property\"] = 6] = \"Property\";\n SymbolKind[SymbolKind[\"Field\"] = 7] = \"Field\";\n SymbolKind[SymbolKind[\"Constructor\"] = 8] = \"Constructor\";\n SymbolKind[SymbolKind[\"Enum\"] = 9] = \"Enum\";\n SymbolKind[SymbolKind[\"Interface\"] = 10] = \"Interface\";\n SymbolKind[SymbolKind[\"Function\"] = 11] = \"Function\";\n SymbolKind[SymbolKind[\"Variable\"] = 12] = \"Variable\";\n SymbolKind[SymbolKind[\"Constant\"] = 13] = \"Constant\";\n SymbolKind[SymbolKind[\"String\"] = 14] = \"String\";\n SymbolKind[SymbolKind[\"Number\"] = 15] = \"Number\";\n SymbolKind[SymbolKind[\"Boolean\"] = 16] = \"Boolean\";\n SymbolKind[SymbolKind[\"Array\"] = 17] = \"Array\";\n SymbolKind[SymbolKind[\"Object\"] = 18] = \"Object\";\n SymbolKind[SymbolKind[\"Key\"] = 19] = \"Key\";\n SymbolKind[SymbolKind[\"Null\"] = 20] = \"Null\";\n SymbolKind[SymbolKind[\"EnumMember\"] = 21] = \"EnumMember\";\n SymbolKind[SymbolKind[\"Struct\"] = 22] = \"Struct\";\n SymbolKind[SymbolKind[\"Event\"] = 23] = \"Event\";\n SymbolKind[SymbolKind[\"Operator\"] = 24] = \"Operator\";\n SymbolKind[SymbolKind[\"TypeParameter\"] = 25] = \"TypeParameter\";\n})(SymbolKind || (SymbolKind = {}));\nexport var SymbolTag;\n(function (SymbolTag) {\n SymbolTag[SymbolTag[\"Deprecated\"] = 1] = \"Deprecated\";\n})(SymbolTag || (SymbolTag = {}));\n/**\n * The kind of animation in which the editor's cursor should be rendered.\n */\nexport var TextEditorCursorBlinkingStyle;\n(function (TextEditorCursorBlinkingStyle) {\n /**\n * Hidden\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Hidden\"] = 0] = \"Hidden\";\n /**\n * Blinking\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Blink\"] = 1] = \"Blink\";\n /**\n * Blinking with smooth fading\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Smooth\"] = 2] = \"Smooth\";\n /**\n * Blinking with prolonged filled state and smooth fading\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Phase\"] = 3] = \"Phase\";\n /**\n * Expand collapse animation on the y axis\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Expand\"] = 4] = \"Expand\";\n /**\n * No-Blinking\n */\n TextEditorCursorBlinkingStyle[TextEditorCursorBlinkingStyle[\"Solid\"] = 5] = \"Solid\";\n})(TextEditorCursorBlinkingStyle || (TextEditorCursorBlinkingStyle = {}));\n/**\n * The style in which the editor's cursor should be rendered.\n */\nexport var TextEditorCursorStyle;\n(function (TextEditorCursorStyle) {\n /**\n * As a vertical line (sitting between two characters).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Line\"] = 1] = \"Line\";\n /**\n * As a block (sitting on top of a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Block\"] = 2] = \"Block\";\n /**\n * As a horizontal line (sitting under a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"Underline\"] = 3] = \"Underline\";\n /**\n * As a thin vertical line (sitting between two characters).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"LineThin\"] = 4] = \"LineThin\";\n /**\n * As an outlined block (sitting on top of a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"BlockOutline\"] = 5] = \"BlockOutline\";\n /**\n * As a thin horizontal line (sitting under a character).\n */\n TextEditorCursorStyle[TextEditorCursorStyle[\"UnderlineThin\"] = 6] = \"UnderlineThin\";\n})(TextEditorCursorStyle || (TextEditorCursorStyle = {}));\n/**\n * Describes the behavior of decorations when typing/editing near their edges.\n * Note: Please do not edit the values, as they very carefully match `DecorationRangeBehavior`\n */\nexport var TrackedRangeStickiness;\n(function (TrackedRangeStickiness) {\n TrackedRangeStickiness[TrackedRangeStickiness[\"AlwaysGrowsWhenTypingAtEdges\"] = 0] = \"AlwaysGrowsWhenTypingAtEdges\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"NeverGrowsWhenTypingAtEdges\"] = 1] = \"NeverGrowsWhenTypingAtEdges\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"GrowsOnlyWhenTypingBefore\"] = 2] = \"GrowsOnlyWhenTypingBefore\";\n TrackedRangeStickiness[TrackedRangeStickiness[\"GrowsOnlyWhenTypingAfter\"] = 3] = \"GrowsOnlyWhenTypingAfter\";\n})(TrackedRangeStickiness || (TrackedRangeStickiness = {}));\n/**\n * Describes how to indent wrapped lines.\n */\nexport var WrappingIndent;\n(function (WrappingIndent) {\n /**\n * No indentation => wrapped lines begin at column 1.\n */\n WrappingIndent[WrappingIndent[\"None\"] = 0] = \"None\";\n /**\n * Same => wrapped lines get the same indentation as the parent.\n */\n WrappingIndent[WrappingIndent[\"Same\"] = 1] = \"Same\";\n /**\n * Indent => wrapped lines get +1 indentation toward the parent.\n */\n WrappingIndent[WrappingIndent[\"Indent\"] = 2] = \"Indent\";\n /**\n * DeepIndent => wrapped lines get +2 indentation toward the parent.\n */\n WrappingIndent[WrappingIndent[\"DeepIndent\"] = 3] = \"DeepIndent\";\n})(WrappingIndent || (WrappingIndent = {}));\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 *--------------------------------------------------------------------------------------------*/\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { Token } from '../core/token.js';\nimport * as standaloneEnums from './standaloneEnums.js';\nexport class KeyMod {\n static chord(firstPart, secondPart) {\n return KeyChord(firstPart, secondPart);\n }\n}\nKeyMod.CtrlCmd = 2048 /* CtrlCmd */;\nKeyMod.Shift = 1024 /* Shift */;\nKeyMod.Alt = 512 /* Alt */;\nKeyMod.WinCtrl = 256 /* WinCtrl */;\nexport function createMonacoBaseAPI() {\n return {\n editor: undefined,\n languages: undefined,\n CancellationTokenSource: CancellationTokenSource,\n Emitter: Emitter,\n KeyCode: standaloneEnums.KeyCode,\n KeyMod: KeyMod,\n Position: Position,\n Range: Range,\n Selection: Selection,\n SelectionDirection: standaloneEnums.SelectionDirection,\n MarkerSeverity: standaloneEnums.MarkerSeverity,\n MarkerTag: standaloneEnums.MarkerTag,\n Uri: URI,\n Token: Token\n };\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 *--------------------------------------------------------------------------------------------*/\nexport var EditorOpenContext;\n(function (EditorOpenContext) {\n /**\n * Default: the editor is opening via a programmatic call\n * to the editor service API.\n */\n EditorOpenContext[EditorOpenContext[\"API\"] = 0] = \"API\";\n /**\n * Indicates that a user action triggered the opening, e.g.\n * via mouse or keyboard use.\n */\n EditorOpenContext[EditorOpenContext[\"USER\"] = 1] = \"USER\";\n})(EditorOpenContext || (EditorOpenContext = {}));\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as dom from '../../../base/browser/dom.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { ResourceMap } from '../../../base/common/map.js';\nimport { parse } from '../../../base/common/marshalling.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { normalizePath } from '../../../base/common/resources.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { ICodeEditorService } from './codeEditorService.js';\nimport { ICommandService } from '../../../platform/commands/common/commands.js';\nimport { EditorOpenContext } from '../../../platform/editor/common/editor.js';\nimport { matchesScheme } from '../../../platform/opener/common/opener.js';\nlet CommandOpener = class CommandOpener {\n constructor(_commandService) {\n this._commandService = _commandService;\n }\n open(target, options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!matchesScheme(target, Schemas.command)) {\n return false;\n }\n if (!(options === null || options === void 0 ? void 0 : options.allowCommands)) {\n // silently ignore commands when command-links are disabled, also\n // surpress other openers by returning TRUE\n return true;\n }\n // run command or bail out if command isn't known\n if (typeof target === 'string') {\n target = URI.parse(target);\n }\n // execute as command\n let args = [];\n try {\n args = parse(decodeURIComponent(target.query));\n }\n catch (_a) {\n // ignore and retry\n try {\n args = parse(target.query);\n }\n catch (_b) {\n // ignore error\n }\n }\n if (!Array.isArray(args)) {\n args = [args];\n }\n yield this._commandService.executeCommand(target.path, ...args);\n return true;\n });\n }\n};\nCommandOpener = __decorate([\n __param(0, ICommandService)\n], CommandOpener);\nlet EditorOpener = class EditorOpener {\n constructor(_editorService) {\n this._editorService = _editorService;\n }\n open(target, options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof target === 'string') {\n target = URI.parse(target);\n }\n let selection = undefined;\n const match = /^L?(\\d+)(?:,(\\d+))?/.exec(target.fragment);\n if (match) {\n // support file:///some/file.js#73,84\n // support file:///some/file.js#L73\n selection = {\n startLineNumber: parseInt(match[1]),\n startColumn: match[2] ? parseInt(match[2]) : 1\n };\n // remove fragment\n target = target.with({ fragment: '' });\n }\n if (target.scheme === Schemas.file) {\n target = normalizePath(target); // workaround for non-normalized paths (https://github.com/microsoft/vscode/issues/12954)\n }\n yield this._editorService.openCodeEditor({\n resource: target,\n options: Object.assign({ selection, context: (options === null || options === void 0 ? void 0 : options.fromUserGesture) ? EditorOpenContext.USER : EditorOpenContext.API }, options === null || options === void 0 ? void 0 : options.editorOptions)\n }, this._editorService.getFocusedCodeEditor(), options === null || options === void 0 ? void 0 : options.openToSide);\n return true;\n });\n }\n};\nEditorOpener = __decorate([\n __param(0, ICodeEditorService)\n], EditorOpener);\nlet OpenerService = class OpenerService {\n constructor(editorService, commandService) {\n this._openers = new LinkedList();\n this._validators = new LinkedList();\n this._resolvers = new LinkedList();\n this._resolvedUriTargets = new ResourceMap(uri => uri.with({ path: null, fragment: null, query: null }).toString());\n this._externalOpeners = new LinkedList();\n // Default external opener is going through window.open()\n this._defaultExternalOpener = {\n openExternal: (href) => __awaiter(this, void 0, void 0, function* () {\n // ensure to open HTTP/HTTPS links into new windows\n // to not trigger a navigation. Any other link is\n // safe to be set as HREF to prevent a blank window\n // from opening.\n if (matchesScheme(href, Schemas.http) || matchesScheme(href, Schemas.https)) {\n dom.windowOpenNoOpener(href);\n }\n else {\n window.location.href = href;\n }\n return true;\n })\n };\n // Default opener: any external, maito, http(s), command, and catch-all-editors\n this._openers.push({\n open: (target, options) => __awaiter(this, void 0, void 0, function* () {\n if ((options === null || options === void 0 ? void 0 : options.openExternal) || matchesScheme(target, Schemas.mailto) || matchesScheme(target, Schemas.http) || matchesScheme(target, Schemas.https)) {\n // open externally\n yield this._doOpenExternal(target, options);\n return true;\n }\n return false;\n })\n });\n this._openers.push(new CommandOpener(commandService));\n this._openers.push(new EditorOpener(editorService));\n }\n registerOpener(opener) {\n const remove = this._openers.unshift(opener);\n return { dispose: remove };\n }\n registerValidator(validator) {\n const remove = this._validators.push(validator);\n return { dispose: remove };\n }\n registerExternalUriResolver(resolver) {\n const remove = this._resolvers.push(resolver);\n return { dispose: remove };\n }\n setDefaultExternalOpener(externalOpener) {\n this._defaultExternalOpener = externalOpener;\n }\n registerExternalOpener(opener) {\n const remove = this._externalOpeners.push(opener);\n return { dispose: remove };\n }\n open(target, options) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n // check with contributed validators\n const targetURI = typeof target === 'string' ? URI.parse(target) : target;\n // validate against the original URI that this URI resolves to, if one exists\n const validationTarget = (_a = this._resolvedUriTargets.get(targetURI)) !== null && _a !== void 0 ? _a : target;\n for (const validator of this._validators) {\n if (!(yield validator.shouldOpen(validationTarget))) {\n return false;\n }\n }\n // check with contributed openers\n for (const opener of this._openers) {\n const handled = yield opener.open(target, options);\n if (handled) {\n return true;\n }\n }\n return false;\n });\n }\n resolveExternalUri(resource, options) {\n return __awaiter(this, void 0, void 0, function* () {\n for (const resolver of this._resolvers) {\n const result = yield resolver.resolveExternalUri(resource, options);\n if (result) {\n if (!this._resolvedUriTargets.has(result.resolved)) {\n this._resolvedUriTargets.set(result.resolved, resource);\n }\n return result;\n }\n }\n return { resolved: resource, dispose: () => { } };\n });\n }\n _doOpenExternal(resource, options) {\n return __awaiter(this, void 0, void 0, function* () {\n //todo@jrieken IExternalUriResolver should support `uri: URI | string`\n const uri = typeof resource === 'string' ? URI.parse(resource) : resource;\n const { resolved } = yield this.resolveExternalUri(uri, options);\n let href;\n if (typeof resource === 'string' && uri.toString() === resolved.toString()) {\n // open the url-string AS IS\n href = resource;\n }\n else {\n // open URI using the toString(noEncode)+encodeURI-trick\n href = encodeURI(resolved.toString(true));\n }\n if (options === null || options === void 0 ? void 0 : options.allowContributedOpeners) {\n const preferredOpenerId = typeof (options === null || options === void 0 ? void 0 : options.allowContributedOpeners) === 'string' ? options === null || options === void 0 ? void 0 : options.allowContributedOpeners : undefined;\n for (const opener of this._externalOpeners) {\n const didOpen = yield opener.openExternal(href, {\n sourceUri: uri,\n preferredOpenerId,\n }, CancellationToken.None);\n if (didOpen) {\n return true;\n }\n }\n }\n return this._defaultExternalOpener.openExternal(href, { sourceUri: uri }, CancellationToken.None);\n });\n }\n dispose() {\n this._validators.clear();\n }\n};\nOpenerService = __decorate([\n __param(0, ICodeEditorService),\n __param(1, ICommandService)\n], OpenerService);\nexport { OpenerService };\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 *--------------------------------------------------------------------------------------------*/\nimport { transformErrorForSerialization } from '../errors.js';\nimport { Disposable } from '../lifecycle.js';\nimport { isWeb } from '../platform.js';\nimport * as types from '../types.js';\nconst INITIALIZE = '$initialize';\nlet webWorkerWarningLogged = false;\nexport function logOnceWebWorkerWarning(err) {\n if (!isWeb) {\n // running tests\n return;\n }\n if (!webWorkerWarningLogged) {\n webWorkerWarningLogged = true;\n console.warn('Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq');\n }\n console.warn(err.message);\n}\nclass SimpleWorkerProtocol {\n constructor(handler) {\n this._workerId = -1;\n this._handler = handler;\n this._lastSentReq = 0;\n this._pendingReplies = Object.create(null);\n }\n setWorkerId(workerId) {\n this._workerId = workerId;\n }\n sendMessage(method, args) {\n let req = String(++this._lastSentReq);\n return new Promise((resolve, reject) => {\n this._pendingReplies[req] = {\n resolve: resolve,\n reject: reject\n };\n this._send({\n vsWorker: this._workerId,\n req: req,\n method: method,\n args: args\n });\n });\n }\n handleMessage(message) {\n if (!message || !message.vsWorker) {\n return;\n }\n if (this._workerId !== -1 && message.vsWorker !== this._workerId) {\n return;\n }\n this._handleMessage(message);\n }\n _handleMessage(msg) {\n if (msg.seq) {\n let replyMessage = msg;\n if (!this._pendingReplies[replyMessage.seq]) {\n console.warn('Got reply to unknown seq');\n return;\n }\n let reply = this._pendingReplies[replyMessage.seq];\n delete this._pendingReplies[replyMessage.seq];\n if (replyMessage.err) {\n let err = replyMessage.err;\n if (replyMessage.err.$isError) {\n err = new Error();\n err.name = replyMessage.err.name;\n err.message = replyMessage.err.message;\n err.stack = replyMessage.err.stack;\n }\n reply.reject(err);\n return;\n }\n reply.resolve(replyMessage.res);\n return;\n }\n let requestMessage = msg;\n let req = requestMessage.req;\n let result = this._handler.handleMessage(requestMessage.method, requestMessage.args);\n result.then((r) => {\n this._send({\n vsWorker: this._workerId,\n seq: req,\n res: r,\n err: undefined\n });\n }, (e) => {\n if (e.detail instanceof Error) {\n // Loading errors have a detail property that points to the actual error\n e.detail = transformErrorForSerialization(e.detail);\n }\n this._send({\n vsWorker: this._workerId,\n seq: req,\n res: undefined,\n err: transformErrorForSerialization(e)\n });\n });\n }\n _send(msg) {\n let transfer = [];\n if (msg.req) {\n const m = msg;\n for (let i = 0; i < m.args.length; i++) {\n if (m.args[i] instanceof ArrayBuffer) {\n transfer.push(m.args[i]);\n }\n }\n }\n else {\n const m = msg;\n if (m.res instanceof ArrayBuffer) {\n transfer.push(m.res);\n }\n }\n this._handler.sendMessage(msg, transfer);\n }\n}\n/**\n * Main thread side\n */\nexport class SimpleWorkerClient extends Disposable {\n constructor(workerFactory, moduleId, host) {\n super();\n let lazyProxyReject = null;\n this._worker = this._register(workerFactory.create('vs/base/common/worker/simpleWorker', (msg) => {\n this._protocol.handleMessage(msg);\n }, (err) => {\n // in Firefox, web workers fail lazily :(\n // we will reject the proxy\n if (lazyProxyReject) {\n lazyProxyReject(err);\n }\n }));\n this._protocol = new SimpleWorkerProtocol({\n sendMessage: (msg, transfer) => {\n this._worker.postMessage(msg, transfer);\n },\n handleMessage: (method, args) => {\n if (typeof host[method] !== 'function') {\n return Promise.reject(new Error('Missing method ' + method + ' on main thread host.'));\n }\n try {\n return Promise.resolve(host[method].apply(host, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n }\n });\n this._protocol.setWorkerId(this._worker.getId());\n // Gather loader configuration\n let loaderConfiguration = null;\n if (typeof self.require !== 'undefined' && typeof self.require.getConfig === 'function') {\n // Get the configuration from the Monaco AMD Loader\n loaderConfiguration = self.require.getConfig();\n }\n else if (typeof self.requirejs !== 'undefined') {\n // Get the configuration from requirejs\n loaderConfiguration = self.requirejs.s.contexts._.config;\n }\n const hostMethods = types.getAllMethodNames(host);\n // Send initialize message\n this._onModuleLoaded = this._protocol.sendMessage(INITIALIZE, [\n this._worker.getId(),\n JSON.parse(JSON.stringify(loaderConfiguration)),\n moduleId,\n hostMethods,\n ]);\n // Create proxy to loaded code\n const proxyMethodRequest = (method, args) => {\n return this._request(method, args);\n };\n this._lazyProxy = new Promise((resolve, reject) => {\n lazyProxyReject = reject;\n this._onModuleLoaded.then((availableMethods) => {\n resolve(types.createProxyObject(availableMethods, proxyMethodRequest));\n }, (e) => {\n reject(e);\n this._onError('Worker failed to load ' + moduleId, e);\n });\n });\n }\n getProxyObject() {\n return this._lazyProxy;\n }\n _request(method, args) {\n return new Promise((resolve, reject) => {\n this._onModuleLoaded.then(() => {\n this._protocol.sendMessage(method, args).then(resolve, reject);\n }, reject);\n });\n }\n _onError(message, error) {\n console.error(message);\n console.info(error);\n }\n}\n/**\n * Worker side\n */\nexport class SimpleWorkerServer {\n constructor(postMessage, requestHandlerFactory) {\n this._requestHandlerFactory = requestHandlerFactory;\n this._requestHandler = null;\n this._protocol = new SimpleWorkerProtocol({\n sendMessage: (msg, transfer) => {\n postMessage(msg, transfer);\n },\n handleMessage: (method, args) => this._handleMessage(method, args)\n });\n }\n onmessage(msg) {\n this._protocol.handleMessage(msg);\n }\n _handleMessage(method, args) {\n if (method === INITIALIZE) {\n return this.initialize(args[0], args[1], args[2], args[3]);\n }\n if (!this._requestHandler || typeof this._requestHandler[method] !== 'function') {\n return Promise.reject(new Error('Missing requestHandler or method: ' + method));\n }\n try {\n return Promise.resolve(this._requestHandler[method].apply(this._requestHandler, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n }\n initialize(workerId, loaderConfig, moduleId, hostMethods) {\n this._protocol.setWorkerId(workerId);\n const proxyMethodRequest = (method, args) => {\n return this._protocol.sendMessage(method, args);\n };\n const hostProxy = types.createProxyObject(hostMethods, proxyMethodRequest);\n if (this._requestHandlerFactory) {\n // static request handler\n this._requestHandler = this._requestHandlerFactory(hostProxy);\n return Promise.resolve(types.getAllMethodNames(this._requestHandler));\n }\n if (loaderConfig) {\n // Remove 'baseUrl', handling it is beyond scope for now\n if (typeof loaderConfig.baseUrl !== 'undefined') {\n delete loaderConfig['baseUrl'];\n }\n if (typeof loaderConfig.paths !== 'undefined') {\n if (typeof loaderConfig.paths.vs !== 'undefined') {\n delete loaderConfig.paths['vs'];\n }\n }\n if (typeof loaderConfig.trustedTypesPolicy !== undefined) {\n // don't use, it has been destroyed during serialize\n delete loaderConfig['trustedTypesPolicy'];\n }\n // Since this is in a web worker, enable catching errors\n loaderConfig.catchError = true;\n self.require.config(loaderConfig);\n }\n return new Promise((resolve, reject) => {\n // Use the global require to be sure to get the global config\n self.require([moduleId], (module) => {\n this._requestHandler = module.create(hostProxy);\n if (!this._requestHandler) {\n reject(new Error(`No RequestHandler!`));\n return;\n }\n resolve(types.getAllMethodNames(this._requestHandler));\n }, reject);\n });\n }\n}\n/**\n * Called on the worker side\n */\nexport function create(postMessage) {\n return new SimpleWorkerServer(postMessage, null);\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 *--------------------------------------------------------------------------------------------*/\nvar _a;\nimport { globals } from '../common/platform.js';\nimport { logOnceWebWorkerWarning } from '../common/worker/simpleWorker.js';\nconst ttPolicy = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy('defaultWorkerFactory', { createScriptURL: value => value });\nfunction getWorker(workerId, label) {\n // Option for hosts to overwrite the worker script (used in the standalone editor)\n if (globals.MonacoEnvironment) {\n if (typeof globals.MonacoEnvironment.getWorker === 'function') {\n return globals.MonacoEnvironment.getWorker(workerId, label);\n }\n if (typeof globals.MonacoEnvironment.getWorkerUrl === 'function') {\n const wokerUrl = globals.MonacoEnvironment.getWorkerUrl(workerId, label);\n return new Worker(ttPolicy ? ttPolicy.createScriptURL(wokerUrl) : wokerUrl, { name: label });\n }\n }\n // ESM-comment-begin\n // \tif (typeof require === 'function') {\n // \t\t// check if the JS lives on a different origin\n // \t\tconst workerMain = require.toUrl('./' + workerId); // explicitly using require.toUrl(), see https://github.com/microsoft/vscode/issues/107440#issuecomment-698982321\n // \t\tconst workerUrl = getWorkerBootstrapUrl(workerMain, label);\n // \t\treturn new Worker(ttPolicy ? ttPolicy.createScriptURL(workerUrl) as unknown as string : workerUrl, { name: label });\n // \t}\n // ESM-comment-end\n throw new Error(`You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker`);\n}\n// ESM-comment-begin\n// export function getWorkerBootstrapUrl(scriptPath: string, label: string): string {\n// \tif (/^((http:)|(https:)|(file:))/.test(scriptPath) && scriptPath.substring(0, self.origin.length) !== self.origin) {\n// \t\t// this is the cross-origin case\n// \t\t// i.e. the webpage is running at a different origin than where the scripts are loaded from\n// \t\tconst myPath = 'vs/base/worker/defaultWorkerFactory.js';\n// \t\tconst workerBaseUrl = require.toUrl(myPath).slice(0, -myPath.length); // explicitly using require.toUrl(), see https://github.com/microsoft/vscode/issues/107440#issuecomment-698982321\n// \t\tconst js = `/*${label}*/self.MonacoEnvironment={baseUrl: '${workerBaseUrl}'};importScripts('${scriptPath}');/*${label}*/`;\n// \t\tconst blob = new Blob([js], { type: 'application/javascript' });\n// \t\treturn URL.createObjectURL(blob);\n// \t}\n// \treturn scriptPath + '#' + label;\n// }\n// ESM-comment-end\nfunction isPromiseLike(obj) {\n if (typeof obj.then === 'function') {\n return true;\n }\n return false;\n}\n/**\n * A worker that uses HTML5 web workers so that is has\n * its own global scope and its own thread.\n */\nclass WebWorker {\n constructor(moduleId, id, label, onMessageCallback, onErrorCallback) {\n this.id = id;\n const workerOrPromise = getWorker('workerMain.js', label);\n if (isPromiseLike(workerOrPromise)) {\n this.worker = workerOrPromise;\n }\n else {\n this.worker = Promise.resolve(workerOrPromise);\n }\n this.postMessage(moduleId, []);\n this.worker.then((w) => {\n w.onmessage = function (ev) {\n onMessageCallback(ev.data);\n };\n w.onmessageerror = onErrorCallback;\n if (typeof w.addEventListener === 'function') {\n w.addEventListener('error', onErrorCallback);\n }\n });\n }\n getId() {\n return this.id;\n }\n postMessage(message, transfer) {\n if (this.worker) {\n this.worker.then(w => w.postMessage(message, transfer));\n }\n }\n dispose() {\n if (this.worker) {\n this.worker.then(w => w.terminate());\n }\n this.worker = null;\n }\n}\nexport class DefaultWorkerFactory {\n constructor(label) {\n this._label = label;\n this._webWorkerFailedBeforeError = false;\n }\n create(moduleId, onMessageCallback, onErrorCallback) {\n let workerId = (++DefaultWorkerFactory.LAST_WORKER_ID);\n if (this._webWorkerFailedBeforeError) {\n throw this._webWorkerFailedBeforeError;\n }\n return new WebWorker(moduleId, workerId, this._label || 'anonymous' + workerId, onMessageCallback, (err) => {\n logOnceWebWorkerWarning(err);\n this._webWorkerFailedBeforeError = err;\n onErrorCallback(err);\n });\n }\n}\nDefaultWorkerFactory.LAST_WORKER_ID = 0;\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 *--------------------------------------------------------------------------------------------*/\nimport { LcsDiff } from '../../../base/common/diff/diff.js';\nimport * as strings from '../../../base/common/strings.js';\nconst MINIMUM_MATCHING_CHARACTER_LENGTH = 3;\nfunction computeDiff(originalSequence, modifiedSequence, continueProcessingPredicate, pretty) {\n const diffAlgo = new LcsDiff(originalSequence, modifiedSequence, continueProcessingPredicate);\n return diffAlgo.ComputeDiff(pretty);\n}\nclass LineSequence {\n constructor(lines) {\n const startColumns = [];\n const endColumns = [];\n for (let i = 0, length = lines.length; i < length; i++) {\n startColumns[i] = getFirstNonBlankColumn(lines[i], 1);\n endColumns[i] = getLastNonBlankColumn(lines[i], 1);\n }\n this.lines = lines;\n this._startColumns = startColumns;\n this._endColumns = endColumns;\n }\n getElements() {\n const elements = [];\n for (let i = 0, len = this.lines.length; i < len; i++) {\n elements[i] = this.lines[i].substring(this._startColumns[i] - 1, this._endColumns[i] - 1);\n }\n return elements;\n }\n getStartLineNumber(i) {\n return i + 1;\n }\n getEndLineNumber(i) {\n return i + 1;\n }\n createCharSequence(shouldIgnoreTrimWhitespace, startIndex, endIndex) {\n const charCodes = [];\n const lineNumbers = [];\n const columns = [];\n let len = 0;\n for (let index = startIndex; index <= endIndex; index++) {\n const lineContent = this.lines[index];\n const startColumn = (shouldIgnoreTrimWhitespace ? this._startColumns[index] : 1);\n const endColumn = (shouldIgnoreTrimWhitespace ? this._endColumns[index] : lineContent.length + 1);\n for (let col = startColumn; col < endColumn; col++) {\n charCodes[len] = lineContent.charCodeAt(col - 1);\n lineNumbers[len] = index + 1;\n columns[len] = col;\n len++;\n }\n }\n return new CharSequence(charCodes, lineNumbers, columns);\n }\n}\nclass CharSequence {\n constructor(charCodes, lineNumbers, columns) {\n this._charCodes = charCodes;\n this._lineNumbers = lineNumbers;\n this._columns = columns;\n }\n getElements() {\n return this._charCodes;\n }\n getStartLineNumber(i) {\n return this._lineNumbers[i];\n }\n getStartColumn(i) {\n return this._columns[i];\n }\n getEndLineNumber(i) {\n return this._lineNumbers[i];\n }\n getEndColumn(i) {\n return this._columns[i] + 1;\n }\n}\nclass CharChange {\n constructor(originalStartLineNumber, originalStartColumn, originalEndLineNumber, originalEndColumn, modifiedStartLineNumber, modifiedStartColumn, modifiedEndLineNumber, modifiedEndColumn) {\n this.originalStartLineNumber = originalStartLineNumber;\n this.originalStartColumn = originalStartColumn;\n this.originalEndLineNumber = originalEndLineNumber;\n this.originalEndColumn = originalEndColumn;\n this.modifiedStartLineNumber = modifiedStartLineNumber;\n this.modifiedStartColumn = modifiedStartColumn;\n this.modifiedEndLineNumber = modifiedEndLineNumber;\n this.modifiedEndColumn = modifiedEndColumn;\n }\n static createFromDiffChange(diffChange, originalCharSequence, modifiedCharSequence) {\n let originalStartLineNumber;\n let originalStartColumn;\n let originalEndLineNumber;\n let originalEndColumn;\n let modifiedStartLineNumber;\n let modifiedStartColumn;\n let modifiedEndLineNumber;\n let modifiedEndColumn;\n if (diffChange.originalLength === 0) {\n originalStartLineNumber = 0;\n originalStartColumn = 0;\n originalEndLineNumber = 0;\n originalEndColumn = 0;\n }\n else {\n originalStartLineNumber = originalCharSequence.getStartLineNumber(diffChange.originalStart);\n originalStartColumn = originalCharSequence.getStartColumn(diffChange.originalStart);\n originalEndLineNumber = originalCharSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n originalEndColumn = originalCharSequence.getEndColumn(diffChange.originalStart + diffChange.originalLength - 1);\n }\n if (diffChange.modifiedLength === 0) {\n modifiedStartLineNumber = 0;\n modifiedStartColumn = 0;\n modifiedEndLineNumber = 0;\n modifiedEndColumn = 0;\n }\n else {\n modifiedStartLineNumber = modifiedCharSequence.getStartLineNumber(diffChange.modifiedStart);\n modifiedStartColumn = modifiedCharSequence.getStartColumn(diffChange.modifiedStart);\n modifiedEndLineNumber = modifiedCharSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n modifiedEndColumn = modifiedCharSequence.getEndColumn(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n }\n return new CharChange(originalStartLineNumber, originalStartColumn, originalEndLineNumber, originalEndColumn, modifiedStartLineNumber, modifiedStartColumn, modifiedEndLineNumber, modifiedEndColumn);\n }\n}\nfunction postProcessCharChanges(rawChanges) {\n if (rawChanges.length <= 1) {\n return rawChanges;\n }\n const result = [rawChanges[0]];\n let prevChange = result[0];\n for (let i = 1, len = rawChanges.length; i < len; i++) {\n const currChange = rawChanges[i];\n const originalMatchingLength = currChange.originalStart - (prevChange.originalStart + prevChange.originalLength);\n const modifiedMatchingLength = currChange.modifiedStart - (prevChange.modifiedStart + prevChange.modifiedLength);\n // Both of the above should be equal, but the continueProcessingPredicate may prevent this from being true\n const matchingLength = Math.min(originalMatchingLength, modifiedMatchingLength);\n if (matchingLength < MINIMUM_MATCHING_CHARACTER_LENGTH) {\n // Merge the current change into the previous one\n prevChange.originalLength = (currChange.originalStart + currChange.originalLength) - prevChange.originalStart;\n prevChange.modifiedLength = (currChange.modifiedStart + currChange.modifiedLength) - prevChange.modifiedStart;\n }\n else {\n // Add the current change\n result.push(currChange);\n prevChange = currChange;\n }\n }\n return result;\n}\nclass LineChange {\n constructor(originalStartLineNumber, originalEndLineNumber, modifiedStartLineNumber, modifiedEndLineNumber, charChanges) {\n this.originalStartLineNumber = originalStartLineNumber;\n this.originalEndLineNumber = originalEndLineNumber;\n this.modifiedStartLineNumber = modifiedStartLineNumber;\n this.modifiedEndLineNumber = modifiedEndLineNumber;\n this.charChanges = charChanges;\n }\n static createFromDiffResult(shouldIgnoreTrimWhitespace, diffChange, originalLineSequence, modifiedLineSequence, continueCharDiff, shouldComputeCharChanges, shouldPostProcessCharChanges) {\n let originalStartLineNumber;\n let originalEndLineNumber;\n let modifiedStartLineNumber;\n let modifiedEndLineNumber;\n let charChanges = undefined;\n if (diffChange.originalLength === 0) {\n originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart) - 1;\n originalEndLineNumber = 0;\n }\n else {\n originalStartLineNumber = originalLineSequence.getStartLineNumber(diffChange.originalStart);\n originalEndLineNumber = originalLineSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n }\n if (diffChange.modifiedLength === 0) {\n modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart) - 1;\n modifiedEndLineNumber = 0;\n }\n else {\n modifiedStartLineNumber = modifiedLineSequence.getStartLineNumber(diffChange.modifiedStart);\n modifiedEndLineNumber = modifiedLineSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n }\n if (shouldComputeCharChanges && diffChange.originalLength > 0 && diffChange.originalLength < 20 && diffChange.modifiedLength > 0 && diffChange.modifiedLength < 20 && continueCharDiff()) {\n // Compute character changes for diff chunks of at most 20 lines...\n const originalCharSequence = originalLineSequence.createCharSequence(shouldIgnoreTrimWhitespace, diffChange.originalStart, diffChange.originalStart + diffChange.originalLength - 1);\n const modifiedCharSequence = modifiedLineSequence.createCharSequence(shouldIgnoreTrimWhitespace, diffChange.modifiedStart, diffChange.modifiedStart + diffChange.modifiedLength - 1);\n let rawChanges = computeDiff(originalCharSequence, modifiedCharSequence, continueCharDiff, true).changes;\n if (shouldPostProcessCharChanges) {\n rawChanges = postProcessCharChanges(rawChanges);\n }\n charChanges = [];\n for (let i = 0, length = rawChanges.length; i < length; i++) {\n charChanges.push(CharChange.createFromDiffChange(rawChanges[i], originalCharSequence, modifiedCharSequence));\n }\n }\n return new LineChange(originalStartLineNumber, originalEndLineNumber, modifiedStartLineNumber, modifiedEndLineNumber, charChanges);\n }\n}\nexport class DiffComputer {\n constructor(originalLines, modifiedLines, opts) {\n this.shouldComputeCharChanges = opts.shouldComputeCharChanges;\n this.shouldPostProcessCharChanges = opts.shouldPostProcessCharChanges;\n this.shouldIgnoreTrimWhitespace = opts.shouldIgnoreTrimWhitespace;\n this.shouldMakePrettyDiff = opts.shouldMakePrettyDiff;\n this.originalLines = originalLines;\n this.modifiedLines = modifiedLines;\n this.original = new LineSequence(originalLines);\n this.modified = new LineSequence(modifiedLines);\n this.continueLineDiff = createContinueProcessingPredicate(opts.maxComputationTime);\n this.continueCharDiff = createContinueProcessingPredicate(opts.maxComputationTime === 0 ? 0 : Math.min(opts.maxComputationTime, 5000)); // never run after 5s for character changes...\n }\n computeDiff() {\n if (this.original.lines.length === 1 && this.original.lines[0].length === 0) {\n // empty original => fast path\n if (this.modified.lines.length === 1 && this.modified.lines[0].length === 0) {\n return {\n quitEarly: false,\n changes: []\n };\n }\n return {\n quitEarly: false,\n changes: [{\n originalStartLineNumber: 1,\n originalEndLineNumber: 1,\n modifiedStartLineNumber: 1,\n modifiedEndLineNumber: this.modified.lines.length,\n charChanges: [{\n modifiedEndColumn: 0,\n modifiedEndLineNumber: 0,\n modifiedStartColumn: 0,\n modifiedStartLineNumber: 0,\n originalEndColumn: 0,\n originalEndLineNumber: 0,\n originalStartColumn: 0,\n originalStartLineNumber: 0\n }]\n }]\n };\n }\n if (this.modified.lines.length === 1 && this.modified.lines[0].length === 0) {\n // empty modified => fast path\n return {\n quitEarly: false,\n changes: [{\n originalStartLineNumber: 1,\n originalEndLineNumber: this.original.lines.length,\n modifiedStartLineNumber: 1,\n modifiedEndLineNumber: 1,\n charChanges: [{\n modifiedEndColumn: 0,\n modifiedEndLineNumber: 0,\n modifiedStartColumn: 0,\n modifiedStartLineNumber: 0,\n originalEndColumn: 0,\n originalEndLineNumber: 0,\n originalStartColumn: 0,\n originalStartLineNumber: 0\n }]\n }]\n };\n }\n const diffResult = computeDiff(this.original, this.modified, this.continueLineDiff, this.shouldMakePrettyDiff);\n const rawChanges = diffResult.changes;\n const quitEarly = diffResult.quitEarly;\n // The diff is always computed with ignoring trim whitespace\n // This ensures we get the prettiest diff\n if (this.shouldIgnoreTrimWhitespace) {\n const lineChanges = [];\n for (let i = 0, length = rawChanges.length; i < length; i++) {\n lineChanges.push(LineChange.createFromDiffResult(this.shouldIgnoreTrimWhitespace, rawChanges[i], this.original, this.modified, this.continueCharDiff, this.shouldComputeCharChanges, this.shouldPostProcessCharChanges));\n }\n return {\n quitEarly: quitEarly,\n changes: lineChanges\n };\n }\n // Need to post-process and introduce changes where the trim whitespace is different\n // Note that we are looping starting at -1 to also cover the lines before the first change\n const result = [];\n let originalLineIndex = 0;\n let modifiedLineIndex = 0;\n for (let i = -1 /* !!!! */, len = rawChanges.length; i < len; i++) {\n const nextChange = (i + 1 < len ? rawChanges[i + 1] : null);\n const originalStop = (nextChange ? nextChange.originalStart : this.originalLines.length);\n const modifiedStop = (nextChange ? nextChange.modifiedStart : this.modifiedLines.length);\n while (originalLineIndex < originalStop && modifiedLineIndex < modifiedStop) {\n const originalLine = this.originalLines[originalLineIndex];\n const modifiedLine = this.modifiedLines[modifiedLineIndex];\n if (originalLine !== modifiedLine) {\n // These lines differ only in trim whitespace\n // Check the leading whitespace\n {\n let originalStartColumn = getFirstNonBlankColumn(originalLine, 1);\n let modifiedStartColumn = getFirstNonBlankColumn(modifiedLine, 1);\n while (originalStartColumn > 1 && modifiedStartColumn > 1) {\n const originalChar = originalLine.charCodeAt(originalStartColumn - 2);\n const modifiedChar = modifiedLine.charCodeAt(modifiedStartColumn - 2);\n if (originalChar !== modifiedChar) {\n break;\n }\n originalStartColumn--;\n modifiedStartColumn--;\n }\n if (originalStartColumn > 1 || modifiedStartColumn > 1) {\n this._pushTrimWhitespaceCharChange(result, originalLineIndex + 1, 1, originalStartColumn, modifiedLineIndex + 1, 1, modifiedStartColumn);\n }\n }\n // Check the trailing whitespace\n {\n let originalEndColumn = getLastNonBlankColumn(originalLine, 1);\n let modifiedEndColumn = getLastNonBlankColumn(modifiedLine, 1);\n const originalMaxColumn = originalLine.length + 1;\n const modifiedMaxColumn = modifiedLine.length + 1;\n while (originalEndColumn < originalMaxColumn && modifiedEndColumn < modifiedMaxColumn) {\n const originalChar = originalLine.charCodeAt(originalEndColumn - 1);\n const modifiedChar = originalLine.charCodeAt(modifiedEndColumn - 1);\n if (originalChar !== modifiedChar) {\n break;\n }\n originalEndColumn++;\n modifiedEndColumn++;\n }\n if (originalEndColumn < originalMaxColumn || modifiedEndColumn < modifiedMaxColumn) {\n this._pushTrimWhitespaceCharChange(result, originalLineIndex + 1, originalEndColumn, originalMaxColumn, modifiedLineIndex + 1, modifiedEndColumn, modifiedMaxColumn);\n }\n }\n }\n originalLineIndex++;\n modifiedLineIndex++;\n }\n if (nextChange) {\n // Emit the actual change\n result.push(LineChange.createFromDiffResult(this.shouldIgnoreTrimWhitespace, nextChange, this.original, this.modified, this.continueCharDiff, this.shouldComputeCharChanges, this.shouldPostProcessCharChanges));\n originalLineIndex += nextChange.originalLength;\n modifiedLineIndex += nextChange.modifiedLength;\n }\n }\n return {\n quitEarly: quitEarly,\n changes: result\n };\n }\n _pushTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn) {\n if (this._mergeTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn)) {\n // Merged into previous\n return;\n }\n let charChanges = undefined;\n if (this.shouldComputeCharChanges) {\n charChanges = [new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn)];\n }\n result.push(new LineChange(originalLineNumber, originalLineNumber, modifiedLineNumber, modifiedLineNumber, charChanges));\n }\n _mergeTrimWhitespaceCharChange(result, originalLineNumber, originalStartColumn, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedEndColumn) {\n const len = result.length;\n if (len === 0) {\n return false;\n }\n const prevChange = result[len - 1];\n if (prevChange.originalEndLineNumber === 0 || prevChange.modifiedEndLineNumber === 0) {\n // Don't merge with inserts/deletes\n return false;\n }\n if (prevChange.originalEndLineNumber + 1 === originalLineNumber && prevChange.modifiedEndLineNumber + 1 === modifiedLineNumber) {\n prevChange.originalEndLineNumber = originalLineNumber;\n prevChange.modifiedEndLineNumber = modifiedLineNumber;\n if (this.shouldComputeCharChanges && prevChange.charChanges) {\n prevChange.charChanges.push(new CharChange(originalLineNumber, originalStartColumn, originalLineNumber, originalEndColumn, modifiedLineNumber, modifiedStartColumn, modifiedLineNumber, modifiedEndColumn));\n }\n return true;\n }\n return false;\n }\n}\nfunction getFirstNonBlankColumn(txt, defaultValue) {\n const r = strings.firstNonWhitespaceIndex(txt);\n if (r === -1) {\n return defaultValue;\n }\n return r + 1;\n}\nfunction getLastNonBlankColumn(txt, defaultValue) {\n const r = strings.lastNonWhitespaceIndex(txt);\n if (r === -1) {\n return defaultValue;\n }\n return r + 2;\n}\nfunction createContinueProcessingPredicate(maximumRuntime) {\n if (maximumRuntime === 0) {\n return () => true;\n }\n const startTime = Date.now();\n return () => {\n return Date.now() - startTime < maximumRuntime;\n };\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 *--------------------------------------------------------------------------------------------*/\nimport { CharacterClassifier } from '../core/characterClassifier.js';\nexport class Uint8Matrix {\n constructor(rows, cols, defaultValue) {\n const data = new Uint8Array(rows * cols);\n for (let i = 0, len = rows * cols; i < len; i++) {\n data[i] = defaultValue;\n }\n this._data = data;\n this.rows = rows;\n this.cols = cols;\n }\n get(row, col) {\n return this._data[row * this.cols + col];\n }\n set(row, col, value) {\n this._data[row * this.cols + col] = value;\n }\n}\nexport class StateMachine {\n constructor(edges) {\n let maxCharCode = 0;\n let maxState = 0 /* Invalid */;\n for (let i = 0, len = edges.length; i < len; i++) {\n let [from, chCode, to] = edges[i];\n if (chCode > maxCharCode) {\n maxCharCode = chCode;\n }\n if (from > maxState) {\n maxState = from;\n }\n if (to > maxState) {\n maxState = to;\n }\n }\n maxCharCode++;\n maxState++;\n let states = new Uint8Matrix(maxState, maxCharCode, 0 /* Invalid */);\n for (let i = 0, len = edges.length; i < len; i++) {\n let [from, chCode, to] = edges[i];\n states.set(from, chCode, to);\n }\n this._states = states;\n this._maxCharCode = maxCharCode;\n }\n nextState(currentState, chCode) {\n if (chCode < 0 || chCode >= this._maxCharCode) {\n return 0 /* Invalid */;\n }\n return this._states.get(currentState, chCode);\n }\n}\n// State machine for http:// or https:// or file://\nlet _stateMachine = null;\nfunction getStateMachine() {\n if (_stateMachine === null) {\n _stateMachine = new StateMachine([\n [1 /* Start */, 104 /* h */, 2 /* H */],\n [1 /* Start */, 72 /* H */, 2 /* H */],\n [1 /* Start */, 102 /* f */, 6 /* F */],\n [1 /* Start */, 70 /* F */, 6 /* F */],\n [2 /* H */, 116 /* t */, 3 /* HT */],\n [2 /* H */, 84 /* T */, 3 /* HT */],\n [3 /* HT */, 116 /* t */, 4 /* HTT */],\n [3 /* HT */, 84 /* T */, 4 /* HTT */],\n [4 /* HTT */, 112 /* p */, 5 /* HTTP */],\n [4 /* HTT */, 80 /* P */, 5 /* HTTP */],\n [5 /* HTTP */, 115 /* s */, 9 /* BeforeColon */],\n [5 /* HTTP */, 83 /* S */, 9 /* BeforeColon */],\n [5 /* HTTP */, 58 /* Colon */, 10 /* AfterColon */],\n [6 /* F */, 105 /* i */, 7 /* FI */],\n [6 /* F */, 73 /* I */, 7 /* FI */],\n [7 /* FI */, 108 /* l */, 8 /* FIL */],\n [7 /* FI */, 76 /* L */, 8 /* FIL */],\n [8 /* FIL */, 101 /* e */, 9 /* BeforeColon */],\n [8 /* FIL */, 69 /* E */, 9 /* BeforeColon */],\n [9 /* BeforeColon */, 58 /* Colon */, 10 /* AfterColon */],\n [10 /* AfterColon */, 47 /* Slash */, 11 /* AlmostThere */],\n [11 /* AlmostThere */, 47 /* Slash */, 12 /* End */],\n ]);\n }\n return _stateMachine;\n}\nlet _classifier = null;\nfunction getClassifier() {\n if (_classifier === null) {\n _classifier = new CharacterClassifier(0 /* None */);\n const FORCE_TERMINATION_CHARACTERS = ' \\t<>\\'\\\"、。。、,.:;‘“〈《「『【〔([{「」}])〕】』」》〉”’`~…';\n for (let i = 0; i < FORCE_TERMINATION_CHARACTERS.length; i++) {\n _classifier.set(FORCE_TERMINATION_CHARACTERS.charCodeAt(i), 1 /* ForceTermination */);\n }\n const CANNOT_END_WITH_CHARACTERS = '.,;';\n for (let i = 0; i < CANNOT_END_WITH_CHARACTERS.length; i++) {\n _classifier.set(CANNOT_END_WITH_CHARACTERS.charCodeAt(i), 2 /* CannotEndIn */);\n }\n }\n return _classifier;\n}\nexport class LinkComputer {\n static _createLink(classifier, line, lineNumber, linkBeginIndex, linkEndIndex) {\n // Do not allow to end link in certain characters...\n let lastIncludedCharIndex = linkEndIndex - 1;\n do {\n const chCode = line.charCodeAt(lastIncludedCharIndex);\n const chClass = classifier.get(chCode);\n if (chClass !== 2 /* CannotEndIn */) {\n break;\n }\n lastIncludedCharIndex--;\n } while (lastIncludedCharIndex > linkBeginIndex);\n // Handle links enclosed in parens, square brackets and curlys.\n if (linkBeginIndex > 0) {\n const charCodeBeforeLink = line.charCodeAt(linkBeginIndex - 1);\n const lastCharCodeInLink = line.charCodeAt(lastIncludedCharIndex);\n if ((charCodeBeforeLink === 40 /* OpenParen */ && lastCharCodeInLink === 41 /* CloseParen */)\n || (charCodeBeforeLink === 91 /* OpenSquareBracket */ && lastCharCodeInLink === 93 /* CloseSquareBracket */)\n || (charCodeBeforeLink === 123 /* OpenCurlyBrace */ && lastCharCodeInLink === 125 /* CloseCurlyBrace */)) {\n // Do not end in ) if ( is before the link start\n // Do not end in ] if [ is before the link start\n // Do not end in } if { is before the link start\n lastIncludedCharIndex--;\n }\n }\n return {\n range: {\n startLineNumber: lineNumber,\n startColumn: linkBeginIndex + 1,\n endLineNumber: lineNumber,\n endColumn: lastIncludedCharIndex + 2\n },\n url: line.substring(linkBeginIndex, lastIncludedCharIndex + 1)\n };\n }\n static computeLinks(model, stateMachine = getStateMachine()) {\n const classifier = getClassifier();\n let result = [];\n for (let i = 1, lineCount = model.getLineCount(); i <= lineCount; i++) {\n const line = model.getLineContent(i);\n const len = line.length;\n let j = 0;\n let linkBeginIndex = 0;\n let linkBeginChCode = 0;\n let state = 1 /* Start */;\n let hasOpenParens = false;\n let hasOpenSquareBracket = false;\n let inSquareBrackets = false;\n let hasOpenCurlyBracket = false;\n while (j < len) {\n let resetStateMachine = false;\n const chCode = line.charCodeAt(j);\n if (state === 13 /* Accept */) {\n let chClass;\n switch (chCode) {\n case 40 /* OpenParen */:\n hasOpenParens = true;\n chClass = 0 /* None */;\n break;\n case 41 /* CloseParen */:\n chClass = (hasOpenParens ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n case 91 /* OpenSquareBracket */:\n inSquareBrackets = true;\n hasOpenSquareBracket = true;\n chClass = 0 /* None */;\n break;\n case 93 /* CloseSquareBracket */:\n inSquareBrackets = false;\n chClass = (hasOpenSquareBracket ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n case 123 /* OpenCurlyBrace */:\n hasOpenCurlyBracket = true;\n chClass = 0 /* None */;\n break;\n case 125 /* CloseCurlyBrace */:\n chClass = (hasOpenCurlyBracket ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n /* The following three rules make it that ' or \" or ` are allowed inside links if the link began with a different one */\n case 39 /* SingleQuote */:\n chClass = (linkBeginChCode === 34 /* DoubleQuote */ || linkBeginChCode === 96 /* BackTick */) ? 0 /* None */ : 1 /* ForceTermination */;\n break;\n case 34 /* DoubleQuote */:\n chClass = (linkBeginChCode === 39 /* SingleQuote */ || linkBeginChCode === 96 /* BackTick */) ? 0 /* None */ : 1 /* ForceTermination */;\n break;\n case 96 /* BackTick */:\n chClass = (linkBeginChCode === 39 /* SingleQuote */ || linkBeginChCode === 34 /* DoubleQuote */) ? 0 /* None */ : 1 /* ForceTermination */;\n break;\n case 42 /* Asterisk */:\n // `*` terminates a link if the link began with `*`\n chClass = (linkBeginChCode === 42 /* Asterisk */) ? 1 /* ForceTermination */ : 0 /* None */;\n break;\n case 124 /* Pipe */:\n // `|` terminates a link if the link began with `|`\n chClass = (linkBeginChCode === 124 /* Pipe */) ? 1 /* ForceTermination */ : 0 /* None */;\n break;\n case 32 /* Space */:\n // ` ` allow space in between [ and ]\n chClass = (inSquareBrackets ? 0 /* None */ : 1 /* ForceTermination */);\n break;\n default:\n chClass = classifier.get(chCode);\n }\n // Check if character terminates link\n if (chClass === 1 /* ForceTermination */) {\n result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, j));\n resetStateMachine = true;\n }\n }\n else if (state === 12 /* End */) {\n let chClass;\n if (chCode === 91 /* OpenSquareBracket */) {\n // Allow for the authority part to contain ipv6 addresses which contain [ and ]\n hasOpenSquareBracket = true;\n chClass = 0 /* None */;\n }\n else {\n chClass = classifier.get(chCode);\n }\n // Check if character terminates link\n if (chClass === 1 /* ForceTermination */) {\n resetStateMachine = true;\n }\n else {\n state = 13 /* Accept */;\n }\n }\n else {\n state = stateMachine.nextState(state, chCode);\n if (state === 0 /* Invalid */) {\n resetStateMachine = true;\n }\n }\n if (resetStateMachine) {\n state = 1 /* Start */;\n hasOpenParens = false;\n hasOpenSquareBracket = false;\n hasOpenCurlyBracket = false;\n // Record where the link started\n linkBeginIndex = j + 1;\n linkBeginChCode = chCode;\n }\n j++;\n }\n if (state === 13 /* Accept */) {\n result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, len));\n }\n }\n return result;\n }\n}\n/**\n * Returns an array of all links contains in the provided\n * document. *Note* that this operation is computational\n * expensive and should not run in the UI thread.\n */\nexport function computeLinks(model) {\n if (!model || typeof model.getLineCount !== 'function' || typeof model.getLineContent !== 'function') {\n // Unknown caller!\n return [];\n }\n return LinkComputer.computeLinks(model);\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 *--------------------------------------------------------------------------------------------*/\nexport class BasicInplaceReplace {\n constructor() {\n this._defaultValueSet = [\n ['true', 'false'],\n ['True', 'False'],\n ['Private', 'Public', 'Friend', 'ReadOnly', 'Partial', 'Protected', 'WriteOnly'],\n ['public', 'protected', 'private'],\n ];\n }\n navigateValueSet(range1, text1, range2, text2, up) {\n if (range1 && text1) {\n let result = this.doNavigateValueSet(text1, up);\n if (result) {\n return {\n range: range1,\n value: result\n };\n }\n }\n if (range2 && text2) {\n let result = this.doNavigateValueSet(text2, up);\n if (result) {\n return {\n range: range2,\n value: result\n };\n }\n }\n return null;\n }\n doNavigateValueSet(text, up) {\n let numberResult = this.numberReplace(text, up);\n if (numberResult !== null) {\n return numberResult;\n }\n return this.textReplace(text, up);\n }\n numberReplace(value, up) {\n let precision = Math.pow(10, value.length - (value.lastIndexOf('.') + 1));\n let n1 = Number(value);\n let n2 = parseFloat(value);\n if (!isNaN(n1) && !isNaN(n2) && n1 === n2) {\n if (n1 === 0 && !up) {\n return null; // don't do negative\n //\t\t\t} else if(n1 === 9 && up) {\n //\t\t\t\treturn null; // don't insert 10 into a number\n }\n else {\n n1 = Math.floor(n1 * precision);\n n1 += up ? precision : -precision;\n return String(n1 / precision);\n }\n }\n return null;\n }\n textReplace(value, up) {\n return this.valueSetsReplace(this._defaultValueSet, value, up);\n }\n valueSetsReplace(valueSets, value, up) {\n let result = null;\n for (let i = 0, len = valueSets.length; result === null && i < len; i++) {\n result = this.valueSetReplace(valueSets[i], value, up);\n }\n return result;\n }\n valueSetReplace(valueSet, value, up) {\n let idx = valueSet.indexOf(value);\n if (idx >= 0) {\n idx += up ? +1 : -1;\n if (idx < 0) {\n idx = valueSet.length - 1;\n }\n else {\n idx %= valueSet.length;\n }\n return valueSet[idx];\n }\n return null;\n }\n}\nBasicInplaceReplace.INSTANCE = new BasicInplaceReplace();\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { stringDiff } from '../../../base/common/diff/diff.js';\nimport { globals } from '../../../base/common/platform.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { DiffComputer } from '../diff/diffComputer.js';\nimport { MirrorTextModel as BaseMirrorModel } from '../model/mirrorTextModel.js';\nimport { ensureValidWordDefinition, getWordAtText } from '../model/wordHelper.js';\nimport { computeLinks } from '../modes/linkComputer.js';\nimport { BasicInplaceReplace } from '../modes/supports/inplaceReplaceSupport.js';\nimport { createMonacoBaseAPI } from '../standalone/standaloneBase.js';\nimport * as types from '../../../base/common/types.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\n/**\n * @internal\n */\nclass MirrorModel extends BaseMirrorModel {\n get uri() {\n return this._uri;\n }\n get eol() {\n return this._eol;\n }\n getValue() {\n return this.getText();\n }\n getLinesContent() {\n return this._lines.slice(0);\n }\n getLineCount() {\n return this._lines.length;\n }\n getLineContent(lineNumber) {\n return this._lines[lineNumber - 1];\n }\n getWordAtPosition(position, wordDefinition) {\n let wordAtText = getWordAtText(position.column, ensureValidWordDefinition(wordDefinition), this._lines[position.lineNumber - 1], 0);\n if (wordAtText) {\n return new Range(position.lineNumber, wordAtText.startColumn, position.lineNumber, wordAtText.endColumn);\n }\n return null;\n }\n words(wordDefinition) {\n const lines = this._lines;\n const wordenize = this._wordenize.bind(this);\n let lineNumber = 0;\n let lineText = '';\n let wordRangesIdx = 0;\n let wordRanges = [];\n return {\n *[Symbol.iterator]() {\n while (true) {\n if (wordRangesIdx < wordRanges.length) {\n const value = lineText.substring(wordRanges[wordRangesIdx].start, wordRanges[wordRangesIdx].end);\n wordRangesIdx += 1;\n yield value;\n }\n else {\n if (lineNumber < lines.length) {\n lineText = lines[lineNumber];\n wordRanges = wordenize(lineText, wordDefinition);\n wordRangesIdx = 0;\n lineNumber += 1;\n }\n else {\n break;\n }\n }\n }\n }\n };\n }\n getLineWords(lineNumber, wordDefinition) {\n let content = this._lines[lineNumber - 1];\n let ranges = this._wordenize(content, wordDefinition);\n let words = [];\n for (const range of ranges) {\n words.push({\n word: content.substring(range.start, range.end),\n startColumn: range.start + 1,\n endColumn: range.end + 1\n });\n }\n return words;\n }\n _wordenize(content, wordDefinition) {\n const result = [];\n let match;\n wordDefinition.lastIndex = 0; // reset lastIndex just to be sure\n while (match = wordDefinition.exec(content)) {\n if (match[0].length === 0) {\n // it did match the empty string\n break;\n }\n result.push({ start: match.index, end: match.index + match[0].length });\n }\n return result;\n }\n getValueInRange(range) {\n range = this._validateRange(range);\n if (range.startLineNumber === range.endLineNumber) {\n return this._lines[range.startLineNumber - 1].substring(range.startColumn - 1, range.endColumn - 1);\n }\n let lineEnding = this._eol;\n let startLineIndex = range.startLineNumber - 1;\n let endLineIndex = range.endLineNumber - 1;\n let resultLines = [];\n resultLines.push(this._lines[startLineIndex].substring(range.startColumn - 1));\n for (let i = startLineIndex + 1; i < endLineIndex; i++) {\n resultLines.push(this._lines[i]);\n }\n resultLines.push(this._lines[endLineIndex].substring(0, range.endColumn - 1));\n return resultLines.join(lineEnding);\n }\n offsetAt(position) {\n position = this._validatePosition(position);\n this._ensureLineStarts();\n return this._lineStarts.getAccumulatedValue(position.lineNumber - 2) + (position.column - 1);\n }\n positionAt(offset) {\n offset = Math.floor(offset);\n offset = Math.max(0, offset);\n this._ensureLineStarts();\n let out = this._lineStarts.getIndexOf(offset);\n let lineLength = this._lines[out.index].length;\n // Ensure we return a valid position\n return {\n lineNumber: 1 + out.index,\n column: 1 + Math.min(out.remainder, lineLength)\n };\n }\n _validateRange(range) {\n const start = this._validatePosition({ lineNumber: range.startLineNumber, column: range.startColumn });\n const end = this._validatePosition({ lineNumber: range.endLineNumber, column: range.endColumn });\n if (start.lineNumber !== range.startLineNumber\n || start.column !== range.startColumn\n || end.lineNumber !== range.endLineNumber\n || end.column !== range.endColumn) {\n return {\n startLineNumber: start.lineNumber,\n startColumn: start.column,\n endLineNumber: end.lineNumber,\n endColumn: end.column\n };\n }\n return range;\n }\n _validatePosition(position) {\n if (!Position.isIPosition(position)) {\n throw new Error('bad position');\n }\n let { lineNumber, column } = position;\n let hasChanged = false;\n if (lineNumber < 1) {\n lineNumber = 1;\n column = 1;\n hasChanged = true;\n }\n else if (lineNumber > this._lines.length) {\n lineNumber = this._lines.length;\n column = this._lines[lineNumber - 1].length + 1;\n hasChanged = true;\n }\n else {\n let maxCharacter = this._lines[lineNumber - 1].length + 1;\n if (column < 1) {\n column = 1;\n hasChanged = true;\n }\n else if (column > maxCharacter) {\n column = maxCharacter;\n hasChanged = true;\n }\n }\n if (!hasChanged) {\n return position;\n }\n else {\n return { lineNumber, column };\n }\n }\n}\n/**\n * @internal\n */\nexport class EditorSimpleWorker {\n constructor(host, foreignModuleFactory) {\n this._host = host;\n this._models = Object.create(null);\n this._foreignModuleFactory = foreignModuleFactory;\n this._foreignModule = null;\n }\n dispose() {\n this._models = Object.create(null);\n }\n _getModel(uri) {\n return this._models[uri];\n }\n _getModels() {\n let all = [];\n Object.keys(this._models).forEach((key) => all.push(this._models[key]));\n return all;\n }\n acceptNewModel(data) {\n this._models[data.url] = new MirrorModel(URI.parse(data.url), data.lines, data.EOL, data.versionId);\n }\n acceptModelChanged(strURL, e) {\n if (!this._models[strURL]) {\n return;\n }\n let model = this._models[strURL];\n model.onEvents(e);\n }\n acceptRemovedModel(strURL) {\n if (!this._models[strURL]) {\n return;\n }\n delete this._models[strURL];\n }\n // ---- BEGIN diff --------------------------------------------------------------------------\n computeDiff(originalUrl, modifiedUrl, ignoreTrimWhitespace, maxComputationTime) {\n return __awaiter(this, void 0, void 0, function* () {\n const original = this._getModel(originalUrl);\n const modified = this._getModel(modifiedUrl);\n if (!original || !modified) {\n return null;\n }\n const originalLines = original.getLinesContent();\n const modifiedLines = modified.getLinesContent();\n const diffComputer = new DiffComputer(originalLines, modifiedLines, {\n shouldComputeCharChanges: true,\n shouldPostProcessCharChanges: true,\n shouldIgnoreTrimWhitespace: ignoreTrimWhitespace,\n shouldMakePrettyDiff: true,\n maxComputationTime: maxComputationTime\n });\n const diffResult = diffComputer.computeDiff();\n const identical = (diffResult.changes.length > 0 ? false : this._modelsAreIdentical(original, modified));\n return {\n quitEarly: diffResult.quitEarly,\n identical: identical,\n changes: diffResult.changes\n };\n });\n }\n _modelsAreIdentical(original, modified) {\n const originalLineCount = original.getLineCount();\n const modifiedLineCount = modified.getLineCount();\n if (originalLineCount !== modifiedLineCount) {\n return false;\n }\n for (let line = 1; line <= originalLineCount; line++) {\n const originalLine = original.getLineContent(line);\n const modifiedLine = modified.getLineContent(line);\n if (originalLine !== modifiedLine) {\n return false;\n }\n }\n return true;\n }\n computeMoreMinimalEdits(modelUrl, edits) {\n return __awaiter(this, void 0, void 0, function* () {\n const model = this._getModel(modelUrl);\n if (!model) {\n return edits;\n }\n const result = [];\n let lastEol = undefined;\n edits = edits.slice(0).sort((a, b) => {\n if (a.range && b.range) {\n return Range.compareRangesUsingStarts(a.range, b.range);\n }\n // eol only changes should go to the end\n let aRng = a.range ? 0 : 1;\n let bRng = b.range ? 0 : 1;\n return aRng - bRng;\n });\n for (let { range, text, eol } of edits) {\n if (typeof eol === 'number') {\n lastEol = eol;\n }\n if (Range.isEmpty(range) && !text) {\n // empty change\n continue;\n }\n const original = model.getValueInRange(range);\n text = text.replace(/\\r\\n|\\n|\\r/g, model.eol);\n if (original === text) {\n // noop\n continue;\n }\n // make sure diff won't take too long\n if (Math.max(text.length, original.length) > EditorSimpleWorker._diffLimit) {\n result.push({ range, text });\n continue;\n }\n // compute diff between original and edit.text\n const changes = stringDiff(original, text, false);\n const editOffset = model.offsetAt(Range.lift(range).getStartPosition());\n for (const change of changes) {\n const start = model.positionAt(editOffset + change.originalStart);\n const end = model.positionAt(editOffset + change.originalStart + change.originalLength);\n const newEdit = {\n text: text.substr(change.modifiedStart, change.modifiedLength),\n range: { startLineNumber: start.lineNumber, startColumn: start.column, endLineNumber: end.lineNumber, endColumn: end.column }\n };\n if (model.getValueInRange(newEdit.range) !== newEdit.text) {\n result.push(newEdit);\n }\n }\n }\n if (typeof lastEol === 'number') {\n result.push({ eol: lastEol, text: '', range: { startLineNumber: 0, startColumn: 0, endLineNumber: 0, endColumn: 0 } });\n }\n return result;\n });\n }\n // ---- END minimal edits ---------------------------------------------------------------\n computeLinks(modelUrl) {\n return __awaiter(this, void 0, void 0, function* () {\n let model = this._getModel(modelUrl);\n if (!model) {\n return null;\n }\n return computeLinks(model);\n });\n }\n textualSuggest(modelUrls, leadingWord, wordDef, wordDefFlags) {\n return __awaiter(this, void 0, void 0, function* () {\n const sw = new StopWatch(true);\n const wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n const seen = new Set();\n outer: for (let url of modelUrls) {\n const model = this._getModel(url);\n if (!model) {\n continue;\n }\n for (let word of model.words(wordDefRegExp)) {\n if (word === leadingWord || !isNaN(Number(word))) {\n continue;\n }\n seen.add(word);\n if (seen.size > EditorSimpleWorker._suggestionsLimit) {\n break outer;\n }\n }\n }\n return { words: Array.from(seen), duration: sw.elapsed() };\n });\n }\n // ---- END suggest --------------------------------------------------------------------------\n //#region -- word ranges --\n computeWordRanges(modelUrl, range, wordDef, wordDefFlags) {\n return __awaiter(this, void 0, void 0, function* () {\n let model = this._getModel(modelUrl);\n if (!model) {\n return Object.create(null);\n }\n const wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n const result = Object.create(null);\n for (let line = range.startLineNumber; line < range.endLineNumber; line++) {\n let words = model.getLineWords(line, wordDefRegExp);\n for (const word of words) {\n if (!isNaN(Number(word.word))) {\n continue;\n }\n let array = result[word.word];\n if (!array) {\n array = [];\n result[word.word] = array;\n }\n array.push({\n startLineNumber: line,\n startColumn: word.startColumn,\n endLineNumber: line,\n endColumn: word.endColumn\n });\n }\n }\n return result;\n });\n }\n //#endregion\n navigateValueSet(modelUrl, range, up, wordDef, wordDefFlags) {\n return __awaiter(this, void 0, void 0, function* () {\n let model = this._getModel(modelUrl);\n if (!model) {\n return null;\n }\n let wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n if (range.startColumn === range.endColumn) {\n range = {\n startLineNumber: range.startLineNumber,\n startColumn: range.startColumn,\n endLineNumber: range.endLineNumber,\n endColumn: range.endColumn + 1\n };\n }\n let selectionText = model.getValueInRange(range);\n let wordRange = model.getWordAtPosition({ lineNumber: range.startLineNumber, column: range.startColumn }, wordDefRegExp);\n if (!wordRange) {\n return null;\n }\n let word = model.getValueInRange(wordRange);\n let result = BasicInplaceReplace.INSTANCE.navigateValueSet(range, selectionText, wordRange, word, up);\n return result;\n });\n }\n // ---- BEGIN foreign module support --------------------------------------------------------------------------\n loadForeignModule(moduleId, createData, foreignHostMethods) {\n const proxyMethodRequest = (method, args) => {\n return this._host.fhr(method, args);\n };\n const foreignHost = types.createProxyObject(foreignHostMethods, proxyMethodRequest);\n let ctx = {\n host: foreignHost,\n getMirrorModels: () => {\n return this._getModels();\n }\n };\n if (this._foreignModuleFactory) {\n this._foreignModule = this._foreignModuleFactory(ctx, createData);\n // static foreing module\n return Promise.resolve(types.getAllMethodNames(this._foreignModule));\n }\n // ESM-comment-begin\n // \t\treturn new Promise<any>((resolve, reject) => {\n // \t\t\trequire([moduleId], (foreignModule: { create: IForeignModuleFactory }) => {\n // \t\t\t\tthis._foreignModule = foreignModule.create(ctx, createData);\n // \n // \t\t\t\tresolve(types.getAllMethodNames(this._foreignModule));\n // \n // \t\t\t}, reject);\n // \t\t});\n // ESM-comment-end\n // ESM-uncomment-begin\n return Promise.reject(new Error(`Unexpected usage`));\n // ESM-uncomment-end\n }\n // foreign method request\n fmr(method, args) {\n if (!this._foreignModule || typeof this._foreignModule[method] !== 'function') {\n return Promise.reject(new Error('Missing requestHandler or method: ' + method));\n }\n try {\n return Promise.resolve(this._foreignModule[method].apply(this._foreignModule, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n }\n}\n// ---- END diff --------------------------------------------------------------------------\n// ---- BEGIN minimal edits ---------------------------------------------------------------\nEditorSimpleWorker._diffLimit = 100000;\n// ---- BEGIN suggest --------------------------------------------------------------------------\nEditorSimpleWorker._suggestionsLimit = 10000;\n/**\n * Called on the worker side\n * @internal\n */\nexport function create(host) {\n return new EditorSimpleWorker(host, null);\n}\nif (typeof importScripts === 'function') {\n // Running in a web worker\n globals.monaco = createMonacoBaseAPI();\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 *--------------------------------------------------------------------------------------------*/\nimport { splitLines } from '../../../base/common/strings.js';\nimport { Position } from '../core/position.js';\nimport { PrefixSumComputer } from '../viewModel/prefixSumComputer.js';\nexport class MirrorTextModel {\n constructor(uri, lines, eol, versionId) {\n this._uri = uri;\n this._lines = lines;\n this._eol = eol;\n this._versionId = versionId;\n this._lineStarts = null;\n this._cachedTextValue = null;\n }\n dispose() {\n this._lines.length = 0;\n }\n get version() {\n return this._versionId;\n }\n getText() {\n if (this._cachedTextValue === null) {\n this._cachedTextValue = this._lines.join(this._eol);\n }\n return this._cachedTextValue;\n }\n onEvents(e) {\n if (e.eol && e.eol !== this._eol) {\n this._eol = e.eol;\n this._lineStarts = null;\n }\n // Update my lines\n const changes = e.changes;\n for (const change of changes) {\n this._acceptDeleteRange(change.range);\n this._acceptInsertText(new Position(change.range.startLineNumber, change.range.startColumn), change.text);\n }\n this._versionId = e.versionId;\n this._cachedTextValue = null;\n }\n _ensureLineStarts() {\n if (!this._lineStarts) {\n const eolLength = this._eol.length;\n const linesLength = this._lines.length;\n const lineStartValues = new Uint32Array(linesLength);\n for (let i = 0; i < linesLength; i++) {\n lineStartValues[i] = this._lines[i].length + eolLength;\n }\n this._lineStarts = new PrefixSumComputer(lineStartValues);\n }\n }\n /**\n * All changes to a line's text go through this method\n */\n _setLineText(lineIndex, newValue) {\n this._lines[lineIndex] = newValue;\n if (this._lineStarts) {\n // update prefix sum\n this._lineStarts.changeValue(lineIndex, this._lines[lineIndex].length + this._eol.length);\n }\n }\n _acceptDeleteRange(range) {\n if (range.startLineNumber === range.endLineNumber) {\n if (range.startColumn === range.endColumn) {\n // Nothing to delete\n return;\n }\n // Delete text on the affected line\n this._setLineText(range.startLineNumber - 1, this._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1)\n + this._lines[range.startLineNumber - 1].substring(range.endColumn - 1));\n return;\n }\n // Take remaining text on last line and append it to remaining text on first line\n this._setLineText(range.startLineNumber - 1, this._lines[range.startLineNumber - 1].substring(0, range.startColumn - 1)\n + this._lines[range.endLineNumber - 1].substring(range.endColumn - 1));\n // Delete middle lines\n this._lines.splice(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n if (this._lineStarts) {\n // update prefix sum\n this._lineStarts.removeValues(range.startLineNumber, range.endLineNumber - range.startLineNumber);\n }\n }\n _acceptInsertText(position, insertText) {\n if (insertText.length === 0) {\n // Nothing to insert\n return;\n }\n let insertLines = splitLines(insertText);\n if (insertLines.length === 1) {\n // Inserting text on one line\n this._setLineText(position.lineNumber - 1, this._lines[position.lineNumber - 1].substring(0, position.column - 1)\n + insertLines[0]\n + this._lines[position.lineNumber - 1].substring(position.column - 1));\n return;\n }\n // Append overflowing text from first line to the end of text to insert\n insertLines[insertLines.length - 1] += this._lines[position.lineNumber - 1].substring(position.column - 1);\n // Delete overflowing text from first line and insert text on first line\n this._setLineText(position.lineNumber - 1, this._lines[position.lineNumber - 1].substring(0, position.column - 1)\n + insertLines[0]);\n // Insert new lines & store lengths\n let newLengths = new Uint32Array(insertLines.length - 1);\n for (let i = 1; i < insertLines.length; i++) {\n this._lines.splice(position.lineNumber + i - 1, 0, insertLines[i]);\n newLengths[i - 1] = insertLines[i].length + this._eol.length;\n }\n if (this._lineStarts) {\n // update prefix sum\n this._lineStarts.insertValues(position.lineNumber, newLengths);\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { IntervalTimer, timeout } from '../../../base/common/async.js';\nimport { Disposable, dispose, toDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { SimpleWorkerClient, logOnceWebWorkerWarning } from '../../../base/common/worker/simpleWorker.js';\nimport { DefaultWorkerFactory } from '../../../base/worker/defaultWorkerFactory.js';\nimport { Range } from '../core/range.js';\nimport * as modes from '../modes.js';\nimport { LanguageConfigurationRegistry } from '../modes/languageConfigurationRegistry.js';\nimport { EditorSimpleWorker } from './editorSimpleWorker.js';\nimport { IModelService } from './modelService.js';\nimport { ITextResourceConfigurationService } from './textResourceConfigurationService.js';\nimport { regExpFlags } from '../../../base/common/strings.js';\nimport { isNonEmptyArray } from '../../../base/common/arrays.js';\nimport { ILogService } from '../../../platform/log/common/log.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\nimport { canceled } from '../../../base/common/errors.js';\n/**\n * Stop syncing a model to the worker if it was not needed for 1 min.\n */\nconst STOP_SYNC_MODEL_DELTA_TIME_MS = 60 * 1000;\n/**\n * Stop the worker if it was not needed for 5 min.\n */\nconst STOP_WORKER_DELTA_TIME_MS = 5 * 60 * 1000;\nfunction canSyncModel(modelService, resource) {\n let model = modelService.getModel(resource);\n if (!model) {\n return false;\n }\n if (model.isTooLargeForSyncing()) {\n return false;\n }\n return true;\n}\nlet EditorWorkerServiceImpl = class EditorWorkerServiceImpl extends Disposable {\n constructor(modelService, configurationService, logService) {\n super();\n this._modelService = modelService;\n this._workerManager = this._register(new WorkerManager(this._modelService));\n this._logService = logService;\n // register default link-provider and default completions-provider\n this._register(modes.LinkProviderRegistry.register('*', {\n provideLinks: (model, token) => {\n if (!canSyncModel(this._modelService, model.uri)) {\n return Promise.resolve({ links: [] }); // File too large\n }\n return this._workerManager.withWorker().then(client => client.computeLinks(model.uri)).then(links => {\n return links && { links };\n });\n }\n }));\n this._register(modes.CompletionProviderRegistry.register('*', new WordBasedCompletionItemProvider(this._workerManager, configurationService, this._modelService)));\n }\n dispose() {\n super.dispose();\n }\n canComputeDiff(original, modified) {\n return (canSyncModel(this._modelService, original) && canSyncModel(this._modelService, modified));\n }\n computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime) {\n return this._workerManager.withWorker().then(client => client.computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime));\n }\n computeMoreMinimalEdits(resource, edits) {\n if (isNonEmptyArray(edits)) {\n if (!canSyncModel(this._modelService, resource)) {\n return Promise.resolve(edits); // File too large\n }\n const sw = StopWatch.create(true);\n const result = this._workerManager.withWorker().then(client => client.computeMoreMinimalEdits(resource, edits));\n result.finally(() => this._logService.trace('FORMAT#computeMoreMinimalEdits', resource.toString(true), sw.elapsed()));\n return Promise.race([result, timeout(1000).then(() => edits)]);\n }\n else {\n return Promise.resolve(undefined);\n }\n }\n canNavigateValueSet(resource) {\n return (canSyncModel(this._modelService, resource));\n }\n navigateValueSet(resource, range, up) {\n return this._workerManager.withWorker().then(client => client.navigateValueSet(resource, range, up));\n }\n canComputeWordRanges(resource) {\n return canSyncModel(this._modelService, resource);\n }\n computeWordRanges(resource, range) {\n return this._workerManager.withWorker().then(client => client.computeWordRanges(resource, range));\n }\n};\nEditorWorkerServiceImpl = __decorate([\n __param(0, IModelService),\n __param(1, ITextResourceConfigurationService),\n __param(2, ILogService)\n], EditorWorkerServiceImpl);\nexport { EditorWorkerServiceImpl };\nclass WordBasedCompletionItemProvider {\n constructor(workerManager, configurationService, modelService) {\n this._debugDisplayName = 'wordbasedCompletions';\n this._workerManager = workerManager;\n this._configurationService = configurationService;\n this._modelService = modelService;\n }\n provideCompletionItems(model, position) {\n return __awaiter(this, void 0, void 0, function* () {\n const config = this._configurationService.getValue(model.uri, position, 'editor');\n if (!config.wordBasedSuggestions) {\n return undefined;\n }\n const models = [];\n if (config.wordBasedSuggestionsMode === 'currentDocument') {\n // only current file and only if not too large\n if (canSyncModel(this._modelService, model.uri)) {\n models.push(model.uri);\n }\n }\n else {\n // either all files or files of same language\n for (const candidate of this._modelService.getModels()) {\n if (!canSyncModel(this._modelService, candidate.uri)) {\n continue;\n }\n if (candidate === model) {\n models.unshift(candidate.uri);\n }\n else if (config.wordBasedSuggestionsMode === 'allDocuments' || candidate.getLanguageIdentifier().id === model.getLanguageIdentifier().id) {\n models.push(candidate.uri);\n }\n }\n }\n if (models.length === 0) {\n return undefined; // File too large, no other files\n }\n const wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageIdentifier().id);\n const word = model.getWordAtPosition(position);\n const replace = !word ? Range.fromPositions(position) : new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);\n const insert = replace.setEndPosition(position.lineNumber, position.column);\n const client = yield this._workerManager.withWorker();\n const data = yield client.textualSuggest(models, word === null || word === void 0 ? void 0 : word.word, wordDefRegExp);\n if (!data) {\n return undefined;\n }\n return {\n duration: data.duration,\n suggestions: data.words.map((word) => {\n return {\n kind: 18 /* Text */,\n label: word,\n insertText: word,\n range: { insert, replace }\n };\n }),\n };\n });\n }\n}\nclass WorkerManager extends Disposable {\n constructor(modelService) {\n super();\n this._modelService = modelService;\n this._editorWorkerClient = null;\n this._lastWorkerUsedTime = (new Date()).getTime();\n let stopWorkerInterval = this._register(new IntervalTimer());\n stopWorkerInterval.cancelAndSet(() => this._checkStopIdleWorker(), Math.round(STOP_WORKER_DELTA_TIME_MS / 2));\n this._register(this._modelService.onModelRemoved(_ => this._checkStopEmptyWorker()));\n }\n dispose() {\n if (this._editorWorkerClient) {\n this._editorWorkerClient.dispose();\n this._editorWorkerClient = null;\n }\n super.dispose();\n }\n /**\n * Check if the model service has no more models and stop the worker if that is the case.\n */\n _checkStopEmptyWorker() {\n if (!this._editorWorkerClient) {\n return;\n }\n let models = this._modelService.getModels();\n if (models.length === 0) {\n // There are no more models => nothing possible for me to do\n this._editorWorkerClient.dispose();\n this._editorWorkerClient = null;\n }\n }\n /**\n * Check if the worker has been idle for a while and then stop it.\n */\n _checkStopIdleWorker() {\n if (!this._editorWorkerClient) {\n return;\n }\n let timeSinceLastWorkerUsedTime = (new Date()).getTime() - this._lastWorkerUsedTime;\n if (timeSinceLastWorkerUsedTime > STOP_WORKER_DELTA_TIME_MS) {\n this._editorWorkerClient.dispose();\n this._editorWorkerClient = null;\n }\n }\n withWorker() {\n this._lastWorkerUsedTime = (new Date()).getTime();\n if (!this._editorWorkerClient) {\n this._editorWorkerClient = new EditorWorkerClient(this._modelService, false, 'editorWorkerService');\n }\n return Promise.resolve(this._editorWorkerClient);\n }\n}\nclass EditorModelManager extends Disposable {\n constructor(proxy, modelService, keepIdleModels) {\n super();\n this._syncedModels = Object.create(null);\n this._syncedModelsLastUsedTime = Object.create(null);\n this._proxy = proxy;\n this._modelService = modelService;\n if (!keepIdleModels) {\n let timer = new IntervalTimer();\n timer.cancelAndSet(() => this._checkStopModelSync(), Math.round(STOP_SYNC_MODEL_DELTA_TIME_MS / 2));\n this._register(timer);\n }\n }\n dispose() {\n for (let modelUrl in this._syncedModels) {\n dispose(this._syncedModels[modelUrl]);\n }\n this._syncedModels = Object.create(null);\n this._syncedModelsLastUsedTime = Object.create(null);\n super.dispose();\n }\n ensureSyncedResources(resources) {\n for (const resource of resources) {\n let resourceStr = resource.toString();\n if (!this._syncedModels[resourceStr]) {\n this._beginModelSync(resource);\n }\n if (this._syncedModels[resourceStr]) {\n this._syncedModelsLastUsedTime[resourceStr] = (new Date()).getTime();\n }\n }\n }\n _checkStopModelSync() {\n let currentTime = (new Date()).getTime();\n let toRemove = [];\n for (let modelUrl in this._syncedModelsLastUsedTime) {\n let elapsedTime = currentTime - this._syncedModelsLastUsedTime[modelUrl];\n if (elapsedTime > STOP_SYNC_MODEL_DELTA_TIME_MS) {\n toRemove.push(modelUrl);\n }\n }\n for (const e of toRemove) {\n this._stopModelSync(e);\n }\n }\n _beginModelSync(resource) {\n let model = this._modelService.getModel(resource);\n if (!model) {\n return;\n }\n if (model.isTooLargeForSyncing()) {\n return;\n }\n let modelUrl = resource.toString();\n this._proxy.acceptNewModel({\n url: model.uri.toString(),\n lines: model.getLinesContent(),\n EOL: model.getEOL(),\n versionId: model.getVersionId()\n });\n const toDispose = new DisposableStore();\n toDispose.add(model.onDidChangeContent((e) => {\n this._proxy.acceptModelChanged(modelUrl.toString(), e);\n }));\n toDispose.add(model.onWillDispose(() => {\n this._stopModelSync(modelUrl);\n }));\n toDispose.add(toDisposable(() => {\n this._proxy.acceptRemovedModel(modelUrl);\n }));\n this._syncedModels[modelUrl] = toDispose;\n }\n _stopModelSync(modelUrl) {\n let toDispose = this._syncedModels[modelUrl];\n delete this._syncedModels[modelUrl];\n delete this._syncedModelsLastUsedTime[modelUrl];\n dispose(toDispose);\n }\n}\nclass SynchronousWorkerClient {\n constructor(instance) {\n this._instance = instance;\n this._proxyObj = Promise.resolve(this._instance);\n }\n dispose() {\n this._instance.dispose();\n }\n getProxyObject() {\n return this._proxyObj;\n }\n}\nexport class EditorWorkerHost {\n constructor(workerClient) {\n this._workerClient = workerClient;\n }\n // foreign host request\n fhr(method, args) {\n return this._workerClient.fhr(method, args);\n }\n}\nexport class EditorWorkerClient extends Disposable {\n constructor(modelService, keepIdleModels, label) {\n super();\n this._disposed = false;\n this._modelService = modelService;\n this._keepIdleModels = keepIdleModels;\n this._workerFactory = new DefaultWorkerFactory(label);\n this._worker = null;\n this._modelManager = null;\n }\n // foreign host request\n fhr(method, args) {\n throw new Error(`Not implemented!`);\n }\n _getOrCreateWorker() {\n if (!this._worker) {\n try {\n this._worker = this._register(new SimpleWorkerClient(this._workerFactory, 'vs/editor/common/services/editorSimpleWorker', new EditorWorkerHost(this)));\n }\n catch (err) {\n logOnceWebWorkerWarning(err);\n this._worker = new SynchronousWorkerClient(new EditorSimpleWorker(new EditorWorkerHost(this), null));\n }\n }\n return this._worker;\n }\n _getProxy() {\n return this._getOrCreateWorker().getProxyObject().then(undefined, (err) => {\n logOnceWebWorkerWarning(err);\n this._worker = new SynchronousWorkerClient(new EditorSimpleWorker(new EditorWorkerHost(this), null));\n return this._getOrCreateWorker().getProxyObject();\n });\n }\n _getOrCreateModelManager(proxy) {\n if (!this._modelManager) {\n this._modelManager = this._register(new EditorModelManager(proxy, this._modelService, this._keepIdleModels));\n }\n return this._modelManager;\n }\n _withSyncedResources(resources) {\n if (this._disposed) {\n return Promise.reject(canceled());\n }\n return this._getProxy().then((proxy) => {\n this._getOrCreateModelManager(proxy).ensureSyncedResources(resources);\n return proxy;\n });\n }\n computeDiff(original, modified, ignoreTrimWhitespace, maxComputationTime) {\n return this._withSyncedResources([original, modified]).then(proxy => {\n return proxy.computeDiff(original.toString(), modified.toString(), ignoreTrimWhitespace, maxComputationTime);\n });\n }\n computeMoreMinimalEdits(resource, edits) {\n return this._withSyncedResources([resource]).then(proxy => {\n return proxy.computeMoreMinimalEdits(resource.toString(), edits);\n });\n }\n computeLinks(resource) {\n return this._withSyncedResources([resource]).then(proxy => {\n return proxy.computeLinks(resource.toString());\n });\n }\n textualSuggest(resources, leadingWord, wordDefRegExp) {\n return __awaiter(this, void 0, void 0, function* () {\n const proxy = yield this._withSyncedResources(resources);\n const wordDef = wordDefRegExp.source;\n const wordDefFlags = regExpFlags(wordDefRegExp);\n return proxy.textualSuggest(resources.map(r => r.toString()), leadingWord, wordDef, wordDefFlags);\n });\n }\n computeWordRanges(resource, range) {\n return this._withSyncedResources([resource]).then(proxy => {\n let model = this._modelService.getModel(resource);\n if (!model) {\n return Promise.resolve(null);\n }\n let wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageIdentifier().id);\n let wordDef = wordDefRegExp.source;\n let wordDefFlags = regExpFlags(wordDefRegExp);\n return proxy.computeWordRanges(resource.toString(), range, wordDef, wordDefFlags);\n });\n }\n navigateValueSet(resource, range, up) {\n return this._withSyncedResources([resource]).then(proxy => {\n let model = this._modelService.getModel(resource);\n if (!model) {\n return null;\n }\n let wordDefRegExp = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageIdentifier().id);\n let wordDef = wordDefRegExp.source;\n let wordDefFlags = regExpFlags(wordDefRegExp);\n return proxy.navigateValueSet(resource.toString(), range, up, wordDef, wordDefFlags);\n });\n }\n dispose() {\n super.dispose();\n this._disposed = true;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { EditorWorkerClient } from './editorWorkerServiceImpl.js';\nimport * as types from '../../../base/common/types.js';\n/**\n * Create a new web worker that has model syncing capabilities built in.\n * Specify an AMD module to load that will `create` an object that will be proxied.\n */\nexport function createWebWorker(modelService, opts) {\n return new MonacoWebWorkerImpl(modelService, opts);\n}\nclass MonacoWebWorkerImpl extends EditorWorkerClient {\n constructor(modelService, opts) {\n super(modelService, opts.keepIdleModels || false, opts.label);\n this._foreignModuleId = opts.moduleId;\n this._foreignModuleCreateData = opts.createData || null;\n this._foreignModuleHost = opts.host || null;\n this._foreignProxy = null;\n }\n // foreign host request\n fhr(method, args) {\n if (!this._foreignModuleHost || typeof this._foreignModuleHost[method] !== 'function') {\n return Promise.reject(new Error('Missing method ' + method + ' or missing main thread foreign host.'));\n }\n try {\n return Promise.resolve(this._foreignModuleHost[method].apply(this._foreignModuleHost, args));\n }\n catch (e) {\n return Promise.reject(e);\n }\n }\n _getForeignProxy() {\n if (!this._foreignProxy) {\n this._foreignProxy = this._getProxy().then((proxy) => {\n const foreignHostMethods = this._foreignModuleHost ? types.getAllMethodNames(this._foreignModuleHost) : [];\n return proxy.loadForeignModule(this._foreignModuleId, this._foreignModuleCreateData, foreignHostMethods).then((foreignMethods) => {\n this._foreignModuleCreateData = null;\n const proxyMethodRequest = (method, args) => {\n return proxy.fmr(method, args);\n };\n const createProxyMethod = (method, proxyMethodRequest) => {\n return function () {\n const args = Array.prototype.slice.call(arguments, 0);\n return proxyMethodRequest(method, args);\n };\n };\n let foreignProxy = {};\n for (const foreignMethod of foreignMethods) {\n foreignProxy[foreignMethod] = createProxyMethod(foreignMethod, proxyMethodRequest);\n }\n return foreignProxy;\n });\n });\n }\n return this._foreignProxy;\n }\n getProxy() {\n return this._getForeignProxy();\n }\n withSyncedResources(resources) {\n return this._withSyncedResources(resources).then(_ => this.getProxy());\n }\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 *--------------------------------------------------------------------------------------------*/\nexport function isFuzzyActionArr(what) {\n return (Array.isArray(what));\n}\nexport function isFuzzyAction(what) {\n return !isFuzzyActionArr(what);\n}\nexport function isString(what) {\n return (typeof what === 'string');\n}\nexport function isIAction(what) {\n return !isString(what);\n}\n// Small helper functions\n/**\n * Is a string null, undefined, or empty?\n */\nexport function empty(s) {\n return (s ? false : true);\n}\n/**\n * Puts a string to lower case if 'ignoreCase' is set.\n */\nexport function fixCase(lexer, str) {\n return (lexer.ignoreCase && str ? str.toLowerCase() : str);\n}\n/**\n * Ensures there are no bad characters in a CSS token class.\n */\nexport function sanitize(s) {\n return s.replace(/[&<>'\"_]/g, '-'); // used on all output token CSS classes\n}\n// Logging\n/**\n * Logs a message.\n */\nexport function log(lexer, msg) {\n console.log(`${lexer.languageId}: ${msg}`);\n}\n// Throwing errors\nexport function createError(lexer, msg) {\n return new Error(`${lexer.languageId}: ${msg}`);\n}\n// Helper functions for rule finding and substitution\n/**\n * substituteMatches is used on lexer strings and can substitutes predefined patterns:\n * \t\t$$ => $\n * \t\t$# => id\n * \t\t$n => matched entry n\n * \t\t@attr => contents of lexer[attr]\n *\n * See documentation for more info\n */\nexport function substituteMatches(lexer, str, id, matches, state) {\n const re = /\\$((\\$)|(#)|(\\d\\d?)|[sS](\\d\\d?)|@(\\w+))/g;\n let stateMatches = null;\n return str.replace(re, function (full, sub, dollar, hash, n, s, attr, ofs, total) {\n if (!empty(dollar)) {\n return '$'; // $$\n }\n if (!empty(hash)) {\n return fixCase(lexer, id); // default $#\n }\n if (!empty(n) && n < matches.length) {\n return fixCase(lexer, matches[n]); // $n\n }\n if (!empty(attr) && lexer && typeof (lexer[attr]) === 'string') {\n return lexer[attr]; //@attribute\n }\n if (stateMatches === null) { // split state on demand\n stateMatches = state.split('.');\n stateMatches.unshift(state);\n }\n if (!empty(s) && s < stateMatches.length) {\n return fixCase(lexer, stateMatches[s]); //$Sn\n }\n return '';\n });\n}\n/**\n * Find the tokenizer rules for a specific state (i.e. next action)\n */\nexport function findRules(lexer, inState) {\n let state = inState;\n while (state && state.length > 0) {\n const rules = lexer.tokenizer[state];\n if (rules) {\n return rules;\n }\n const idx = state.lastIndexOf('.');\n if (idx < 0) {\n state = null; // no further parent\n }\n else {\n state = state.substr(0, idx);\n }\n }\n return null;\n}\n/**\n * Is a certain state defined? In contrast to 'findRules' this works on a ILexerMin.\n * This is used during compilation where we may know the defined states\n * but not yet whether the corresponding rules are correct.\n */\nexport function stateExists(lexer, inState) {\n let state = inState;\n while (state && state.length > 0) {\n const exist = lexer.stateNames[state];\n if (exist) {\n return true;\n }\n const idx = state.lastIndexOf('.');\n if (idx < 0) {\n state = null; // no further parent\n }\n else {\n state = state.substr(0, idx);\n }\n }\n return false;\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 *--------------------------------------------------------------------------------------------*/\nimport { Token, TokenizationResult, TokenizationResult2 } from '../../../common/core/token.js';\nimport * as modes from '../../../common/modes.js';\nimport { NULL_MODE_ID, NULL_STATE } from '../../../common/modes/nullMode.js';\nimport * as monarchCommon from './monarchCommon.js';\nconst CACHE_STACK_DEPTH = 5;\n/**\n * Reuse the same stack elements up to a certain depth.\n */\nclass MonarchStackElementFactory {\n constructor(maxCacheDepth) {\n this._maxCacheDepth = maxCacheDepth;\n this._entries = Object.create(null);\n }\n static create(parent, state) {\n return this._INSTANCE.create(parent, state);\n }\n create(parent, state) {\n if (parent !== null && parent.depth >= this._maxCacheDepth) {\n // no caching above a certain depth\n return new MonarchStackElement(parent, state);\n }\n let stackElementId = MonarchStackElement.getStackElementId(parent);\n if (stackElementId.length > 0) {\n stackElementId += '|';\n }\n stackElementId += state;\n let result = this._entries[stackElementId];\n if (result) {\n return result;\n }\n result = new MonarchStackElement(parent, state);\n this._entries[stackElementId] = result;\n return result;\n }\n}\nMonarchStackElementFactory._INSTANCE = new MonarchStackElementFactory(CACHE_STACK_DEPTH);\nclass MonarchStackElement {\n constructor(parent, state) {\n this.parent = parent;\n this.state = state;\n this.depth = (this.parent ? this.parent.depth : 0) + 1;\n }\n static getStackElementId(element) {\n let result = '';\n while (element !== null) {\n if (result.length > 0) {\n result += '|';\n }\n result += element.state;\n element = element.parent;\n }\n return result;\n }\n static _equals(a, b) {\n while (a !== null && b !== null) {\n if (a === b) {\n return true;\n }\n if (a.state !== b.state) {\n return false;\n }\n a = a.parent;\n b = b.parent;\n }\n if (a === null && b === null) {\n return true;\n }\n return false;\n }\n equals(other) {\n return MonarchStackElement._equals(this, other);\n }\n push(state) {\n return MonarchStackElementFactory.create(this, state);\n }\n pop() {\n return this.parent;\n }\n popall() {\n let result = this;\n while (result.parent) {\n result = result.parent;\n }\n return result;\n }\n switchTo(state) {\n return MonarchStackElementFactory.create(this.parent, state);\n }\n}\nclass EmbeddedModeData {\n constructor(modeId, state) {\n this.modeId = modeId;\n this.state = state;\n }\n equals(other) {\n return (this.modeId === other.modeId\n && this.state.equals(other.state));\n }\n clone() {\n let stateClone = this.state.clone();\n // save an object\n if (stateClone === this.state) {\n return this;\n }\n return new EmbeddedModeData(this.modeId, this.state);\n }\n}\n/**\n * Reuse the same line states up to a certain depth.\n */\nclass MonarchLineStateFactory {\n constructor(maxCacheDepth) {\n this._maxCacheDepth = maxCacheDepth;\n this._entries = Object.create(null);\n }\n static create(stack, embeddedModeData) {\n return this._INSTANCE.create(stack, embeddedModeData);\n }\n create(stack, embeddedModeData) {\n if (embeddedModeData !== null) {\n // no caching when embedding\n return new MonarchLineState(stack, embeddedModeData);\n }\n if (stack !== null && stack.depth >= this._maxCacheDepth) {\n // no caching above a certain depth\n return new MonarchLineState(stack, embeddedModeData);\n }\n let stackElementId = MonarchStackElement.getStackElementId(stack);\n let result = this._entries[stackElementId];\n if (result) {\n return result;\n }\n result = new MonarchLineState(stack, null);\n this._entries[stackElementId] = result;\n return result;\n }\n}\nMonarchLineStateFactory._INSTANCE = new MonarchLineStateFactory(CACHE_STACK_DEPTH);\nclass MonarchLineState {\n constructor(stack, embeddedModeData) {\n this.stack = stack;\n this.embeddedModeData = embeddedModeData;\n }\n clone() {\n let embeddedModeDataClone = this.embeddedModeData ? this.embeddedModeData.clone() : null;\n // save an object\n if (embeddedModeDataClone === this.embeddedModeData) {\n return this;\n }\n return MonarchLineStateFactory.create(this.stack, this.embeddedModeData);\n }\n equals(other) {\n if (!(other instanceof MonarchLineState)) {\n return false;\n }\n if (!this.stack.equals(other.stack)) {\n return false;\n }\n if (this.embeddedModeData === null && other.embeddedModeData === null) {\n return true;\n }\n if (this.embeddedModeData === null || other.embeddedModeData === null) {\n return false;\n }\n return this.embeddedModeData.equals(other.embeddedModeData);\n }\n}\nclass MonarchClassicTokensCollector {\n constructor() {\n this._tokens = [];\n this._language = null;\n this._lastTokenType = null;\n this._lastTokenLanguage = null;\n }\n enterMode(startOffset, modeId) {\n this._language = modeId;\n }\n emit(startOffset, type) {\n if (this._lastTokenType === type && this._lastTokenLanguage === this._language) {\n return;\n }\n this._lastTokenType = type;\n this._lastTokenLanguage = this._language;\n this._tokens.push(new Token(startOffset, type, this._language));\n }\n nestedModeTokenize(embeddedModeLine, hasEOL, embeddedModeData, offsetDelta) {\n const nestedModeId = embeddedModeData.modeId;\n const embeddedModeState = embeddedModeData.state;\n const nestedModeTokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\n if (!nestedModeTokenizationSupport) {\n this.enterMode(offsetDelta, nestedModeId);\n this.emit(offsetDelta, '');\n return embeddedModeState;\n }\n let nestedResult = nestedModeTokenizationSupport.tokenize(embeddedModeLine, hasEOL, embeddedModeState, offsetDelta);\n this._tokens = this._tokens.concat(nestedResult.tokens);\n this._lastTokenType = null;\n this._lastTokenLanguage = null;\n this._language = null;\n return nestedResult.endState;\n }\n finalize(endState) {\n return new TokenizationResult(this._tokens, endState);\n }\n}\nclass MonarchModernTokensCollector {\n constructor(modeService, theme) {\n this._modeService = modeService;\n this._theme = theme;\n this._prependTokens = null;\n this._tokens = [];\n this._currentLanguageId = 0 /* Null */;\n this._lastTokenMetadata = 0;\n }\n enterMode(startOffset, modeId) {\n this._currentLanguageId = this._modeService.getLanguageIdentifier(modeId).id;\n }\n emit(startOffset, type) {\n let metadata = this._theme.match(this._currentLanguageId, type);\n if (this._lastTokenMetadata === metadata) {\n return;\n }\n this._lastTokenMetadata = metadata;\n this._tokens.push(startOffset);\n this._tokens.push(metadata);\n }\n static _merge(a, b, c) {\n let aLen = (a !== null ? a.length : 0);\n let bLen = b.length;\n let cLen = (c !== null ? c.length : 0);\n if (aLen === 0 && bLen === 0 && cLen === 0) {\n return new Uint32Array(0);\n }\n if (aLen === 0 && bLen === 0) {\n return c;\n }\n if (bLen === 0 && cLen === 0) {\n return a;\n }\n let result = new Uint32Array(aLen + bLen + cLen);\n if (a !== null) {\n result.set(a);\n }\n for (let i = 0; i < bLen; i++) {\n result[aLen + i] = b[i];\n }\n if (c !== null) {\n result.set(c, aLen + bLen);\n }\n return result;\n }\n nestedModeTokenize(embeddedModeLine, hasEOL, embeddedModeData, offsetDelta) {\n const nestedModeId = embeddedModeData.modeId;\n const embeddedModeState = embeddedModeData.state;\n const nestedModeTokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\n if (!nestedModeTokenizationSupport) {\n this.enterMode(offsetDelta, nestedModeId);\n this.emit(offsetDelta, '');\n return embeddedModeState;\n }\n let nestedResult = nestedModeTokenizationSupport.tokenize2(embeddedModeLine, hasEOL, embeddedModeState, offsetDelta);\n this._prependTokens = MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, nestedResult.tokens);\n this._tokens = [];\n this._currentLanguageId = 0;\n this._lastTokenMetadata = 0;\n return nestedResult.endState;\n }\n finalize(endState) {\n return new TokenizationResult2(MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, null), endState);\n }\n}\nexport class MonarchTokenizer {\n constructor(modeService, standaloneThemeService, modeId, lexer) {\n this._modeService = modeService;\n this._standaloneThemeService = standaloneThemeService;\n this._modeId = modeId;\n this._lexer = lexer;\n this._embeddedModes = Object.create(null);\n this.embeddedLoaded = Promise.resolve(undefined);\n // Set up listening for embedded modes\n let emitting = false;\n this._tokenizationRegistryListener = modes.TokenizationRegistry.onDidChange((e) => {\n if (emitting) {\n return;\n }\n let isOneOfMyEmbeddedModes = false;\n for (let i = 0, len = e.changedLanguages.length; i < len; i++) {\n let language = e.changedLanguages[i];\n if (this._embeddedModes[language]) {\n isOneOfMyEmbeddedModes = true;\n break;\n }\n }\n if (isOneOfMyEmbeddedModes) {\n emitting = true;\n modes.TokenizationRegistry.fire([this._modeId]);\n emitting = false;\n }\n });\n }\n dispose() {\n this._tokenizationRegistryListener.dispose();\n }\n getLoadStatus() {\n let promises = [];\n for (let nestedModeId in this._embeddedModes) {\n const tokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\n if (tokenizationSupport) {\n // The nested mode is already loaded\n if (tokenizationSupport instanceof MonarchTokenizer) {\n const nestedModeStatus = tokenizationSupport.getLoadStatus();\n if (nestedModeStatus.loaded === false) {\n promises.push(nestedModeStatus.promise);\n }\n }\n continue;\n }\n const tokenizationSupportPromise = modes.TokenizationRegistry.getPromise(nestedModeId);\n if (tokenizationSupportPromise) {\n // The nested mode is in the process of being loaded\n promises.push(tokenizationSupportPromise);\n }\n }\n if (promises.length === 0) {\n return {\n loaded: true\n };\n }\n return {\n loaded: false,\n promise: Promise.all(promises).then(_ => undefined)\n };\n }\n getInitialState() {\n let rootState = MonarchStackElementFactory.create(null, this._lexer.start);\n return MonarchLineStateFactory.create(rootState, null);\n }\n tokenize(line, hasEOL, lineState, offsetDelta) {\n let tokensCollector = new MonarchClassicTokensCollector();\n let endLineState = this._tokenize(line, hasEOL, lineState, offsetDelta, tokensCollector);\n return tokensCollector.finalize(endLineState);\n }\n tokenize2(line, hasEOL, lineState, offsetDelta) {\n let tokensCollector = new MonarchModernTokensCollector(this._modeService, this._standaloneThemeService.getColorTheme().tokenTheme);\n let endLineState = this._tokenize(line, hasEOL, lineState, offsetDelta, tokensCollector);\n return tokensCollector.finalize(endLineState);\n }\n _tokenize(line, hasEOL, lineState, offsetDelta, collector) {\n if (lineState.embeddedModeData) {\n return this._nestedTokenize(line, hasEOL, lineState, offsetDelta, collector);\n }\n else {\n return this._myTokenize(line, hasEOL, lineState, offsetDelta, collector);\n }\n }\n _findLeavingNestedModeOffset(line, state) {\n let rules = this._lexer.tokenizer[state.stack.state];\n if (!rules) {\n rules = monarchCommon.findRules(this._lexer, state.stack.state); // do parent matching\n if (!rules) {\n throw monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state.stack.state);\n }\n }\n let popOffset = -1;\n let hasEmbeddedPopRule = false;\n for (const rule of rules) {\n if (!monarchCommon.isIAction(rule.action) || rule.action.nextEmbedded !== '@pop') {\n continue;\n }\n hasEmbeddedPopRule = true;\n let regex = rule.regex;\n let regexSource = rule.regex.source;\n if (regexSource.substr(0, 4) === '^(?:' && regexSource.substr(regexSource.length - 1, 1) === ')') {\n let flags = (regex.ignoreCase ? 'i' : '') + (regex.unicode ? 'u' : '');\n regex = new RegExp(regexSource.substr(4, regexSource.length - 5), flags);\n }\n let result = line.search(regex);\n if (result === -1 || (result !== 0 && rule.matchOnlyAtLineStart)) {\n continue;\n }\n if (popOffset === -1 || result < popOffset) {\n popOffset = result;\n }\n }\n if (!hasEmbeddedPopRule) {\n throw monarchCommon.createError(this._lexer, 'no rule containing nextEmbedded: \"@pop\" in tokenizer embedded state: ' + state.stack.state);\n }\n return popOffset;\n }\n _nestedTokenize(line, hasEOL, lineState, offsetDelta, tokensCollector) {\n let popOffset = this._findLeavingNestedModeOffset(line, lineState);\n if (popOffset === -1) {\n // tokenization will not leave nested mode\n let nestedEndState = tokensCollector.nestedModeTokenize(line, hasEOL, lineState.embeddedModeData, offsetDelta);\n return MonarchLineStateFactory.create(lineState.stack, new EmbeddedModeData(lineState.embeddedModeData.modeId, nestedEndState));\n }\n let nestedModeLine = line.substring(0, popOffset);\n if (nestedModeLine.length > 0) {\n // tokenize with the nested mode\n tokensCollector.nestedModeTokenize(nestedModeLine, false, lineState.embeddedModeData, offsetDelta);\n }\n let restOfTheLine = line.substring(popOffset);\n return this._myTokenize(restOfTheLine, hasEOL, lineState, offsetDelta + popOffset, tokensCollector);\n }\n _safeRuleName(rule) {\n if (rule) {\n return rule.name;\n }\n return '(unknown)';\n }\n _myTokenize(lineWithoutLF, hasEOL, lineState, offsetDelta, tokensCollector) {\n tokensCollector.enterMode(offsetDelta, this._modeId);\n const lineWithoutLFLength = lineWithoutLF.length;\n const line = (hasEOL && this._lexer.includeLF ? lineWithoutLF + '\\n' : lineWithoutLF);\n const lineLength = line.length;\n let embeddedModeData = lineState.embeddedModeData;\n let stack = lineState.stack;\n let pos = 0;\n let groupMatching = null;\n // See https://github.com/microsoft/monaco-editor/issues/1235\n // Evaluate rules at least once for an empty line\n let forceEvaluation = true;\n while (forceEvaluation || pos < lineLength) {\n const pos0 = pos;\n const stackLen0 = stack.depth;\n const groupLen0 = groupMatching ? groupMatching.groups.length : 0;\n const state = stack.state;\n let matches = null;\n let matched = null;\n let action = null;\n let rule = null;\n let enteringEmbeddedMode = null;\n // check if we need to process group matches first\n if (groupMatching) {\n matches = groupMatching.matches;\n const groupEntry = groupMatching.groups.shift();\n matched = groupEntry.matched;\n action = groupEntry.action;\n rule = groupMatching.rule;\n // cleanup if necessary\n if (groupMatching.groups.length === 0) {\n groupMatching = null;\n }\n }\n else {\n // otherwise we match on the token stream\n if (!forceEvaluation && pos >= lineLength) {\n // nothing to do\n break;\n }\n forceEvaluation = false;\n // get the rules for this state\n let rules = this._lexer.tokenizer[state];\n if (!rules) {\n rules = monarchCommon.findRules(this._lexer, state); // do parent matching\n if (!rules) {\n throw monarchCommon.createError(this._lexer, 'tokenizer state is not defined: ' + state);\n }\n }\n // try each rule until we match\n let restOfLine = line.substr(pos);\n for (const rule of rules) {\n if (pos === 0 || !rule.matchOnlyAtLineStart) {\n matches = restOfLine.match(rule.regex);\n if (matches) {\n matched = matches[0];\n action = rule.action;\n break;\n }\n }\n }\n }\n // We matched 'rule' with 'matches' and 'action'\n if (!matches) {\n matches = [''];\n matched = '';\n }\n if (!action) {\n // bad: we didn't match anything, and there is no action to take\n // we need to advance the stream or we get progress trouble\n if (pos < lineLength) {\n matches = [line.charAt(pos)];\n matched = matches[0];\n }\n action = this._lexer.defaultToken;\n }\n if (matched === null) {\n // should never happen, needed for strict null checking\n break;\n }\n // advance stream\n pos += matched.length;\n // maybe call action function (used for 'cases')\n while (monarchCommon.isFuzzyAction(action) && monarchCommon.isIAction(action) && action.test) {\n action = action.test(matched, matches, state, pos === lineLength);\n }\n let result = null;\n // set the result: either a string or an array of actions\n if (typeof action === 'string' || Array.isArray(action)) {\n result = action;\n }\n else if (action.group) {\n result = action.group;\n }\n else if (action.token !== null && action.token !== undefined) {\n // do $n replacements?\n if (action.tokenSubst) {\n result = monarchCommon.substituteMatches(this._lexer, action.token, matched, matches, state);\n }\n else {\n result = action.token;\n }\n // enter embedded mode?\n if (action.nextEmbedded) {\n if (action.nextEmbedded === '@pop') {\n if (!embeddedModeData) {\n throw monarchCommon.createError(this._lexer, 'cannot pop embedded mode if not inside one');\n }\n embeddedModeData = null;\n }\n else if (embeddedModeData) {\n throw monarchCommon.createError(this._lexer, 'cannot enter embedded mode from within an embedded mode');\n }\n else {\n enteringEmbeddedMode = monarchCommon.substituteMatches(this._lexer, action.nextEmbedded, matched, matches, state);\n }\n }\n // state transformations\n if (action.goBack) { // back up the stream..\n pos = Math.max(0, pos - action.goBack);\n }\n if (action.switchTo && typeof action.switchTo === 'string') {\n let nextState = monarchCommon.substituteMatches(this._lexer, action.switchTo, matched, matches, state); // switch state without a push...\n if (nextState[0] === '@') {\n nextState = nextState.substr(1); // peel off starting '@'\n }\n if (!monarchCommon.findRules(this._lexer, nextState)) {\n throw monarchCommon.createError(this._lexer, 'trying to switch to a state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n }\n else {\n stack = stack.switchTo(nextState);\n }\n }\n else if (action.transform && typeof action.transform === 'function') {\n throw monarchCommon.createError(this._lexer, 'action.transform not supported');\n }\n else if (action.next) {\n if (action.next === '@push') {\n if (stack.depth >= this._lexer.maxStack) {\n throw monarchCommon.createError(this._lexer, 'maximum tokenizer stack size reached: [' +\n stack.state + ',' + stack.parent.state + ',...]');\n }\n else {\n stack = stack.push(state);\n }\n }\n else if (action.next === '@pop') {\n if (stack.depth <= 1) {\n throw monarchCommon.createError(this._lexer, 'trying to pop an empty stack in rule: ' + this._safeRuleName(rule));\n }\n else {\n stack = stack.pop();\n }\n }\n else if (action.next === '@popall') {\n stack = stack.popall();\n }\n else {\n let nextState = monarchCommon.substituteMatches(this._lexer, action.next, matched, matches, state);\n if (nextState[0] === '@') {\n nextState = nextState.substr(1); // peel off starting '@'\n }\n if (!monarchCommon.findRules(this._lexer, nextState)) {\n throw monarchCommon.createError(this._lexer, 'trying to set a next state \\'' + nextState + '\\' that is undefined in rule: ' + this._safeRuleName(rule));\n }\n else {\n stack = stack.push(nextState);\n }\n }\n }\n if (action.log && typeof (action.log) === 'string') {\n monarchCommon.log(this._lexer, this._lexer.languageId + ': ' + monarchCommon.substituteMatches(this._lexer, action.log, matched, matches, state));\n }\n }\n // check result\n if (result === null) {\n throw monarchCommon.createError(this._lexer, 'lexer rule has no well-defined action in rule: ' + this._safeRuleName(rule));\n }\n const computeNewStateForEmbeddedMode = (enteringEmbeddedMode) => {\n // substitute language alias to known modes to support syntax highlighting\n let enteringEmbeddedModeId = this._modeService.getModeIdForLanguageName(enteringEmbeddedMode);\n if (enteringEmbeddedModeId) {\n enteringEmbeddedMode = enteringEmbeddedModeId;\n }\n const embeddedModeData = this._getNestedEmbeddedModeData(enteringEmbeddedMode);\n if (pos < lineLength) {\n // there is content from the embedded mode on this line\n const restOfLine = lineWithoutLF.substr(pos);\n return this._nestedTokenize(restOfLine, hasEOL, MonarchLineStateFactory.create(stack, embeddedModeData), offsetDelta + pos, tokensCollector);\n }\n else {\n return MonarchLineStateFactory.create(stack, embeddedModeData);\n }\n };\n // is the result a group match?\n if (Array.isArray(result)) {\n if (groupMatching && groupMatching.groups.length > 0) {\n throw monarchCommon.createError(this._lexer, 'groups cannot be nested: ' + this._safeRuleName(rule));\n }\n if (matches.length !== result.length + 1) {\n throw monarchCommon.createError(this._lexer, 'matched number of groups does not match the number of actions in rule: ' + this._safeRuleName(rule));\n }\n let totalLen = 0;\n for (let i = 1; i < matches.length; i++) {\n totalLen += matches[i].length;\n }\n if (totalLen !== matched.length) {\n throw monarchCommon.createError(this._lexer, 'with groups, all characters should be matched in consecutive groups in rule: ' + this._safeRuleName(rule));\n }\n groupMatching = {\n rule: rule,\n matches: matches,\n groups: []\n };\n for (let i = 0; i < result.length; i++) {\n groupMatching.groups[i] = {\n action: result[i],\n matched: matches[i + 1]\n };\n }\n pos -= matched.length;\n // call recursively to initiate first result match\n continue;\n }\n else {\n // regular result\n // check for '@rematch'\n if (result === '@rematch') {\n pos -= matched.length;\n matched = ''; // better set the next state too..\n matches = null;\n result = '';\n // Even though `@rematch` was specified, if `nextEmbedded` also specified,\n // a state transition should occur.\n if (enteringEmbeddedMode !== null) {\n return computeNewStateForEmbeddedMode(enteringEmbeddedMode);\n }\n }\n // check progress\n if (matched.length === 0) {\n if (lineLength === 0 || stackLen0 !== stack.depth || state !== stack.state || (!groupMatching ? 0 : groupMatching.groups.length) !== groupLen0) {\n continue;\n }\n else {\n throw monarchCommon.createError(this._lexer, 'no progress in tokenizer in rule: ' + this._safeRuleName(rule));\n }\n }\n // return the result (and check for brace matching)\n // todo: for efficiency we could pre-sanitize tokenPostfix and substitutions\n let tokenType = null;\n if (monarchCommon.isString(result) && result.indexOf('@brackets') === 0) {\n let rest = result.substr('@brackets'.length);\n let bracket = findBracket(this._lexer, matched);\n if (!bracket) {\n throw monarchCommon.createError(this._lexer, '@brackets token returned but no bracket defined as: ' + matched);\n }\n tokenType = monarchCommon.sanitize(bracket.token + rest);\n }\n else {\n let token = (result === '' ? '' : result + this._lexer.tokenPostfix);\n tokenType = monarchCommon.sanitize(token);\n }\n if (pos0 < lineWithoutLFLength) {\n tokensCollector.emit(pos0 + offsetDelta, tokenType);\n }\n }\n if (enteringEmbeddedMode !== null) {\n return computeNewStateForEmbeddedMode(enteringEmbeddedMode);\n }\n }\n return MonarchLineStateFactory.create(stack, embeddedModeData);\n }\n _getNestedEmbeddedModeData(mimetypeOrModeId) {\n let nestedModeId = this._locateMode(mimetypeOrModeId);\n if (nestedModeId) {\n let tokenizationSupport = modes.TokenizationRegistry.get(nestedModeId);\n if (tokenizationSupport) {\n return new EmbeddedModeData(nestedModeId, tokenizationSupport.getInitialState());\n }\n }\n return new EmbeddedModeData(nestedModeId || NULL_MODE_ID, NULL_STATE);\n }\n _locateMode(mimetypeOrModeId) {\n if (!mimetypeOrModeId || !this._modeService.isRegisteredMode(mimetypeOrModeId)) {\n return null;\n }\n if (mimetypeOrModeId === this._modeId) {\n // embedding myself...\n return mimetypeOrModeId;\n }\n let modeId = this._modeService.getModeId(mimetypeOrModeId);\n if (modeId) {\n // Fire mode loading event\n this._modeService.triggerMode(modeId);\n this._embeddedModes[modeId] = true;\n }\n return modeId;\n }\n}\n/**\n * Searches for a bracket in the 'brackets' attribute that matches the input.\n */\nfunction findBracket(lexer, matched) {\n if (!matched) {\n return null;\n }\n matched = monarchCommon.fixCase(lexer, matched);\n let brackets = lexer.brackets;\n for (const bracket of brackets) {\n if (bracket.open === matched) {\n return { token: bracket.token, bracketType: 1 /* Open */ };\n }\n else if (bracket.close === matched) {\n return { token: bracket.token, bracketType: -1 /* Close */ };\n }\n }\n return null;\n}\nexport function createTokenizationSupport(modeService, standaloneThemeService, modeId, lexer) {\n return new MonarchTokenizer(modeService, standaloneThemeService, modeId, lexer);\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 *--------------------------------------------------------------------------------------------*/\nvar _a;\nimport { TimeoutTimer } from '../../../base/common/async.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { LineTokens } from '../../common/core/lineTokens.js';\nimport { TokenizationRegistry } from '../../common/modes.js';\nimport { RenderLineInput, renderViewLine2 as renderViewLine } from '../../common/viewLayout/viewLineRenderer.js';\nimport { ViewLineRenderingData } from '../../common/viewModel/viewModel.js';\nimport { MonarchTokenizer } from '../common/monarch/monarchLexer.js';\nconst ttPolicy = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy('standaloneColorizer', { createHTML: value => value });\nexport class Colorizer {\n static colorizeElement(themeService, modeService, domNode, options) {\n options = options || {};\n let theme = options.theme || 'vs';\n let mimeType = options.mimeType || domNode.getAttribute('lang') || domNode.getAttribute('data-lang');\n if (!mimeType) {\n console.error('Mode not detected');\n return Promise.resolve();\n }\n themeService.setTheme(theme);\n let text = domNode.firstChild ? domNode.firstChild.nodeValue : '';\n domNode.className += ' ' + theme;\n let render = (str) => {\n var _a;\n const trustedhtml = (_a = ttPolicy === null || ttPolicy === void 0 ? void 0 : ttPolicy.createHTML(str)) !== null && _a !== void 0 ? _a : str;\n domNode.innerHTML = trustedhtml;\n };\n return this.colorize(modeService, text || '', mimeType, options).then(render, (err) => console.error(err));\n }\n static colorize(modeService, text, mimeType, options) {\n let tabSize = 4;\n if (options && typeof options.tabSize === 'number') {\n tabSize = options.tabSize;\n }\n if (strings.startsWithUTF8BOM(text)) {\n text = text.substr(1);\n }\n let lines = strings.splitLines(text);\n let language = modeService.getModeId(mimeType);\n if (!language) {\n return Promise.resolve(_fakeColorize(lines, tabSize));\n }\n // Send out the event to create the mode\n modeService.triggerMode(language);\n const tokenizationSupport = TokenizationRegistry.get(language);\n if (tokenizationSupport) {\n return _colorize(lines, tabSize, tokenizationSupport);\n }\n const tokenizationSupportPromise = TokenizationRegistry.getPromise(language);\n if (tokenizationSupportPromise) {\n // A tokenizer will be registered soon\n return new Promise((resolve, reject) => {\n tokenizationSupportPromise.then(tokenizationSupport => {\n _colorize(lines, tabSize, tokenizationSupport).then(resolve, reject);\n }, reject);\n });\n }\n return new Promise((resolve, reject) => {\n let listener = null;\n let timeout = null;\n const execute = () => {\n if (listener) {\n listener.dispose();\n listener = null;\n }\n if (timeout) {\n timeout.dispose();\n timeout = null;\n }\n const tokenizationSupport = TokenizationRegistry.get(language);\n if (tokenizationSupport) {\n _colorize(lines, tabSize, tokenizationSupport).then(resolve, reject);\n return;\n }\n resolve(_fakeColorize(lines, tabSize));\n };\n // wait 500ms for mode to load, then give up\n timeout = new TimeoutTimer();\n timeout.cancelAndSet(execute, 500);\n listener = TokenizationRegistry.onDidChange((e) => {\n if (e.changedLanguages.indexOf(language) >= 0) {\n execute();\n }\n });\n });\n }\n static colorizeLine(line, mightContainNonBasicASCII, mightContainRTL, tokens, tabSize = 4) {\n const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, mightContainNonBasicASCII);\n const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, mightContainRTL);\n let renderResult = renderViewLine(new RenderLineInput(false, true, line, false, isBasicASCII, containsRTL, 0, tokens, [], tabSize, 0, 0, 0, 0, -1, 'none', false, false, null));\n return renderResult.html;\n }\n static colorizeModelLine(model, lineNumber, tabSize = 4) {\n let content = model.getLineContent(lineNumber);\n model.forceTokenization(lineNumber);\n let tokens = model.getLineTokens(lineNumber);\n let inflatedTokens = tokens.inflate();\n return this.colorizeLine(content, model.mightContainNonBasicASCII(), model.mightContainRTL(), inflatedTokens, tabSize);\n }\n}\nfunction _colorize(lines, tabSize, tokenizationSupport) {\n return new Promise((c, e) => {\n const execute = () => {\n const result = _actualColorize(lines, tabSize, tokenizationSupport);\n if (tokenizationSupport instanceof MonarchTokenizer) {\n const status = tokenizationSupport.getLoadStatus();\n if (status.loaded === false) {\n status.promise.then(execute, e);\n return;\n }\n }\n c(result);\n };\n execute();\n });\n}\nfunction _fakeColorize(lines, tabSize) {\n let html = [];\n const defaultMetadata = ((0 /* None */ << 11 /* FONT_STYLE_OFFSET */)\n | (1 /* DefaultForeground */ << 14 /* FOREGROUND_OFFSET */)\n | (2 /* DefaultBackground */ << 23 /* BACKGROUND_OFFSET */)) >>> 0;\n const tokens = new Uint32Array(2);\n tokens[0] = 0;\n tokens[1] = defaultMetadata;\n for (let i = 0, length = lines.length; i < length; i++) {\n let line = lines[i];\n tokens[0] = line.length;\n const lineTokens = new LineTokens(tokens, line);\n const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, /* check for basic ASCII */ true);\n const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, /* check for RTL */ true);\n let renderResult = renderViewLine(new RenderLineInput(false, true, line, false, isBasicASCII, containsRTL, 0, lineTokens, [], tabSize, 0, 0, 0, 0, -1, 'none', false, false, null));\n html = html.concat(renderResult.html);\n html.push('<br/>');\n }\n return html.join('');\n}\nfunction _actualColorize(lines, tabSize, tokenizationSupport) {\n let html = [];\n let state = tokenizationSupport.getInitialState();\n for (let i = 0, length = lines.length; i < length; i++) {\n let line = lines[i];\n let tokenizeResult = tokenizationSupport.tokenize2(line, true, state, 0);\n LineTokens.convertToEndOffset(tokenizeResult.tokens, line.length);\n let lineTokens = new LineTokens(tokenizeResult.tokens, line);\n const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, /* check for basic ASCII */ true);\n const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, /* check for RTL */ true);\n let renderResult = renderViewLine(new RenderLineInput(false, true, line, false, isBasicASCII, containsRTL, 0, lineTokens.inflate(), [], tabSize, 0, 0, 0, 0, -1, 'none', false, false, null));\n html = html.concat(renderResult.html);\n html.push('<br/>');\n state = tokenizeResult.endState;\n }\n return html.join('');\n}\n","import { ResourceMap } from '../../../base/common/map.js';\nimport * as arrays from '../../../base/common/arrays.js';\nimport * as types from '../../../base/common/types.js';\nimport * as objects from '../../../base/common/objects.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { OVERRIDE_PROPERTY_PATTERN, overrideIdentifierFromKey } from './configurationRegistry.js';\nimport { addToValueTree, toValuesTree, getConfigurationValue, getDefaultValues, getConfigurationKeys, removeFromValueTree } from './configuration.js';\nexport class ConfigurationModel {\n constructor(_contents = {}, _keys = [], _overrides = []) {\n this._contents = _contents;\n this._keys = _keys;\n this._overrides = _overrides;\n this.isFrozen = false;\n }\n get contents() {\n return this.checkAndFreeze(this._contents);\n }\n get overrides() {\n return this.checkAndFreeze(this._overrides);\n }\n get keys() {\n return this.checkAndFreeze(this._keys);\n }\n isEmpty() {\n return this._keys.length === 0 && Object.keys(this._contents).length === 0 && this._overrides.length === 0;\n }\n getValue(section) {\n return section ? getConfigurationValue(this.contents, section) : this.contents;\n }\n override(identifier) {\n const overrideContents = this.getContentsForOverrideIdentifer(identifier);\n if (!overrideContents || typeof overrideContents !== 'object' || !Object.keys(overrideContents).length) {\n // If there are no valid overrides, return self\n return this;\n }\n let contents = {};\n for (const key of arrays.distinct([...Object.keys(this.contents), ...Object.keys(overrideContents)])) {\n let contentsForKey = this.contents[key];\n let overrideContentsForKey = overrideContents[key];\n // If there are override contents for the key, clone and merge otherwise use base contents\n if (overrideContentsForKey) {\n // Clone and merge only if base contents and override contents are of type object otherwise just override\n if (typeof contentsForKey === 'object' && typeof overrideContentsForKey === 'object') {\n contentsForKey = objects.deepClone(contentsForKey);\n this.mergeContents(contentsForKey, overrideContentsForKey);\n }\n else {\n contentsForKey = overrideContentsForKey;\n }\n }\n contents[key] = contentsForKey;\n }\n return new ConfigurationModel(contents, this.keys, this.overrides);\n }\n merge(...others) {\n const contents = objects.deepClone(this.contents);\n const overrides = objects.deepClone(this.overrides);\n const keys = [...this.keys];\n for (const other of others) {\n this.mergeContents(contents, other.contents);\n for (const otherOverride of other.overrides) {\n const [override] = overrides.filter(o => arrays.equals(o.identifiers, otherOverride.identifiers));\n if (override) {\n this.mergeContents(override.contents, otherOverride.contents);\n }\n else {\n overrides.push(objects.deepClone(otherOverride));\n }\n }\n for (const key of other.keys) {\n if (keys.indexOf(key) === -1) {\n keys.push(key);\n }\n }\n }\n return new ConfigurationModel(contents, keys, overrides);\n }\n freeze() {\n this.isFrozen = true;\n return this;\n }\n mergeContents(source, target) {\n for (const key of Object.keys(target)) {\n if (key in source) {\n if (types.isObject(source[key]) && types.isObject(target[key])) {\n this.mergeContents(source[key], target[key]);\n continue;\n }\n }\n source[key] = objects.deepClone(target[key]);\n }\n }\n checkAndFreeze(data) {\n if (this.isFrozen && !Object.isFrozen(data)) {\n return objects.deepFreeze(data);\n }\n return data;\n }\n getContentsForOverrideIdentifer(identifier) {\n for (const override of this.overrides) {\n if (override.identifiers.indexOf(identifier) !== -1) {\n return override.contents;\n }\n }\n return null;\n }\n toJSON() {\n return {\n contents: this.contents,\n overrides: this.overrides,\n keys: this.keys\n };\n }\n // Update methods\n setValue(key, value) {\n this.addKey(key);\n addToValueTree(this.contents, key, value, e => { throw new Error(e); });\n }\n removeValue(key) {\n if (this.removeKey(key)) {\n removeFromValueTree(this.contents, key);\n }\n }\n addKey(key) {\n let index = this.keys.length;\n for (let i = 0; i < index; i++) {\n if (key.indexOf(this.keys[i]) === 0) {\n index = i;\n }\n }\n this.keys.splice(index, 1, key);\n }\n removeKey(key) {\n let index = this.keys.indexOf(key);\n if (index !== -1) {\n this.keys.splice(index, 1);\n return true;\n }\n return false;\n }\n}\nexport class DefaultConfigurationModel extends ConfigurationModel {\n constructor() {\n const contents = getDefaultValues();\n const keys = getConfigurationKeys();\n const overrides = [];\n for (const key of Object.keys(contents)) {\n if (OVERRIDE_PROPERTY_PATTERN.test(key)) {\n overrides.push({\n identifiers: [overrideIdentifierFromKey(key).trim()],\n keys: Object.keys(contents[key]),\n contents: toValuesTree(contents[key], message => console.error(`Conflict in default settings file: ${message}`)),\n });\n }\n }\n super(contents, keys, overrides);\n }\n}\nexport class Configuration {\n constructor(_defaultConfiguration, _localUserConfiguration, _remoteUserConfiguration = new ConfigurationModel(), _workspaceConfiguration = new ConfigurationModel(), _folderConfigurations = new ResourceMap(), _memoryConfiguration = new ConfigurationModel(), _memoryConfigurationByResource = new ResourceMap(), _freeze = true) {\n this._defaultConfiguration = _defaultConfiguration;\n this._localUserConfiguration = _localUserConfiguration;\n this._remoteUserConfiguration = _remoteUserConfiguration;\n this._workspaceConfiguration = _workspaceConfiguration;\n this._folderConfigurations = _folderConfigurations;\n this._memoryConfiguration = _memoryConfiguration;\n this._memoryConfigurationByResource = _memoryConfigurationByResource;\n this._freeze = _freeze;\n this._workspaceConsolidatedConfiguration = null;\n this._foldersConsolidatedConfigurations = new ResourceMap();\n this._userConfiguration = null;\n }\n getValue(section, overrides, workspace) {\n const consolidateConfigurationModel = this.getConsolidateConfigurationModel(overrides, workspace);\n return consolidateConfigurationModel.getValue(section);\n }\n updateValue(key, value, overrides = {}) {\n let memoryConfiguration;\n if (overrides.resource) {\n memoryConfiguration = this._memoryConfigurationByResource.get(overrides.resource);\n if (!memoryConfiguration) {\n memoryConfiguration = new ConfigurationModel();\n this._memoryConfigurationByResource.set(overrides.resource, memoryConfiguration);\n }\n }\n else {\n memoryConfiguration = this._memoryConfiguration;\n }\n if (value === undefined) {\n memoryConfiguration.removeValue(key);\n }\n else {\n memoryConfiguration.setValue(key, value);\n }\n if (!overrides.resource) {\n this._workspaceConsolidatedConfiguration = null;\n }\n }\n get userConfiguration() {\n if (!this._userConfiguration) {\n this._userConfiguration = this._remoteUserConfiguration.isEmpty() ? this._localUserConfiguration : this._localUserConfiguration.merge(this._remoteUserConfiguration);\n if (this._freeze) {\n this._userConfiguration.freeze();\n }\n }\n return this._userConfiguration;\n }\n getConsolidateConfigurationModel(overrides, workspace) {\n let configurationModel = this.getConsolidatedConfigurationModelForResource(overrides, workspace);\n return overrides.overrideIdentifier ? configurationModel.override(overrides.overrideIdentifier) : configurationModel;\n }\n getConsolidatedConfigurationModelForResource({ resource }, workspace) {\n let consolidateConfiguration = this.getWorkspaceConsolidatedConfiguration();\n if (workspace && resource) {\n const root = workspace.getFolder(resource);\n if (root) {\n consolidateConfiguration = this.getFolderConsolidatedConfiguration(root.uri) || consolidateConfiguration;\n }\n const memoryConfigurationForResource = this._memoryConfigurationByResource.get(resource);\n if (memoryConfigurationForResource) {\n consolidateConfiguration = consolidateConfiguration.merge(memoryConfigurationForResource);\n }\n }\n return consolidateConfiguration;\n }\n getWorkspaceConsolidatedConfiguration() {\n if (!this._workspaceConsolidatedConfiguration) {\n this._workspaceConsolidatedConfiguration = this._defaultConfiguration.merge(this.userConfiguration, this._workspaceConfiguration, this._memoryConfiguration);\n if (this._freeze) {\n this._workspaceConfiguration = this._workspaceConfiguration.freeze();\n }\n }\n return this._workspaceConsolidatedConfiguration;\n }\n getFolderConsolidatedConfiguration(folder) {\n let folderConsolidatedConfiguration = this._foldersConsolidatedConfigurations.get(folder);\n if (!folderConsolidatedConfiguration) {\n const workspaceConsolidateConfiguration = this.getWorkspaceConsolidatedConfiguration();\n const folderConfiguration = this._folderConfigurations.get(folder);\n if (folderConfiguration) {\n folderConsolidatedConfiguration = workspaceConsolidateConfiguration.merge(folderConfiguration);\n if (this._freeze) {\n folderConsolidatedConfiguration = folderConsolidatedConfiguration.freeze();\n }\n this._foldersConsolidatedConfigurations.set(folder, folderConsolidatedConfiguration);\n }\n else {\n folderConsolidatedConfiguration = workspaceConsolidateConfiguration;\n }\n }\n return folderConsolidatedConfiguration;\n }\n toData() {\n return {\n defaults: {\n contents: this._defaultConfiguration.contents,\n overrides: this._defaultConfiguration.overrides,\n keys: this._defaultConfiguration.keys\n },\n user: {\n contents: this.userConfiguration.contents,\n overrides: this.userConfiguration.overrides,\n keys: this.userConfiguration.keys\n },\n workspace: {\n contents: this._workspaceConfiguration.contents,\n overrides: this._workspaceConfiguration.overrides,\n keys: this._workspaceConfiguration.keys\n },\n folders: [...this._folderConfigurations.keys()].reduce((result, folder) => {\n const { contents, overrides, keys } = this._folderConfigurations.get(folder);\n result.push([folder, { contents, overrides, keys }]);\n return result;\n }, [])\n };\n }\n static parse(data) {\n const defaultConfiguration = this.parseConfigurationModel(data.defaults);\n const userConfiguration = this.parseConfigurationModel(data.user);\n const workspaceConfiguration = this.parseConfigurationModel(data.workspace);\n const folders = data.folders.reduce((result, value) => {\n result.set(URI.revive(value[0]), this.parseConfigurationModel(value[1]));\n return result;\n }, new ResourceMap());\n return new Configuration(defaultConfiguration, userConfiguration, new ConfigurationModel(), workspaceConfiguration, folders, new ConfigurationModel(), new ResourceMap(), false);\n }\n static parseConfigurationModel(model) {\n return new ConfigurationModel(model.contents, model.keys, model.overrides).freeze();\n }\n}\nexport class ConfigurationChangeEvent {\n constructor(change, previous, currentConfiguraiton, currentWorkspace) {\n this.change = change;\n this.previous = previous;\n this.currentConfiguraiton = currentConfiguraiton;\n this.currentWorkspace = currentWorkspace;\n this._previousConfiguration = undefined;\n const keysSet = new Set();\n change.keys.forEach(key => keysSet.add(key));\n change.overrides.forEach(([, keys]) => keys.forEach(key => keysSet.add(key)));\n this.affectedKeys = [...keysSet.values()];\n const configurationModel = new ConfigurationModel();\n this.affectedKeys.forEach(key => configurationModel.setValue(key, {}));\n this.affectedKeysTree = configurationModel.contents;\n }\n get previousConfiguration() {\n if (!this._previousConfiguration && this.previous) {\n this._previousConfiguration = Configuration.parse(this.previous.data);\n }\n return this._previousConfiguration;\n }\n affectsConfiguration(section, overrides) {\n var _a;\n if (this.doesAffectedKeysTreeContains(this.affectedKeysTree, section)) {\n if (overrides) {\n const value1 = this.previousConfiguration ? this.previousConfiguration.getValue(section, overrides, (_a = this.previous) === null || _a === void 0 ? void 0 : _a.workspace) : undefined;\n const value2 = this.currentConfiguraiton.getValue(section, overrides, this.currentWorkspace);\n return !objects.equals(value1, value2);\n }\n return true;\n }\n return false;\n }\n doesAffectedKeysTreeContains(affectedKeysTree, section) {\n let requestedTree = toValuesTree({ [section]: true }, () => { });\n let key;\n while (typeof requestedTree === 'object' && (key = Object.keys(requestedTree)[0])) { // Only one key should present, since we added only one property\n affectedKeysTree = affectedKeysTree[key];\n if (!affectedKeysTree) {\n return false; // Requested tree is not found\n }\n requestedTree = requestedTree[key];\n }\n return true;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { IntervalTimer, TimeoutTimer } from '../../../base/common/async.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nexport class AbstractKeybindingService extends Disposable {\n constructor(_contextKeyService, _commandService, _telemetryService, _notificationService, _logService) {\n super();\n this._contextKeyService = _contextKeyService;\n this._commandService = _commandService;\n this._telemetryService = _telemetryService;\n this._notificationService = _notificationService;\n this._logService = _logService;\n this._onDidUpdateKeybindings = this._register(new Emitter());\n this._currentChord = null;\n this._currentChordChecker = new IntervalTimer();\n this._currentChordStatusMessage = null;\n this._currentSingleModifier = null;\n this._currentSingleModifierClearTimeout = new TimeoutTimer();\n this._logging = false;\n }\n get onDidUpdateKeybindings() {\n return this._onDidUpdateKeybindings ? this._onDidUpdateKeybindings.event : Event.None; // Sinon stubbing walks properties on prototype\n }\n dispose() {\n super.dispose();\n }\n _log(str) {\n if (this._logging) {\n this._logService.info(`[KeybindingService]: ${str}`);\n }\n }\n getKeybindings() {\n return this._getResolver().getKeybindings();\n }\n lookupKeybinding(commandId) {\n const result = this._getResolver().lookupPrimaryKeybinding(commandId);\n if (!result) {\n return undefined;\n }\n return result.resolvedKeybinding;\n }\n dispatchEvent(e, target) {\n return this._dispatch(e, target);\n }\n softDispatch(e, target) {\n const keybinding = this.resolveKeyboardEvent(e);\n if (keybinding.isChord()) {\n console.warn('Unexpected keyboard event mapped to a chord');\n return null;\n }\n const [firstPart,] = keybinding.getDispatchParts();\n if (firstPart === null) {\n // cannot be dispatched, probably only modifier keys\n return null;\n }\n const contextValue = this._contextKeyService.getContext(target);\n const currentChord = this._currentChord ? this._currentChord.keypress : null;\n return this._getResolver().resolve(contextValue, currentChord, firstPart);\n }\n _enterChordMode(firstPart, keypressLabel) {\n this._currentChord = {\n keypress: firstPart,\n label: keypressLabel\n };\n this._currentChordStatusMessage = this._notificationService.status(nls.localize('first.chord', \"({0}) was pressed. Waiting for second key of chord...\", keypressLabel));\n const chordEnterTime = Date.now();\n this._currentChordChecker.cancelAndSet(() => {\n if (!this._documentHasFocus()) {\n // Focus has been lost => leave chord mode\n this._leaveChordMode();\n return;\n }\n if (Date.now() - chordEnterTime > 5000) {\n // 5 seconds elapsed => leave chord mode\n this._leaveChordMode();\n }\n }, 500);\n }\n _leaveChordMode() {\n if (this._currentChordStatusMessage) {\n this._currentChordStatusMessage.dispose();\n this._currentChordStatusMessage = null;\n }\n this._currentChordChecker.cancel();\n this._currentChord = null;\n }\n _dispatch(e, target) {\n return this._doDispatch(this.resolveKeyboardEvent(e), target, /*isSingleModiferChord*/ false);\n }\n _singleModifierDispatch(e, target) {\n const keybinding = this.resolveKeyboardEvent(e);\n const [singleModifier,] = keybinding.getSingleModifierDispatchParts();\n if (singleModifier !== null && this._currentSingleModifier === null) {\n // we have a valid `singleModifier`, store it for the next keyup, but clear it in 300ms\n this._log(`+ Storing single modifier for possible chord ${singleModifier}.`);\n this._currentSingleModifier = singleModifier;\n this._currentSingleModifierClearTimeout.cancelAndSet(() => {\n this._log(`+ Clearing single modifier due to 300ms elapsed.`);\n this._currentSingleModifier = null;\n }, 300);\n return false;\n }\n if (singleModifier !== null && singleModifier === this._currentSingleModifier) {\n // bingo!\n this._log(`/ Dispatching single modifier chord ${singleModifier} ${singleModifier}`);\n this._currentSingleModifierClearTimeout.cancel();\n this._currentSingleModifier = null;\n return this._doDispatch(keybinding, target, /*isSingleModiferChord*/ true);\n }\n this._currentSingleModifierClearTimeout.cancel();\n this._currentSingleModifier = null;\n return false;\n }\n _doDispatch(keybinding, target, isSingleModiferChord = false) {\n let shouldPreventDefault = false;\n if (keybinding.isChord()) {\n console.warn('Unexpected keyboard event mapped to a chord');\n return false;\n }\n let firstPart = null; // the first keybinding i.e. Ctrl+K\n let currentChord = null; // the \"second\" keybinding i.e. Ctrl+K \"Ctrl+D\"\n if (isSingleModiferChord) {\n const [dispatchKeyname,] = keybinding.getSingleModifierDispatchParts();\n firstPart = dispatchKeyname;\n currentChord = dispatchKeyname;\n }\n else {\n [firstPart,] = keybinding.getDispatchParts();\n currentChord = this._currentChord ? this._currentChord.keypress : null;\n }\n if (firstPart === null) {\n this._log(`\\\\ Keyboard event cannot be dispatched in keydown phase.`);\n // cannot be dispatched, probably only modifier keys\n return shouldPreventDefault;\n }\n const contextValue = this._contextKeyService.getContext(target);\n const keypressLabel = keybinding.getLabel();\n const resolveResult = this._getResolver().resolve(contextValue, currentChord, firstPart);\n this._logService.trace('KeybindingService#dispatch', keypressLabel, resolveResult === null || resolveResult === void 0 ? void 0 : resolveResult.commandId);\n if (resolveResult && resolveResult.enterChord) {\n shouldPreventDefault = true;\n this._enterChordMode(firstPart, keypressLabel);\n return shouldPreventDefault;\n }\n if (this._currentChord) {\n if (!resolveResult || !resolveResult.commandId) {\n this._notificationService.status(nls.localize('missing.chord', \"The key combination ({0}, {1}) is not a command.\", this._currentChord.label, keypressLabel), { hideAfter: 10 * 1000 /* 10s */ });\n shouldPreventDefault = true;\n }\n }\n this._leaveChordMode();\n if (resolveResult && resolveResult.commandId) {\n if (!resolveResult.bubble) {\n shouldPreventDefault = true;\n }\n if (typeof resolveResult.commandArgs === 'undefined') {\n this._commandService.executeCommand(resolveResult.commandId).then(undefined, err => this._notificationService.warn(err));\n }\n else {\n this._commandService.executeCommand(resolveResult.commandId, resolveResult.commandArgs).then(undefined, err => this._notificationService.warn(err));\n }\n this._telemetryService.publicLog2('workbenchActionExecuted', { id: resolveResult.commandId, from: 'keybinding' });\n }\n return shouldPreventDefault;\n }\n mightProducePrintableCharacter(event) {\n if (event.ctrlKey || event.metaKey) {\n // ignore ctrl/cmd-combination but not shift/alt-combinatios\n return false;\n }\n // weak check for certain ranges. this is properly implemented in a subclass\n // with access to the KeyboardMapperFactory.\n if ((event.keyCode >= 31 /* KEY_A */ && event.keyCode <= 56 /* KEY_Z */)\n || (event.keyCode >= 21 /* KEY_0 */ && event.keyCode <= 30 /* KEY_9 */)) {\n return true;\n }\n return false;\n }\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 *--------------------------------------------------------------------------------------------*/\nexport class KeybindingResolver {\n constructor(defaultKeybindings, overrides, log) {\n this._log = log;\n this._defaultKeybindings = defaultKeybindings;\n this._defaultBoundCommands = new Map();\n for (let i = 0, len = defaultKeybindings.length; i < len; i++) {\n const command = defaultKeybindings[i].command;\n if (command) {\n this._defaultBoundCommands.set(command, true);\n }\n }\n this._map = new Map();\n this._lookupMap = new Map();\n this._keybindings = KeybindingResolver.combine(defaultKeybindings, overrides);\n for (let i = 0, len = this._keybindings.length; i < len; i++) {\n let k = this._keybindings[i];\n if (k.keypressParts.length === 0) {\n // unbound\n continue;\n }\n if (k.when && k.when.type === 0 /* False */) {\n // when condition is false\n continue;\n }\n // TODO@chords\n this._addKeyPress(k.keypressParts[0], k);\n }\n }\n static _isTargetedForRemoval(defaultKb, keypressFirstPart, keypressChordPart, command, when) {\n if (defaultKb.command !== command) {\n return false;\n }\n // TODO@chords\n if (keypressFirstPart && defaultKb.keypressParts[0] !== keypressFirstPart) {\n return false;\n }\n // TODO@chords\n if (keypressChordPart && defaultKb.keypressParts[1] !== keypressChordPart) {\n return false;\n }\n if (when) {\n if (!defaultKb.when) {\n return false;\n }\n if (!when.equals(defaultKb.when)) {\n return false;\n }\n }\n return true;\n }\n /**\n * Looks for rules containing -command in `overrides` and removes them directly from `defaults`.\n */\n static combine(defaults, rawOverrides) {\n defaults = defaults.slice(0);\n let overrides = [];\n for (const override of rawOverrides) {\n if (!override.command || override.command.length === 0 || override.command.charAt(0) !== '-') {\n overrides.push(override);\n continue;\n }\n const command = override.command.substr(1);\n // TODO@chords\n const keypressFirstPart = override.keypressParts[0];\n const keypressChordPart = override.keypressParts[1];\n const when = override.when;\n for (let j = defaults.length - 1; j >= 0; j--) {\n if (this._isTargetedForRemoval(defaults[j], keypressFirstPart, keypressChordPart, command, when)) {\n defaults.splice(j, 1);\n }\n }\n }\n return defaults.concat(overrides);\n }\n _addKeyPress(keypress, item) {\n const conflicts = this._map.get(keypress);\n if (typeof conflicts === 'undefined') {\n // There is no conflict so far\n this._map.set(keypress, [item]);\n this._addToLookupMap(item);\n return;\n }\n for (let i = conflicts.length - 1; i >= 0; i--) {\n let conflict = conflicts[i];\n if (conflict.command === item.command) {\n continue;\n }\n const conflictIsChord = (conflict.keypressParts.length > 1);\n const itemIsChord = (item.keypressParts.length > 1);\n // TODO@chords\n if (conflictIsChord && itemIsChord && conflict.keypressParts[1] !== item.keypressParts[1]) {\n // The conflict only shares the chord start with this command\n continue;\n }\n if (KeybindingResolver.whenIsEntirelyIncluded(conflict.when, item.when)) {\n // `item` completely overwrites `conflict`\n // Remove conflict from the lookupMap\n this._removeFromLookupMap(conflict);\n }\n }\n conflicts.push(item);\n this._addToLookupMap(item);\n }\n _addToLookupMap(item) {\n if (!item.command) {\n return;\n }\n let arr = this._lookupMap.get(item.command);\n if (typeof arr === 'undefined') {\n arr = [item];\n this._lookupMap.set(item.command, arr);\n }\n else {\n arr.push(item);\n }\n }\n _removeFromLookupMap(item) {\n if (!item.command) {\n return;\n }\n let arr = this._lookupMap.get(item.command);\n if (typeof arr === 'undefined') {\n return;\n }\n for (let i = 0, len = arr.length; i < len; i++) {\n if (arr[i] === item) {\n arr.splice(i, 1);\n return;\n }\n }\n }\n /**\n * Returns true if it is provable `a` implies `b`.\n */\n static whenIsEntirelyIncluded(a, b) {\n if (!b) {\n return true;\n }\n if (!a) {\n return false;\n }\n return this._implies(a, b);\n }\n /**\n * Returns true if it is provable `p` implies `q`.\n */\n static _implies(p, q) {\n const notP = p.negate();\n const terminals = (node) => {\n if (node.type === 9 /* Or */) {\n return node.expr;\n }\n return [node];\n };\n let expr = terminals(notP).concat(terminals(q));\n for (let i = 0; i < expr.length; i++) {\n const a = expr[i];\n const notA = a.negate();\n for (let j = i + 1; j < expr.length; j++) {\n const b = expr[j];\n if (notA.equals(b)) {\n return true;\n }\n }\n }\n return false;\n }\n getKeybindings() {\n return this._keybindings;\n }\n lookupPrimaryKeybinding(commandId) {\n let items = this._lookupMap.get(commandId);\n if (typeof items === 'undefined' || items.length === 0) {\n return null;\n }\n return items[items.length - 1];\n }\n resolve(context, currentChord, keypress) {\n this._log(`| Resolving ${keypress}${currentChord ? ` chorded from ${currentChord}` : ``}`);\n let lookupMap = null;\n if (currentChord !== null) {\n // Fetch all chord bindings for `currentChord`\n const candidates = this._map.get(currentChord);\n if (typeof candidates === 'undefined') {\n // No chords starting with `currentChord`\n this._log(`\\\\ No keybinding entries.`);\n return null;\n }\n lookupMap = [];\n for (let i = 0, len = candidates.length; i < len; i++) {\n let candidate = candidates[i];\n // TODO@chords\n if (candidate.keypressParts[1] === keypress) {\n lookupMap.push(candidate);\n }\n }\n }\n else {\n const candidates = this._map.get(keypress);\n if (typeof candidates === 'undefined') {\n // No bindings with `keypress`\n this._log(`\\\\ No keybinding entries.`);\n return null;\n }\n lookupMap = candidates;\n }\n let result = this._findCommand(context, lookupMap);\n if (!result) {\n this._log(`\\\\ From ${lookupMap.length} keybinding entries, no when clauses matched the context.`);\n return null;\n }\n // TODO@chords\n if (currentChord === null && result.keypressParts.length > 1 && result.keypressParts[1] !== null) {\n this._log(`\\\\ From ${lookupMap.length} keybinding entries, matched chord, when: ${printWhenExplanation(result.when)}, source: ${printSourceExplanation(result)}.`);\n return {\n enterChord: true,\n leaveChord: false,\n commandId: null,\n commandArgs: null,\n bubble: false\n };\n }\n this._log(`\\\\ From ${lookupMap.length} keybinding entries, matched ${result.command}, when: ${printWhenExplanation(result.when)}, source: ${printSourceExplanation(result)}.`);\n return {\n enterChord: false,\n leaveChord: result.keypressParts.length > 1,\n commandId: result.command,\n commandArgs: result.commandArgs,\n bubble: result.bubble\n };\n }\n _findCommand(context, matches) {\n for (let i = matches.length - 1; i >= 0; i--) {\n let k = matches[i];\n if (!KeybindingResolver.contextMatchesRules(context, k.when)) {\n continue;\n }\n return k;\n }\n return null;\n }\n static contextMatchesRules(context, rules) {\n if (!rules) {\n return true;\n }\n return rules.evaluate(context);\n }\n}\nfunction printWhenExplanation(when) {\n if (!when) {\n return `no when condition`;\n }\n return `${when.serialize()}`;\n}\nfunction printSourceExplanation(kb) {\n return (kb.extensionId\n ? (kb.isBuiltinExtension ? `built-in extension ${kb.extensionId}` : `user extension ${kb.extensionId}`)\n : (kb.isDefault ? `built-in` : `user`));\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 *--------------------------------------------------------------------------------------------*/\nexport class ResolvedKeybindingItem {\n constructor(resolvedKeybinding, command, commandArgs, when, isDefault, extensionId, isBuiltinExtension) {\n this.resolvedKeybinding = resolvedKeybinding;\n this.keypressParts = resolvedKeybinding ? removeElementsAfterNulls(resolvedKeybinding.getDispatchParts()) : [];\n if (resolvedKeybinding && this.keypressParts.length === 0) {\n // handle possible single modifier chord keybindings\n this.keypressParts = removeElementsAfterNulls(resolvedKeybinding.getSingleModifierDispatchParts());\n }\n this.bubble = (command ? command.charCodeAt(0) === 94 /* Caret */ : false);\n this.command = this.bubble ? command.substr(1) : command;\n this.commandArgs = commandArgs;\n this.when = when;\n this.isDefault = isDefault;\n this.extensionId = extensionId;\n this.isBuiltinExtension = isBuiltinExtension;\n }\n}\nexport function removeElementsAfterNulls(arr) {\n let result = [];\n for (let i = 0, len = arr.length; i < len; i++) {\n const element = arr[i];\n if (!element) {\n // stop processing at first encountered null\n return result;\n }\n result.push(element);\n }\n return result;\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 *--------------------------------------------------------------------------------------------*/\nimport { illegalArgument } from '../../../base/common/errors.js';\nimport { UILabelProvider, AriaLabelProvider } from '../../../base/common/keybindingLabels.js';\nimport { ResolvedKeybinding, ResolvedKeybindingPart } from '../../../base/common/keyCodes.js';\nexport class BaseResolvedKeybinding extends ResolvedKeybinding {\n constructor(os, parts) {\n super();\n if (parts.length === 0) {\n throw illegalArgument(`parts`);\n }\n this._os = os;\n this._parts = parts;\n }\n getLabel() {\n return UILabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getLabel(keybinding));\n }\n getAriaLabel() {\n return AriaLabelProvider.toLabel(this._os, this._parts, (keybinding) => this._getAriaLabel(keybinding));\n }\n isChord() {\n return (this._parts.length > 1);\n }\n getParts() {\n return this._parts.map((keybinding) => this._getPart(keybinding));\n }\n _getPart(keybinding) {\n return new ResolvedKeybindingPart(keybinding.ctrlKey, keybinding.shiftKey, keybinding.altKey, keybinding.metaKey, this._getLabel(keybinding), this._getAriaLabel(keybinding));\n }\n getDispatchParts() {\n return this._parts.map((keybinding) => this._getDispatchPart(keybinding));\n }\n getSingleModifierDispatchParts() {\n return this._parts.map((keybinding) => this._getSingleModifierDispatchPart(keybinding));\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { KeyCodeUtils } from '../../../base/common/keyCodes.js';\nimport { BaseResolvedKeybinding } from './baseResolvedKeybinding.js';\n/**\n * Do not instantiate. Use KeybindingService to get a ResolvedKeybinding seeded with information about the current kb layout.\n */\nexport class USLayoutResolvedKeybinding extends BaseResolvedKeybinding {\n constructor(actual, os) {\n super(os, actual.parts);\n }\n _keyCodeToUILabel(keyCode) {\n if (this._os === 2 /* Macintosh */) {\n switch (keyCode) {\n case 15 /* LeftArrow */:\n return '←';\n case 16 /* UpArrow */:\n return '↑';\n case 17 /* RightArrow */:\n return '→';\n case 18 /* DownArrow */:\n return '↓';\n }\n }\n return KeyCodeUtils.toString(keyCode);\n }\n _getLabel(keybinding) {\n if (keybinding.isDuplicateModifierCase()) {\n return '';\n }\n return this._keyCodeToUILabel(keybinding.keyCode);\n }\n _getAriaLabel(keybinding) {\n if (keybinding.isDuplicateModifierCase()) {\n return '';\n }\n return KeyCodeUtils.toString(keybinding.keyCode);\n }\n _getDispatchPart(keybinding) {\n return USLayoutResolvedKeybinding.getDispatchStr(keybinding);\n }\n static getDispatchStr(keybinding) {\n if (keybinding.isModifierKey()) {\n return null;\n }\n let result = '';\n if (keybinding.ctrlKey) {\n result += 'ctrl+';\n }\n if (keybinding.shiftKey) {\n result += 'shift+';\n }\n if (keybinding.altKey) {\n result += 'alt+';\n }\n if (keybinding.metaKey) {\n result += 'meta+';\n }\n result += KeyCodeUtils.toString(keybinding.keyCode);\n return result;\n }\n _getSingleModifierDispatchPart(keybinding) {\n if (keybinding.keyCode === 5 /* Ctrl */ && !keybinding.shiftKey && !keybinding.altKey && !keybinding.metaKey) {\n return 'ctrl';\n }\n if (keybinding.keyCode === 4 /* Shift */ && !keybinding.ctrlKey && !keybinding.altKey && !keybinding.metaKey) {\n return 'shift';\n }\n if (keybinding.keyCode === 6 /* Alt */ && !keybinding.ctrlKey && !keybinding.shiftKey && !keybinding.metaKey) {\n return 'alt';\n }\n if (keybinding.keyCode === 57 /* Meta */ && !keybinding.ctrlKey && !keybinding.shiftKey && !keybinding.altKey) {\n return 'meta';\n }\n return null;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as strings from '../../../base/common/strings.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { SimpleKeybinding, createKeybinding } from '../../../base/common/keyCodes.js';\nimport { ImmortalReference, toDisposable, DisposableStore, Disposable } from '../../../base/common/lifecycle.js';\nimport { OS, isLinux, isMacintosh } from '../../../base/common/platform.js';\nimport Severity from '../../../base/common/severity.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { isCodeEditor } from '../../browser/editorBrowser.js';\nimport { ResourceTextEdit } from '../../browser/services/bulkEditService.js';\nimport { isDiffEditorConfigurationKey, isEditorConfigurationKey } from '../../common/config/commonEditorConfig.js';\nimport { EditOperation } from '../../common/core/editOperation.js';\nimport { Position as Pos } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { Configuration, ConfigurationModel, DefaultConfigurationModel, ConfigurationChangeEvent } from '../../../platform/configuration/common/configurationModels.js';\nimport { AbstractKeybindingService } from '../../../platform/keybinding/common/abstractKeybindingService.js';\nimport { KeybindingResolver } from '../../../platform/keybinding/common/keybindingResolver.js';\nimport { KeybindingsRegistry } from '../../../platform/keybinding/common/keybindingsRegistry.js';\nimport { ResolvedKeybindingItem } from '../../../platform/keybinding/common/resolvedKeybindingItem.js';\nimport { USLayoutResolvedKeybinding } from '../../../platform/keybinding/common/usLayoutResolvedKeybinding.js';\nimport { NoOpNotification } from '../../../platform/notification/common/notification.js';\nimport { WorkspaceFolder } from '../../../platform/workspace/common/workspace.js';\nimport { SimpleServicesNLS } from '../../common/standaloneStrings.js';\nexport class SimpleModel {\n constructor(model) {\n this.disposed = false;\n this.model = model;\n this._onWillDispose = new Emitter();\n }\n get textEditorModel() {\n return this.model;\n }\n dispose() {\n this.disposed = true;\n this._onWillDispose.fire();\n }\n}\nfunction withTypedEditor(widget, codeEditorCallback, diffEditorCallback) {\n if (isCodeEditor(widget)) {\n // Single Editor\n return codeEditorCallback(widget);\n }\n else {\n // Diff Editor\n return diffEditorCallback(widget);\n }\n}\nlet SimpleEditorModelResolverService = class SimpleEditorModelResolverService {\n constructor(modelService) {\n this.modelService = modelService;\n }\n setEditor(editor) {\n this.editor = editor;\n }\n createModelReference(resource) {\n let model = null;\n if (this.editor) {\n model = withTypedEditor(this.editor, (editor) => this.findModel(editor, resource), (diffEditor) => this.findModel(diffEditor.getOriginalEditor(), resource) || this.findModel(diffEditor.getModifiedEditor(), resource));\n }\n if (!model) {\n return Promise.reject(new Error(`Model not found`));\n }\n return Promise.resolve(new ImmortalReference(new SimpleModel(model)));\n }\n findModel(editor, resource) {\n let model = this.modelService.getModel(resource);\n if (model && model.uri.toString() !== resource.toString()) {\n return null;\n }\n return model;\n }\n};\nSimpleEditorModelResolverService = __decorate([\n __param(0, IModelService)\n], SimpleEditorModelResolverService);\nexport { SimpleEditorModelResolverService };\nexport class SimpleEditorProgressService {\n show() {\n return SimpleEditorProgressService.NULL_PROGRESS_RUNNER;\n }\n showWhile(promise, delay) {\n return __awaiter(this, void 0, void 0, function* () {\n yield promise;\n });\n }\n}\nSimpleEditorProgressService.NULL_PROGRESS_RUNNER = {\n done: () => { },\n total: () => { },\n worked: () => { }\n};\nexport class SimpleDialogService {\n confirm(confirmation) {\n return this.doConfirm(confirmation).then(confirmed => {\n return {\n confirmed,\n checkboxChecked: false // unsupported\n };\n });\n }\n doConfirm(confirmation) {\n let messageText = confirmation.message;\n if (confirmation.detail) {\n messageText = messageText + '\\n\\n' + confirmation.detail;\n }\n return Promise.resolve(window.confirm(messageText));\n }\n show(severity, message, buttons, options) {\n return Promise.resolve({ choice: 0 });\n }\n}\nexport class SimpleNotificationService {\n info(message) {\n return this.notify({ severity: Severity.Info, message });\n }\n warn(message) {\n return this.notify({ severity: Severity.Warning, message });\n }\n error(error) {\n return this.notify({ severity: Severity.Error, message: error });\n }\n notify(notification) {\n switch (notification.severity) {\n case Severity.Error:\n console.error(notification.message);\n break;\n case Severity.Warning:\n console.warn(notification.message);\n break;\n default:\n console.log(notification.message);\n break;\n }\n return SimpleNotificationService.NO_OP;\n }\n status(message, options) {\n return Disposable.None;\n }\n}\nSimpleNotificationService.NO_OP = new NoOpNotification();\nexport class StandaloneCommandService {\n constructor(instantiationService) {\n this._onWillExecuteCommand = new Emitter();\n this._onDidExecuteCommand = new Emitter();\n this._instantiationService = instantiationService;\n }\n executeCommand(id, ...args) {\n const command = CommandsRegistry.getCommand(id);\n if (!command) {\n return Promise.reject(new Error(`command '${id}' not found`));\n }\n try {\n this._onWillExecuteCommand.fire({ commandId: id, args });\n const result = this._instantiationService.invokeFunction.apply(this._instantiationService, [command.handler, ...args]);\n this._onDidExecuteCommand.fire({ commandId: id, args });\n return Promise.resolve(result);\n }\n catch (err) {\n return Promise.reject(err);\n }\n }\n}\nexport class StandaloneKeybindingService extends AbstractKeybindingService {\n constructor(contextKeyService, commandService, telemetryService, notificationService, logService, domNode) {\n super(contextKeyService, commandService, telemetryService, notificationService, logService);\n this._cachedResolver = null;\n this._dynamicKeybindings = [];\n // for standard keybindings\n this._register(dom.addDisposableListener(domNode, dom.EventType.KEY_DOWN, (e) => {\n const keyEvent = new StandardKeyboardEvent(e);\n const shouldPreventDefault = this._dispatch(keyEvent, keyEvent.target);\n if (shouldPreventDefault) {\n keyEvent.preventDefault();\n keyEvent.stopPropagation();\n }\n }));\n // for single modifier chord keybindings (e.g. shift shift)\n this._register(dom.addDisposableListener(window, dom.EventType.KEY_UP, (e) => {\n const keyEvent = new StandardKeyboardEvent(e);\n const shouldPreventDefault = this._singleModifierDispatch(keyEvent, keyEvent.target);\n if (shouldPreventDefault) {\n keyEvent.preventDefault();\n }\n }));\n }\n addDynamicKeybinding(commandId, _keybinding, handler, when) {\n const keybinding = createKeybinding(_keybinding, OS);\n const toDispose = new DisposableStore();\n if (keybinding) {\n this._dynamicKeybindings.push({\n keybinding: keybinding,\n command: commandId,\n when: when,\n weight1: 1000,\n weight2: 0,\n extensionId: null,\n isBuiltinExtension: false\n });\n toDispose.add(toDisposable(() => {\n for (let i = 0; i < this._dynamicKeybindings.length; i++) {\n let kb = this._dynamicKeybindings[i];\n if (kb.command === commandId) {\n this._dynamicKeybindings.splice(i, 1);\n this.updateResolver({ source: 1 /* Default */ });\n return;\n }\n }\n }));\n }\n toDispose.add(CommandsRegistry.registerCommand(commandId, handler));\n this.updateResolver({ source: 1 /* Default */ });\n return toDispose;\n }\n updateResolver(event) {\n this._cachedResolver = null;\n this._onDidUpdateKeybindings.fire(event);\n }\n _getResolver() {\n if (!this._cachedResolver) {\n const defaults = this._toNormalizedKeybindingItems(KeybindingsRegistry.getDefaultKeybindings(), true);\n const overrides = this._toNormalizedKeybindingItems(this._dynamicKeybindings, false);\n this._cachedResolver = new KeybindingResolver(defaults, overrides, (str) => this._log(str));\n }\n return this._cachedResolver;\n }\n _documentHasFocus() {\n return document.hasFocus();\n }\n _toNormalizedKeybindingItems(items, isDefault) {\n let result = [], resultLen = 0;\n for (const item of items) {\n const when = item.when || undefined;\n const keybinding = item.keybinding;\n if (!keybinding) {\n // This might be a removal keybinding item in user settings => accept it\n result[resultLen++] = new ResolvedKeybindingItem(undefined, item.command, item.commandArgs, when, isDefault, null, false);\n }\n else {\n const resolvedKeybindings = this.resolveKeybinding(keybinding);\n for (const resolvedKeybinding of resolvedKeybindings) {\n result[resultLen++] = new ResolvedKeybindingItem(resolvedKeybinding, item.command, item.commandArgs, when, isDefault, null, false);\n }\n }\n }\n return result;\n }\n resolveKeybinding(keybinding) {\n return [new USLayoutResolvedKeybinding(keybinding, OS)];\n }\n resolveKeyboardEvent(keyboardEvent) {\n let keybinding = new SimpleKeybinding(keyboardEvent.ctrlKey, keyboardEvent.shiftKey, keyboardEvent.altKey, keyboardEvent.metaKey, keyboardEvent.keyCode).toChord();\n return new USLayoutResolvedKeybinding(keybinding, OS);\n }\n}\nfunction isConfigurationOverrides(thing) {\n return thing\n && typeof thing === 'object'\n && (!thing.overrideIdentifier || typeof thing.overrideIdentifier === 'string')\n && (!thing.resource || thing.resource instanceof URI);\n}\nexport class SimpleConfigurationService {\n constructor() {\n this._onDidChangeConfiguration = new Emitter();\n this.onDidChangeConfiguration = this._onDidChangeConfiguration.event;\n this._configuration = new Configuration(new DefaultConfigurationModel(), new ConfigurationModel());\n }\n getValue(arg1, arg2) {\n const section = typeof arg1 === 'string' ? arg1 : undefined;\n const overrides = isConfigurationOverrides(arg1) ? arg1 : isConfigurationOverrides(arg2) ? arg2 : {};\n return this._configuration.getValue(section, overrides, undefined);\n }\n updateValues(values) {\n const previous = { data: this._configuration.toData() };\n let changedKeys = [];\n for (const entry of values) {\n const [key, value] = entry;\n if (this.getValue(key) === value) {\n continue;\n }\n this._configuration.updateValue(key, value);\n changedKeys.push(key);\n }\n if (changedKeys.length > 0) {\n const configurationChangeEvent = new ConfigurationChangeEvent({ keys: changedKeys, overrides: [] }, previous, this._configuration);\n configurationChangeEvent.source = 7 /* MEMORY */;\n configurationChangeEvent.sourceConfig = null;\n this._onDidChangeConfiguration.fire(configurationChangeEvent);\n }\n return Promise.resolve();\n }\n}\nexport class SimpleResourceConfigurationService {\n constructor(configurationService) {\n this.configurationService = configurationService;\n this._onDidChangeConfiguration = new Emitter();\n this.configurationService.onDidChangeConfiguration((e) => {\n this._onDidChangeConfiguration.fire({ affectedKeys: e.affectedKeys, affectsConfiguration: (resource, configuration) => e.affectsConfiguration(configuration) });\n });\n }\n getValue(resource, arg2, arg3) {\n const position = Pos.isIPosition(arg2) ? arg2 : null;\n const section = position ? (typeof arg3 === 'string' ? arg3 : undefined) : (typeof arg2 === 'string' ? arg2 : undefined);\n if (typeof section === 'undefined') {\n return this.configurationService.getValue();\n }\n return this.configurationService.getValue(section);\n }\n}\nlet SimpleResourcePropertiesService = class SimpleResourcePropertiesService {\n constructor(configurationService) {\n this.configurationService = configurationService;\n }\n getEOL(resource, language) {\n const eol = this.configurationService.getValue('files.eol', { overrideIdentifier: language, resource });\n if (eol && eol !== 'auto') {\n return eol;\n }\n return (isLinux || isMacintosh) ? '\\n' : '\\r\\n';\n }\n};\nSimpleResourcePropertiesService = __decorate([\n __param(0, IConfigurationService)\n], SimpleResourcePropertiesService);\nexport { SimpleResourcePropertiesService };\nexport class StandaloneTelemetryService {\n publicLog(eventName, data) {\n return Promise.resolve(undefined);\n }\n publicLog2(eventName, data) {\n return this.publicLog(eventName, data);\n }\n}\nexport class SimpleWorkspaceContextService {\n constructor() {\n const resource = URI.from({ scheme: SimpleWorkspaceContextService.SCHEME, authority: 'model', path: '/' });\n this.workspace = { id: '4064f6ec-cb38-4ad0-af64-ee6467e63c82', folders: [new WorkspaceFolder({ uri: resource, name: '', index: 0 })] };\n }\n getWorkspace() {\n return this.workspace;\n }\n}\nSimpleWorkspaceContextService.SCHEME = 'inmemory';\nexport function updateConfigurationService(configurationService, source, isDiffEditor) {\n if (!source) {\n return;\n }\n if (!(configurationService instanceof SimpleConfigurationService)) {\n return;\n }\n let toUpdate = [];\n Object.keys(source).forEach((key) => {\n if (isEditorConfigurationKey(key)) {\n toUpdate.push([`editor.${key}`, source[key]]);\n }\n if (isDiffEditor && isDiffEditorConfigurationKey(key)) {\n toUpdate.push([`diffEditor.${key}`, source[key]]);\n }\n });\n if (toUpdate.length > 0) {\n configurationService.updateValues(toUpdate);\n }\n}\nexport class SimpleBulkEditService {\n constructor(_modelService) {\n this._modelService = _modelService;\n //\n }\n hasPreviewHandler() {\n return false;\n }\n apply(edits, _options) {\n return __awaiter(this, void 0, void 0, function* () {\n const textEdits = new Map();\n for (let edit of edits) {\n if (!(edit instanceof ResourceTextEdit)) {\n throw new Error('bad edit - only text edits are supported');\n }\n const model = this._modelService.getModel(edit.resource);\n if (!model) {\n throw new Error('bad edit - model not found');\n }\n if (typeof edit.versionId === 'number' && model.getVersionId() !== edit.versionId) {\n throw new Error('bad state - model changed in the meantime');\n }\n let array = textEdits.get(model);\n if (!array) {\n array = [];\n textEdits.set(model, array);\n }\n array.push(EditOperation.replaceMove(Range.lift(edit.textEdit.range), edit.textEdit.text));\n }\n let totalEdits = 0;\n let totalFiles = 0;\n for (const [model, edits] of textEdits) {\n model.pushStackElement();\n model.pushEditOperations([], edits, () => []);\n model.pushStackElement();\n totalFiles += 1;\n totalEdits += edits.length;\n }\n return {\n ariaSummary: strings.format(SimpleServicesNLS.bulkEditServiceSummary, totalEdits, totalFiles)\n };\n });\n }\n}\nexport class SimpleUriLabelService {\n getUriLabel(resource, options) {\n if (resource.scheme === 'file') {\n return resource.fsPath;\n }\n return resource.path;\n }\n}\nexport class SimpleLayoutService {\n constructor(_codeEditorService, _container) {\n this._codeEditorService = _codeEditorService;\n this._container = _container;\n this.onDidLayout = Event.None;\n }\n get dimension() {\n if (!this._dimension) {\n this._dimension = dom.getClientArea(window.document.body);\n }\n return this._dimension;\n }\n get container() {\n return this._container;\n }\n focus() {\n var _a;\n (_a = this._codeEditorService.getFocusedCodeEditor()) === null || _a === void 0 ? void 0 : _a.focus();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nexport class AbstractCodeEditorService extends Disposable {\n constructor() {\n super();\n this._onCodeEditorAdd = this._register(new Emitter());\n this.onCodeEditorAdd = this._onCodeEditorAdd.event;\n this._onCodeEditorRemove = this._register(new Emitter());\n this.onCodeEditorRemove = this._onCodeEditorRemove.event;\n this._onDiffEditorAdd = this._register(new Emitter());\n this._onDiffEditorRemove = this._register(new Emitter());\n this._onDecorationTypeRegistered = this._register(new Emitter());\n this._modelProperties = new Map();\n this._codeEditors = Object.create(null);\n this._diffEditors = Object.create(null);\n }\n addCodeEditor(editor) {\n this._codeEditors[editor.getId()] = editor;\n this._onCodeEditorAdd.fire(editor);\n }\n removeCodeEditor(editor) {\n if (delete this._codeEditors[editor.getId()]) {\n this._onCodeEditorRemove.fire(editor);\n }\n }\n listCodeEditors() {\n return Object.keys(this._codeEditors).map(id => this._codeEditors[id]);\n }\n addDiffEditor(editor) {\n this._diffEditors[editor.getId()] = editor;\n this._onDiffEditorAdd.fire(editor);\n }\n removeDiffEditor(editor) {\n if (delete this._diffEditors[editor.getId()]) {\n this._onDiffEditorRemove.fire(editor);\n }\n }\n listDiffEditors() {\n return Object.keys(this._diffEditors).map(id => this._diffEditors[id]);\n }\n getFocusedCodeEditor() {\n let editorWithWidgetFocus = null;\n const editors = this.listCodeEditors();\n for (const editor of editors) {\n if (editor.hasTextFocus()) {\n // bingo!\n return editor;\n }\n if (editor.hasWidgetFocus()) {\n editorWithWidgetFocus = editor;\n }\n }\n return editorWithWidgetFocus;\n }\n setModelProperty(resource, key, value) {\n const key1 = resource.toString();\n let dest;\n if (this._modelProperties.has(key1)) {\n dest = this._modelProperties.get(key1);\n }\n else {\n dest = new Map();\n this._modelProperties.set(key1, dest);\n }\n dest.set(key, value);\n }\n getModelProperty(resource, key) {\n const key1 = resource.toString();\n if (this._modelProperties.has(key1)) {\n const innerMap = this._modelProperties.get(key1);\n return innerMap.get(key);\n }\n return undefined;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as dom from '../../../base/browser/dom.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { AbstractCodeEditorService } from './abstractCodeEditorService.js';\nimport { isThemeColor } from '../../common/editorCommon.js';\nimport { OverviewRulerLane } from '../../common/model.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nexport class RefCountedStyleSheet {\n constructor(parent, editorId, styleSheet) {\n this._parent = parent;\n this._editorId = editorId;\n this._styleSheet = styleSheet;\n this._refCount = 0;\n }\n ref() {\n this._refCount++;\n }\n unref() {\n var _a;\n this._refCount--;\n if (this._refCount === 0) {\n (_a = this._styleSheet.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(this._styleSheet);\n this._parent._removeEditorStyleSheets(this._editorId);\n }\n }\n insertRule(rule, index) {\n const sheet = this._styleSheet.sheet;\n sheet.insertRule(rule, index);\n }\n removeRulesContainingSelector(ruleName) {\n dom.removeCSSRulesContainingSelector(ruleName, this._styleSheet);\n }\n}\nexport class GlobalStyleSheet {\n constructor(styleSheet) {\n this._styleSheet = styleSheet;\n }\n ref() {\n }\n unref() {\n }\n insertRule(rule, index) {\n const sheet = this._styleSheet.sheet;\n sheet.insertRule(rule, index);\n }\n removeRulesContainingSelector(ruleName) {\n dom.removeCSSRulesContainingSelector(ruleName, this._styleSheet);\n }\n}\nlet CodeEditorServiceImpl = class CodeEditorServiceImpl extends AbstractCodeEditorService {\n constructor(styleSheet, themeService) {\n super();\n this._decorationOptionProviders = new Map();\n this._editorStyleSheets = new Map();\n this._globalStyleSheet = styleSheet ? styleSheet : null;\n this._themeService = themeService;\n }\n _getOrCreateGlobalStyleSheet() {\n if (!this._globalStyleSheet) {\n this._globalStyleSheet = new GlobalStyleSheet(dom.createStyleSheet());\n }\n return this._globalStyleSheet;\n }\n _getOrCreateStyleSheet(editor) {\n if (!editor) {\n return this._getOrCreateGlobalStyleSheet();\n }\n const domNode = editor.getContainerDomNode();\n if (!dom.isInShadowDOM(domNode)) {\n return this._getOrCreateGlobalStyleSheet();\n }\n const editorId = editor.getId();\n if (!this._editorStyleSheets.has(editorId)) {\n const refCountedStyleSheet = new RefCountedStyleSheet(this, editorId, dom.createStyleSheet(domNode));\n this._editorStyleSheets.set(editorId, refCountedStyleSheet);\n }\n return this._editorStyleSheets.get(editorId);\n }\n _removeEditorStyleSheets(editorId) {\n this._editorStyleSheets.delete(editorId);\n }\n registerDecorationType(key, options, parentTypeKey, editor) {\n let provider = this._decorationOptionProviders.get(key);\n if (!provider) {\n const styleSheet = this._getOrCreateStyleSheet(editor);\n const providerArgs = {\n styleSheet: styleSheet,\n key: key,\n parentTypeKey: parentTypeKey,\n options: options || Object.create(null)\n };\n if (!parentTypeKey) {\n provider = new DecorationTypeOptionsProvider(this._themeService, styleSheet, providerArgs);\n }\n else {\n provider = new DecorationSubTypeOptionsProvider(this._themeService, styleSheet, providerArgs);\n }\n this._decorationOptionProviders.set(key, provider);\n this._onDecorationTypeRegistered.fire(key);\n }\n provider.refCount++;\n }\n removeDecorationType(key) {\n const provider = this._decorationOptionProviders.get(key);\n if (provider) {\n provider.refCount--;\n if (provider.refCount <= 0) {\n this._decorationOptionProviders.delete(key);\n provider.dispose();\n this.listCodeEditors().forEach((ed) => ed.removeDecorations(key));\n }\n }\n }\n resolveDecorationOptions(decorationTypeKey, writable) {\n const provider = this._decorationOptionProviders.get(decorationTypeKey);\n if (!provider) {\n throw new Error('Unknown decoration type key: ' + decorationTypeKey);\n }\n return provider.getOptions(this, writable);\n }\n};\nCodeEditorServiceImpl = __decorate([\n __param(1, IThemeService)\n], CodeEditorServiceImpl);\nexport { CodeEditorServiceImpl };\nexport class DecorationSubTypeOptionsProvider {\n constructor(themeService, styleSheet, providerArgs) {\n this._styleSheet = styleSheet;\n this._styleSheet.ref();\n this._parentTypeKey = providerArgs.parentTypeKey;\n this.refCount = 0;\n this._beforeContentRules = new DecorationCSSRules(3 /* BeforeContentClassName */, providerArgs, themeService);\n this._afterContentRules = new DecorationCSSRules(4 /* AfterContentClassName */, providerArgs, themeService);\n }\n getOptions(codeEditorService, writable) {\n const options = codeEditorService.resolveDecorationOptions(this._parentTypeKey, true);\n if (this._beforeContentRules) {\n options.beforeContentClassName = this._beforeContentRules.className;\n }\n if (this._afterContentRules) {\n options.afterContentClassName = this._afterContentRules.className;\n }\n return options;\n }\n dispose() {\n if (this._beforeContentRules) {\n this._beforeContentRules.dispose();\n this._beforeContentRules = null;\n }\n if (this._afterContentRules) {\n this._afterContentRules.dispose();\n this._afterContentRules = null;\n }\n this._styleSheet.unref();\n }\n}\nexport class DecorationTypeOptionsProvider {\n constructor(themeService, styleSheet, providerArgs) {\n this._disposables = new DisposableStore();\n this._styleSheet = styleSheet;\n this._styleSheet.ref();\n this.refCount = 0;\n const createCSSRules = (type) => {\n const rules = new DecorationCSSRules(type, providerArgs, themeService);\n this._disposables.add(rules);\n if (rules.hasContent) {\n return rules.className;\n }\n return undefined;\n };\n const createInlineCSSRules = (type) => {\n const rules = new DecorationCSSRules(type, providerArgs, themeService);\n this._disposables.add(rules);\n if (rules.hasContent) {\n return { className: rules.className, hasLetterSpacing: rules.hasLetterSpacing };\n }\n return null;\n };\n this.className = createCSSRules(0 /* ClassName */);\n const inlineData = createInlineCSSRules(1 /* InlineClassName */);\n if (inlineData) {\n this.inlineClassName = inlineData.className;\n this.inlineClassNameAffectsLetterSpacing = inlineData.hasLetterSpacing;\n }\n this.beforeContentClassName = createCSSRules(3 /* BeforeContentClassName */);\n this.afterContentClassName = createCSSRules(4 /* AfterContentClassName */);\n this.glyphMarginClassName = createCSSRules(2 /* GlyphMarginClassName */);\n const options = providerArgs.options;\n this.isWholeLine = Boolean(options.isWholeLine);\n this.stickiness = options.rangeBehavior;\n const lightOverviewRulerColor = options.light && options.light.overviewRulerColor || options.overviewRulerColor;\n const darkOverviewRulerColor = options.dark && options.dark.overviewRulerColor || options.overviewRulerColor;\n if (typeof lightOverviewRulerColor !== 'undefined'\n || typeof darkOverviewRulerColor !== 'undefined') {\n this.overviewRuler = {\n color: lightOverviewRulerColor || darkOverviewRulerColor,\n darkColor: darkOverviewRulerColor || lightOverviewRulerColor,\n position: options.overviewRulerLane || OverviewRulerLane.Center\n };\n }\n }\n getOptions(codeEditorService, writable) {\n if (!writable) {\n return this;\n }\n return {\n inlineClassName: this.inlineClassName,\n beforeContentClassName: this.beforeContentClassName,\n afterContentClassName: this.afterContentClassName,\n className: this.className,\n glyphMarginClassName: this.glyphMarginClassName,\n isWholeLine: this.isWholeLine,\n overviewRuler: this.overviewRuler,\n stickiness: this.stickiness\n };\n }\n dispose() {\n this._disposables.dispose();\n this._styleSheet.unref();\n }\n}\nexport const _CSS_MAP = {\n color: 'color:{0} !important;',\n opacity: 'opacity:{0};',\n backgroundColor: 'background-color:{0};',\n outline: 'outline:{0};',\n outlineColor: 'outline-color:{0};',\n outlineStyle: 'outline-style:{0};',\n outlineWidth: 'outline-width:{0};',\n border: 'border:{0};',\n borderColor: 'border-color:{0};',\n borderRadius: 'border-radius:{0};',\n borderSpacing: 'border-spacing:{0};',\n borderStyle: 'border-style:{0};',\n borderWidth: 'border-width:{0};',\n fontStyle: 'font-style:{0};',\n fontWeight: 'font-weight:{0};',\n fontSize: 'font-size:{0};',\n fontFamily: 'font-family:{0};',\n textDecoration: 'text-decoration:{0};',\n cursor: 'cursor:{0};',\n letterSpacing: 'letter-spacing:{0};',\n gutterIconPath: 'background:{0} center center no-repeat;',\n gutterIconSize: 'background-size:{0};',\n contentText: 'content:\\'{0}\\';',\n contentIconPath: 'content:{0};',\n margin: 'margin:{0};',\n padding: 'padding:{0};',\n width: 'width:{0};',\n height: 'height:{0};'\n};\nclass DecorationCSSRules {\n constructor(ruleType, providerArgs, themeService) {\n this._theme = themeService.getColorTheme();\n this._ruleType = ruleType;\n this._providerArgs = providerArgs;\n this._usesThemeColors = false;\n this._hasContent = false;\n this._hasLetterSpacing = false;\n let className = CSSNameHelper.getClassName(this._providerArgs.key, ruleType);\n if (this._providerArgs.parentTypeKey) {\n className = className + ' ' + CSSNameHelper.getClassName(this._providerArgs.parentTypeKey, ruleType);\n }\n this._className = className;\n this._unThemedSelector = CSSNameHelper.getSelector(this._providerArgs.key, this._providerArgs.parentTypeKey, ruleType);\n this._buildCSS();\n if (this._usesThemeColors) {\n this._themeListener = themeService.onDidColorThemeChange(theme => {\n this._theme = themeService.getColorTheme();\n this._removeCSS();\n this._buildCSS();\n });\n }\n else {\n this._themeListener = null;\n }\n }\n dispose() {\n if (this._hasContent) {\n this._removeCSS();\n this._hasContent = false;\n }\n if (this._themeListener) {\n this._themeListener.dispose();\n this._themeListener = null;\n }\n }\n get hasContent() {\n return this._hasContent;\n }\n get hasLetterSpacing() {\n return this._hasLetterSpacing;\n }\n get className() {\n return this._className;\n }\n _buildCSS() {\n const options = this._providerArgs.options;\n let unthemedCSS, lightCSS, darkCSS;\n switch (this._ruleType) {\n case 0 /* ClassName */:\n unthemedCSS = this.getCSSTextForModelDecorationClassName(options);\n lightCSS = this.getCSSTextForModelDecorationClassName(options.light);\n darkCSS = this.getCSSTextForModelDecorationClassName(options.dark);\n break;\n case 1 /* InlineClassName */:\n unthemedCSS = this.getCSSTextForModelDecorationInlineClassName(options);\n lightCSS = this.getCSSTextForModelDecorationInlineClassName(options.light);\n darkCSS = this.getCSSTextForModelDecorationInlineClassName(options.dark);\n break;\n case 2 /* GlyphMarginClassName */:\n unthemedCSS = this.getCSSTextForModelDecorationGlyphMarginClassName(options);\n lightCSS = this.getCSSTextForModelDecorationGlyphMarginClassName(options.light);\n darkCSS = this.getCSSTextForModelDecorationGlyphMarginClassName(options.dark);\n break;\n case 3 /* BeforeContentClassName */:\n unthemedCSS = this.getCSSTextForModelDecorationContentClassName(options.before);\n lightCSS = this.getCSSTextForModelDecorationContentClassName(options.light && options.light.before);\n darkCSS = this.getCSSTextForModelDecorationContentClassName(options.dark && options.dark.before);\n break;\n case 4 /* AfterContentClassName */:\n unthemedCSS = this.getCSSTextForModelDecorationContentClassName(options.after);\n lightCSS = this.getCSSTextForModelDecorationContentClassName(options.light && options.light.after);\n darkCSS = this.getCSSTextForModelDecorationContentClassName(options.dark && options.dark.after);\n break;\n default:\n throw new Error('Unknown rule type: ' + this._ruleType);\n }\n const sheet = this._providerArgs.styleSheet;\n let hasContent = false;\n if (unthemedCSS.length > 0) {\n sheet.insertRule(`${this._unThemedSelector} {${unthemedCSS}}`, 0);\n hasContent = true;\n }\n if (lightCSS.length > 0) {\n sheet.insertRule(`.vs${this._unThemedSelector} {${lightCSS}}`, 0);\n hasContent = true;\n }\n if (darkCSS.length > 0) {\n sheet.insertRule(`.vs-dark${this._unThemedSelector}, .hc-black${this._unThemedSelector} {${darkCSS}}`, 0);\n hasContent = true;\n }\n this._hasContent = hasContent;\n }\n _removeCSS() {\n this._providerArgs.styleSheet.removeRulesContainingSelector(this._unThemedSelector);\n }\n /**\n * Build the CSS for decorations styled via `className`.\n */\n getCSSTextForModelDecorationClassName(opts) {\n if (!opts) {\n return '';\n }\n const cssTextArr = [];\n this.collectCSSText(opts, ['backgroundColor'], cssTextArr);\n this.collectCSSText(opts, ['outline', 'outlineColor', 'outlineStyle', 'outlineWidth'], cssTextArr);\n this.collectBorderSettingsCSSText(opts, cssTextArr);\n return cssTextArr.join('');\n }\n /**\n * Build the CSS for decorations styled via `inlineClassName`.\n */\n getCSSTextForModelDecorationInlineClassName(opts) {\n if (!opts) {\n return '';\n }\n const cssTextArr = [];\n this.collectCSSText(opts, ['fontStyle', 'fontWeight', 'textDecoration', 'cursor', 'color', 'opacity', 'letterSpacing'], cssTextArr);\n if (opts.letterSpacing) {\n this._hasLetterSpacing = true;\n }\n return cssTextArr.join('');\n }\n /**\n * Build the CSS for decorations styled before or after content.\n */\n getCSSTextForModelDecorationContentClassName(opts) {\n if (!opts) {\n return '';\n }\n const cssTextArr = [];\n if (typeof opts !== 'undefined') {\n this.collectBorderSettingsCSSText(opts, cssTextArr);\n if (typeof opts.contentIconPath !== 'undefined') {\n cssTextArr.push(strings.format(_CSS_MAP.contentIconPath, dom.asCSSUrl(URI.revive(opts.contentIconPath))));\n }\n if (typeof opts.contentText === 'string') {\n const truncated = opts.contentText.match(/^.*$/m)[0]; // only take first line\n const escaped = truncated.replace(/['\\\\]/g, '\\\\$&');\n cssTextArr.push(strings.format(_CSS_MAP.contentText, escaped));\n }\n this.collectCSSText(opts, ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily', 'textDecoration', 'color', 'opacity', 'backgroundColor', 'margin', 'padding'], cssTextArr);\n if (this.collectCSSText(opts, ['width', 'height'], cssTextArr)) {\n cssTextArr.push('display:inline-block;');\n }\n }\n return cssTextArr.join('');\n }\n /**\n * Build the CSS for decorations styled via `glpyhMarginClassName`.\n */\n getCSSTextForModelDecorationGlyphMarginClassName(opts) {\n if (!opts) {\n return '';\n }\n const cssTextArr = [];\n if (typeof opts.gutterIconPath !== 'undefined') {\n cssTextArr.push(strings.format(_CSS_MAP.gutterIconPath, dom.asCSSUrl(URI.revive(opts.gutterIconPath))));\n if (typeof opts.gutterIconSize !== 'undefined') {\n cssTextArr.push(strings.format(_CSS_MAP.gutterIconSize, opts.gutterIconSize));\n }\n }\n return cssTextArr.join('');\n }\n collectBorderSettingsCSSText(opts, cssTextArr) {\n if (this.collectCSSText(opts, ['border', 'borderColor', 'borderRadius', 'borderSpacing', 'borderStyle', 'borderWidth'], cssTextArr)) {\n cssTextArr.push(strings.format('box-sizing: border-box;'));\n return true;\n }\n return false;\n }\n collectCSSText(opts, properties, cssTextArr) {\n const lenBefore = cssTextArr.length;\n for (let property of properties) {\n const value = this.resolveValue(opts[property]);\n if (typeof value === 'string') {\n cssTextArr.push(strings.format(_CSS_MAP[property], value));\n }\n }\n return cssTextArr.length !== lenBefore;\n }\n resolveValue(value) {\n if (isThemeColor(value)) {\n this._usesThemeColors = true;\n const color = this._theme.getColor(value.id);\n if (color) {\n return color.toString();\n }\n return 'transparent';\n }\n return value;\n }\n}\nclass CSSNameHelper {\n static getClassName(key, type) {\n return 'ced-' + key + '-' + type;\n }\n static getSelector(key, parentKey, ruleType) {\n let selector = '.monaco-editor .' + this.getClassName(key, ruleType);\n if (parentKey) {\n selector = selector + '.' + this.getClassName(parentKey, ruleType);\n }\n if (ruleType === 3 /* BeforeContentClassName */) {\n selector += '::before';\n }\n else if (ruleType === 4 /* AfterContentClassName */) {\n selector += '::after';\n }\n return selector;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { windowOpenNoOpener } from '../../../base/browser/dom.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { CodeEditorServiceImpl } from '../../browser/services/codeEditorServiceImpl.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nlet StandaloneCodeEditorServiceImpl = class StandaloneCodeEditorServiceImpl extends CodeEditorServiceImpl {\n constructor(styleSheet, contextKeyService, themeService) {\n super(styleSheet, themeService);\n this.onCodeEditorAdd(() => this._checkContextKey());\n this.onCodeEditorRemove(() => this._checkContextKey());\n this._editorIsOpen = contextKeyService.createKey('editorIsOpen', false);\n this._activeCodeEditor = null;\n }\n _checkContextKey() {\n let hasCodeEditor = false;\n for (const editor of this.listCodeEditors()) {\n if (!editor.isSimpleWidget) {\n hasCodeEditor = true;\n break;\n }\n }\n this._editorIsOpen.set(hasCodeEditor);\n }\n setActiveCodeEditor(activeCodeEditor) {\n this._activeCodeEditor = activeCodeEditor;\n }\n getActiveCodeEditor() {\n return this._activeCodeEditor;\n }\n openCodeEditor(input, source, sideBySide) {\n if (!source) {\n return Promise.resolve(null);\n }\n return Promise.resolve(this.doOpenEditor(source, input));\n }\n doOpenEditor(editor, input) {\n const model = this.findModel(editor, input.resource);\n if (!model) {\n if (input.resource) {\n const schema = input.resource.scheme;\n if (schema === Schemas.http || schema === Schemas.https) {\n // This is a fully qualified http or https URL\n windowOpenNoOpener(input.resource.toString());\n return editor;\n }\n }\n return null;\n }\n const selection = (input.options ? input.options.selection : null);\n if (selection) {\n if (typeof selection.endLineNumber === 'number' && typeof selection.endColumn === 'number') {\n editor.setSelection(selection);\n editor.revealRangeInCenter(selection, 1 /* Immediate */);\n }\n else {\n const pos = {\n lineNumber: selection.startLineNumber,\n column: selection.startColumn\n };\n editor.setPosition(pos);\n editor.revealPositionInCenter(pos, 1 /* Immediate */);\n }\n }\n return editor;\n }\n findModel(editor, resource) {\n const model = editor.getModel();\n if (model && model.uri.toString() !== resource.toString()) {\n return null;\n }\n return model;\n }\n};\nStandaloneCodeEditorServiceImpl = __decorate([\n __param(1, IContextKeyService),\n __param(2, IThemeService)\n], StandaloneCodeEditorServiceImpl);\nexport { StandaloneCodeEditorServiceImpl };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as aria from '../../../base/browser/ui/aria/aria.js';\nimport { Disposable, toDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { CodeEditorWidget } from '../../browser/widget/codeEditorWidget.js';\nimport { DiffEditorWidget } from '../../browser/widget/diffEditorWidget.js';\nimport { InternalEditorAction } from '../../common/editorAction.js';\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\nimport { StandaloneKeybindingService, updateConfigurationService } from './simpleServices.js';\nimport { IStandaloneThemeService } from '../common/standaloneThemeService.js';\nimport { MenuId, MenuRegistry } from '../../../platform/actions/common/actions.js';\nimport { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { ContextKeyExpr, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IContextViewService, IContextMenuService } from '../../../platform/contextview/browser/contextView.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { StandaloneCodeEditorNLS } from '../../common/standaloneStrings.js';\nimport { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js';\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { IModeService } from '../../common/services/modeService.js';\nimport { StandaloneCodeEditorServiceImpl } from './standaloneCodeServiceImpl.js';\nlet LAST_GENERATED_COMMAND_ID = 0;\nlet ariaDomNodeCreated = false;\nfunction createAriaDomNode() {\n if (ariaDomNodeCreated) {\n return;\n }\n ariaDomNodeCreated = true;\n aria.setARIAContainer(document.body);\n}\n/**\n * A code editor to be used both by the standalone editor and the standalone diff editor.\n */\nlet StandaloneCodeEditor = class StandaloneCodeEditor extends CodeEditorWidget {\n constructor(domElement, _options, instantiationService, codeEditorService, commandService, contextKeyService, keybindingService, themeService, notificationService, accessibilityService) {\n const options = Object.assign({}, _options);\n options.ariaLabel = options.ariaLabel || StandaloneCodeEditorNLS.editorViewAccessibleLabel;\n options.ariaLabel = options.ariaLabel + ';' + (StandaloneCodeEditorNLS.accessibilityHelpMessage);\n super(domElement, options, {}, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService);\n if (keybindingService instanceof StandaloneKeybindingService) {\n this._standaloneKeybindingService = keybindingService;\n }\n else {\n this._standaloneKeybindingService = null;\n }\n // Create the ARIA dom node as soon as the first editor is instantiated\n createAriaDomNode();\n }\n addCommand(keybinding, handler, context) {\n if (!this._standaloneKeybindingService) {\n console.warn('Cannot add command because the editor is configured with an unrecognized KeybindingService');\n return null;\n }\n let commandId = 'DYNAMIC_' + (++LAST_GENERATED_COMMAND_ID);\n let whenExpression = ContextKeyExpr.deserialize(context);\n this._standaloneKeybindingService.addDynamicKeybinding(commandId, keybinding, handler, whenExpression);\n return commandId;\n }\n createContextKey(key, defaultValue) {\n return this._contextKeyService.createKey(key, defaultValue);\n }\n addAction(_descriptor) {\n if ((typeof _descriptor.id !== 'string') || (typeof _descriptor.label !== 'string') || (typeof _descriptor.run !== 'function')) {\n throw new Error('Invalid action descriptor, `id`, `label` and `run` are required properties!');\n }\n if (!this._standaloneKeybindingService) {\n console.warn('Cannot add keybinding because the editor is configured with an unrecognized KeybindingService');\n return Disposable.None;\n }\n // Read descriptor options\n const id = _descriptor.id;\n const label = _descriptor.label;\n const precondition = ContextKeyExpr.and(ContextKeyExpr.equals('editorId', this.getId()), ContextKeyExpr.deserialize(_descriptor.precondition));\n const keybindings = _descriptor.keybindings;\n const keybindingsWhen = ContextKeyExpr.and(precondition, ContextKeyExpr.deserialize(_descriptor.keybindingContext));\n const contextMenuGroupId = _descriptor.contextMenuGroupId || null;\n const contextMenuOrder = _descriptor.contextMenuOrder || 0;\n const run = (accessor, ...args) => {\n return Promise.resolve(_descriptor.run(this, ...args));\n };\n const toDispose = new DisposableStore();\n // Generate a unique id to allow the same descriptor.id across multiple editor instances\n const uniqueId = this.getId() + ':' + id;\n // Register the command\n toDispose.add(CommandsRegistry.registerCommand(uniqueId, run));\n // Register the context menu item\n if (contextMenuGroupId) {\n let menuItem = {\n command: {\n id: uniqueId,\n title: label\n },\n when: precondition,\n group: contextMenuGroupId,\n order: contextMenuOrder\n };\n toDispose.add(MenuRegistry.appendMenuItem(MenuId.EditorContext, menuItem));\n }\n // Register the keybindings\n if (Array.isArray(keybindings)) {\n for (const kb of keybindings) {\n toDispose.add(this._standaloneKeybindingService.addDynamicKeybinding(uniqueId, kb, run, keybindingsWhen));\n }\n }\n // Finally, register an internal editor action\n let internalAction = new InternalEditorAction(uniqueId, label, label, precondition, run, this._contextKeyService);\n // Store it under the original id, such that trigger with the original id will work\n this._actions[id] = internalAction;\n toDispose.add(toDisposable(() => {\n delete this._actions[id];\n }));\n return toDispose;\n }\n _triggerCommand(handlerId, payload) {\n if (this._codeEditorService instanceof StandaloneCodeEditorServiceImpl) {\n // Help commands find this editor as the active editor\n try {\n this._codeEditorService.setActiveCodeEditor(this);\n super._triggerCommand(handlerId, payload);\n }\n finally {\n this._codeEditorService.setActiveCodeEditor(null);\n }\n }\n else {\n super._triggerCommand(handlerId, payload);\n }\n }\n};\nStandaloneCodeEditor = __decorate([\n __param(2, IInstantiationService),\n __param(3, ICodeEditorService),\n __param(4, ICommandService),\n __param(5, IContextKeyService),\n __param(6, IKeybindingService),\n __param(7, IThemeService),\n __param(8, INotificationService),\n __param(9, IAccessibilityService)\n], StandaloneCodeEditor);\nexport { StandaloneCodeEditor };\nlet StandaloneEditor = class StandaloneEditor extends StandaloneCodeEditor {\n constructor(domElement, _options, toDispose, instantiationService, codeEditorService, commandService, contextKeyService, keybindingService, contextViewService, themeService, notificationService, configurationService, accessibilityService, modelService, modeService) {\n const options = Object.assign({}, _options);\n updateConfigurationService(configurationService, options, false);\n const themeDomRegistration = themeService.registerEditorContainer(domElement);\n if (typeof options.theme === 'string') {\n themeService.setTheme(options.theme);\n }\n if (typeof options.autoDetectHighContrast !== 'undefined') {\n themeService.setAutoDetectHighContrast(Boolean(options.autoDetectHighContrast));\n }\n let _model = options.model;\n delete options.model;\n super(domElement, options, instantiationService, codeEditorService, commandService, contextKeyService, keybindingService, themeService, notificationService, accessibilityService);\n this._contextViewService = contextViewService;\n this._configurationService = configurationService;\n this._standaloneThemeService = themeService;\n this._register(toDispose);\n this._register(themeDomRegistration);\n let model;\n if (typeof _model === 'undefined') {\n model = createTextModel(modelService, modeService, options.value || '', options.language || 'text/plain', undefined);\n this._ownsModel = true;\n }\n else {\n model = _model;\n this._ownsModel = false;\n }\n this._attachModel(model);\n if (model) {\n let e = {\n oldModelUrl: null,\n newModelUrl: model.uri\n };\n this._onDidChangeModel.fire(e);\n }\n }\n dispose() {\n super.dispose();\n }\n updateOptions(newOptions) {\n updateConfigurationService(this._configurationService, newOptions, false);\n if (typeof newOptions.theme === 'string') {\n this._standaloneThemeService.setTheme(newOptions.theme);\n }\n if (typeof newOptions.autoDetectHighContrast !== 'undefined') {\n this._standaloneThemeService.setAutoDetectHighContrast(Boolean(newOptions.autoDetectHighContrast));\n }\n super.updateOptions(newOptions);\n }\n _attachModel(model) {\n super._attachModel(model);\n if (this._modelData) {\n this._contextViewService.setContainer(this._modelData.view.domNode.domNode);\n }\n }\n _postDetachModelCleanup(detachedModel) {\n super._postDetachModelCleanup(detachedModel);\n if (detachedModel && this._ownsModel) {\n detachedModel.dispose();\n this._ownsModel = false;\n }\n }\n};\nStandaloneEditor = __decorate([\n __param(3, IInstantiationService),\n __param(4, ICodeEditorService),\n __param(5, ICommandService),\n __param(6, IContextKeyService),\n __param(7, IKeybindingService),\n __param(8, IContextViewService),\n __param(9, IStandaloneThemeService),\n __param(10, INotificationService),\n __param(11, IConfigurationService),\n __param(12, IAccessibilityService),\n __param(13, IModelService),\n __param(14, IModeService)\n], StandaloneEditor);\nexport { StandaloneEditor };\nlet StandaloneDiffEditor = class StandaloneDiffEditor extends DiffEditorWidget {\n constructor(domElement, _options, toDispose, instantiationService, contextKeyService, keybindingService, contextViewService, editorWorkerService, codeEditorService, themeService, notificationService, configurationService, contextMenuService, editorProgressService, clipboardService) {\n const options = Object.assign({}, _options);\n updateConfigurationService(configurationService, options, true);\n const themeDomRegistration = themeService.registerEditorContainer(domElement);\n if (typeof options.theme === 'string') {\n themeService.setTheme(options.theme);\n }\n if (typeof options.autoDetectHighContrast !== 'undefined') {\n themeService.setAutoDetectHighContrast(Boolean(options.autoDetectHighContrast));\n }\n super(domElement, options, {}, clipboardService, editorWorkerService, contextKeyService, instantiationService, codeEditorService, themeService, notificationService, contextMenuService, editorProgressService);\n this._contextViewService = contextViewService;\n this._configurationService = configurationService;\n this._standaloneThemeService = themeService;\n this._register(toDispose);\n this._register(themeDomRegistration);\n this._contextViewService.setContainer(this._containerDomElement);\n }\n dispose() {\n super.dispose();\n }\n updateOptions(newOptions) {\n updateConfigurationService(this._configurationService, newOptions, true);\n if (typeof newOptions.theme === 'string') {\n this._standaloneThemeService.setTheme(newOptions.theme);\n }\n if (typeof newOptions.autoDetectHighContrast !== 'undefined') {\n this._standaloneThemeService.setAutoDetectHighContrast(Boolean(newOptions.autoDetectHighContrast));\n }\n super.updateOptions(newOptions);\n }\n _createInnerEditor(instantiationService, container, options) {\n return instantiationService.createInstance(StandaloneCodeEditor, container, options);\n }\n getOriginalEditor() {\n return super.getOriginalEditor();\n }\n getModifiedEditor() {\n return super.getModifiedEditor();\n }\n addCommand(keybinding, handler, context) {\n return this.getModifiedEditor().addCommand(keybinding, handler, context);\n }\n createContextKey(key, defaultValue) {\n return this.getModifiedEditor().createContextKey(key, defaultValue);\n }\n addAction(descriptor) {\n return this.getModifiedEditor().addAction(descriptor);\n }\n};\nStandaloneDiffEditor = __decorate([\n __param(3, IInstantiationService),\n __param(4, IContextKeyService),\n __param(5, IKeybindingService),\n __param(6, IContextViewService),\n __param(7, IEditorWorkerService),\n __param(8, ICodeEditorService),\n __param(9, IStandaloneThemeService),\n __param(10, INotificationService),\n __param(11, IConfigurationService),\n __param(12, IContextMenuService),\n __param(13, IEditorProgressService),\n __param(14, IClipboardService)\n], StandaloneDiffEditor);\nexport { StandaloneDiffEditor };\n/**\n * @internal\n */\nexport function createTextModel(modelService, modeService, value, language, uri) {\n value = value || '';\n if (!language) {\n const firstLF = value.indexOf('\\n');\n let firstLine = value;\n if (firstLF !== -1) {\n firstLine = value.substring(0, firstLF);\n }\n return doCreateModel(modelService, value, modeService.createByFilepathOrFirstLine(uri || null, firstLine), uri);\n }\n return doCreateModel(modelService, value, modeService.create(language), uri);\n}\n/**\n * @internal\n */\nfunction doCreateModel(modelService, value, languageSelection, uri) {\n return modelService.createModel(value, languageSelection, uri);\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 *--------------------------------------------------------------------------------------------*/\nexport class FrankensteinMode {\n constructor(languageIdentifier) {\n this._languageIdentifier = languageIdentifier;\n }\n getId() {\n return this._languageIdentifier.language;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { basename, posix } from './path.js';\nimport { startsWithUTF8BOM } from './strings.js';\nimport { match } from './glob.js';\nimport { Schemas } from './network.js';\nimport { DataUri } from './resources.js';\nexport const MIME_TEXT = 'text/plain';\nexport const MIME_UNKNOWN = 'application/unknown';\nlet registeredAssociations = [];\nlet nonUserRegisteredAssociations = [];\nlet userRegisteredAssociations = [];\n/**\n * Associate a text mime to the registry.\n */\nexport function registerTextMime(association, warnOnOverwrite = false) {\n // Register\n const associationItem = toTextMimeAssociationItem(association);\n registeredAssociations.push(associationItem);\n if (!associationItem.userConfigured) {\n nonUserRegisteredAssociations.push(associationItem);\n }\n else {\n userRegisteredAssociations.push(associationItem);\n }\n // Check for conflicts unless this is a user configured association\n if (warnOnOverwrite && !associationItem.userConfigured) {\n registeredAssociations.forEach(a => {\n if (a.mime === associationItem.mime || a.userConfigured) {\n return; // same mime or userConfigured is ok\n }\n if (associationItem.extension && a.extension === associationItem.extension) {\n console.warn(`Overwriting extension <<${associationItem.extension}>> to now point to mime <<${associationItem.mime}>>`);\n }\n if (associationItem.filename && a.filename === associationItem.filename) {\n console.warn(`Overwriting filename <<${associationItem.filename}>> to now point to mime <<${associationItem.mime}>>`);\n }\n if (associationItem.filepattern && a.filepattern === associationItem.filepattern) {\n console.warn(`Overwriting filepattern <<${associationItem.filepattern}>> to now point to mime <<${associationItem.mime}>>`);\n }\n if (associationItem.firstline && a.firstline === associationItem.firstline) {\n console.warn(`Overwriting firstline <<${associationItem.firstline}>> to now point to mime <<${associationItem.mime}>>`);\n }\n });\n }\n}\nfunction toTextMimeAssociationItem(association) {\n return {\n id: association.id,\n mime: association.mime,\n filename: association.filename,\n extension: association.extension,\n filepattern: association.filepattern,\n firstline: association.firstline,\n userConfigured: association.userConfigured,\n filenameLowercase: association.filename ? association.filename.toLowerCase() : undefined,\n extensionLowercase: association.extension ? association.extension.toLowerCase() : undefined,\n filepatternLowercase: association.filepattern ? association.filepattern.toLowerCase() : undefined,\n filepatternOnPath: association.filepattern ? association.filepattern.indexOf(posix.sep) >= 0 : false\n };\n}\n/**\n * Given a file, return the best matching mime type for it\n */\nexport function guessMimeTypes(resource, firstLine) {\n let path;\n if (resource) {\n switch (resource.scheme) {\n case Schemas.file:\n path = resource.fsPath;\n break;\n case Schemas.data:\n const metadata = DataUri.parseMetaData(resource);\n path = metadata.get(DataUri.META_DATA_LABEL);\n break;\n default:\n path = resource.path;\n }\n }\n if (!path) {\n return [MIME_UNKNOWN];\n }\n path = path.toLowerCase();\n const filename = basename(path);\n // 1.) User configured mappings have highest priority\n const configuredMime = guessMimeTypeByPath(path, filename, userRegisteredAssociations);\n if (configuredMime) {\n return [configuredMime, MIME_TEXT];\n }\n // 2.) Registered mappings have middle priority\n const registeredMime = guessMimeTypeByPath(path, filename, nonUserRegisteredAssociations);\n if (registeredMime) {\n return [registeredMime, MIME_TEXT];\n }\n // 3.) Firstline has lowest priority\n if (firstLine) {\n const firstlineMime = guessMimeTypeByFirstline(firstLine);\n if (firstlineMime) {\n return [firstlineMime, MIME_TEXT];\n }\n }\n return [MIME_UNKNOWN];\n}\nfunction guessMimeTypeByPath(path, filename, associations) {\n let filenameMatch = null;\n let patternMatch = null;\n let extensionMatch = null;\n // We want to prioritize associations based on the order they are registered so that the last registered\n // association wins over all other. This is for https://github.com/microsoft/vscode/issues/20074\n for (let i = associations.length - 1; i >= 0; i--) {\n const association = associations[i];\n // First exact name match\n if (filename === association.filenameLowercase) {\n filenameMatch = association;\n break; // take it!\n }\n // Longest pattern match\n if (association.filepattern) {\n if (!patternMatch || association.filepattern.length > patternMatch.filepattern.length) {\n const target = association.filepatternOnPath ? path : filename; // match on full path if pattern contains path separator\n if (match(association.filepatternLowercase, target)) {\n patternMatch = association;\n }\n }\n }\n // Longest extension match\n if (association.extension) {\n if (!extensionMatch || association.extension.length > extensionMatch.extension.length) {\n if (filename.endsWith(association.extensionLowercase)) {\n extensionMatch = association;\n }\n }\n }\n }\n // 1.) Exact name match has second highest prio\n if (filenameMatch) {\n return filenameMatch.mime;\n }\n // 2.) Match on pattern\n if (patternMatch) {\n return patternMatch.mime;\n }\n // 3.) Match on extension comes next\n if (extensionMatch) {\n return extensionMatch.mime;\n }\n return null;\n}\nfunction guessMimeTypeByFirstline(firstLine) {\n if (startsWithUTF8BOM(firstLine)) {\n firstLine = firstLine.substr(1);\n }\n if (firstLine.length > 0) {\n // We want to prioritize associations based on the order they are registered so that the last registered\n // association wins over all other. This is for https://github.com/microsoft/vscode/issues/20074\n for (let i = registeredAssociations.length - 1; i >= 0; i--) {\n const association = registeredAssociations[i];\n if (!association.firstline) {\n continue;\n }\n const matches = firstLine.match(association.firstline);\n if (matches && matches.length > 0) {\n return association.mime;\n }\n }\n }\n return null;\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 *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as mime from '../../../base/common/mime.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { LanguageIdentifier } from '../modes.js';\nimport { ModesRegistry } from '../modes/modesRegistry.js';\nimport { NULL_LANGUAGE_IDENTIFIER, NULL_MODE_ID } from '../modes/nullMode.js';\nimport { Extensions } from '../../../platform/configuration/common/configurationRegistry.js';\nimport { Registry } from '../../../platform/registry/common/platform.js';\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport class LanguagesRegistry extends Disposable {\n constructor(useModesRegistry = true, warnOnOverwrite = false) {\n super();\n this._onDidChange = this._register(new Emitter());\n this.onDidChange = this._onDidChange.event;\n this._warnOnOverwrite = warnOnOverwrite;\n this._nextLanguageId2 = 1;\n this._languageIdToLanguage = [];\n this._languageToLanguageId = Object.create(null);\n this._languages = {};\n this._mimeTypesMap = {};\n this._nameMap = {};\n this._lowercaseNameMap = {};\n if (useModesRegistry) {\n this._initializeFromRegistry();\n this._register(ModesRegistry.onDidChangeLanguages((m) => this._initializeFromRegistry()));\n }\n }\n _initializeFromRegistry() {\n this._languages = {};\n this._mimeTypesMap = {};\n this._nameMap = {};\n this._lowercaseNameMap = {};\n const desc = ModesRegistry.getLanguages();\n this._registerLanguages(desc);\n }\n _registerLanguages(desc) {\n for (const d of desc) {\n this._registerLanguage(d);\n }\n // Rebuild fast path maps\n this._mimeTypesMap = {};\n this._nameMap = {};\n this._lowercaseNameMap = {};\n Object.keys(this._languages).forEach((langId) => {\n let language = this._languages[langId];\n if (language.name) {\n this._nameMap[language.name] = language.identifier;\n }\n language.aliases.forEach((alias) => {\n this._lowercaseNameMap[alias.toLowerCase()] = language.identifier;\n });\n language.mimetypes.forEach((mimetype) => {\n this._mimeTypesMap[mimetype] = language.identifier;\n });\n });\n Registry.as(Extensions.Configuration).registerOverrideIdentifiers(ModesRegistry.getLanguages().map(language => language.id));\n this._onDidChange.fire();\n }\n _getLanguageId(language) {\n if (this._languageToLanguageId[language]) {\n return this._languageToLanguageId[language];\n }\n const languageId = this._nextLanguageId2++;\n this._languageIdToLanguage[languageId] = language;\n this._languageToLanguageId[language] = languageId;\n return languageId;\n }\n _registerLanguage(lang) {\n const langId = lang.id;\n let resolvedLanguage;\n if (hasOwnProperty.call(this._languages, langId)) {\n resolvedLanguage = this._languages[langId];\n }\n else {\n const languageId = this._getLanguageId(langId);\n resolvedLanguage = {\n identifier: new LanguageIdentifier(langId, languageId),\n name: null,\n mimetypes: [],\n aliases: [],\n extensions: [],\n filenames: [],\n configurationFiles: []\n };\n this._languages[langId] = resolvedLanguage;\n }\n this._mergeLanguage(resolvedLanguage, lang);\n }\n _mergeLanguage(resolvedLanguage, lang) {\n const langId = lang.id;\n let primaryMime = null;\n if (Array.isArray(lang.mimetypes) && lang.mimetypes.length > 0) {\n resolvedLanguage.mimetypes.push(...lang.mimetypes);\n primaryMime = lang.mimetypes[0];\n }\n if (!primaryMime) {\n primaryMime = `text/x-${langId}`;\n resolvedLanguage.mimetypes.push(primaryMime);\n }\n if (Array.isArray(lang.extensions)) {\n if (lang.configuration) {\n // insert first as this appears to be the 'primary' language definition\n resolvedLanguage.extensions = lang.extensions.concat(resolvedLanguage.extensions);\n }\n else {\n resolvedLanguage.extensions = resolvedLanguage.extensions.concat(lang.extensions);\n }\n for (let extension of lang.extensions) {\n mime.registerTextMime({ id: langId, mime: primaryMime, extension: extension }, this._warnOnOverwrite);\n }\n }\n if (Array.isArray(lang.filenames)) {\n for (let filename of lang.filenames) {\n mime.registerTextMime({ id: langId, mime: primaryMime, filename: filename }, this._warnOnOverwrite);\n resolvedLanguage.filenames.push(filename);\n }\n }\n if (Array.isArray(lang.filenamePatterns)) {\n for (let filenamePattern of lang.filenamePatterns) {\n mime.registerTextMime({ id: langId, mime: primaryMime, filepattern: filenamePattern }, this._warnOnOverwrite);\n }\n }\n if (typeof lang.firstLine === 'string' && lang.firstLine.length > 0) {\n let firstLineRegexStr = lang.firstLine;\n if (firstLineRegexStr.charAt(0) !== '^') {\n firstLineRegexStr = '^' + firstLineRegexStr;\n }\n try {\n let firstLineRegex = new RegExp(firstLineRegexStr);\n if (!strings.regExpLeadsToEndlessLoop(firstLineRegex)) {\n mime.registerTextMime({ id: langId, mime: primaryMime, firstline: firstLineRegex }, this._warnOnOverwrite);\n }\n }\n catch (err) {\n // Most likely, the regex was bad\n onUnexpectedError(err);\n }\n }\n resolvedLanguage.aliases.push(langId);\n let langAliases = null;\n if (typeof lang.aliases !== 'undefined' && Array.isArray(lang.aliases)) {\n if (lang.aliases.length === 0) {\n // signal that this language should not get a name\n langAliases = [null];\n }\n else {\n langAliases = lang.aliases;\n }\n }\n if (langAliases !== null) {\n for (const langAlias of langAliases) {\n if (!langAlias || langAlias.length === 0) {\n continue;\n }\n resolvedLanguage.aliases.push(langAlias);\n }\n }\n let containsAliases = (langAliases !== null && langAliases.length > 0);\n if (containsAliases && langAliases[0] === null) {\n // signal that this language should not get a name\n }\n else {\n let bestName = (containsAliases ? langAliases[0] : null) || langId;\n if (containsAliases || !resolvedLanguage.name) {\n resolvedLanguage.name = bestName;\n }\n }\n if (lang.configuration) {\n resolvedLanguage.configurationFiles.push(lang.configuration);\n }\n }\n isRegisteredMode(mimetypeOrModeId) {\n // Is this a known mime type ?\n if (hasOwnProperty.call(this._mimeTypesMap, mimetypeOrModeId)) {\n return true;\n }\n // Is this a known mode id ?\n return hasOwnProperty.call(this._languages, mimetypeOrModeId);\n }\n getModeIdForLanguageNameLowercase(languageNameLower) {\n if (!hasOwnProperty.call(this._lowercaseNameMap, languageNameLower)) {\n return null;\n }\n return this._lowercaseNameMap[languageNameLower].language;\n }\n extractModeIds(commaSeparatedMimetypesOrCommaSeparatedIds) {\n if (!commaSeparatedMimetypesOrCommaSeparatedIds) {\n return [];\n }\n return (commaSeparatedMimetypesOrCommaSeparatedIds.\n split(',').\n map((mimeTypeOrId) => mimeTypeOrId.trim()).\n map((mimeTypeOrId) => {\n if (hasOwnProperty.call(this._mimeTypesMap, mimeTypeOrId)) {\n return this._mimeTypesMap[mimeTypeOrId].language;\n }\n return mimeTypeOrId;\n }).\n filter((modeId) => {\n return hasOwnProperty.call(this._languages, modeId);\n }));\n }\n getLanguageIdentifier(_modeId) {\n if (_modeId === NULL_MODE_ID || _modeId === 0 /* Null */) {\n return NULL_LANGUAGE_IDENTIFIER;\n }\n let modeId;\n if (typeof _modeId === 'string') {\n modeId = _modeId;\n }\n else {\n modeId = this._languageIdToLanguage[_modeId];\n if (!modeId) {\n return null;\n }\n }\n if (!hasOwnProperty.call(this._languages, modeId)) {\n return null;\n }\n return this._languages[modeId].identifier;\n }\n getModeIdsFromFilepathOrFirstLine(resource, firstLine) {\n if (!resource && !firstLine) {\n return [];\n }\n let mimeTypes = mime.guessMimeTypes(resource, firstLine);\n return this.extractModeIds(mimeTypes.join(','));\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { FrankensteinMode } from '../modes/abstractMode.js';\nimport { NULL_LANGUAGE_IDENTIFIER } from '../modes/nullMode.js';\nimport { LanguagesRegistry } from './languagesRegistry.js';\nimport { firstOrDefault } from '../../../base/common/arrays.js';\nclass LanguageSelection {\n constructor(onLanguagesMaybeChanged, selector) {\n this._selector = selector;\n this.languageIdentifier = this._selector();\n let listener;\n this._onDidChange = new Emitter({\n onFirstListenerAdd: () => {\n listener = onLanguagesMaybeChanged(() => this._evaluate());\n },\n onLastListenerRemove: () => {\n listener.dispose();\n }\n });\n this.onDidChange = this._onDidChange.event;\n }\n _evaluate() {\n let languageIdentifier = this._selector();\n if (languageIdentifier.id === this.languageIdentifier.id) {\n // no change\n return;\n }\n this.languageIdentifier = languageIdentifier;\n this._onDidChange.fire(this.languageIdentifier);\n }\n}\nexport class ModeServiceImpl extends Disposable {\n constructor(warnOnOverwrite = false) {\n super();\n this._onDidCreateMode = this._register(new Emitter());\n this.onDidCreateMode = this._onDidCreateMode.event;\n this._onLanguagesMaybeChanged = this._register(new Emitter({ leakWarningThreshold: 200 /* https://github.com/microsoft/vscode/issues/119968 */ }));\n this.onLanguagesMaybeChanged = this._onLanguagesMaybeChanged.event;\n this._instantiatedModes = {};\n this._registry = this._register(new LanguagesRegistry(true, warnOnOverwrite));\n this._register(this._registry.onDidChange(() => this._onLanguagesMaybeChanged.fire()));\n }\n isRegisteredMode(mimetypeOrModeId) {\n return this._registry.isRegisteredMode(mimetypeOrModeId);\n }\n getModeIdForLanguageName(alias) {\n return this._registry.getModeIdForLanguageNameLowercase(alias);\n }\n getModeIdByFilepathOrFirstLine(resource, firstLine) {\n const modeIds = this._registry.getModeIdsFromFilepathOrFirstLine(resource, firstLine);\n return firstOrDefault(modeIds, null);\n }\n getModeId(commaSeparatedMimetypesOrCommaSeparatedIds) {\n const modeIds = this._registry.extractModeIds(commaSeparatedMimetypesOrCommaSeparatedIds);\n return firstOrDefault(modeIds, null);\n }\n getLanguageIdentifier(modeId) {\n return this._registry.getLanguageIdentifier(modeId);\n }\n // --- instantiation\n create(commaSeparatedMimetypesOrCommaSeparatedIds) {\n return new LanguageSelection(this.onLanguagesMaybeChanged, () => {\n const modeId = this.getModeId(commaSeparatedMimetypesOrCommaSeparatedIds);\n return this._createModeAndGetLanguageIdentifier(modeId);\n });\n }\n createByFilepathOrFirstLine(resource, firstLine) {\n return new LanguageSelection(this.onLanguagesMaybeChanged, () => {\n const modeId = this.getModeIdByFilepathOrFirstLine(resource, firstLine);\n return this._createModeAndGetLanguageIdentifier(modeId);\n });\n }\n _createModeAndGetLanguageIdentifier(modeId) {\n // Fall back to plain text if no mode was found\n const languageIdentifier = this.getLanguageIdentifier(modeId || 'plaintext') || NULL_LANGUAGE_IDENTIFIER;\n this._getOrCreateMode(languageIdentifier.language);\n return languageIdentifier;\n }\n triggerMode(commaSeparatedMimetypesOrCommaSeparatedIds) {\n const modeId = this.getModeId(commaSeparatedMimetypesOrCommaSeparatedIds);\n // Fall back to plain text if no mode was found\n this._getOrCreateMode(modeId || 'plaintext');\n }\n _getOrCreateMode(modeId) {\n if (!this._instantiatedModes.hasOwnProperty(modeId)) {\n let languageIdentifier = this.getLanguageIdentifier(modeId) || NULL_LANGUAGE_IDENTIFIER;\n this._instantiatedModes[modeId] = new FrankensteinMode(languageIdentifier);\n this._onDidCreateMode.fire(this._instantiatedModes[modeId]);\n }\n return this._instantiatedModes[modeId];\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Color } from '../../../../base/common/color.js';\nexport class ParsedTokenThemeRule {\n constructor(token, index, fontStyle, foreground, background) {\n this.token = token;\n this.index = index;\n this.fontStyle = fontStyle;\n this.foreground = foreground;\n this.background = background;\n }\n}\n/**\n * Parse a raw theme into rules.\n */\nexport function parseTokenTheme(source) {\n if (!source || !Array.isArray(source)) {\n return [];\n }\n let result = [], resultLen = 0;\n for (let i = 0, len = source.length; i < len; i++) {\n let entry = source[i];\n let fontStyle = -1 /* NotSet */;\n if (typeof entry.fontStyle === 'string') {\n fontStyle = 0 /* None */;\n let segments = entry.fontStyle.split(' ');\n for (let j = 0, lenJ = segments.length; j < lenJ; j++) {\n let segment = segments[j];\n switch (segment) {\n case 'italic':\n fontStyle = fontStyle | 1 /* Italic */;\n break;\n case 'bold':\n fontStyle = fontStyle | 2 /* Bold */;\n break;\n case 'underline':\n fontStyle = fontStyle | 4 /* Underline */;\n break;\n }\n }\n }\n let foreground = null;\n if (typeof entry.foreground === 'string') {\n foreground = entry.foreground;\n }\n let background = null;\n if (typeof entry.background === 'string') {\n background = entry.background;\n }\n result[resultLen++] = new ParsedTokenThemeRule(entry.token || '', i, fontStyle, foreground, background);\n }\n return result;\n}\n/**\n * Resolve rules (i.e. inheritance).\n */\nfunction resolveParsedTokenThemeRules(parsedThemeRules, customTokenColors) {\n // Sort rules lexicographically, and then by index if necessary\n parsedThemeRules.sort((a, b) => {\n let r = strcmp(a.token, b.token);\n if (r !== 0) {\n return r;\n }\n return a.index - b.index;\n });\n // Determine defaults\n let defaultFontStyle = 0 /* None */;\n let defaultForeground = '000000';\n let defaultBackground = 'ffffff';\n while (parsedThemeRules.length >= 1 && parsedThemeRules[0].token === '') {\n let incomingDefaults = parsedThemeRules.shift();\n if (incomingDefaults.fontStyle !== -1 /* NotSet */) {\n defaultFontStyle = incomingDefaults.fontStyle;\n }\n if (incomingDefaults.foreground !== null) {\n defaultForeground = incomingDefaults.foreground;\n }\n if (incomingDefaults.background !== null) {\n defaultBackground = incomingDefaults.background;\n }\n }\n let colorMap = new ColorMap();\n // start with token colors from custom token themes\n for (let color of customTokenColors) {\n colorMap.getId(color);\n }\n let foregroundColorId = colorMap.getId(defaultForeground);\n let backgroundColorId = colorMap.getId(defaultBackground);\n let defaults = new ThemeTrieElementRule(defaultFontStyle, foregroundColorId, backgroundColorId);\n let root = new ThemeTrieElement(defaults);\n for (let i = 0, len = parsedThemeRules.length; i < len; i++) {\n let rule = parsedThemeRules[i];\n root.insert(rule.token, rule.fontStyle, colorMap.getId(rule.foreground), colorMap.getId(rule.background));\n }\n return new TokenTheme(colorMap, root);\n}\nconst colorRegExp = /^#?([0-9A-Fa-f]{6})([0-9A-Fa-f]{2})?$/;\nexport class ColorMap {\n constructor() {\n this._lastColorId = 0;\n this._id2color = [];\n this._color2id = new Map();\n }\n getId(color) {\n if (color === null) {\n return 0;\n }\n const match = color.match(colorRegExp);\n if (!match) {\n throw new Error('Illegal value for token color: ' + color);\n }\n color = match[1].toUpperCase();\n let value = this._color2id.get(color);\n if (value) {\n return value;\n }\n value = ++this._lastColorId;\n this._color2id.set(color, value);\n this._id2color[value] = Color.fromHex('#' + color);\n return value;\n }\n getColorMap() {\n return this._id2color.slice(0);\n }\n}\nexport class TokenTheme {\n constructor(colorMap, root) {\n this._colorMap = colorMap;\n this._root = root;\n this._cache = new Map();\n }\n static createFromRawTokenTheme(source, customTokenColors) {\n return this.createFromParsedTokenTheme(parseTokenTheme(source), customTokenColors);\n }\n static createFromParsedTokenTheme(source, customTokenColors) {\n return resolveParsedTokenThemeRules(source, customTokenColors);\n }\n getColorMap() {\n return this._colorMap.getColorMap();\n }\n _match(token) {\n return this._root.match(token);\n }\n match(languageId, token) {\n // The cache contains the metadata without the language bits set.\n let result = this._cache.get(token);\n if (typeof result === 'undefined') {\n let rule = this._match(token);\n let standardToken = toStandardTokenType(token);\n result = (rule.metadata\n | (standardToken << 8 /* TOKEN_TYPE_OFFSET */)) >>> 0;\n this._cache.set(token, result);\n }\n return (result\n | (languageId << 0 /* LANGUAGEID_OFFSET */)) >>> 0;\n }\n}\nconst STANDARD_TOKEN_TYPE_REGEXP = /\\b(comment|string|regex|regexp)\\b/;\nexport function toStandardTokenType(tokenType) {\n let m = tokenType.match(STANDARD_TOKEN_TYPE_REGEXP);\n if (!m) {\n return 0 /* Other */;\n }\n switch (m[1]) {\n case 'comment':\n return 1 /* Comment */;\n case 'string':\n return 2 /* String */;\n case 'regex':\n return 4 /* RegEx */;\n case 'regexp':\n return 4 /* RegEx */;\n }\n throw new Error('Unexpected match for standard token type!');\n}\nexport function strcmp(a, b) {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n}\nexport class ThemeTrieElementRule {\n constructor(fontStyle, foreground, background) {\n this._fontStyle = fontStyle;\n this._foreground = foreground;\n this._background = background;\n this.metadata = ((this._fontStyle << 11 /* FONT_STYLE_OFFSET */)\n | (this._foreground << 14 /* FOREGROUND_OFFSET */)\n | (this._background << 23 /* BACKGROUND_OFFSET */)) >>> 0;\n }\n clone() {\n return new ThemeTrieElementRule(this._fontStyle, this._foreground, this._background);\n }\n acceptOverwrite(fontStyle, foreground, background) {\n if (fontStyle !== -1 /* NotSet */) {\n this._fontStyle = fontStyle;\n }\n if (foreground !== 0 /* None */) {\n this._foreground = foreground;\n }\n if (background !== 0 /* None */) {\n this._background = background;\n }\n this.metadata = ((this._fontStyle << 11 /* FONT_STYLE_OFFSET */)\n | (this._foreground << 14 /* FOREGROUND_OFFSET */)\n | (this._background << 23 /* BACKGROUND_OFFSET */)) >>> 0;\n }\n}\nexport class ThemeTrieElement {\n constructor(mainRule) {\n this._mainRule = mainRule;\n this._children = new Map();\n }\n match(token) {\n if (token === '') {\n return this._mainRule;\n }\n let dotIndex = token.indexOf('.');\n let head;\n let tail;\n if (dotIndex === -1) {\n head = token;\n tail = '';\n }\n else {\n head = token.substring(0, dotIndex);\n tail = token.substring(dotIndex + 1);\n }\n let child = this._children.get(head);\n if (typeof child !== 'undefined') {\n return child.match(tail);\n }\n return this._mainRule;\n }\n insert(token, fontStyle, foreground, background) {\n if (token === '') {\n // Merge into the main rule\n this._mainRule.acceptOverwrite(fontStyle, foreground, background);\n return;\n }\n let dotIndex = token.indexOf('.');\n let head;\n let tail;\n if (dotIndex === -1) {\n head = token;\n tail = '';\n }\n else {\n head = token.substring(0, dotIndex);\n tail = token.substring(dotIndex + 1);\n }\n let child = this._children.get(head);\n if (typeof child === 'undefined') {\n child = new ThemeTrieElement(this._mainRule.clone());\n this._children.set(head, child);\n }\n child.insert(tail, fontStyle, foreground, background);\n }\n}\nexport function generateTokensCSSForColorMap(colorMap) {\n let rules = [];\n for (let i = 1, len = colorMap.length; i < len; i++) {\n let color = colorMap[i];\n rules[i] = `.mtk${i} { color: ${color}; }`;\n }\n rules.push('.mtki { font-style: italic; }');\n rules.push('.mtkb { font-weight: bold; }');\n rules.push('.mtku { text-decoration: underline; text-underline-position: under; }');\n return rules.join('\\n');\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 *--------------------------------------------------------------------------------------------*/\nimport { editorActiveIndentGuides, editorIndentGuides } from '../../common/view/editorColorRegistry.js';\nimport { editorBackground, editorForeground, editorInactiveSelection, editorSelectionHighlight } from '../../../platform/theme/common/colorRegistry.js';\n/* -------------------------------- Begin vs theme -------------------------------- */\nexport const vs = {\n base: 'vs',\n inherit: false,\n rules: [\n { token: '', foreground: '000000', background: 'fffffe' },\n { token: 'invalid', foreground: 'cd3131' },\n { token: 'emphasis', fontStyle: 'italic' },\n { token: 'strong', fontStyle: 'bold' },\n { token: 'variable', foreground: '001188' },\n { token: 'variable.predefined', foreground: '4864AA' },\n { token: 'constant', foreground: 'dd0000' },\n { token: 'comment', foreground: '008000' },\n { token: 'number', foreground: '098658' },\n { token: 'number.hex', foreground: '3030c0' },\n { token: 'regexp', foreground: '800000' },\n { token: 'annotation', foreground: '808080' },\n { token: 'type', foreground: '008080' },\n { token: 'delimiter', foreground: '000000' },\n { token: 'delimiter.html', foreground: '383838' },\n { token: 'delimiter.xml', foreground: '0000FF' },\n { token: 'tag', foreground: '800000' },\n { token: 'tag.id.pug', foreground: '4F76AC' },\n { token: 'tag.class.pug', foreground: '4F76AC' },\n { token: 'meta.scss', foreground: '800000' },\n { token: 'metatag', foreground: 'e00000' },\n { token: 'metatag.content.html', foreground: 'FF0000' },\n { token: 'metatag.html', foreground: '808080' },\n { token: 'metatag.xml', foreground: '808080' },\n { token: 'metatag.php', fontStyle: 'bold' },\n { token: 'key', foreground: '863B00' },\n { token: 'string.key.json', foreground: 'A31515' },\n { token: 'string.value.json', foreground: '0451A5' },\n { token: 'attribute.name', foreground: 'FF0000' },\n { token: 'attribute.value', foreground: '0451A5' },\n { token: 'attribute.value.number', foreground: '098658' },\n { token: 'attribute.value.unit', foreground: '098658' },\n { token: 'attribute.value.html', foreground: '0000FF' },\n { token: 'attribute.value.xml', foreground: '0000FF' },\n { token: 'string', foreground: 'A31515' },\n { token: 'string.html', foreground: '0000FF' },\n { token: 'string.sql', foreground: 'FF0000' },\n { token: 'string.yaml', foreground: '0451A5' },\n { token: 'keyword', foreground: '0000FF' },\n { token: 'keyword.json', foreground: '0451A5' },\n { token: 'keyword.flow', foreground: 'AF00DB' },\n { token: 'keyword.flow.scss', foreground: '0000FF' },\n { token: 'operator.scss', foreground: '666666' },\n { token: 'operator.sql', foreground: '778899' },\n { token: 'operator.swift', foreground: '666666' },\n { token: 'predefined.sql', foreground: 'C700C7' },\n ],\n colors: {\n [editorBackground]: '#FFFFFE',\n [editorForeground]: '#000000',\n [editorInactiveSelection]: '#E5EBF1',\n [editorIndentGuides]: '#D3D3D3',\n [editorActiveIndentGuides]: '#939393',\n [editorSelectionHighlight]: '#ADD6FF4D'\n }\n};\n/* -------------------------------- End vs theme -------------------------------- */\n/* -------------------------------- Begin vs-dark theme -------------------------------- */\nexport const vs_dark = {\n base: 'vs-dark',\n inherit: false,\n rules: [\n { token: '', foreground: 'D4D4D4', background: '1E1E1E' },\n { token: 'invalid', foreground: 'f44747' },\n { token: 'emphasis', fontStyle: 'italic' },\n { token: 'strong', fontStyle: 'bold' },\n { token: 'variable', foreground: '74B0DF' },\n { token: 'variable.predefined', foreground: '4864AA' },\n { token: 'variable.parameter', foreground: '9CDCFE' },\n { token: 'constant', foreground: '569CD6' },\n { token: 'comment', foreground: '608B4E' },\n { token: 'number', foreground: 'B5CEA8' },\n { token: 'number.hex', foreground: '5BB498' },\n { token: 'regexp', foreground: 'B46695' },\n { token: 'annotation', foreground: 'cc6666' },\n { token: 'type', foreground: '3DC9B0' },\n { token: 'delimiter', foreground: 'DCDCDC' },\n { token: 'delimiter.html', foreground: '808080' },\n { token: 'delimiter.xml', foreground: '808080' },\n { token: 'tag', foreground: '569CD6' },\n { token: 'tag.id.pug', foreground: '4F76AC' },\n { token: 'tag.class.pug', foreground: '4F76AC' },\n { token: 'meta.scss', foreground: 'A79873' },\n { token: 'meta.tag', foreground: 'CE9178' },\n { token: 'metatag', foreground: 'DD6A6F' },\n { token: 'metatag.content.html', foreground: '9CDCFE' },\n { token: 'metatag.html', foreground: '569CD6' },\n { token: 'metatag.xml', foreground: '569CD6' },\n { token: 'metatag.php', fontStyle: 'bold' },\n { token: 'key', foreground: '9CDCFE' },\n { token: 'string.key.json', foreground: '9CDCFE' },\n { token: 'string.value.json', foreground: 'CE9178' },\n { token: 'attribute.name', foreground: '9CDCFE' },\n { token: 'attribute.value', foreground: 'CE9178' },\n { token: 'attribute.value.number.css', foreground: 'B5CEA8' },\n { token: 'attribute.value.unit.css', foreground: 'B5CEA8' },\n { token: 'attribute.value.hex.css', foreground: 'D4D4D4' },\n { token: 'string', foreground: 'CE9178' },\n { token: 'string.sql', foreground: 'FF0000' },\n { token: 'keyword', foreground: '569CD6' },\n { token: 'keyword.flow', foreground: 'C586C0' },\n { token: 'keyword.json', foreground: 'CE9178' },\n { token: 'keyword.flow.scss', foreground: '569CD6' },\n { token: 'operator.scss', foreground: '909090' },\n { token: 'operator.sql', foreground: '778899' },\n { token: 'operator.swift', foreground: '909090' },\n { token: 'predefined.sql', foreground: 'FF00FF' },\n ],\n colors: {\n [editorBackground]: '#1E1E1E',\n [editorForeground]: '#D4D4D4',\n [editorInactiveSelection]: '#3A3D41',\n [editorIndentGuides]: '#404040',\n [editorActiveIndentGuides]: '#707070',\n [editorSelectionHighlight]: '#ADD6FF26'\n }\n};\n/* -------------------------------- End vs-dark theme -------------------------------- */\n/* -------------------------------- Begin hc-black theme -------------------------------- */\nexport const hc_black = {\n base: 'hc-black',\n inherit: false,\n rules: [\n { token: '', foreground: 'FFFFFF', background: '000000' },\n { token: 'invalid', foreground: 'f44747' },\n { token: 'emphasis', fontStyle: 'italic' },\n { token: 'strong', fontStyle: 'bold' },\n { token: 'variable', foreground: '1AEBFF' },\n { token: 'variable.parameter', foreground: '9CDCFE' },\n { token: 'constant', foreground: '569CD6' },\n { token: 'comment', foreground: '608B4E' },\n { token: 'number', foreground: 'FFFFFF' },\n { token: 'regexp', foreground: 'C0C0C0' },\n { token: 'annotation', foreground: '569CD6' },\n { token: 'type', foreground: '3DC9B0' },\n { token: 'delimiter', foreground: 'FFFF00' },\n { token: 'delimiter.html', foreground: 'FFFF00' },\n { token: 'tag', foreground: '569CD6' },\n { token: 'tag.id.pug', foreground: '4F76AC' },\n { token: 'tag.class.pug', foreground: '4F76AC' },\n { token: 'meta', foreground: 'D4D4D4' },\n { token: 'meta.tag', foreground: 'CE9178' },\n { token: 'metatag', foreground: '569CD6' },\n { token: 'metatag.content.html', foreground: '1AEBFF' },\n { token: 'metatag.html', foreground: '569CD6' },\n { token: 'metatag.xml', foreground: '569CD6' },\n { token: 'metatag.php', fontStyle: 'bold' },\n { token: 'key', foreground: '9CDCFE' },\n { token: 'string.key', foreground: '9CDCFE' },\n { token: 'string.value', foreground: 'CE9178' },\n { token: 'attribute.name', foreground: '569CD6' },\n { token: 'attribute.value', foreground: '3FF23F' },\n { token: 'string', foreground: 'CE9178' },\n { token: 'string.sql', foreground: 'FF0000' },\n { token: 'keyword', foreground: '569CD6' },\n { token: 'keyword.flow', foreground: 'C586C0' },\n { token: 'operator.sql', foreground: '778899' },\n { token: 'operator.swift', foreground: '909090' },\n { token: 'predefined.sql', foreground: 'FF00FF' },\n ],\n colors: {\n [editorBackground]: '#000000',\n [editorForeground]: '#FFFFFF',\n [editorIndentGuides]: '#FFFFFF',\n [editorActiveIndentGuides]: '#FFFFFF',\n }\n};\n/* -------------------------------- End hc-black theme -------------------------------- */\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../base/browser/dom.js';\nimport { Color } from '../../../base/common/color.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { TokenizationRegistry, TokenMetadata } from '../../common/modes.js';\nimport { TokenTheme, generateTokensCSSForColorMap } from '../../common/modes/supports/tokenization.js';\nimport { hc_black, vs, vs_dark } from '../common/themes.js';\nimport { Registry } from '../../../platform/registry/common/platform.js';\nimport { Extensions } from '../../../platform/theme/common/colorRegistry.js';\nimport { Extensions as ThemingExtensions } from '../../../platform/theme/common/themeService.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { ColorScheme } from '../../../platform/theme/common/theme.js';\nimport { getIconsStyleSheet } from '../../../platform/theme/browser/iconsStyleSheet.js';\nconst VS_THEME_NAME = 'vs';\nconst VS_DARK_THEME_NAME = 'vs-dark';\nconst HC_BLACK_THEME_NAME = 'hc-black';\nconst colorRegistry = Registry.as(Extensions.ColorContribution);\nconst themingRegistry = Registry.as(ThemingExtensions.ThemingContribution);\nclass StandaloneTheme {\n constructor(name, standaloneThemeData) {\n this.semanticHighlighting = false;\n this.themeData = standaloneThemeData;\n let base = standaloneThemeData.base;\n if (name.length > 0) {\n if (isBuiltinTheme(name)) {\n this.id = name;\n }\n else {\n this.id = base + ' ' + name;\n }\n this.themeName = name;\n }\n else {\n this.id = base;\n this.themeName = base;\n }\n this.colors = null;\n this.defaultColors = Object.create(null);\n this._tokenTheme = null;\n }\n get base() {\n return this.themeData.base;\n }\n notifyBaseUpdated() {\n if (this.themeData.inherit) {\n this.colors = null;\n this._tokenTheme = null;\n }\n }\n getColors() {\n if (!this.colors) {\n const colors = new Map();\n for (let id in this.themeData.colors) {\n colors.set(id, Color.fromHex(this.themeData.colors[id]));\n }\n if (this.themeData.inherit) {\n let baseData = getBuiltinRules(this.themeData.base);\n for (let id in baseData.colors) {\n if (!colors.has(id)) {\n colors.set(id, Color.fromHex(baseData.colors[id]));\n }\n }\n }\n this.colors = colors;\n }\n return this.colors;\n }\n getColor(colorId, useDefault) {\n const color = this.getColors().get(colorId);\n if (color) {\n return color;\n }\n if (useDefault !== false) {\n return this.getDefault(colorId);\n }\n return undefined;\n }\n getDefault(colorId) {\n let color = this.defaultColors[colorId];\n if (color) {\n return color;\n }\n color = colorRegistry.resolveDefaultColor(colorId, this);\n this.defaultColors[colorId] = color;\n return color;\n }\n defines(colorId) {\n return Object.prototype.hasOwnProperty.call(this.getColors(), colorId);\n }\n get type() {\n switch (this.base) {\n case VS_THEME_NAME: return ColorScheme.LIGHT;\n case HC_BLACK_THEME_NAME: return ColorScheme.HIGH_CONTRAST;\n default: return ColorScheme.DARK;\n }\n }\n get tokenTheme() {\n if (!this._tokenTheme) {\n let rules = [];\n let encodedTokensColors = [];\n if (this.themeData.inherit) {\n let baseData = getBuiltinRules(this.themeData.base);\n rules = baseData.rules;\n if (baseData.encodedTokensColors) {\n encodedTokensColors = baseData.encodedTokensColors;\n }\n }\n rules = rules.concat(this.themeData.rules);\n if (this.themeData.encodedTokensColors) {\n encodedTokensColors = this.themeData.encodedTokensColors;\n }\n this._tokenTheme = TokenTheme.createFromRawTokenTheme(rules, encodedTokensColors);\n }\n return this._tokenTheme;\n }\n getTokenStyleMetadata(type, modifiers, modelLanguage) {\n // use theme rules match\n const style = this.tokenTheme._match([type].concat(modifiers).join('.'));\n const metadata = style.metadata;\n const foreground = TokenMetadata.getForeground(metadata);\n const fontStyle = TokenMetadata.getFontStyle(metadata);\n return {\n foreground: foreground,\n italic: Boolean(fontStyle & 1 /* Italic */),\n bold: Boolean(fontStyle & 2 /* Bold */),\n underline: Boolean(fontStyle & 4 /* Underline */)\n };\n }\n}\nfunction isBuiltinTheme(themeName) {\n return (themeName === VS_THEME_NAME\n || themeName === VS_DARK_THEME_NAME\n || themeName === HC_BLACK_THEME_NAME);\n}\nfunction getBuiltinRules(builtinTheme) {\n switch (builtinTheme) {\n case VS_THEME_NAME:\n return vs;\n case VS_DARK_THEME_NAME:\n return vs_dark;\n case HC_BLACK_THEME_NAME:\n return hc_black;\n }\n}\nfunction newBuiltInTheme(builtinTheme) {\n let themeData = getBuiltinRules(builtinTheme);\n return new StandaloneTheme(builtinTheme, themeData);\n}\nexport class StandaloneThemeServiceImpl extends Disposable {\n constructor() {\n super();\n this._onColorThemeChange = this._register(new Emitter());\n this.onDidColorThemeChange = this._onColorThemeChange.event;\n this._environment = Object.create(null);\n this._autoDetectHighContrast = true;\n this._knownThemes = new Map();\n this._knownThemes.set(VS_THEME_NAME, newBuiltInTheme(VS_THEME_NAME));\n this._knownThemes.set(VS_DARK_THEME_NAME, newBuiltInTheme(VS_DARK_THEME_NAME));\n this._knownThemes.set(HC_BLACK_THEME_NAME, newBuiltInTheme(HC_BLACK_THEME_NAME));\n const iconsStyleSheet = getIconsStyleSheet();\n this._codiconCSS = iconsStyleSheet.getCSS();\n this._themeCSS = '';\n this._allCSS = `${this._codiconCSS}\\n${this._themeCSS}`;\n this._globalStyleElement = null;\n this._styleElements = [];\n this._colorMapOverride = null;\n this.setTheme(VS_THEME_NAME);\n iconsStyleSheet.onDidChange(() => {\n this._codiconCSS = iconsStyleSheet.getCSS();\n this._updateCSS();\n });\n dom.addMatchMediaChangeListener('(forced-colors: active)', () => {\n this._updateActualTheme();\n });\n }\n registerEditorContainer(domNode) {\n if (dom.isInShadowDOM(domNode)) {\n return this._registerShadowDomContainer(domNode);\n }\n return this._registerRegularEditorContainer();\n }\n _registerRegularEditorContainer() {\n if (!this._globalStyleElement) {\n this._globalStyleElement = dom.createStyleSheet();\n this._globalStyleElement.className = 'monaco-colors';\n this._globalStyleElement.textContent = this._allCSS;\n this._styleElements.push(this._globalStyleElement);\n }\n return Disposable.None;\n }\n _registerShadowDomContainer(domNode) {\n const styleElement = dom.createStyleSheet(domNode);\n styleElement.className = 'monaco-colors';\n styleElement.textContent = this._allCSS;\n this._styleElements.push(styleElement);\n return {\n dispose: () => {\n for (let i = 0; i < this._styleElements.length; i++) {\n if (this._styleElements[i] === styleElement) {\n this._styleElements.splice(i, 1);\n return;\n }\n }\n }\n };\n }\n defineTheme(themeName, themeData) {\n if (!/^[a-z0-9\\-]+$/i.test(themeName)) {\n throw new Error('Illegal theme name!');\n }\n if (!isBuiltinTheme(themeData.base) && !isBuiltinTheme(themeName)) {\n throw new Error('Illegal theme base!');\n }\n // set or replace theme\n this._knownThemes.set(themeName, new StandaloneTheme(themeName, themeData));\n if (isBuiltinTheme(themeName)) {\n this._knownThemes.forEach(theme => {\n if (theme.base === themeName) {\n theme.notifyBaseUpdated();\n }\n });\n }\n if (this._theme.themeName === themeName) {\n this.setTheme(themeName); // refresh theme\n }\n }\n getColorTheme() {\n return this._theme;\n }\n setColorMapOverride(colorMapOverride) {\n this._colorMapOverride = colorMapOverride;\n this._updateThemeOrColorMap();\n }\n setTheme(themeName) {\n let theme;\n if (this._knownThemes.has(themeName)) {\n theme = this._knownThemes.get(themeName);\n }\n else {\n theme = this._knownThemes.get(VS_THEME_NAME);\n }\n this._desiredTheme = theme;\n this._updateActualTheme();\n }\n _updateActualTheme() {\n const theme = (this._autoDetectHighContrast && window.matchMedia(`(forced-colors: active)`).matches\n ? this._knownThemes.get(HC_BLACK_THEME_NAME)\n : this._desiredTheme);\n if (this._theme === theme) {\n // Nothing to do\n return;\n }\n this._theme = theme;\n this._updateThemeOrColorMap();\n }\n setAutoDetectHighContrast(autoDetectHighContrast) {\n this._autoDetectHighContrast = autoDetectHighContrast;\n this._updateActualTheme();\n }\n _updateThemeOrColorMap() {\n let cssRules = [];\n let hasRule = {};\n let ruleCollector = {\n addRule: (rule) => {\n if (!hasRule[rule]) {\n cssRules.push(rule);\n hasRule[rule] = true;\n }\n }\n };\n themingRegistry.getThemingParticipants().forEach(p => p(this._theme, ruleCollector, this._environment));\n const colorMap = this._colorMapOverride || this._theme.tokenTheme.getColorMap();\n ruleCollector.addRule(generateTokensCSSForColorMap(colorMap));\n this._themeCSS = cssRules.join('\\n');\n this._updateCSS();\n TokenizationRegistry.setColorMap(colorMap);\n this._onColorThemeChange.fire(this._theme);\n }\n _updateCSS() {\n this._allCSS = `${this._codiconCSS}\\n${this._themeCSS}`;\n this._styleElements.forEach(styleElement => styleElement.textContent = this._allCSS);\n }\n getFileIconTheme() {\n return {\n hasFileIcons: false,\n hasFolderIcons: false,\n hidesExplorerArrows: false\n };\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { ThemeIcon } from '../common/themeService.js';\nimport { getIconRegistry } from '../common/iconRegistry.js';\nimport { asCSSPropertyValue, asCSSUrl } from '../../../base/browser/dom.js';\nimport { Emitter } from '../../../base/common/event.js';\nexport function getIconsStyleSheet() {\n const onDidChangeEmmiter = new Emitter();\n const iconRegistry = getIconRegistry();\n iconRegistry.onDidChange(() => onDidChangeEmmiter.fire());\n return {\n onDidChange: onDidChangeEmmiter.event,\n getCSS() {\n const usedFontIds = {};\n const formatIconRule = (contribution) => {\n let definition = contribution.defaults;\n while (ThemeIcon.isThemeIcon(definition)) {\n const c = iconRegistry.getIcon(definition.id);\n if (!c) {\n return undefined;\n }\n definition = c.defaults;\n }\n const fontId = definition.fontId;\n if (fontId) {\n const fontContribution = iconRegistry.getIconFont(fontId);\n if (fontContribution) {\n usedFontIds[fontId] = fontContribution;\n return `.codicon-${contribution.id}:before { content: '${definition.fontCharacter}'; font-family: ${asCSSPropertyValue(fontId)}; }`;\n }\n }\n return `.codicon-${contribution.id}:before { content: '${definition.fontCharacter}'; }`;\n };\n const rules = [];\n for (let contribution of iconRegistry.getIcons()) {\n const rule = formatIconRule(contribution);\n if (rule) {\n rules.push(rule);\n }\n }\n for (let id in usedFontIds) {\n const fontContribution = usedFontIds[id];\n const src = fontContribution.definition.src.map(l => `${asCSSUrl(l.location)} format('${l.format}')`).join(', ');\n rules.push(`@font-face { src: ${src}; font-family: ${asCSSPropertyValue(id)}; }`);\n }\n return rules.join('\\n');\n }\n };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { PauseableEmitter } from '../../../base/common/event.js';\nimport { Iterable } from '../../../base/common/iterator.js';\nimport { DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { TernarySearchTree } from '../../../base/common/map.js';\nimport { localize } from '../../../nls.js';\nimport { CommandsRegistry } from '../../commands/common/commands.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\nimport { IContextKeyService, SET_CONTEXT_COMMAND_ID, RawContextKey } from '../common/contextkey.js';\nimport { KeybindingResolver } from '../../keybinding/common/keybindingResolver.js';\nconst KEYBINDING_CONTEXT_ATTR = 'data-keybinding-context';\nexport class Context {\n constructor(id, parent) {\n this._id = id;\n this._parent = parent;\n this._value = Object.create(null);\n this._value['_contextId'] = id;\n }\n setValue(key, value) {\n // console.log('SET ' + key + ' = ' + value + ' ON ' + this._id);\n if (this._value[key] !== value) {\n this._value[key] = value;\n return true;\n }\n return false;\n }\n removeValue(key) {\n // console.log('REMOVE ' + key + ' FROM ' + this._id);\n if (key in this._value) {\n delete this._value[key];\n return true;\n }\n return false;\n }\n getValue(key) {\n const ret = this._value[key];\n if (typeof ret === 'undefined' && this._parent) {\n return this._parent.getValue(key);\n }\n return ret;\n }\n}\nclass NullContext extends Context {\n constructor() {\n super(-1, null);\n }\n setValue(key, value) {\n return false;\n }\n removeValue(key) {\n return false;\n }\n getValue(key) {\n return undefined;\n }\n}\nNullContext.INSTANCE = new NullContext();\nclass ConfigAwareContextValuesContainer extends Context {\n constructor(id, _configurationService, emitter) {\n super(id, null);\n this._configurationService = _configurationService;\n this._values = TernarySearchTree.forConfigKeys();\n this._listener = this._configurationService.onDidChangeConfiguration(event => {\n if (event.source === 6 /* DEFAULT */) {\n // new setting, reset everything\n const allKeys = Array.from(Iterable.map(this._values, ([k]) => k));\n this._values.clear();\n emitter.fire(new ArrayContextKeyChangeEvent(allKeys));\n }\n else {\n const changedKeys = [];\n for (const configKey of event.affectedKeys) {\n const contextKey = `config.${configKey}`;\n const cachedItems = this._values.findSuperstr(contextKey);\n if (cachedItems !== undefined) {\n changedKeys.push(...Iterable.map(cachedItems, ([key]) => key));\n this._values.deleteSuperstr(contextKey);\n }\n if (this._values.has(contextKey)) {\n changedKeys.push(contextKey);\n this._values.delete(contextKey);\n }\n }\n emitter.fire(new ArrayContextKeyChangeEvent(changedKeys));\n }\n });\n }\n dispose() {\n this._listener.dispose();\n }\n getValue(key) {\n if (key.indexOf(ConfigAwareContextValuesContainer._keyPrefix) !== 0) {\n return super.getValue(key);\n }\n if (this._values.has(key)) {\n return this._values.get(key);\n }\n const configKey = key.substr(ConfigAwareContextValuesContainer._keyPrefix.length);\n const configValue = this._configurationService.getValue(configKey);\n let value = undefined;\n switch (typeof configValue) {\n case 'number':\n case 'boolean':\n case 'string':\n value = configValue;\n break;\n default:\n if (Array.isArray(configValue)) {\n value = JSON.stringify(configValue);\n }\n else {\n value = configValue;\n }\n }\n this._values.set(key, value);\n return value;\n }\n setValue(key, value) {\n return super.setValue(key, value);\n }\n removeValue(key) {\n return super.removeValue(key);\n }\n}\nConfigAwareContextValuesContainer._keyPrefix = 'config.';\nclass ContextKey {\n constructor(service, key, defaultValue) {\n this._service = service;\n this._key = key;\n this._defaultValue = defaultValue;\n this.reset();\n }\n set(value) {\n this._service.setContext(this._key, value);\n }\n reset() {\n if (typeof this._defaultValue === 'undefined') {\n this._service.removeContext(this._key);\n }\n else {\n this._service.setContext(this._key, this._defaultValue);\n }\n }\n get() {\n return this._service.getContextKeyValue(this._key);\n }\n}\nclass SimpleContextKeyChangeEvent {\n constructor(key) {\n this.key = key;\n }\n affectsSome(keys) {\n return keys.has(this.key);\n }\n}\nclass ArrayContextKeyChangeEvent {\n constructor(keys) {\n this.keys = keys;\n }\n affectsSome(keys) {\n for (const key of this.keys) {\n if (keys.has(key)) {\n return true;\n }\n }\n return false;\n }\n}\nclass CompositeContextKeyChangeEvent {\n constructor(events) {\n this.events = events;\n }\n affectsSome(keys) {\n for (const e of this.events) {\n if (e.affectsSome(keys)) {\n return true;\n }\n }\n return false;\n }\n}\nexport class AbstractContextKeyService {\n constructor(myContextId) {\n this._onDidChangeContext = new PauseableEmitter({ merge: input => new CompositeContextKeyChangeEvent(input) });\n this.onDidChangeContext = this._onDidChangeContext.event;\n this._isDisposed = false;\n this._myContextId = myContextId;\n }\n createKey(key, defaultValue) {\n if (this._isDisposed) {\n throw new Error(`AbstractContextKeyService has been disposed`);\n }\n return new ContextKey(this, key, defaultValue);\n }\n bufferChangeEvents(callback) {\n this._onDidChangeContext.pause();\n try {\n callback();\n }\n finally {\n this._onDidChangeContext.resume();\n }\n }\n createScoped(domNode) {\n if (this._isDisposed) {\n throw new Error(`AbstractContextKeyService has been disposed`);\n }\n return new ScopedContextKeyService(this, domNode);\n }\n contextMatchesRules(rules) {\n if (this._isDisposed) {\n throw new Error(`AbstractContextKeyService has been disposed`);\n }\n const context = this.getContextValuesContainer(this._myContextId);\n const result = KeybindingResolver.contextMatchesRules(context, rules);\n // console.group(rules.serialize() + ' -> ' + result);\n // rules.keys().forEach(key => { console.log(key, ctx[key]); });\n // console.groupEnd();\n return result;\n }\n getContextKeyValue(key) {\n if (this._isDisposed) {\n return undefined;\n }\n return this.getContextValuesContainer(this._myContextId).getValue(key);\n }\n setContext(key, value) {\n if (this._isDisposed) {\n return;\n }\n const myContext = this.getContextValuesContainer(this._myContextId);\n if (!myContext) {\n return;\n }\n if (myContext.setValue(key, value)) {\n this._onDidChangeContext.fire(new SimpleContextKeyChangeEvent(key));\n }\n }\n removeContext(key) {\n if (this._isDisposed) {\n return;\n }\n if (this.getContextValuesContainer(this._myContextId).removeValue(key)) {\n this._onDidChangeContext.fire(new SimpleContextKeyChangeEvent(key));\n }\n }\n getContext(target) {\n if (this._isDisposed) {\n return NullContext.INSTANCE;\n }\n return this.getContextValuesContainer(findContextAttr(target));\n }\n}\nlet ContextKeyService = class ContextKeyService extends AbstractContextKeyService {\n constructor(configurationService) {\n super(0);\n this._contexts = new Map();\n this._toDispose = new DisposableStore();\n this._lastContextId = 0;\n const myContext = new ConfigAwareContextValuesContainer(this._myContextId, configurationService, this._onDidChangeContext);\n this._contexts.set(this._myContextId, myContext);\n this._toDispose.add(myContext);\n // Uncomment this to see the contexts continuously logged\n // let lastLoggedValue: string | null = null;\n // setInterval(() => {\n // \tlet values = Object.keys(this._contexts).map((key) => this._contexts[key]);\n // \tlet logValue = values.map(v => JSON.stringify(v._value, null, '\\t')).join('\\n');\n // \tif (lastLoggedValue !== logValue) {\n // \t\tlastLoggedValue = logValue;\n // \t\tconsole.log(lastLoggedValue);\n // \t}\n // }, 2000);\n }\n dispose() {\n this._onDidChangeContext.dispose();\n this._isDisposed = true;\n this._toDispose.dispose();\n }\n getContextValuesContainer(contextId) {\n if (this._isDisposed) {\n return NullContext.INSTANCE;\n }\n return this._contexts.get(contextId) || NullContext.INSTANCE;\n }\n createChildContext(parentContextId = this._myContextId) {\n if (this._isDisposed) {\n throw new Error(`ContextKeyService has been disposed`);\n }\n let id = (++this._lastContextId);\n this._contexts.set(id, new Context(id, this.getContextValuesContainer(parentContextId)));\n return id;\n }\n disposeContext(contextId) {\n if (!this._isDisposed) {\n this._contexts.delete(contextId);\n }\n }\n};\nContextKeyService = __decorate([\n __param(0, IConfigurationService)\n], ContextKeyService);\nexport { ContextKeyService };\nclass ScopedContextKeyService extends AbstractContextKeyService {\n constructor(parent, domNode) {\n super(parent.createChildContext());\n this._parentChangeListener = new MutableDisposable();\n this._parent = parent;\n this._updateParentChangeListener();\n this._domNode = domNode;\n if (this._domNode.hasAttribute(KEYBINDING_CONTEXT_ATTR)) {\n let extraInfo = '';\n if (this._domNode.classList) {\n extraInfo = Array.from(this._domNode.classList.values()).join(', ');\n }\n console.error(`Element already has context attribute${extraInfo ? ': ' + extraInfo : ''}`);\n }\n this._domNode.setAttribute(KEYBINDING_CONTEXT_ATTR, String(this._myContextId));\n }\n _updateParentChangeListener() {\n // Forward parent events to this listener. Parent will change.\n this._parentChangeListener.value = this._parent.onDidChangeContext(this._onDidChangeContext.fire, this._onDidChangeContext);\n }\n dispose() {\n if (this._isDisposed) {\n return;\n }\n this._onDidChangeContext.dispose();\n this._parent.disposeContext(this._myContextId);\n this._parentChangeListener.dispose();\n this._domNode.removeAttribute(KEYBINDING_CONTEXT_ATTR);\n this._isDisposed = true;\n }\n getContextValuesContainer(contextId) {\n if (this._isDisposed) {\n return NullContext.INSTANCE;\n }\n return this._parent.getContextValuesContainer(contextId);\n }\n createChildContext(parentContextId = this._myContextId) {\n if (this._isDisposed) {\n throw new Error(`ScopedContextKeyService has been disposed`);\n }\n return this._parent.createChildContext(parentContextId);\n }\n disposeContext(contextId) {\n if (this._isDisposed) {\n return;\n }\n this._parent.disposeContext(contextId);\n }\n}\nfunction findContextAttr(domNode) {\n while (domNode) {\n if (domNode.hasAttribute(KEYBINDING_CONTEXT_ATTR)) {\n const attr = domNode.getAttribute(KEYBINDING_CONTEXT_ATTR);\n if (attr) {\n return parseInt(attr, 10);\n }\n return NaN;\n }\n domNode = domNode.parentElement;\n }\n return 0;\n}\nCommandsRegistry.registerCommand(SET_CONTEXT_COMMAND_ID, function (accessor, contextKey, contextValue) {\n accessor.get(IContextKeyService).createKey(String(contextKey), contextValue);\n});\nCommandsRegistry.registerCommand({\n id: 'getContextKeyInfo',\n handler() {\n return [...RawContextKey.all()].sort((a, b) => a.key.localeCompare(b.key));\n },\n description: {\n description: localize('getContextKeyInfo', \"A command that returns information about context keys\"),\n args: []\n }\n});\nCommandsRegistry.registerCommand('_generateContextKeyInfo', function () {\n const result = [];\n const seen = new Set();\n for (let info of RawContextKey.all()) {\n if (!seen.has(info.key)) {\n seen.add(info.key);\n result.push(info);\n }\n }\n result.sort((a, b) => a.key.localeCompare(b.key));\n console.log(JSON.stringify(result, undefined, 2));\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 *--------------------------------------------------------------------------------------------*/\nimport './contextview.css';\nimport * as DOM from '../../dom.js';\nimport * as platform from '../../../common/platform.js';\nimport { toDisposable, Disposable, DisposableStore } from '../../../common/lifecycle.js';\nimport { Range } from '../../../common/range.js';\nimport { BrowserFeatures } from '../../canIUse.js';\nexport var LayoutAnchorMode;\n(function (LayoutAnchorMode) {\n LayoutAnchorMode[LayoutAnchorMode[\"AVOID\"] = 0] = \"AVOID\";\n LayoutAnchorMode[LayoutAnchorMode[\"ALIGN\"] = 1] = \"ALIGN\";\n})(LayoutAnchorMode || (LayoutAnchorMode = {}));\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, viewSize, anchor) {\n const layoutAfterAnchorBoundary = anchor.mode === LayoutAnchorMode.ALIGN ? anchor.offset : anchor.offset + anchor.size;\n const layoutBeforeAnchorBoundary = anchor.mode === LayoutAnchorMode.ALIGN ? anchor.offset + anchor.size : anchor.offset;\n if (anchor.position === 0 /* Before */) {\n if (viewSize <= viewportSize - layoutAfterAnchorBoundary) {\n return layoutAfterAnchorBoundary; // happy case, lay it out after the anchor\n }\n if (viewSize <= layoutBeforeAnchorBoundary) {\n return layoutBeforeAnchorBoundary - viewSize; // ok case, lay it out before the anchor\n }\n return Math.max(viewportSize - viewSize, 0); // sad case, lay it over the anchor\n }\n else {\n if (viewSize <= layoutBeforeAnchorBoundary) {\n return layoutBeforeAnchorBoundary - viewSize; // happy case, lay it out before the anchor\n }\n if (viewSize <= viewportSize - layoutAfterAnchorBoundary) {\n return layoutAfterAnchorBoundary; // ok case, lay it out after the anchor\n }\n return 0; // sad case, lay it over the anchor\n }\n}\nexport class ContextView extends Disposable {\n constructor(container, domPosition) {\n super();\n this.container = null;\n this.delegate = null;\n this.toDisposeOnClean = Disposable.None;\n this.toDisposeOnSetContainer = Disposable.None;\n this.shadowRoot = null;\n this.shadowRootHostElement = null;\n this.view = DOM.$('.context-view');\n this.useFixedPosition = false;\n this.useShadowDOM = false;\n DOM.hide(this.view);\n this.setContainer(container, domPosition);\n this._register(toDisposable(() => this.setContainer(null, 1 /* ABSOLUTE */)));\n }\n setContainer(container, domPosition) {\n var _a;\n if (this.container) {\n this.toDisposeOnSetContainer.dispose();\n if (this.shadowRoot) {\n this.shadowRoot.removeChild(this.view);\n this.shadowRoot = null;\n (_a = this.shadowRootHostElement) === null || _a === void 0 ? void 0 : _a.remove();\n this.shadowRootHostElement = null;\n }\n else {\n this.container.removeChild(this.view);\n }\n this.container = null;\n }\n if (container) {\n this.container = container;\n this.useFixedPosition = domPosition !== 1 /* ABSOLUTE */;\n this.useShadowDOM = domPosition === 3 /* FIXED_SHADOW */;\n if (this.useShadowDOM) {\n this.shadowRootHostElement = DOM.$('.shadow-root-host');\n this.container.appendChild(this.shadowRootHostElement);\n this.shadowRoot = this.shadowRootHostElement.attachShadow({ mode: 'open' });\n const style = document.createElement('style');\n style.textContent = SHADOW_ROOT_CSS;\n this.shadowRoot.appendChild(style);\n this.shadowRoot.appendChild(this.view);\n this.shadowRoot.appendChild(DOM.$('slot'));\n }\n else {\n this.container.appendChild(this.view);\n }\n const toDisposeOnSetContainer = new DisposableStore();\n ContextView.BUBBLE_UP_EVENTS.forEach(event => {\n toDisposeOnSetContainer.add(DOM.addStandardDisposableListener(this.container, event, (e) => {\n this.onDOMEvent(e, false);\n }));\n });\n ContextView.BUBBLE_DOWN_EVENTS.forEach(event => {\n toDisposeOnSetContainer.add(DOM.addStandardDisposableListener(this.container, event, (e) => {\n this.onDOMEvent(e, true);\n }, true));\n });\n this.toDisposeOnSetContainer = toDisposeOnSetContainer;\n }\n }\n show(delegate) {\n if (this.isVisible()) {\n this.hide();\n }\n // Show static box\n DOM.clearNode(this.view);\n this.view.className = 'context-view';\n this.view.style.top = '0px';\n this.view.style.left = '0px';\n this.view.style.zIndex = '2500';\n this.view.style.position = this.useFixedPosition ? 'fixed' : 'absolute';\n DOM.show(this.view);\n // Render content\n this.toDisposeOnClean = delegate.render(this.view) || Disposable.None;\n // Set active delegate\n this.delegate = delegate;\n // Layout\n this.doLayout();\n // Focus\n if (this.delegate.focus) {\n this.delegate.focus();\n }\n }\n getViewElement() {\n return this.view;\n }\n layout() {\n if (!this.isVisible()) {\n return;\n }\n if (this.delegate.canRelayout === false && !(platform.isIOS && BrowserFeatures.pointerEvents)) {\n this.hide();\n return;\n }\n if (this.delegate.layout) {\n this.delegate.layout();\n }\n this.doLayout();\n }\n doLayout() {\n // Check that we still have a delegate - this.delegate.layout may have hidden\n if (!this.isVisible()) {\n return;\n }\n // Get anchor\n let anchor = this.delegate.getAnchor();\n // Compute around\n let around;\n // Get the element's position and size (to anchor the view)\n if (DOM.isHTMLElement(anchor)) {\n let elementPosition = DOM.getDomNodePagePosition(anchor);\n around = {\n top: elementPosition.top,\n left: elementPosition.left,\n width: elementPosition.width,\n height: elementPosition.height\n };\n }\n else {\n around = {\n top: anchor.y,\n left: anchor.x,\n width: anchor.width || 1,\n height: anchor.height || 2\n };\n }\n const viewSizeWidth = DOM.getTotalWidth(this.view);\n const viewSizeHeight = DOM.getTotalHeight(this.view);\n const anchorPosition = this.delegate.anchorPosition || 0 /* BELOW */;\n const anchorAlignment = this.delegate.anchorAlignment || 0 /* LEFT */;\n const anchorAxisAlignment = this.delegate.anchorAxisAlignment || 0 /* VERTICAL */;\n let top;\n let left;\n if (anchorAxisAlignment === 0 /* VERTICAL */) {\n const verticalAnchor = { offset: around.top - window.pageYOffset, size: around.height, position: anchorPosition === 0 /* BELOW */ ? 0 /* Before */ : 1 /* After */ };\n const horizontalAnchor = { offset: around.left, size: around.width, position: anchorAlignment === 0 /* LEFT */ ? 0 /* Before */ : 1 /* After */, mode: LayoutAnchorMode.ALIGN };\n top = layout(window.innerHeight, viewSizeHeight, verticalAnchor) + window.pageYOffset;\n // if view intersects vertically with anchor, we must avoid the anchor\n if (Range.intersects({ start: top, end: top + viewSizeHeight }, { start: verticalAnchor.offset, end: verticalAnchor.offset + verticalAnchor.size })) {\n horizontalAnchor.mode = LayoutAnchorMode.AVOID;\n }\n left = layout(window.innerWidth, viewSizeWidth, horizontalAnchor);\n }\n else {\n const horizontalAnchor = { offset: around.left, size: around.width, position: anchorAlignment === 0 /* LEFT */ ? 0 /* Before */ : 1 /* After */ };\n const verticalAnchor = { offset: around.top, size: around.height, position: anchorPosition === 0 /* BELOW */ ? 0 /* Before */ : 1 /* After */, mode: LayoutAnchorMode.ALIGN };\n left = layout(window.innerWidth, viewSizeWidth, horizontalAnchor);\n // if view intersects horizontally with anchor, we must avoid the anchor\n if (Range.intersects({ start: left, end: left + viewSizeWidth }, { start: horizontalAnchor.offset, end: horizontalAnchor.offset + horizontalAnchor.size })) {\n verticalAnchor.mode = LayoutAnchorMode.AVOID;\n }\n top = layout(window.innerHeight, viewSizeHeight, verticalAnchor) + window.pageYOffset;\n }\n this.view.classList.remove('top', 'bottom', 'left', 'right');\n this.view.classList.add(anchorPosition === 0 /* BELOW */ ? 'bottom' : 'top');\n this.view.classList.add(anchorAlignment === 0 /* LEFT */ ? 'left' : 'right');\n this.view.classList.toggle('fixed', this.useFixedPosition);\n const containerPosition = DOM.getDomNodePagePosition(this.container);\n this.view.style.top = `${top - (this.useFixedPosition ? DOM.getDomNodePagePosition(this.view).top : containerPosition.top)}px`;\n this.view.style.left = `${left - (this.useFixedPosition ? DOM.getDomNodePagePosition(this.view).left : containerPosition.left)}px`;\n this.view.style.width = 'initial';\n }\n hide(data) {\n const delegate = this.delegate;\n this.delegate = null;\n if (delegate === null || delegate === void 0 ? void 0 : delegate.onHide) {\n delegate.onHide(data);\n }\n this.toDisposeOnClean.dispose();\n DOM.hide(this.view);\n }\n isVisible() {\n return !!this.delegate;\n }\n onDOMEvent(e, onCapture) {\n if (this.delegate) {\n if (this.delegate.onDOMEvent) {\n this.delegate.onDOMEvent(e, document.activeElement);\n }\n else if (onCapture && !DOM.isAncestor(e.target, this.container)) {\n this.hide();\n }\n }\n }\n dispose() {\n this.hide();\n super.dispose();\n }\n}\nContextView.BUBBLE_UP_EVENTS = ['click', 'keydown', 'focus', 'blur'];\nContextView.BUBBLE_DOWN_EVENTS = ['click'];\nlet SHADOW_ROOT_CSS = /* css */ `\n\t:host {\n\t\tall: initial; /* 1st rule so subsequent properties are reset. */\n\t}\n\n\t@font-face {\n\t\tfont-family: \"codicon\";\n\t\tsrc: url(\"./codicon.ttf?5d4d76ab2ce5108968ad644d591a16a6\") format(\"truetype\");\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, \"Nanum Gothic\", \"Apple SD Gothic Neo\", \"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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../../nls.js';\nimport * as strings from '../../../common/strings.js';\nimport { SubmenuAction, Separator, EmptySubmenuAction } from '../../../common/actions.js';\nimport { ActionBar } from '../actionbar/actionbar.js';\nimport { EventType, EventHelper, isAncestor, addDisposableListener, append, $, clearNode, createStyleSheet, isInShadowDOM, getActiveElement, Dimension } from '../../dom.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { RunOnceScheduler } from '../../../common/async.js';\nimport { DisposableStore } from '../../../common/lifecycle.js';\nimport { DomScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { layout } from '../contextview/contextview.js';\nimport { isLinux, isMacintosh } from '../../../common/platform.js';\nimport { Codicon, registerCodicon } from '../../../common/codicons.js';\nimport { BaseActionViewItem, ActionViewItem } from '../actionbar/actionViewItems.js';\nimport { formatRule } from '../codicons/codiconStyles.js';\nimport { isFirefox } from '../../browser.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { stripIcons } from '../../../common/iconLabels.js';\nexport const MENU_MNEMONIC_REGEX = /\\(&([^\\s&])\\)|(^|[^&])&([^\\s&])/;\nexport const MENU_ESCAPED_MNEMONIC_REGEX = /(&amp;)?(&amp;)([^\\s&])/g;\nconst menuSelectionIcon = registerCodicon('menu-selection', Codicon.check);\nconst menuSubmenuIcon = registerCodicon('menu-submenu', Codicon.chevronRight);\nexport var Direction;\n(function (Direction) {\n Direction[Direction[\"Right\"] = 0] = \"Right\";\n Direction[Direction[\"Left\"] = 1] = \"Left\";\n})(Direction || (Direction = {}));\nexport class Menu extends ActionBar {\n constructor(container, actions, options = {}) {\n container.classList.add('monaco-menu-container');\n container.setAttribute('role', 'presentation');\n const menuElement = document.createElement('div');\n menuElement.classList.add('monaco-menu');\n menuElement.setAttribute('role', 'presentation');\n super(menuElement, {\n orientation: 1 /* VERTICAL */,\n actionViewItemProvider: action => this.doGetActionViewItem(action, options, parentData),\n context: options.context,\n actionRunner: options.actionRunner,\n ariaLabel: options.ariaLabel,\n focusOnlyEnabledItems: true,\n triggerKeys: { keys: [3 /* Enter */, ...(isMacintosh || isLinux ? [10 /* Space */] : [])], keyDown: true }\n });\n this.menuElement = menuElement;\n this.actionsList.setAttribute('role', 'menu');\n this.actionsList.tabIndex = 0;\n this.menuDisposables = this._register(new DisposableStore());\n this.initializeStyleSheet(container);\n addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n const event = new StandardKeyboardEvent(e);\n // Stop tab navigation of menus\n if (event.equals(2 /* Tab */)) {\n e.preventDefault();\n }\n });\n if (options.enableMnemonics) {\n this.menuDisposables.add(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n const key = e.key.toLocaleLowerCase();\n if (this.mnemonics.has(key)) {\n EventHelper.stop(e, true);\n const actions = this.mnemonics.get(key);\n if (actions.length === 1) {\n if (actions[0] instanceof SubmenuMenuActionViewItem && actions[0].container) {\n this.focusItemByElement(actions[0].container);\n }\n actions[0].onClick(e);\n }\n if (actions.length > 1) {\n const action = actions.shift();\n if (action && action.container) {\n this.focusItemByElement(action.container);\n actions.push(action);\n }\n this.mnemonics.set(key, actions);\n }\n }\n }));\n }\n if (isLinux) {\n this._register(addDisposableListener(menuElement, EventType.KEY_DOWN, e => {\n const event = new StandardKeyboardEvent(e);\n if (event.equals(14 /* Home */) || event.equals(11 /* PageUp */)) {\n this.focusedItem = this.viewItems.length - 1;\n this.focusNext();\n EventHelper.stop(e, true);\n }\n else if (event.equals(13 /* End */) || event.equals(12 /* PageDown */)) {\n this.focusedItem = 0;\n this.focusPrevious();\n EventHelper.stop(e, true);\n }\n }));\n }\n this._register(addDisposableListener(this.domNode, EventType.MOUSE_OUT, e => {\n let relatedTarget = e.relatedTarget;\n if (!isAncestor(relatedTarget, this.domNode)) {\n this.focusedItem = undefined;\n this.updateFocus();\n e.stopPropagation();\n }\n }));\n this._register(addDisposableListener(this.actionsList, EventType.MOUSE_OVER, e => {\n let target = e.target;\n if (!target || !isAncestor(target, this.actionsList) || target === this.actionsList) {\n return;\n }\n while (target.parentElement !== this.actionsList && target.parentElement !== null) {\n target = target.parentElement;\n }\n if (target.classList.contains('action-item')) {\n const lastFocusedItem = this.focusedItem;\n this.setFocusedItem(target);\n if (lastFocusedItem !== this.focusedItem) {\n this.updateFocus();\n }\n }\n }));\n let parentData = {\n parent: this\n };\n this.mnemonics = new Map();\n // Scroll Logic\n this.scrollableElement = this._register(new DomScrollableElement(menuElement, {\n alwaysConsumeMouseWheel: true,\n horizontal: 2 /* Hidden */,\n vertical: 3 /* Visible */,\n verticalScrollbarSize: 7,\n handleMouseWheel: true,\n useShadows: true\n }));\n const scrollElement = this.scrollableElement.getDomNode();\n scrollElement.style.position = '';\n this._register(addDisposableListener(scrollElement, EventType.MOUSE_UP, e => {\n // Absorb clicks in menu dead space https://github.com/microsoft/vscode/issues/63575\n // We do this on the scroll element so the scroll bar doesn't dismiss the menu either\n e.preventDefault();\n }));\n menuElement.style.maxHeight = `${Math.max(10, window.innerHeight - container.getBoundingClientRect().top - 35)}px`;\n actions = actions.filter(a => {\n var _a;\n if ((_a = options.submenuIds) === null || _a === void 0 ? void 0 : _a.has(a.id)) {\n console.warn(`Found submenu cycle: ${a.id}`);\n return false;\n }\n return true;\n });\n this.push(actions, { icon: true, label: true, isMenu: true });\n container.appendChild(this.scrollableElement.getDomNode());\n this.scrollableElement.scanDomNode();\n this.viewItems.filter(item => !(item instanceof MenuSeparatorActionViewItem)).forEach((item, index, array) => {\n item.updatePositionInSet(index + 1, array.length);\n });\n }\n initializeStyleSheet(container) {\n if (isInShadowDOM(container)) {\n this.styleSheet = createStyleSheet(container);\n this.styleSheet.textContent = MENU_WIDGET_CSS;\n }\n else {\n if (!Menu.globalStyleSheet) {\n Menu.globalStyleSheet = createStyleSheet();\n Menu.globalStyleSheet.textContent = MENU_WIDGET_CSS;\n }\n this.styleSheet = Menu.globalStyleSheet;\n }\n }\n style(style) {\n const container = this.getContainer();\n const fgColor = style.foregroundColor ? `${style.foregroundColor}` : '';\n const bgColor = style.backgroundColor ? `${style.backgroundColor}` : '';\n const border = style.borderColor ? `1px solid ${style.borderColor}` : '';\n const shadow = style.shadowColor ? `0 2px 4px ${style.shadowColor}` : '';\n container.style.border = border;\n this.domNode.style.color = fgColor;\n this.domNode.style.backgroundColor = bgColor;\n container.style.boxShadow = shadow;\n if (this.viewItems) {\n this.viewItems.forEach(item => {\n if (item instanceof BaseMenuActionViewItem || item instanceof MenuSeparatorActionViewItem) {\n item.style(style);\n }\n });\n }\n }\n getContainer() {\n return this.scrollableElement.getDomNode();\n }\n get onScroll() {\n return this.scrollableElement.onScroll;\n }\n focusItemByElement(element) {\n const lastFocusedItem = this.focusedItem;\n this.setFocusedItem(element);\n if (lastFocusedItem !== this.focusedItem) {\n this.updateFocus();\n }\n }\n setFocusedItem(element) {\n for (let i = 0; i < this.actionsList.children.length; i++) {\n let elem = this.actionsList.children[i];\n if (element === elem) {\n this.focusedItem = i;\n break;\n }\n }\n }\n updateFocus(fromRight) {\n super.updateFocus(fromRight, true);\n if (typeof this.focusedItem !== 'undefined') {\n // Workaround for #80047 caused by an issue in chromium\n // https://bugs.chromium.org/p/chromium/issues/detail?id=414283\n // When that's fixed, just call this.scrollableElement.scanDomNode()\n this.scrollableElement.setScrollPosition({\n scrollTop: Math.round(this.menuElement.scrollTop)\n });\n }\n }\n doGetActionViewItem(action, options, parentData) {\n if (action instanceof Separator) {\n return new MenuSeparatorActionViewItem(options.context, action, { icon: true });\n }\n else if (action instanceof SubmenuAction) {\n const menuActionViewItem = new SubmenuMenuActionViewItem(action, action.actions, parentData, Object.assign(Object.assign({}, options), { submenuIds: new Set([...(options.submenuIds || []), action.id]) }));\n if (options.enableMnemonics) {\n const mnemonic = menuActionViewItem.getMnemonic();\n if (mnemonic && menuActionViewItem.isEnabled()) {\n let actionViewItems = [];\n if (this.mnemonics.has(mnemonic)) {\n actionViewItems = this.mnemonics.get(mnemonic);\n }\n actionViewItems.push(menuActionViewItem);\n this.mnemonics.set(mnemonic, actionViewItems);\n }\n }\n return menuActionViewItem;\n }\n else {\n const menuItemOptions = { enableMnemonics: options.enableMnemonics, useEventAsContext: options.useEventAsContext };\n if (options.getKeyBinding) {\n const keybinding = options.getKeyBinding(action);\n if (keybinding) {\n const keybindingLabel = keybinding.getLabel();\n if (keybindingLabel) {\n menuItemOptions.keybinding = keybindingLabel;\n }\n }\n }\n const menuActionViewItem = new BaseMenuActionViewItem(options.context, action, menuItemOptions);\n if (options.enableMnemonics) {\n const mnemonic = menuActionViewItem.getMnemonic();\n if (mnemonic && menuActionViewItem.isEnabled()) {\n let actionViewItems = [];\n if (this.mnemonics.has(mnemonic)) {\n actionViewItems = this.mnemonics.get(mnemonic);\n }\n actionViewItems.push(menuActionViewItem);\n this.mnemonics.set(mnemonic, actionViewItems);\n }\n }\n return menuActionViewItem;\n }\n }\n}\nclass BaseMenuActionViewItem extends BaseActionViewItem {\n constructor(ctx, action, options = {}) {\n options.isMenu = true;\n super(action, action, options);\n this.options = options;\n this.options.icon = options.icon !== undefined ? options.icon : false;\n this.options.label = options.label !== undefined ? options.label : true;\n this.cssClass = '';\n // Set mnemonic\n if (this.options.label && options.enableMnemonics) {\n let label = this.getAction().label;\n if (label) {\n let matches = MENU_MNEMONIC_REGEX.exec(label);\n if (matches) {\n this.mnemonic = (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase();\n }\n }\n }\n // Add mouse up listener later to avoid accidental clicks\n this.runOnceToEnableMouseUp = new RunOnceScheduler(() => {\n if (!this.element) {\n return;\n }\n this._register(addDisposableListener(this.element, EventType.MOUSE_UP, e => {\n // removed default prevention as it conflicts\n // with BaseActionViewItem #101537\n // add back if issues arise and link new issue\n EventHelper.stop(e, true);\n // See https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Interact_with_the_clipboard\n // > Writing to the clipboard\n // > You can use the \"cut\" and \"copy\" commands without any special\n // permission if you are using them in a short-lived event handler\n // for a user action (for example, a click handler).\n // => to get the Copy and Paste context menu actions working on Firefox,\n // there should be no timeout here\n if (isFirefox) {\n const mouseEvent = new StandardMouseEvent(e);\n // Allowing right click to trigger the event causes the issue described below,\n // but since the solution below does not work in FF, we must disable right click\n if (mouseEvent.rightButton) {\n return;\n }\n this.onClick(e);\n }\n // In all other cases, set timout to allow context menu cancellation to trigger\n // otherwise the action will destroy the menu and a second context menu\n // will still trigger for right click.\n else {\n setTimeout(() => {\n this.onClick(e);\n }, 0);\n }\n }));\n this._register(addDisposableListener(this.element, EventType.CONTEXT_MENU, e => {\n EventHelper.stop(e, true);\n }));\n }, 100);\n this._register(this.runOnceToEnableMouseUp);\n }\n render(container) {\n super.render(container);\n if (!this.element) {\n return;\n }\n this.container = container;\n this.item = append(this.element, $('a.action-menu-item'));\n if (this._action.id === Separator.ID) {\n // A separator is a presentation item\n this.item.setAttribute('role', 'presentation');\n }\n else {\n this.item.setAttribute('role', 'menuitem');\n if (this.mnemonic) {\n this.item.setAttribute('aria-keyshortcuts', `${this.mnemonic}`);\n }\n }\n this.check = append(this.item, $('span.menu-item-check' + menuSelectionIcon.cssSelector));\n this.check.setAttribute('role', 'none');\n this.label = append(this.item, $('span.action-label'));\n if (this.options.label && this.options.keybinding) {\n append(this.item, $('span.keybinding')).textContent = this.options.keybinding;\n }\n // Adds mouse up listener to actually run the action\n this.runOnceToEnableMouseUp.schedule();\n this.updateClass();\n this.updateLabel();\n this.updateTooltip();\n this.updateEnabled();\n this.updateChecked();\n }\n blur() {\n super.blur();\n this.applyStyle();\n }\n focus() {\n super.focus();\n if (this.item) {\n this.item.focus();\n }\n this.applyStyle();\n }\n updatePositionInSet(pos, setSize) {\n if (this.item) {\n this.item.setAttribute('aria-posinset', `${pos}`);\n this.item.setAttribute('aria-setsize', `${setSize}`);\n }\n }\n updateLabel() {\n if (!this.label) {\n return;\n }\n if (this.options.label) {\n clearNode(this.label);\n let label = stripIcons(this.getAction().label);\n if (label) {\n const cleanLabel = cleanMnemonic(label);\n if (!this.options.enableMnemonics) {\n label = cleanLabel;\n }\n this.label.setAttribute('aria-label', cleanLabel.replace(/&&/g, '&'));\n const matches = MENU_MNEMONIC_REGEX.exec(label);\n if (matches) {\n label = strings.escape(label);\n // This is global, reset it\n MENU_ESCAPED_MNEMONIC_REGEX.lastIndex = 0;\n let escMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n // We can't use negative lookbehind so if we match our negative and skip\n while (escMatch && escMatch[1]) {\n escMatch = MENU_ESCAPED_MNEMONIC_REGEX.exec(label);\n }\n const replaceDoubleEscapes = (str) => str.replace(/&amp;&amp;/g, '&amp;');\n if (escMatch) {\n this.label.append(strings.ltrim(replaceDoubleEscapes(label.substr(0, escMatch.index)), ' '), $('u', { 'aria-hidden': 'true' }, escMatch[3]), strings.rtrim(replaceDoubleEscapes(label.substr(escMatch.index + escMatch[0].length)), ' '));\n }\n else {\n this.label.innerText = replaceDoubleEscapes(label).trim();\n }\n if (this.item) {\n this.item.setAttribute('aria-keyshortcuts', (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase());\n }\n }\n else {\n this.label.innerText = label.replace(/&&/g, '&').trim();\n }\n }\n }\n }\n updateTooltip() {\n let title = null;\n if (this.getAction().tooltip) {\n title = this.getAction().tooltip;\n }\n else if (!this.options.label && this.getAction().label && this.options.icon) {\n title = this.getAction().label;\n if (this.options.keybinding) {\n title = nls.localize({ key: 'titleLabel', comment: ['action title', 'action keybinding'] }, \"{0} ({1})\", title, this.options.keybinding);\n }\n }\n if (title && this.item) {\n this.item.title = title;\n }\n }\n updateClass() {\n if (this.cssClass && this.item) {\n this.item.classList.remove(...this.cssClass.split(' '));\n }\n if (this.options.icon && this.label) {\n this.cssClass = this.getAction().class || '';\n this.label.classList.add('icon');\n if (this.cssClass) {\n this.label.classList.add(...this.cssClass.split(' '));\n }\n this.updateEnabled();\n }\n else if (this.label) {\n this.label.classList.remove('icon');\n }\n }\n updateEnabled() {\n if (this.getAction().enabled) {\n if (this.element) {\n this.element.classList.remove('disabled');\n this.element.removeAttribute('aria-disabled');\n }\n if (this.item) {\n this.item.classList.remove('disabled');\n this.item.removeAttribute('aria-disabled');\n this.item.tabIndex = 0;\n }\n }\n else {\n if (this.element) {\n this.element.classList.add('disabled');\n this.element.setAttribute('aria-disabled', 'true');\n }\n if (this.item) {\n this.item.classList.add('disabled');\n this.item.setAttribute('aria-disabled', 'true');\n }\n }\n }\n updateChecked() {\n if (!this.item) {\n return;\n }\n if (this.getAction().checked) {\n this.item.classList.add('checked');\n this.item.setAttribute('role', 'menuitemcheckbox');\n this.item.setAttribute('aria-checked', 'true');\n }\n else {\n this.item.classList.remove('checked');\n this.item.setAttribute('role', 'menuitem');\n this.item.setAttribute('aria-checked', 'false');\n }\n }\n getMnemonic() {\n return this.mnemonic;\n }\n applyStyle() {\n if (!this.menuStyle) {\n return;\n }\n const isSelected = this.element && this.element.classList.contains('focused');\n const fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n const bgColor = isSelected && this.menuStyle.selectionBackgroundColor ? this.menuStyle.selectionBackgroundColor : undefined;\n const border = isSelected && this.menuStyle.selectionBorderColor ? `thin solid ${this.menuStyle.selectionBorderColor}` : '';\n if (this.item) {\n this.item.style.color = fgColor ? fgColor.toString() : '';\n this.item.style.backgroundColor = bgColor ? bgColor.toString() : '';\n }\n if (this.check) {\n this.check.style.color = fgColor ? fgColor.toString() : '';\n }\n if (this.container) {\n this.container.style.border = border;\n }\n }\n style(style) {\n this.menuStyle = style;\n this.applyStyle();\n }\n}\nclass SubmenuMenuActionViewItem extends BaseMenuActionViewItem {\n constructor(action, submenuActions, parentData, submenuOptions) {\n super(action, action, submenuOptions);\n this.submenuActions = submenuActions;\n this.parentData = parentData;\n this.submenuOptions = submenuOptions;\n this.mysubmenu = null;\n this.submenuDisposables = this._register(new DisposableStore());\n this.mouseOver = false;\n this.expandDirection = submenuOptions && submenuOptions.expandDirection !== undefined ? submenuOptions.expandDirection : Direction.Right;\n this.showScheduler = new RunOnceScheduler(() => {\n if (this.mouseOver) {\n this.cleanupExistingSubmenu(false);\n this.createSubmenu(false);\n }\n }, 250);\n this.hideScheduler = new RunOnceScheduler(() => {\n if (this.element && (!isAncestor(getActiveElement(), this.element) && this.parentData.submenu === this.mysubmenu)) {\n this.parentData.parent.focus(false);\n this.cleanupExistingSubmenu(true);\n }\n }, 750);\n }\n render(container) {\n super.render(container);\n if (!this.element) {\n return;\n }\n if (this.item) {\n this.item.classList.add('monaco-submenu-item');\n this.item.tabIndex = 0;\n this.item.setAttribute('aria-haspopup', 'true');\n this.updateAriaExpanded('false');\n this.submenuIndicator = append(this.item, $('span.submenu-indicator' + menuSubmenuIcon.cssSelector));\n this.submenuIndicator.setAttribute('aria-hidden', 'true');\n }\n this._register(addDisposableListener(this.element, EventType.KEY_UP, e => {\n let event = new StandardKeyboardEvent(e);\n if (event.equals(17 /* RightArrow */) || event.equals(3 /* Enter */)) {\n EventHelper.stop(e, true);\n this.createSubmenu(true);\n }\n }));\n this._register(addDisposableListener(this.element, EventType.KEY_DOWN, e => {\n let event = new StandardKeyboardEvent(e);\n if (getActiveElement() === this.item) {\n if (event.equals(17 /* RightArrow */) || event.equals(3 /* Enter */)) {\n EventHelper.stop(e, true);\n }\n }\n }));\n this._register(addDisposableListener(this.element, EventType.MOUSE_OVER, e => {\n if (!this.mouseOver) {\n this.mouseOver = true;\n this.showScheduler.schedule();\n }\n }));\n this._register(addDisposableListener(this.element, EventType.MOUSE_LEAVE, e => {\n this.mouseOver = false;\n }));\n this._register(addDisposableListener(this.element, EventType.FOCUS_OUT, e => {\n if (this.element && !isAncestor(getActiveElement(), this.element)) {\n this.hideScheduler.schedule();\n }\n }));\n this._register(this.parentData.parent.onScroll(() => {\n this.parentData.parent.focus(false);\n this.cleanupExistingSubmenu(false);\n }));\n }\n updateEnabled() {\n // override on submenu entry\n // native menus do not observe enablement on sumbenus\n // we mimic that behavior\n }\n onClick(e) {\n // stop clicking from trying to run an action\n EventHelper.stop(e, true);\n this.cleanupExistingSubmenu(false);\n this.createSubmenu(true);\n }\n cleanupExistingSubmenu(force) {\n if (this.parentData.submenu && (force || (this.parentData.submenu !== this.mysubmenu))) {\n // disposal may throw if the submenu has already been removed\n try {\n this.parentData.submenu.dispose();\n }\n catch (_a) { }\n this.parentData.submenu = undefined;\n this.updateAriaExpanded('false');\n if (this.submenuContainer) {\n this.submenuDisposables.clear();\n this.submenuContainer = undefined;\n }\n }\n }\n calculateSubmenuMenuLayout(windowDimensions, submenu, entry, expandDirection) {\n const ret = { top: 0, left: 0 };\n // Start with horizontal\n ret.left = layout(windowDimensions.width, submenu.width, { position: expandDirection === Direction.Right ? 0 /* Before */ : 1 /* After */, offset: entry.left, size: entry.width });\n // We don't have enough room to layout the menu fully, so we are overlapping the menu\n if (ret.left >= entry.left && ret.left < entry.left + entry.width) {\n if (entry.left + 10 + submenu.width <= windowDimensions.width) {\n ret.left = entry.left + 10;\n }\n entry.top += 10;\n entry.height = 0;\n }\n // Now that we have a horizontal position, try layout vertically\n ret.top = layout(windowDimensions.height, submenu.height, { position: 0 /* Before */, offset: entry.top, size: 0 });\n // We didn't have enough room below, but we did above, so we shift down to align the menu\n if (ret.top + submenu.height === entry.top && ret.top + entry.height + submenu.height <= windowDimensions.height) {\n ret.top += entry.height;\n }\n return ret;\n }\n createSubmenu(selectFirstItem = true) {\n if (!this.element) {\n return;\n }\n if (!this.parentData.submenu) {\n this.updateAriaExpanded('true');\n this.submenuContainer = append(this.element, $('div.monaco-submenu'));\n this.submenuContainer.classList.add('menubar-menu-items-holder', 'context-view');\n // Set the top value of the menu container before construction\n // This allows the menu constructor to calculate the proper max height\n const computedStyles = getComputedStyle(this.parentData.parent.domNode);\n const paddingTop = parseFloat(computedStyles.paddingTop || '0') || 0;\n // this.submenuContainer.style.top = `${this.element.offsetTop - this.parentData.parent.scrollOffset - paddingTop}px`;\n this.submenuContainer.style.zIndex = '1';\n this.submenuContainer.style.position = 'fixed';\n this.submenuContainer.style.top = '0';\n this.submenuContainer.style.left = '0';\n this.parentData.submenu = new Menu(this.submenuContainer, this.submenuActions.length ? this.submenuActions : [new EmptySubmenuAction()], this.submenuOptions);\n if (this.menuStyle) {\n this.parentData.submenu.style(this.menuStyle);\n }\n // layout submenu\n const entryBox = this.element.getBoundingClientRect();\n const entryBoxUpdated = {\n top: entryBox.top - paddingTop,\n left: entryBox.left,\n height: entryBox.height + 2 * paddingTop,\n width: entryBox.width\n };\n const viewBox = this.submenuContainer.getBoundingClientRect();\n const { top, left } = this.calculateSubmenuMenuLayout(new Dimension(window.innerWidth, window.innerHeight), Dimension.lift(viewBox), entryBoxUpdated, this.expandDirection);\n this.submenuContainer.style.left = `${left}px`;\n this.submenuContainer.style.top = `${top}px`;\n this.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_UP, e => {\n let event = new StandardKeyboardEvent(e);\n if (event.equals(15 /* LeftArrow */)) {\n EventHelper.stop(e, true);\n this.parentData.parent.focus();\n this.cleanupExistingSubmenu(true);\n }\n }));\n this.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_DOWN, e => {\n let event = new StandardKeyboardEvent(e);\n if (event.equals(15 /* LeftArrow */)) {\n EventHelper.stop(e, true);\n }\n }));\n this.submenuDisposables.add(this.parentData.submenu.onDidCancel(() => {\n this.parentData.parent.focus();\n this.cleanupExistingSubmenu(true);\n }));\n this.parentData.submenu.focus(selectFirstItem);\n this.mysubmenu = this.parentData.submenu;\n }\n else {\n this.parentData.submenu.focus(false);\n }\n }\n updateAriaExpanded(value) {\n var _a;\n if (this.item) {\n (_a = this.item) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', value);\n }\n }\n applyStyle() {\n super.applyStyle();\n if (!this.menuStyle) {\n return;\n }\n const isSelected = this.element && this.element.classList.contains('focused');\n const fgColor = isSelected && this.menuStyle.selectionForegroundColor ? this.menuStyle.selectionForegroundColor : this.menuStyle.foregroundColor;\n if (this.submenuIndicator) {\n this.submenuIndicator.style.color = fgColor ? `${fgColor}` : '';\n }\n if (this.parentData.submenu) {\n this.parentData.submenu.style(this.menuStyle);\n }\n }\n dispose() {\n super.dispose();\n this.hideScheduler.dispose();\n if (this.mysubmenu) {\n this.mysubmenu.dispose();\n this.mysubmenu = null;\n }\n if (this.submenuContainer) {\n this.submenuContainer = undefined;\n }\n }\n}\nclass MenuSeparatorActionViewItem extends ActionViewItem {\n style(style) {\n if (this.label) {\n this.label.style.borderBottomColor = style.separatorColor ? `${style.separatorColor}` : '';\n }\n }\n}\nexport function cleanMnemonic(label) {\n const regex = MENU_MNEMONIC_REGEX;\n const matches = regex.exec(label);\n if (!matches) {\n return label;\n }\n const mnemonicInText = !matches[1];\n return label.replace(regex, mnemonicInText ? '$2$3' : '').trim();\n}\nlet MENU_WIDGET_CSS = `\n.monaco-menu {\n\tfont-size: 13px;\n\n}\n\n${formatRule(menuSelectionIcon)}\n${formatRule(menuSubmenuIcon)}\n\n.monaco-menu .monaco-action-bar {\n\ttext-align: right;\n\toverflow: hidden;\n\twhite-space: nowrap;\n}\n\n.monaco-menu .monaco-action-bar .actions-container {\n\tdisplay: flex;\n\tmargin: 0 auto;\n\tpadding: 0;\n\twidth: 100%;\n\tjustify-content: flex-end;\n}\n\n.monaco-menu .monaco-action-bar.vertical .actions-container {\n\tdisplay: inline-block;\n}\n\n.monaco-menu .monaco-action-bar.reverse .actions-container {\n\tflex-direction: row-reverse;\n}\n\n.monaco-menu .monaco-action-bar .action-item {\n\tcursor: pointer;\n\tdisplay: inline-block;\n\ttransition: transform 50ms ease;\n\tposition: relative; /* DO NOT REMOVE - this is the key to preventing the ghosting icon bug in Chrome 42 */\n}\n\n.monaco-menu .monaco-action-bar .action-item.disabled {\n\tcursor: default;\n}\n\n.monaco-menu .monaco-action-bar.animated .action-item.active {\n\ttransform: scale(1.272019649, 1.272019649); /* 1.272019649 = √φ */\n}\n\n.monaco-menu .monaco-action-bar .action-item .icon,\n.monaco-menu .monaco-action-bar .action-item .codicon {\n\tdisplay: inline-block;\n}\n\n.monaco-menu .monaco-action-bar .action-item .codicon {\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-menu .monaco-action-bar .action-label {\n\tfont-size: 11px;\n\tmargin-right: 4px;\n}\n\n.monaco-menu .monaco-action-bar .action-item.disabled .action-label,\n.monaco-menu .monaco-action-bar .action-item.disabled .action-label:hover {\n\topacity: 0.4;\n}\n\n/* Vertical actions */\n\n.monaco-menu .monaco-action-bar.vertical {\n\ttext-align: left;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tdisplay: block;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tdisplay: block;\n\tborder-bottom: 1px solid #bbb;\n\tpadding-top: 1px;\n\tmargin-left: .8em;\n\tmargin-right: .8em;\n}\n\n.monaco-menu .secondary-actions .monaco-action-bar .action-label {\n\tmargin-left: 6px;\n}\n\n/* Action Items */\n.monaco-menu .monaco-action-bar .action-item.select-container {\n\toverflow: hidden; /* somehow the dropdown overflows its container, we prevent it here to not push */\n\tflex: 1;\n\tmax-width: 170px;\n\tmin-width: 60px;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tmargin-right: 10px;\n}\n\n.monaco-menu .monaco-action-bar.vertical {\n\tmargin-left: 0;\n\toverflow: visible;\n}\n\n.monaco-menu .monaco-action-bar.vertical .actions-container {\n\tdisplay: block;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tpadding: 0;\n\ttransform: none;\n\tdisplay: flex;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item.active {\n\ttransform: none;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\tflex: 1 1 auto;\n\tdisplay: flex;\n\theight: 2em;\n\talign-items: center;\n\tposition: relative;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label {\n\tflex: 1 1 auto;\n\ttext-decoration: none;\n\tpadding: 0 1em;\n\tbackground: none;\n\tfont-size: 12px;\n\tline-height: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .keybinding,\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\tdisplay: inline-block;\n\tflex: 2 1 auto;\n\tpadding: 0 1em;\n\ttext-align: right;\n\tfont-size: 12px;\n\tline-height: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\theight: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon {\n\tfont-size: 16px !important;\n\tdisplay: flex;\n\talign-items: center;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator.codicon::before {\n\tmargin-left: auto;\n\tmargin-right: -20px;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item.disabled .keybinding,\n.monaco-menu .monaco-action-bar.vertical .action-item.disabled .submenu-indicator {\n\topacity: 0.4;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator) {\n\tdisplay: inline-block;\n\tbox-sizing: border-box;\n\tmargin: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tposition: static;\n\toverflow: visible;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item .monaco-submenu {\n\tposition: absolute;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tpadding: 0.5em 0 0 0;\n\tmargin-bottom: 0.5em;\n\twidth: 100%;\n\theight: 0px !important;\n\tmargin-left: .8em !important;\n\tmargin-right: .8em !important;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator.text {\n\tpadding: 0.7em 1em 0.1em 1em;\n\tfont-weight: bold;\n\topacity: 1;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:hover {\n\tcolor: inherit;\n}\n\n.monaco-menu .monaco-action-bar.vertical .menu-item-check {\n\tposition: absolute;\n\tvisibility: hidden;\n\twidth: 1em;\n\theight: 100%;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item.checked .menu-item-check {\n\tvisibility: visible;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n/* Context Menu */\n\n.context-view.monaco-menu-container {\n\toutline: 0;\n\tborder: none;\n\tanimation: fadeIn 0.083s linear;\n\t-webkit-app-region: no-drag;\n}\n\n.context-view.monaco-menu-container :focus,\n.context-view.monaco-menu-container .monaco-action-bar.vertical:focus,\n.context-view.monaco-menu-container .monaco-action-bar.vertical :focus {\n\toutline: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-item {\n\tborder: thin solid transparent; /* prevents jumping behaviour on hover or focus */\n}\n\n\n/* High Contrast Theming */\n:host-context(.hc-black) .context-view.monaco-menu-container {\n\tbox-shadow: none;\n}\n\n:host-context(.hc-black) .monaco-menu .monaco-action-bar.vertical .action-item.focused {\n\tbackground: none;\n}\n\n/* Vertical Action Bar Styles */\n\n.monaco-menu .monaco-action-bar.vertical {\n\tpadding: .5em 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\theight: 1.8em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label:not(.separator),\n.monaco-menu .monaco-action-bar.vertical .keybinding {\n\tfont-size: inherit;\n\tpadding: 0 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .menu-item-check {\n\tfont-size: inherit;\n\twidth: 2em;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tfont-size: inherit;\n\tpadding: 0.2em 0 0 0;\n\tmargin-bottom: 0.2em;\n}\n\n:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .action-label.separator {\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\tfont-size: 60%;\n\tpadding: 0 1.8em;\n}\n\n:host-context(.linux) .monaco-menu .monaco-action-bar.vertical .submenu-indicator {\n\theight: 100%;\n\tmask-size: 10px 10px;\n\t-webkit-mask-size: 10px 10px;\n}\n\n.monaco-menu .action-item {\n\tcursor: default;\n}\n\n/* Arrows */\n.monaco-scrollable-element > .scrollbar > .scra {\n\tcursor: pointer;\n\tfont-size: 11px !important;\n}\n\n.monaco-scrollable-element > .visible {\n\topacity: 1;\n\n\t/* Background rule added for IE9 - to allow clicks on dom node */\n\tbackground:rgba(0,0,0,0);\n\n\ttransition: opacity 100ms linear;\n}\n.monaco-scrollable-element > .invisible {\n\topacity: 0;\n\tpointer-events: none;\n}\n.monaco-scrollable-element > .invisible.fade {\n\ttransition: opacity 800ms linear;\n}\n\n/* Scrollable Content Inset Shadow */\n.monaco-scrollable-element > .shadow {\n\tposition: absolute;\n\tdisplay: none;\n}\n.monaco-scrollable-element > .shadow.top {\n\tdisplay: block;\n\ttop: 0;\n\tleft: 3px;\n\theight: 3px;\n\twidth: 100%;\n\tbox-shadow: #DDD 0 6px 6px -6px inset;\n}\n.monaco-scrollable-element > .shadow.left {\n\tdisplay: block;\n\ttop: 3px;\n\tleft: 0;\n\theight: 100%;\n\twidth: 3px;\n\tbox-shadow: #DDD 6px 0 6px -6px inset;\n}\n.monaco-scrollable-element > .shadow.top-left-corner {\n\tdisplay: block;\n\ttop: 0;\n\tleft: 0;\n\theight: 3px;\n\twidth: 3px;\n}\n.monaco-scrollable-element > .shadow.top.left {\n\tbox-shadow: #DDD 6px 6px 6px -6px inset;\n}\n\n/* ---------- Default Style ---------- */\n\n:host-context(.vs) .monaco-scrollable-element > .scrollbar > .slider {\n\tbackground: rgba(100, 100, 100, .4);\n}\n:host-context(.vs-dark) .monaco-scrollable-element > .scrollbar > .slider {\n\tbackground: rgba(121, 121, 121, .4);\n}\n:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider {\n\tbackground: rgba(111, 195, 223, .6);\n}\n\n.monaco-scrollable-element > .scrollbar > .slider:hover {\n\tbackground: rgba(100, 100, 100, .7);\n}\n:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider:hover {\n\tbackground: rgba(111, 195, 223, .8);\n}\n\n.monaco-scrollable-element > .scrollbar > .slider.active {\n\tbackground: rgba(0, 0, 0, .6);\n}\n:host-context(.vs-dark) .monaco-scrollable-element > .scrollbar > .slider.active {\n\tbackground: rgba(191, 191, 191, .4);\n}\n:host-context(.hc-black) .monaco-scrollable-element > .scrollbar > .slider.active {\n\tbackground: rgba(111, 195, 223, 1);\n}\n\n:host-context(.vs-dark) .monaco-scrollable-element .shadow.top {\n\tbox-shadow: none;\n}\n\n:host-context(.vs-dark) .monaco-scrollable-element .shadow.left {\n\tbox-shadow: #000 6px 0 6px -6px inset;\n}\n\n:host-context(.vs-dark) .monaco-scrollable-element .shadow.top.left {\n\tbox-shadow: #000 6px 6px 6px -6px inset;\n}\n\n:host-context(.hc-black) .monaco-scrollable-element .shadow.top {\n\tbox-shadow: none;\n}\n\n:host-context(.hc-black) .monaco-scrollable-element .shadow.left {\n\tbox-shadow: none;\n}\n\n:host-context(.hc-black) .monaco-scrollable-element .shadow.top.left {\n\tbox-shadow: none;\n}\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 *--------------------------------------------------------------------------------------------*/\nimport './contextMenuHandler.css';\nimport { ActionRunner } from '../../../base/common/actions.js';\nimport { combinedDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { Menu } from '../../../base/browser/ui/menu/menu.js';\nimport { EventType, $, isHTMLElement } from '../../../base/browser/dom.js';\nimport { attachMenuStyler } from '../../theme/common/styler.js';\nimport { domEvent } from '../../../base/browser/event.js';\nimport { StandardMouseEvent } from '../../../base/browser/mouseEvent.js';\nimport { isPromiseCanceledError } from '../../../base/common/errors.js';\nexport class ContextMenuHandler {\n constructor(contextViewService, telemetryService, notificationService, keybindingService, themeService) {\n this.contextViewService = contextViewService;\n this.telemetryService = telemetryService;\n this.notificationService = notificationService;\n this.keybindingService = keybindingService;\n this.themeService = themeService;\n this.focusToReturn = null;\n this.block = null;\n this.options = { blockMouse: true };\n }\n configure(options) {\n this.options = options;\n }\n showContextMenu(delegate) {\n const actions = delegate.getActions();\n if (!actions.length) {\n return; // Don't render an empty context menu\n }\n this.focusToReturn = document.activeElement;\n let menu;\n let shadowRootElement = isHTMLElement(delegate.domForShadowRoot) ? delegate.domForShadowRoot : undefined;\n this.contextViewService.showContextView({\n getAnchor: () => delegate.getAnchor(),\n canRelayout: false,\n anchorAlignment: delegate.anchorAlignment,\n anchorAxisAlignment: delegate.anchorAxisAlignment,\n render: (container) => {\n let className = delegate.getMenuClassName ? delegate.getMenuClassName() : '';\n if (className) {\n container.className += ' ' + className;\n }\n // Render invisible div to block mouse interaction in the rest of the UI\n if (this.options.blockMouse) {\n this.block = container.appendChild($('.context-view-block'));\n this.block.style.position = 'fixed';\n this.block.style.cursor = 'initial';\n this.block.style.left = '0';\n this.block.style.top = '0';\n this.block.style.width = '100%';\n this.block.style.height = '100%';\n this.block.style.zIndex = '-1';\n domEvent(this.block, EventType.MOUSE_DOWN)((e) => e.stopPropagation());\n }\n const menuDisposables = new DisposableStore();\n const actionRunner = delegate.actionRunner || new ActionRunner();\n actionRunner.onBeforeRun(this.onActionRun, this, menuDisposables);\n actionRunner.onDidRun(this.onDidActionRun, this, menuDisposables);\n menu = new Menu(container, actions, {\n actionViewItemProvider: delegate.getActionViewItem,\n context: delegate.getActionsContext ? delegate.getActionsContext() : null,\n actionRunner,\n getKeyBinding: delegate.getKeyBinding ? delegate.getKeyBinding : action => this.keybindingService.lookupKeybinding(action.id)\n });\n menuDisposables.add(attachMenuStyler(menu, this.themeService));\n menu.onDidCancel(() => this.contextViewService.hideContextView(true), null, menuDisposables);\n menu.onDidBlur(() => this.contextViewService.hideContextView(true), null, menuDisposables);\n domEvent(window, EventType.BLUR)(() => { this.contextViewService.hideContextView(true); }, null, menuDisposables);\n domEvent(window, EventType.MOUSE_DOWN)((e) => {\n if (e.defaultPrevented) {\n return;\n }\n let event = new StandardMouseEvent(e);\n let element = event.target;\n // Don't do anything as we are likely creating a context menu\n if (event.rightButton) {\n return;\n }\n while (element) {\n if (element === container) {\n return;\n }\n element = element.parentElement;\n }\n this.contextViewService.hideContextView(true);\n }, null, menuDisposables);\n return combinedDisposable(menuDisposables, menu);\n },\n focus: () => {\n if (menu) {\n menu.focus(!!delegate.autoSelectFirstItem);\n }\n },\n onHide: (didCancel) => {\n if (delegate.onHide) {\n delegate.onHide(!!didCancel);\n }\n if (this.block) {\n this.block.remove();\n this.block = null;\n }\n if (this.focusToReturn) {\n this.focusToReturn.focus();\n }\n }\n }, shadowRootElement, !!shadowRootElement);\n }\n onActionRun(e) {\n this.telemetryService.publicLog2('workbenchActionExecuted', { id: e.action.id, from: 'contextMenu' });\n this.contextViewService.hideContextView(false);\n // Restore focus here\n if (this.focusToReturn) {\n this.focusToReturn.focus();\n }\n }\n onDidActionRun(e) {\n if (e.error && !isPromiseCanceledError(e.error)) {\n this.notificationService.error(e.error);\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ContextMenuHandler } from './contextMenuHandler.js';\nimport { IContextViewService } from './contextView.js';\nimport { ITelemetryService } from '../../telemetry/common/telemetry.js';\nimport { INotificationService } from '../../notification/common/notification.js';\nimport { IThemeService } from '../../theme/common/themeService.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { ModifierKeyEmitter } from '../../../base/browser/dom.js';\nlet ContextMenuService = class ContextMenuService extends Disposable {\n constructor(telemetryService, notificationService, contextViewService, keybindingService, themeService) {\n super();\n this.contextMenuHandler = new ContextMenuHandler(contextViewService, telemetryService, notificationService, keybindingService, themeService);\n }\n configure(options) {\n this.contextMenuHandler.configure(options);\n }\n // ContextMenu\n showContextMenu(delegate) {\n this.contextMenuHandler.showContextMenu(delegate);\n ModifierKeyEmitter.getInstance().resetKeyStatus();\n }\n};\nContextMenuService = __decorate([\n __param(0, ITelemetryService),\n __param(1, INotificationService),\n __param(2, IContextViewService),\n __param(3, IKeybindingService),\n __param(4, IThemeService)\n], ContextMenuService);\nexport { ContextMenuService };\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const ILayoutService = createDecorator('layoutService');\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ContextView } from '../../../base/browser/ui/contextview/contextview.js';\nimport { Disposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nlet ContextViewService = class ContextViewService extends Disposable {\n constructor(layoutService) {\n super();\n this.layoutService = layoutService;\n this.currentViewDisposable = Disposable.None;\n this.container = layoutService.container;\n this.contextView = this._register(new ContextView(this.container, 1 /* ABSOLUTE */));\n this.layout();\n this._register(layoutService.onDidLayout(() => this.layout()));\n }\n // ContextView\n setContainer(container, domPosition) {\n this.contextView.setContainer(container, domPosition || 1 /* ABSOLUTE */);\n }\n showContextView(delegate, container, shadowRoot) {\n if (container) {\n if (container !== this.container) {\n this.container = container;\n this.setContainer(container, shadowRoot ? 3 /* FIXED_SHADOW */ : 2 /* FIXED */);\n }\n }\n else {\n if (this.container !== this.layoutService.container) {\n this.container = this.layoutService.container;\n this.setContainer(this.container, 1 /* ABSOLUTE */);\n }\n }\n this.contextView.show(delegate);\n const disposable = toDisposable(() => {\n if (this.currentViewDisposable === disposable) {\n this.hideContextView();\n }\n });\n this.currentViewDisposable = disposable;\n return disposable;\n }\n getContextViewElement() {\n return this.contextView.getViewElement();\n }\n layout() {\n this.contextView.layout();\n }\n hideContextView(data) {\n this.contextView.hide(data);\n }\n};\nContextViewService = __decorate([\n __param(0, ILayoutService)\n], ContextViewService);\nexport { ContextViewService };\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 *--------------------------------------------------------------------------------------------*/\nexport class Node {\n constructor(data) {\n this.incoming = new Map();\n this.outgoing = new Map();\n this.data = data;\n }\n}\nexport class Graph {\n constructor(_hashFn) {\n this._hashFn = _hashFn;\n this._nodes = new Map();\n // empty\n }\n roots() {\n const ret = [];\n for (let node of this._nodes.values()) {\n if (node.outgoing.size === 0) {\n ret.push(node);\n }\n }\n return ret;\n }\n insertEdge(from, to) {\n const fromNode = this.lookupOrInsertNode(from);\n const toNode = this.lookupOrInsertNode(to);\n fromNode.outgoing.set(this._hashFn(to), toNode);\n toNode.incoming.set(this._hashFn(from), fromNode);\n }\n removeNode(data) {\n const key = this._hashFn(data);\n this._nodes.delete(key);\n for (let node of this._nodes.values()) {\n node.outgoing.delete(key);\n node.incoming.delete(key);\n }\n }\n lookupOrInsertNode(data) {\n const key = this._hashFn(data);\n let node = this._nodes.get(key);\n if (!node) {\n node = new Node(data);\n this._nodes.set(key, node);\n }\n return node;\n }\n isEmpty() {\n return this._nodes.size === 0;\n }\n toString() {\n let data = [];\n for (let [key, value] of this._nodes) {\n data.push(`${key}, (incoming)[${[...value.incoming.keys()].join(', ')}], (outgoing)[${[...value.outgoing.keys()].join(',')}]`);\n }\n return data.join('\\n');\n }\n /**\n * This is brute force and slow and **only** be used\n * to trouble shoot.\n */\n findCycleSlow() {\n for (let [id, node] of this._nodes) {\n const seen = new Set([id]);\n const res = this._findCycle(node, seen);\n if (res) {\n return res;\n }\n }\n return undefined;\n }\n _findCycle(node, seen) {\n for (let [id, outgoing] of node.outgoing) {\n if (seen.has(id)) {\n return [...seen, id].join(' -> ');\n }\n seen.add(id);\n const value = this._findCycle(outgoing, seen);\n if (value) {\n return value;\n }\n seen.delete(id);\n }\n return undefined;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { illegalState } from '../../../base/common/errors.js';\nimport { Graph } from './graph.js';\nimport { SyncDescriptor } from './descriptors.js';\nimport { IInstantiationService, _util, optional } from './instantiation.js';\nimport { ServiceCollection } from './serviceCollection.js';\nimport { IdleValue } from '../../../base/common/async.js';\n// TRACING\nconst _enableTracing = false;\nclass CyclicDependencyError extends Error {\n constructor(graph) {\n var _a;\n super('cyclic dependency between services');\n this.message = (_a = graph.findCycleSlow()) !== null && _a !== void 0 ? _a : `UNABLE to detect cycle, dumping graph: \\n${graph.toString()}`;\n }\n}\nexport class InstantiationService {\n constructor(services = new ServiceCollection(), strict = false, parent) {\n this._activeInstantiations = new Set();\n this._services = services;\n this._strict = strict;\n this._parent = parent;\n this._services.set(IInstantiationService, this);\n }\n createChild(services) {\n return new InstantiationService(services, this._strict, this);\n }\n invokeFunction(fn, ...args) {\n let _trace = Trace.traceInvocation(fn);\n let _done = false;\n try {\n const accessor = {\n get: (id, isOptional) => {\n if (_done) {\n throw illegalState('service accessor is only valid during the invocation of its target method');\n }\n const result = this._getOrCreateServiceInstance(id, _trace);\n if (!result && isOptional !== optional) {\n throw new Error(`[invokeFunction] unknown service '${id}'`);\n }\n return result;\n }\n };\n return fn(accessor, ...args);\n }\n finally {\n _done = true;\n _trace.stop();\n }\n }\n createInstance(ctorOrDescriptor, ...rest) {\n let _trace;\n let result;\n if (ctorOrDescriptor instanceof SyncDescriptor) {\n _trace = Trace.traceCreation(ctorOrDescriptor.ctor);\n result = this._createInstance(ctorOrDescriptor.ctor, ctorOrDescriptor.staticArguments.concat(rest), _trace);\n }\n else {\n _trace = Trace.traceCreation(ctorOrDescriptor);\n result = this._createInstance(ctorOrDescriptor, rest, _trace);\n }\n _trace.stop();\n return result;\n }\n _createInstance(ctor, args = [], _trace) {\n // arguments defined by service decorators\n let serviceDependencies = _util.getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n let serviceArgs = [];\n for (const dependency of serviceDependencies) {\n let service = this._getOrCreateServiceInstance(dependency.id, _trace);\n if (!service && this._strict && !dependency.optional) {\n throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id}.`);\n }\n serviceArgs.push(service);\n }\n let firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;\n // check for argument mismatches, adjust static args if needed\n if (args.length !== firstServiceArgPos) {\n console.warn(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n let delta = firstServiceArgPos - args.length;\n if (delta > 0) {\n args = args.concat(new Array(delta));\n }\n else {\n args = args.slice(0, firstServiceArgPos);\n }\n }\n // now create the instance\n return new ctor(...[...args, ...serviceArgs]);\n }\n _setServiceInstance(id, instance) {\n if (this._services.get(id) instanceof SyncDescriptor) {\n this._services.set(id, instance);\n }\n else if (this._parent) {\n this._parent._setServiceInstance(id, instance);\n }\n else {\n throw new Error('illegalState - setting UNKNOWN service instance');\n }\n }\n _getServiceInstanceOrDescriptor(id) {\n let instanceOrDesc = this._services.get(id);\n if (!instanceOrDesc && this._parent) {\n return this._parent._getServiceInstanceOrDescriptor(id);\n }\n else {\n return instanceOrDesc;\n }\n }\n _getOrCreateServiceInstance(id, _trace) {\n let thing = this._getServiceInstanceOrDescriptor(id);\n if (thing instanceof SyncDescriptor) {\n return this._safeCreateAndCacheServiceInstance(id, thing, _trace.branch(id, true));\n }\n else {\n _trace.branch(id, false);\n return thing;\n }\n }\n _safeCreateAndCacheServiceInstance(id, desc, _trace) {\n if (this._activeInstantiations.has(id)) {\n throw new Error(`illegal state - RECURSIVELY instantiating service '${id}'`);\n }\n this._activeInstantiations.add(id);\n try {\n return this._createAndCacheServiceInstance(id, desc, _trace);\n }\n finally {\n this._activeInstantiations.delete(id);\n }\n }\n _createAndCacheServiceInstance(id, desc, _trace) {\n const graph = new Graph(data => data.id.toString());\n let cycleCount = 0;\n const stack = [{ id, desc, _trace }];\n while (stack.length) {\n const item = stack.pop();\n graph.lookupOrInsertNode(item);\n // a weak but working heuristic for cycle checks\n if (cycleCount++ > 1000) {\n throw new CyclicDependencyError(graph);\n }\n // check all dependencies for existence and if they need to be created first\n for (let dependency of _util.getServiceDependencies(item.desc.ctor)) {\n let instanceOrDesc = this._getServiceInstanceOrDescriptor(dependency.id);\n if (!instanceOrDesc && !dependency.optional) {\n console.warn(`[createInstance] ${id} depends on ${dependency.id} which is NOT registered.`);\n }\n if (instanceOrDesc instanceof SyncDescriptor) {\n const d = { id: dependency.id, desc: instanceOrDesc, _trace: item._trace.branch(dependency.id, true) };\n graph.insertEdge(item, d);\n stack.push(d);\n }\n }\n }\n while (true) {\n const roots = graph.roots();\n // if there is no more roots but still\n // nodes in the graph we have a cycle\n if (roots.length === 0) {\n if (!graph.isEmpty()) {\n throw new CyclicDependencyError(graph);\n }\n break;\n }\n for (const { data } of roots) {\n // Repeat the check for this still being a service sync descriptor. That's because\n // instantiating a dependency might have side-effect and recursively trigger instantiation\n // so that some dependencies are now fullfilled already.\n const instanceOrDesc = this._getServiceInstanceOrDescriptor(data.id);\n if (instanceOrDesc instanceof SyncDescriptor) {\n // create instance and overwrite the service collections\n const instance = this._createServiceInstanceWithOwner(data.id, data.desc.ctor, data.desc.staticArguments, data.desc.supportsDelayedInstantiation, data._trace);\n this._setServiceInstance(data.id, instance);\n }\n graph.removeNode(data);\n }\n }\n return this._getServiceInstanceOrDescriptor(id);\n }\n _createServiceInstanceWithOwner(id, ctor, args = [], supportsDelayedInstantiation, _trace) {\n if (this._services.get(id) instanceof SyncDescriptor) {\n return this._createServiceInstance(ctor, args, supportsDelayedInstantiation, _trace);\n }\n else if (this._parent) {\n return this._parent._createServiceInstanceWithOwner(id, ctor, args, supportsDelayedInstantiation, _trace);\n }\n else {\n throw new Error(`illegalState - creating UNKNOWN service instance ${ctor.name}`);\n }\n }\n _createServiceInstance(ctor, args = [], _supportsDelayedInstantiation, _trace) {\n if (!_supportsDelayedInstantiation) {\n // eager instantiation\n return this._createInstance(ctor, args, _trace);\n }\n else {\n // Return a proxy object that's backed by an idle value. That\n // strategy is to instantiate services in our idle time or when actually\n // needed but not when injected into a consumer\n const idle = new IdleValue(() => this._createInstance(ctor, args, _trace));\n return new Proxy(Object.create(null), {\n get(target, key) {\n if (key in target) {\n return target[key];\n }\n let obj = idle.value;\n let prop = obj[key];\n if (typeof prop !== 'function') {\n return prop;\n }\n prop = prop.bind(obj);\n target[key] = prop;\n return prop;\n },\n set(_target, p, value) {\n idle.value[p] = value;\n return true;\n }\n });\n }\n }\n}\nclass Trace {\n constructor(type, name) {\n this.type = type;\n this.name = name;\n this._start = Date.now();\n this._dep = [];\n }\n static traceInvocation(ctor) {\n return !_enableTracing ? Trace._None : new Trace(1 /* Invocation */, ctor.name || ctor.toString().substring(0, 42).replace(/\\n/g, ''));\n }\n static traceCreation(ctor) {\n return !_enableTracing ? Trace._None : new Trace(0 /* Creation */, ctor.name);\n }\n branch(id, first) {\n let child = new Trace(2 /* Branch */, id.toString());\n this._dep.push([id, first, child]);\n return child;\n }\n stop() {\n let dur = Date.now() - this._start;\n Trace._totals += dur;\n let causedCreation = false;\n function printChild(n, trace) {\n let res = [];\n let prefix = new Array(n + 1).join('\\t');\n for (const [id, first, child] of trace._dep) {\n if (first && child) {\n causedCreation = true;\n res.push(`${prefix}CREATES -> ${id}`);\n let nested = printChild(n + 1, child);\n if (nested) {\n res.push(nested);\n }\n }\n else {\n res.push(`${prefix}uses -> ${id}`);\n }\n }\n return res.join('\\n');\n }\n let lines = [\n `${this.type === 0 /* Creation */ ? 'CREATE' : 'CALL'} ${this.name}`,\n `${printChild(1, this)}`,\n `DONE, took ${dur.toFixed(2)}ms (grand total ${Trace._totals.toFixed(2)}ms)`\n ];\n if (dur > 2 || causedCreation) {\n console.log(lines.join('\\n'));\n }\n }\n}\nTrace._None = new class extends Trace {\n constructor() { super(-1, null); }\n stop() { }\n branch() { return this; }\n};\nTrace._totals = 0;\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\nimport { isFalsyOrEmpty } from '../../../base/common/arrays.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Event, Emitter } from '../../../base/common/event.js';\nimport { MarkerSeverity } from './markers.js';\nimport { ResourceMap } from '../../../base/common/map.js';\nimport { Iterable } from '../../../base/common/iterator.js';\nclass DoubleResourceMap {\n constructor() {\n this._byResource = new ResourceMap();\n this._byOwner = new Map();\n }\n set(resource, owner, value) {\n let ownerMap = this._byResource.get(resource);\n if (!ownerMap) {\n ownerMap = new Map();\n this._byResource.set(resource, ownerMap);\n }\n ownerMap.set(owner, value);\n let resourceMap = this._byOwner.get(owner);\n if (!resourceMap) {\n resourceMap = new ResourceMap();\n this._byOwner.set(owner, resourceMap);\n }\n resourceMap.set(resource, value);\n }\n get(resource, owner) {\n let ownerMap = this._byResource.get(resource);\n return ownerMap === null || ownerMap === void 0 ? void 0 : ownerMap.get(owner);\n }\n delete(resource, owner) {\n let removedA = false;\n let removedB = false;\n let ownerMap = this._byResource.get(resource);\n if (ownerMap) {\n removedA = ownerMap.delete(owner);\n }\n let resourceMap = this._byOwner.get(owner);\n if (resourceMap) {\n removedB = resourceMap.delete(resource);\n }\n if (removedA !== removedB) {\n throw new Error('illegal state');\n }\n return removedA && removedB;\n }\n values(key) {\n var _a, _b, _c, _d;\n if (typeof key === 'string') {\n return (_b = (_a = this._byOwner.get(key)) === null || _a === void 0 ? void 0 : _a.values()) !== null && _b !== void 0 ? _b : Iterable.empty();\n }\n if (URI.isUri(key)) {\n return (_d = (_c = this._byResource.get(key)) === null || _c === void 0 ? void 0 : _c.values()) !== null && _d !== void 0 ? _d : Iterable.empty();\n }\n return Iterable.map(Iterable.concat(...this._byOwner.values()), map => map[1]);\n }\n}\nclass MarkerStats {\n constructor(service) {\n this.errors = 0;\n this.infos = 0;\n this.warnings = 0;\n this.unknowns = 0;\n this._data = new ResourceMap();\n this._service = service;\n this._subscription = service.onMarkerChanged(this._update, this);\n }\n dispose() {\n this._subscription.dispose();\n }\n _update(resources) {\n for (const resource of resources) {\n const oldStats = this._data.get(resource);\n if (oldStats) {\n this._substract(oldStats);\n }\n const newStats = this._resourceStats(resource);\n this._add(newStats);\n this._data.set(resource, newStats);\n }\n }\n _resourceStats(resource) {\n const result = { errors: 0, warnings: 0, infos: 0, unknowns: 0 };\n // TODO this is a hack\n if (resource.scheme === Schemas.inMemory || resource.scheme === Schemas.walkThrough || resource.scheme === Schemas.walkThroughSnippet) {\n return result;\n }\n for (const { severity } of this._service.read({ resource })) {\n if (severity === MarkerSeverity.Error) {\n result.errors += 1;\n }\n else if (severity === MarkerSeverity.Warning) {\n result.warnings += 1;\n }\n else if (severity === MarkerSeverity.Info) {\n result.infos += 1;\n }\n else {\n result.unknowns += 1;\n }\n }\n return result;\n }\n _substract(op) {\n this.errors -= op.errors;\n this.warnings -= op.warnings;\n this.infos -= op.infos;\n this.unknowns -= op.unknowns;\n }\n _add(op) {\n this.errors += op.errors;\n this.warnings += op.warnings;\n this.infos += op.infos;\n this.unknowns += op.unknowns;\n }\n}\nexport class MarkerService {\n constructor() {\n this._onMarkerChanged = new Emitter();\n this.onMarkerChanged = Event.debounce(this._onMarkerChanged.event, MarkerService._debouncer, 0);\n this._data = new DoubleResourceMap();\n this._stats = new MarkerStats(this);\n }\n dispose() {\n this._stats.dispose();\n this._onMarkerChanged.dispose();\n }\n remove(owner, resources) {\n for (const resource of resources || []) {\n this.changeOne(owner, resource, []);\n }\n }\n changeOne(owner, resource, markerData) {\n if (isFalsyOrEmpty(markerData)) {\n // remove marker for this (owner,resource)-tuple\n const removed = this._data.delete(resource, owner);\n if (removed) {\n this._onMarkerChanged.fire([resource]);\n }\n }\n else {\n // insert marker for this (owner,resource)-tuple\n const markers = [];\n for (const data of markerData) {\n const marker = MarkerService._toMarker(owner, resource, data);\n if (marker) {\n markers.push(marker);\n }\n }\n this._data.set(resource, owner, markers);\n this._onMarkerChanged.fire([resource]);\n }\n }\n static _toMarker(owner, resource, data) {\n let { code, severity, message, source, startLineNumber, startColumn, endLineNumber, endColumn, relatedInformation, tags, } = data;\n if (!message) {\n return undefined;\n }\n // santize data\n startLineNumber = startLineNumber > 0 ? startLineNumber : 1;\n startColumn = startColumn > 0 ? startColumn : 1;\n endLineNumber = endLineNumber >= startLineNumber ? endLineNumber : startLineNumber;\n endColumn = endColumn > 0 ? endColumn : startColumn;\n return {\n resource,\n owner,\n code,\n severity,\n message,\n source,\n startLineNumber,\n startColumn,\n endLineNumber,\n endColumn,\n relatedInformation,\n tags,\n };\n }\n read(filter = Object.create(null)) {\n let { owner, resource, severities, take } = filter;\n if (!take || take < 0) {\n take = -1;\n }\n if (owner && resource) {\n // exactly one owner AND resource\n const data = this._data.get(resource, owner);\n if (!data) {\n return [];\n }\n else {\n const result = [];\n for (const marker of data) {\n if (MarkerService._accept(marker, severities)) {\n const newLen = result.push(marker);\n if (take > 0 && newLen === take) {\n break;\n }\n }\n }\n return result;\n }\n }\n else if (!owner && !resource) {\n // all\n const result = [];\n for (let markers of this._data.values()) {\n for (let data of markers) {\n if (MarkerService._accept(data, severities)) {\n const newLen = result.push(data);\n if (take > 0 && newLen === take) {\n return result;\n }\n }\n }\n }\n return result;\n }\n else {\n // of one resource OR owner\n const iterable = this._data.values(resource !== null && resource !== void 0 ? resource : owner);\n const result = [];\n for (const markers of iterable) {\n for (const data of markers) {\n if (MarkerService._accept(data, severities)) {\n const newLen = result.push(data);\n if (take > 0 && newLen === take) {\n return result;\n }\n }\n }\n }\n return result;\n }\n }\n static _accept(marker, severities) {\n return severities === undefined || (severities & marker.severity) === marker.severity;\n }\n static _debouncer(last, event) {\n if (!last) {\n MarkerService._dedupeMap = new ResourceMap();\n last = [];\n }\n for (const uri of event) {\n if (!MarkerService._dedupeMap.has(uri)) {\n MarkerService._dedupeMap.set(uri, true);\n last.push(uri);\n }\n }\n return last;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { IMenuService, isIMenuItem, MenuItemAction, MenuRegistry, SubmenuItemAction } from './actions.js';\nimport { ICommandService } from '../../commands/common/commands.js';\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\nlet MenuService = class MenuService {\n constructor(_commandService) {\n this._commandService = _commandService;\n //\n }\n /**\n * Create a new menu for the given menu identifier. A menu sends events when it's entries\n * have changed (placement, enablement, checked-state). By default it does send events for\n * sub menu entries. That is more expensive and must be explicitly enabled with the\n * `emitEventsForSubmenuChanges` flag.\n */\n createMenu(id, contextKeyService, emitEventsForSubmenuChanges = false) {\n return new Menu(id, emitEventsForSubmenuChanges, this._commandService, contextKeyService, this);\n }\n};\nMenuService = __decorate([\n __param(0, ICommandService)\n], MenuService);\nexport { MenuService };\nlet Menu = class Menu {\n constructor(_id, _fireEventsForSubmenuChanges, _commandService, _contextKeyService, _menuService) {\n this._id = _id;\n this._fireEventsForSubmenuChanges = _fireEventsForSubmenuChanges;\n this._commandService = _commandService;\n this._contextKeyService = _contextKeyService;\n this._menuService = _menuService;\n this._dispoables = new DisposableStore();\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this._menuGroups = [];\n this._contextKeys = new Set();\n this._build();\n // rebuild this menu whenever the menu registry reports an\n // event for this MenuId\n const rebuildMenuSoon = new RunOnceScheduler(() => this._build(), 50);\n this._dispoables.add(rebuildMenuSoon);\n this._dispoables.add(MenuRegistry.onDidChangeMenu(e => {\n if (e.has(_id)) {\n rebuildMenuSoon.schedule();\n }\n }));\n // when context keys change we need to check if the menu also\n // has changed\n const fireChangeSoon = new RunOnceScheduler(() => this._onDidChange.fire(this), 50);\n this._dispoables.add(fireChangeSoon);\n this._dispoables.add(_contextKeyService.onDidChangeContext(e => {\n if (e.affectsSome(this._contextKeys)) {\n fireChangeSoon.schedule();\n }\n }));\n }\n dispose() {\n this._dispoables.dispose();\n this._onDidChange.dispose();\n }\n _build() {\n // reset\n this._menuGroups.length = 0;\n this._contextKeys.clear();\n const menuItems = MenuRegistry.getMenuItems(this._id);\n let group;\n menuItems.sort(Menu._compareMenuItems);\n for (let item of menuItems) {\n // group by groupId\n const groupName = item.group || '';\n if (!group || group[0] !== groupName) {\n group = [groupName, []];\n this._menuGroups.push(group);\n }\n group[1].push(item);\n // keep keys for eventing\n this._collectContextKeys(item);\n }\n this._onDidChange.fire(this);\n }\n _collectContextKeys(item) {\n Menu._fillInKbExprKeys(item.when, this._contextKeys);\n if (isIMenuItem(item)) {\n // keep precondition keys for event if applicable\n if (item.command.precondition) {\n Menu._fillInKbExprKeys(item.command.precondition, this._contextKeys);\n }\n // keep toggled keys for event if applicable\n if (item.command.toggled) {\n const toggledExpression = item.command.toggled.condition || item.command.toggled;\n Menu._fillInKbExprKeys(toggledExpression, this._contextKeys);\n }\n }\n else if (this._fireEventsForSubmenuChanges) {\n // recursively collect context keys from submenus so that this\n // menu fires events when context key changes affect submenus\n MenuRegistry.getMenuItems(item.submenu).forEach(this._collectContextKeys, this);\n }\n }\n getActions(options) {\n const result = [];\n for (let group of this._menuGroups) {\n const [id, items] = group;\n const activeActions = [];\n for (const item of items) {\n if (this._contextKeyService.contextMatchesRules(item.when)) {\n const action = isIMenuItem(item)\n ? new MenuItemAction(item.command, item.alt, options, this._contextKeyService, this._commandService)\n : new SubmenuItemAction(item, this._menuService, this._contextKeyService, options);\n activeActions.push(action);\n }\n }\n if (activeActions.length > 0) {\n result.push([id, activeActions]);\n }\n }\n return result;\n }\n static _fillInKbExprKeys(exp, set) {\n if (exp) {\n for (let key of exp.keys()) {\n set.add(key);\n }\n }\n }\n static _compareMenuItems(a, b) {\n let aGroup = a.group;\n let bGroup = b.group;\n if (aGroup !== bGroup) {\n // Falsy groups come last\n if (!aGroup) {\n return 1;\n }\n else if (!bGroup) {\n return -1;\n }\n // 'navigation' group comes first\n if (aGroup === 'navigation') {\n return -1;\n }\n else if (bGroup === 'navigation') {\n return 1;\n }\n // lexical sort for groups\n let value = aGroup.localeCompare(bGroup);\n if (value !== 0) {\n return value;\n }\n }\n // sort on priority - default is 0\n let aPrio = a.order || 0;\n let bPrio = b.order || 0;\n if (aPrio < bPrio) {\n return -1;\n }\n else if (aPrio > bPrio) {\n return 1;\n }\n // sort on titles\n return Menu._compareTitles(isIMenuItem(a) ? a.command.title : a.title, isIMenuItem(b) ? b.command.title : b.title);\n }\n static _compareTitles(a, b) {\n const aStr = typeof a === 'string' ? a : a.original;\n const bStr = typeof b === 'string' ? b : b.original;\n return aStr.localeCompare(bStr);\n }\n};\nMenu = __decorate([\n __param(2, ICommandService),\n __param(3, IContextKeyService),\n __param(4, IMenuService)\n], Menu);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { IMarkerService, MarkerSeverity } from '../../../platform/markers/common/markers.js';\nimport { Disposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport { OverviewRulerLane, MinimapPosition } from '../model.js';\nimport { themeColorFromId } from '../../../platform/theme/common/themeService.js';\nimport { overviewRulerWarning, overviewRulerInfo, overviewRulerError } from '../view/editorColorRegistry.js';\nimport { IModelService } from './modelService.js';\nimport { Range } from '../core/range.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { minimapWarning, minimapError } from '../../../platform/theme/common/colorRegistry.js';\nfunction MODEL_ID(resource) {\n return resource.toString();\n}\nclass MarkerDecorations extends Disposable {\n constructor(model) {\n super();\n this.model = model;\n this._markersData = new Map();\n this._register(toDisposable(() => {\n this.model.deltaDecorations([...this._markersData.keys()], []);\n this._markersData.clear();\n }));\n }\n update(markers, newDecorations) {\n const oldIds = [...this._markersData.keys()];\n this._markersData.clear();\n const ids = this.model.deltaDecorations(oldIds, newDecorations);\n for (let index = 0; index < ids.length; index++) {\n this._markersData.set(ids[index], markers[index]);\n }\n return oldIds.length !== 0 || ids.length !== 0;\n }\n getMarker(decoration) {\n return this._markersData.get(decoration.id);\n }\n}\nlet MarkerDecorationsService = class MarkerDecorationsService extends Disposable {\n constructor(modelService, _markerService) {\n super();\n this._markerService = _markerService;\n this._onDidChangeMarker = this._register(new Emitter());\n this._markerDecorations = new Map();\n modelService.getModels().forEach(model => this._onModelAdded(model));\n this._register(modelService.onModelAdded(this._onModelAdded, this));\n this._register(modelService.onModelRemoved(this._onModelRemoved, this));\n this._register(this._markerService.onMarkerChanged(this._handleMarkerChange, this));\n }\n dispose() {\n super.dispose();\n this._markerDecorations.forEach(value => value.dispose());\n this._markerDecorations.clear();\n }\n getMarker(uri, decoration) {\n const markerDecorations = this._markerDecorations.get(MODEL_ID(uri));\n return markerDecorations ? (markerDecorations.getMarker(decoration) || null) : null;\n }\n _handleMarkerChange(changedResources) {\n changedResources.forEach((resource) => {\n const markerDecorations = this._markerDecorations.get(MODEL_ID(resource));\n if (markerDecorations) {\n this._updateDecorations(markerDecorations);\n }\n });\n }\n _onModelAdded(model) {\n const markerDecorations = new MarkerDecorations(model);\n this._markerDecorations.set(MODEL_ID(model.uri), markerDecorations);\n this._updateDecorations(markerDecorations);\n }\n _onModelRemoved(model) {\n const markerDecorations = this._markerDecorations.get(MODEL_ID(model.uri));\n if (markerDecorations) {\n markerDecorations.dispose();\n this._markerDecorations.delete(MODEL_ID(model.uri));\n }\n // clean up markers for internal, transient models\n if (model.uri.scheme === Schemas.inMemory\n || model.uri.scheme === Schemas.internal\n || model.uri.scheme === Schemas.vscode) {\n if (this._markerService) {\n this._markerService.read({ resource: model.uri }).map(marker => marker.owner).forEach(owner => this._markerService.remove(owner, [model.uri]));\n }\n }\n }\n _updateDecorations(markerDecorations) {\n // Limit to the first 500 errors/warnings\n const markers = this._markerService.read({ resource: markerDecorations.model.uri, take: 500 });\n let newModelDecorations = markers.map((marker) => {\n return {\n range: this._createDecorationRange(markerDecorations.model, marker),\n options: this._createDecorationOption(marker)\n };\n });\n if (markerDecorations.update(markers, newModelDecorations)) {\n this._onDidChangeMarker.fire(markerDecorations.model);\n }\n }\n _createDecorationRange(model, rawMarker) {\n let ret = Range.lift(rawMarker);\n if (rawMarker.severity === MarkerSeverity.Hint && !this._hasMarkerTag(rawMarker, 1 /* Unnecessary */) && !this._hasMarkerTag(rawMarker, 2 /* Deprecated */)) {\n // * never render hints on multiple lines\n // * make enough space for three dots\n ret = ret.setEndPosition(ret.startLineNumber, ret.startColumn + 2);\n }\n ret = model.validateRange(ret);\n if (ret.isEmpty()) {\n let word = model.getWordAtPosition(ret.getStartPosition());\n if (word) {\n ret = new Range(ret.startLineNumber, word.startColumn, ret.endLineNumber, word.endColumn);\n }\n else {\n let maxColumn = model.getLineLastNonWhitespaceColumn(ret.startLineNumber) ||\n model.getLineMaxColumn(ret.startLineNumber);\n if (maxColumn === 1) {\n // empty line\n // console.warn('marker on empty line:', marker);\n }\n else if (ret.endColumn >= maxColumn) {\n // behind eol\n ret = new Range(ret.startLineNumber, maxColumn - 1, ret.endLineNumber, maxColumn);\n }\n else {\n // extend marker to width = 1\n ret = new Range(ret.startLineNumber, ret.startColumn, ret.endLineNumber, ret.endColumn + 1);\n }\n }\n }\n else if (rawMarker.endColumn === Number.MAX_VALUE && rawMarker.startColumn === 1 && ret.startLineNumber === ret.endLineNumber) {\n let minColumn = model.getLineFirstNonWhitespaceColumn(rawMarker.startLineNumber);\n if (minColumn < ret.endColumn) {\n ret = new Range(ret.startLineNumber, minColumn, ret.endLineNumber, ret.endColumn);\n rawMarker.startColumn = minColumn;\n }\n }\n return ret;\n }\n _createDecorationOption(marker) {\n let className;\n let color = undefined;\n let zIndex;\n let inlineClassName = undefined;\n let minimap;\n switch (marker.severity) {\n case MarkerSeverity.Hint:\n if (this._hasMarkerTag(marker, 2 /* Deprecated */)) {\n className = undefined;\n }\n else if (this._hasMarkerTag(marker, 1 /* Unnecessary */)) {\n className = \"squiggly-unnecessary\" /* EditorUnnecessaryDecoration */;\n }\n else {\n className = \"squiggly-hint\" /* EditorHintDecoration */;\n }\n zIndex = 0;\n break;\n case MarkerSeverity.Warning:\n className = \"squiggly-warning\" /* EditorWarningDecoration */;\n color = themeColorFromId(overviewRulerWarning);\n zIndex = 20;\n minimap = {\n color: themeColorFromId(minimapWarning),\n position: MinimapPosition.Inline\n };\n break;\n case MarkerSeverity.Info:\n className = \"squiggly-info\" /* EditorInfoDecoration */;\n color = themeColorFromId(overviewRulerInfo);\n zIndex = 10;\n break;\n case MarkerSeverity.Error:\n default:\n className = \"squiggly-error\" /* EditorErrorDecoration */;\n color = themeColorFromId(overviewRulerError);\n zIndex = 30;\n minimap = {\n color: themeColorFromId(minimapError),\n position: MinimapPosition.Inline\n };\n break;\n }\n if (marker.tags) {\n if (marker.tags.indexOf(1 /* Unnecessary */) !== -1) {\n inlineClassName = \"squiggly-inline-unnecessary\" /* EditorUnnecessaryInlineDecoration */;\n }\n if (marker.tags.indexOf(2 /* Deprecated */) !== -1) {\n inlineClassName = \"squiggly-inline-deprecated\" /* EditorDeprecatedInlineDecoration */;\n }\n }\n return {\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className,\n showIfCollapsed: true,\n overviewRuler: {\n color,\n position: OverviewRulerLane.Right\n },\n minimap,\n zIndex,\n inlineClassName,\n };\n }\n _hasMarkerTag(marker, tag) {\n if (marker.tags) {\n return marker.tags.indexOf(tag) >= 0;\n }\n return false;\n }\n};\nMarkerDecorationsService = __decorate([\n __param(0, IModelService),\n __param(1, IMarkerService)\n], MarkerDecorationsService);\nexport { MarkerDecorationsService };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from './accessibility.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\nlet AccessibilityService = class AccessibilityService extends Disposable {\n constructor(_contextKeyService, _configurationService) {\n super();\n this._contextKeyService = _contextKeyService;\n this._configurationService = _configurationService;\n this._accessibilitySupport = 0 /* Unknown */;\n this._onDidChangeScreenReaderOptimized = new Emitter();\n this._accessibilityModeEnabledContext = CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(this._contextKeyService);\n const updateContextKey = () => this._accessibilityModeEnabledContext.set(this.isScreenReaderOptimized());\n this._register(this._configurationService.onDidChangeConfiguration(e => {\n if (e.affectsConfiguration('editor.accessibilitySupport')) {\n updateContextKey();\n this._onDidChangeScreenReaderOptimized.fire();\n }\n }));\n updateContextKey();\n this.onDidChangeScreenReaderOptimized(() => updateContextKey());\n }\n get onDidChangeScreenReaderOptimized() {\n return this._onDidChangeScreenReaderOptimized.event;\n }\n isScreenReaderOptimized() {\n const config = this._configurationService.getValue('editor.accessibilitySupport');\n return config === 'on' || (config === 'auto' && this._accessibilitySupport === 2 /* Enabled */);\n }\n getAccessibilitySupport() {\n return this._accessibilitySupport;\n }\n};\nAccessibilityService = __decorate([\n __param(0, IContextKeyService),\n __param(1, IConfigurationService)\n], AccessibilityService);\nexport { AccessibilityService };\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { $ } from '../../../base/browser/dom.js';\nexport class BrowserClipboardService {\n constructor() {\n this.mapTextToType = new Map(); // unsupported in web (only in-memory)\n this.findText = ''; // unsupported in web (only in-memory)\n }\n writeText(text, type) {\n return __awaiter(this, void 0, void 0, function* () {\n // With type: only in-memory is supported\n if (type) {\n this.mapTextToType.set(type, text);\n return;\n }\n // Guard access to navigator.clipboard with try/catch\n // as we have seen DOMExceptions in certain browsers\n // due to security policies.\n try {\n return yield navigator.clipboard.writeText(text);\n }\n catch (error) {\n console.error(error);\n }\n // Fallback to textarea and execCommand solution\n const activeElement = document.activeElement;\n const textArea = document.body.appendChild($('textarea', { 'aria-hidden': true }));\n textArea.style.height = '1px';\n textArea.style.width = '1px';\n textArea.style.position = 'absolute';\n textArea.value = text;\n textArea.focus();\n textArea.select();\n document.execCommand('copy');\n if (activeElement instanceof HTMLElement) {\n activeElement.focus();\n }\n document.body.removeChild(textArea);\n return;\n });\n }\n readText(type) {\n return __awaiter(this, void 0, void 0, function* () {\n // With type: only in-memory is supported\n if (type) {\n return this.mapTextToType.get(type) || '';\n }\n // Guard access to navigator.clipboard with try/catch\n // as we have seen DOMExceptions in certain browsers\n // due to security policies.\n try {\n return yield navigator.clipboard.readText();\n }\n catch (error) {\n console.error(error);\n return '';\n }\n });\n }\n readFindText() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.findText;\n });\n }\n writeFindText(text) {\n return __awaiter(this, void 0, void 0, function* () {\n this.findText = text;\n });\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../../nls.js';\nimport { IUndoRedoService, ResourceEditStackSnapshot, UndoRedoGroup, UndoRedoSource } from './undoRedo.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { registerSingleton } from '../../instantiation/common/extensions.js';\nimport { IDialogService } from '../../dialogs/common/dialogs.js';\nimport Severity from '../../../base/common/severity.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { INotificationService } from '../../notification/common/notification.js';\nimport { Disposable, isDisposable } from '../../../base/common/lifecycle.js';\nconst DEBUG = false;\nfunction getResourceLabel(resource) {\n return resource.scheme === Schemas.file ? resource.fsPath : resource.path;\n}\nlet stackElementCounter = 0;\nclass ResourceStackElement {\n constructor(actual, resourceLabel, strResource, groupId, groupOrder, sourceId, sourceOrder) {\n this.id = (++stackElementCounter);\n this.type = 0 /* Resource */;\n this.actual = actual;\n this.label = actual.label;\n this.confirmBeforeUndo = actual.confirmBeforeUndo || false;\n this.resourceLabel = resourceLabel;\n this.strResource = strResource;\n this.resourceLabels = [this.resourceLabel];\n this.strResources = [this.strResource];\n this.groupId = groupId;\n this.groupOrder = groupOrder;\n this.sourceId = sourceId;\n this.sourceOrder = sourceOrder;\n this.isValid = true;\n }\n setValid(isValid) {\n this.isValid = isValid;\n }\n toString() {\n return `[id:${this.id}] [group:${this.groupId}] [${this.isValid ? ' VALID' : 'INVALID'}] ${this.actual.constructor.name} - ${this.actual}`;\n }\n}\nclass ResourceReasonPair {\n constructor(resourceLabel, reason) {\n this.resourceLabel = resourceLabel;\n this.reason = reason;\n }\n}\nclass RemovedResources {\n constructor() {\n this.elements = new Map();\n }\n createMessage() {\n const externalRemoval = [];\n const noParallelUniverses = [];\n for (const [, element] of this.elements) {\n const dest = (element.reason === 0 /* ExternalRemoval */\n ? externalRemoval\n : noParallelUniverses);\n dest.push(element.resourceLabel);\n }\n let messages = [];\n if (externalRemoval.length > 0) {\n messages.push(nls.localize({ key: 'externalRemoval', comment: ['{0} is a list of filenames'] }, \"The following files have been closed and modified on disk: {0}.\", externalRemoval.join(', ')));\n }\n if (noParallelUniverses.length > 0) {\n messages.push(nls.localize({ key: 'noParallelUniverses', comment: ['{0} is a list of filenames'] }, \"The following files have been modified in an incompatible way: {0}.\", noParallelUniverses.join(', ')));\n }\n return messages.join('\\n');\n }\n get size() {\n return this.elements.size;\n }\n has(strResource) {\n return this.elements.has(strResource);\n }\n set(strResource, value) {\n this.elements.set(strResource, value);\n }\n delete(strResource) {\n return this.elements.delete(strResource);\n }\n}\nclass WorkspaceStackElement {\n constructor(actual, resourceLabels, strResources, groupId, groupOrder, sourceId, sourceOrder) {\n this.id = (++stackElementCounter);\n this.type = 1 /* Workspace */;\n this.actual = actual;\n this.label = actual.label;\n this.confirmBeforeUndo = actual.confirmBeforeUndo || false;\n this.resourceLabels = resourceLabels;\n this.strResources = strResources;\n this.groupId = groupId;\n this.groupOrder = groupOrder;\n this.sourceId = sourceId;\n this.sourceOrder = sourceOrder;\n this.removedResources = null;\n this.invalidatedResources = null;\n }\n canSplit() {\n return (typeof this.actual.split === 'function');\n }\n removeResource(resourceLabel, strResource, reason) {\n if (!this.removedResources) {\n this.removedResources = new RemovedResources();\n }\n if (!this.removedResources.has(strResource)) {\n this.removedResources.set(strResource, new ResourceReasonPair(resourceLabel, reason));\n }\n }\n setValid(resourceLabel, strResource, isValid) {\n if (isValid) {\n if (this.invalidatedResources) {\n this.invalidatedResources.delete(strResource);\n if (this.invalidatedResources.size === 0) {\n this.invalidatedResources = null;\n }\n }\n }\n else {\n if (!this.invalidatedResources) {\n this.invalidatedResources = new RemovedResources();\n }\n if (!this.invalidatedResources.has(strResource)) {\n this.invalidatedResources.set(strResource, new ResourceReasonPair(resourceLabel, 0 /* ExternalRemoval */));\n }\n }\n }\n toString() {\n return `[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources ? 'INVALID' : ' VALID'}] ${this.actual.constructor.name} - ${this.actual}`;\n }\n}\nclass ResourceEditStack {\n constructor(resourceLabel, strResource) {\n this.resourceLabel = resourceLabel;\n this.strResource = strResource;\n this._past = [];\n this._future = [];\n this.locked = false;\n this.versionId = 1;\n }\n dispose() {\n for (const element of this._past) {\n if (element.type === 1 /* Workspace */) {\n element.removeResource(this.resourceLabel, this.strResource, 0 /* ExternalRemoval */);\n }\n }\n for (const element of this._future) {\n if (element.type === 1 /* Workspace */) {\n element.removeResource(this.resourceLabel, this.strResource, 0 /* ExternalRemoval */);\n }\n }\n this.versionId++;\n }\n toString() {\n let result = [];\n result.push(`* ${this.strResource}:`);\n for (let i = 0; i < this._past.length; i++) {\n result.push(` * [UNDO] ${this._past[i]}`);\n }\n for (let i = this._future.length - 1; i >= 0; i--) {\n result.push(` * [REDO] ${this._future[i]}`);\n }\n return result.join('\\n');\n }\n flushAllElements() {\n this._past = [];\n this._future = [];\n this.versionId++;\n }\n _setElementValidFlag(element, isValid) {\n if (element.type === 1 /* Workspace */) {\n element.setValid(this.resourceLabel, this.strResource, isValid);\n }\n else {\n element.setValid(isValid);\n }\n }\n setElementsValidFlag(isValid, filter) {\n for (const element of this._past) {\n if (filter(element.actual)) {\n this._setElementValidFlag(element, isValid);\n }\n }\n for (const element of this._future) {\n if (filter(element.actual)) {\n this._setElementValidFlag(element, isValid);\n }\n }\n }\n pushElement(element) {\n // remove the future\n for (const futureElement of this._future) {\n if (futureElement.type === 1 /* Workspace */) {\n futureElement.removeResource(this.resourceLabel, this.strResource, 1 /* NoParallelUniverses */);\n }\n }\n this._future = [];\n this._past.push(element);\n this.versionId++;\n }\n createSnapshot(resource) {\n const elements = [];\n for (let i = 0, len = this._past.length; i < len; i++) {\n elements.push(this._past[i].id);\n }\n for (let i = this._future.length - 1; i >= 0; i--) {\n elements.push(this._future[i].id);\n }\n return new ResourceEditStackSnapshot(resource, elements);\n }\n restoreSnapshot(snapshot) {\n const snapshotLength = snapshot.elements.length;\n let isOK = true;\n let snapshotIndex = 0;\n let removePastAfter = -1;\n for (let i = 0, len = this._past.length; i < len; i++, snapshotIndex++) {\n const element = this._past[i];\n if (isOK && (snapshotIndex >= snapshotLength || element.id !== snapshot.elements[snapshotIndex])) {\n isOK = false;\n removePastAfter = 0;\n }\n if (!isOK && element.type === 1 /* Workspace */) {\n element.removeResource(this.resourceLabel, this.strResource, 0 /* ExternalRemoval */);\n }\n }\n let removeFutureBefore = -1;\n for (let i = this._future.length - 1; i >= 0; i--, snapshotIndex++) {\n const element = this._future[i];\n if (isOK && (snapshotIndex >= snapshotLength || element.id !== snapshot.elements[snapshotIndex])) {\n isOK = false;\n removeFutureBefore = i;\n }\n if (!isOK && element.type === 1 /* Workspace */) {\n element.removeResource(this.resourceLabel, this.strResource, 0 /* ExternalRemoval */);\n }\n }\n if (removePastAfter !== -1) {\n this._past = this._past.slice(0, removePastAfter);\n }\n if (removeFutureBefore !== -1) {\n this._future = this._future.slice(removeFutureBefore + 1);\n }\n this.versionId++;\n }\n getElements() {\n const past = [];\n const future = [];\n for (const element of this._past) {\n past.push(element.actual);\n }\n for (const element of this._future) {\n future.push(element.actual);\n }\n return { past, future };\n }\n getClosestPastElement() {\n if (this._past.length === 0) {\n return null;\n }\n return this._past[this._past.length - 1];\n }\n getSecondClosestPastElement() {\n if (this._past.length < 2) {\n return null;\n }\n return this._past[this._past.length - 2];\n }\n getClosestFutureElement() {\n if (this._future.length === 0) {\n return null;\n }\n return this._future[this._future.length - 1];\n }\n hasPastElements() {\n return (this._past.length > 0);\n }\n hasFutureElements() {\n return (this._future.length > 0);\n }\n splitPastWorkspaceElement(toRemove, individualMap) {\n for (let j = this._past.length - 1; j >= 0; j--) {\n if (this._past[j] === toRemove) {\n if (individualMap.has(this.strResource)) {\n // gets replaced\n this._past[j] = individualMap.get(this.strResource);\n }\n else {\n // gets deleted\n this._past.splice(j, 1);\n }\n break;\n }\n }\n this.versionId++;\n }\n splitFutureWorkspaceElement(toRemove, individualMap) {\n for (let j = this._future.length - 1; j >= 0; j--) {\n if (this._future[j] === toRemove) {\n if (individualMap.has(this.strResource)) {\n // gets replaced\n this._future[j] = individualMap.get(this.strResource);\n }\n else {\n // gets deleted\n this._future.splice(j, 1);\n }\n break;\n }\n }\n this.versionId++;\n }\n moveBackward(element) {\n this._past.pop();\n this._future.push(element);\n this.versionId++;\n }\n moveForward(element) {\n this._future.pop();\n this._past.push(element);\n this.versionId++;\n }\n}\nclass EditStackSnapshot {\n constructor(editStacks) {\n this.editStacks = editStacks;\n this._versionIds = [];\n for (let i = 0, len = this.editStacks.length; i < len; i++) {\n this._versionIds[i] = this.editStacks[i].versionId;\n }\n }\n isValid() {\n for (let i = 0, len = this.editStacks.length; i < len; i++) {\n if (this._versionIds[i] !== this.editStacks[i].versionId) {\n return false;\n }\n }\n return true;\n }\n}\nconst missingEditStack = new ResourceEditStack('', '');\nmissingEditStack.locked = true;\nlet UndoRedoService = class UndoRedoService {\n constructor(_dialogService, _notificationService) {\n this._dialogService = _dialogService;\n this._notificationService = _notificationService;\n this._editStacks = new Map();\n this._uriComparisonKeyComputers = [];\n }\n getUriComparisonKey(resource) {\n for (const uriComparisonKeyComputer of this._uriComparisonKeyComputers) {\n if (uriComparisonKeyComputer[0] === resource.scheme) {\n return uriComparisonKeyComputer[1].getComparisonKey(resource);\n }\n }\n return resource.toString();\n }\n _print(label) {\n console.log(`------------------------------------`);\n console.log(`AFTER ${label}: `);\n let str = [];\n for (const element of this._editStacks) {\n str.push(element[1].toString());\n }\n console.log(str.join('\\n'));\n }\n pushElement(element, group = UndoRedoGroup.None, source = UndoRedoSource.None) {\n if (element.type === 0 /* Resource */) {\n const resourceLabel = getResourceLabel(element.resource);\n const strResource = this.getUriComparisonKey(element.resource);\n this._pushElement(new ResourceStackElement(element, resourceLabel, strResource, group.id, group.nextOrder(), source.id, source.nextOrder()));\n }\n else {\n const seen = new Set();\n const resourceLabels = [];\n const strResources = [];\n for (const resource of element.resources) {\n const resourceLabel = getResourceLabel(resource);\n const strResource = this.getUriComparisonKey(resource);\n if (seen.has(strResource)) {\n continue;\n }\n seen.add(strResource);\n resourceLabels.push(resourceLabel);\n strResources.push(strResource);\n }\n if (resourceLabels.length === 1) {\n this._pushElement(new ResourceStackElement(element, resourceLabels[0], strResources[0], group.id, group.nextOrder(), source.id, source.nextOrder()));\n }\n else {\n this._pushElement(new WorkspaceStackElement(element, resourceLabels, strResources, group.id, group.nextOrder(), source.id, source.nextOrder()));\n }\n }\n if (DEBUG) {\n this._print('pushElement');\n }\n }\n _pushElement(element) {\n for (let i = 0, len = element.strResources.length; i < len; i++) {\n const resourceLabel = element.resourceLabels[i];\n const strResource = element.strResources[i];\n let editStack;\n if (this._editStacks.has(strResource)) {\n editStack = this._editStacks.get(strResource);\n }\n else {\n editStack = new ResourceEditStack(resourceLabel, strResource);\n this._editStacks.set(strResource, editStack);\n }\n editStack.pushElement(element);\n }\n }\n getLastElement(resource) {\n const strResource = this.getUriComparisonKey(resource);\n if (this._editStacks.has(strResource)) {\n const editStack = this._editStacks.get(strResource);\n if (editStack.hasFutureElements()) {\n return null;\n }\n const closestPastElement = editStack.getClosestPastElement();\n return closestPastElement ? closestPastElement.actual : null;\n }\n return null;\n }\n _splitPastWorkspaceElement(toRemove, ignoreResources) {\n const individualArr = toRemove.actual.split();\n const individualMap = new Map();\n for (const _element of individualArr) {\n const resourceLabel = getResourceLabel(_element.resource);\n const strResource = this.getUriComparisonKey(_element.resource);\n const element = new ResourceStackElement(_element, resourceLabel, strResource, 0, 0, 0, 0);\n individualMap.set(element.strResource, element);\n }\n for (const strResource of toRemove.strResources) {\n if (ignoreResources && ignoreResources.has(strResource)) {\n continue;\n }\n const editStack = this._editStacks.get(strResource);\n editStack.splitPastWorkspaceElement(toRemove, individualMap);\n }\n }\n _splitFutureWorkspaceElement(toRemove, ignoreResources) {\n const individualArr = toRemove.actual.split();\n const individualMap = new Map();\n for (const _element of individualArr) {\n const resourceLabel = getResourceLabel(_element.resource);\n const strResource = this.getUriComparisonKey(_element.resource);\n const element = new ResourceStackElement(_element, resourceLabel, strResource, 0, 0, 0, 0);\n individualMap.set(element.strResource, element);\n }\n for (const strResource of toRemove.strResources) {\n if (ignoreResources && ignoreResources.has(strResource)) {\n continue;\n }\n const editStack = this._editStacks.get(strResource);\n editStack.splitFutureWorkspaceElement(toRemove, individualMap);\n }\n }\n removeElements(resource) {\n const strResource = typeof resource === 'string' ? resource : this.getUriComparisonKey(resource);\n if (this._editStacks.has(strResource)) {\n const editStack = this._editStacks.get(strResource);\n editStack.dispose();\n this._editStacks.delete(strResource);\n }\n if (DEBUG) {\n this._print('removeElements');\n }\n }\n setElementsValidFlag(resource, isValid, filter) {\n const strResource = this.getUriComparisonKey(resource);\n if (this._editStacks.has(strResource)) {\n const editStack = this._editStacks.get(strResource);\n editStack.setElementsValidFlag(isValid, filter);\n }\n if (DEBUG) {\n this._print('setElementsValidFlag');\n }\n }\n createSnapshot(resource) {\n const strResource = this.getUriComparisonKey(resource);\n if (this._editStacks.has(strResource)) {\n const editStack = this._editStacks.get(strResource);\n return editStack.createSnapshot(resource);\n }\n return new ResourceEditStackSnapshot(resource, []);\n }\n restoreSnapshot(snapshot) {\n const strResource = this.getUriComparisonKey(snapshot.resource);\n if (this._editStacks.has(strResource)) {\n const editStack = this._editStacks.get(strResource);\n editStack.restoreSnapshot(snapshot);\n if (!editStack.hasPastElements() && !editStack.hasFutureElements()) {\n // the edit stack is now empty, just remove it entirely\n editStack.dispose();\n this._editStacks.delete(strResource);\n }\n }\n if (DEBUG) {\n this._print('restoreSnapshot');\n }\n }\n getElements(resource) {\n const strResource = this.getUriComparisonKey(resource);\n if (this._editStacks.has(strResource)) {\n const editStack = this._editStacks.get(strResource);\n return editStack.getElements();\n }\n return { past: [], future: [] };\n }\n _findClosestUndoElementWithSource(sourceId) {\n if (!sourceId) {\n return [null, null];\n }\n // find an element with the sourceId and with the highest sourceOrder ready to be undone\n let matchedElement = null;\n let matchedStrResource = null;\n for (const [strResource, editStack] of this._editStacks) {\n const candidate = editStack.getClosestPastElement();\n if (!candidate) {\n continue;\n }\n if (candidate.sourceId === sourceId) {\n if (!matchedElement || candidate.sourceOrder > matchedElement.sourceOrder) {\n matchedElement = candidate;\n matchedStrResource = strResource;\n }\n }\n }\n return [matchedElement, matchedStrResource];\n }\n canUndo(resourceOrSource) {\n if (resourceOrSource instanceof UndoRedoSource) {\n const [, matchedStrResource] = this._findClosestUndoElementWithSource(resourceOrSource.id);\n return matchedStrResource ? true : false;\n }\n const strResource = this.getUriComparisonKey(resourceOrSource);\n if (this._editStacks.has(strResource)) {\n const editStack = this._editStacks.get(strResource);\n return editStack.hasPastElements();\n }\n return false;\n }\n _onError(err, element) {\n onUnexpectedError(err);\n // An error occured while undoing or redoing => drop the undo/redo stack for all affected resources\n for (const strResource of element.strResources) {\n this.removeElements(strResource);\n }\n this._notificationService.error(err);\n }\n _acquireLocks(editStackSnapshot) {\n // first, check if all locks can be acquired\n for (const editStack of editStackSnapshot.editStacks) {\n if (editStack.locked) {\n throw new Error('Cannot acquire edit stack lock');\n }\n }\n // can acquire all locks\n for (const editStack of editStackSnapshot.editStacks) {\n editStack.locked = true;\n }\n return () => {\n // release all locks\n for (const editStack of editStackSnapshot.editStacks) {\n editStack.locked = false;\n }\n };\n }\n _safeInvokeWithLocks(element, invoke, editStackSnapshot, cleanup, continuation) {\n const releaseLocks = this._acquireLocks(editStackSnapshot);\n let result;\n try {\n result = invoke();\n }\n catch (err) {\n releaseLocks();\n cleanup.dispose();\n return this._onError(err, element);\n }\n if (result) {\n // result is Promise<void>\n return result.then(() => {\n releaseLocks();\n cleanup.dispose();\n return continuation();\n }, (err) => {\n releaseLocks();\n cleanup.dispose();\n return this._onError(err, element);\n });\n }\n else {\n // result is void\n releaseLocks();\n cleanup.dispose();\n return continuation();\n }\n }\n _invokeWorkspacePrepare(element) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof element.actual.prepareUndoRedo === 'undefined') {\n return Disposable.None;\n }\n const result = element.actual.prepareUndoRedo();\n if (typeof result === 'undefined') {\n return Disposable.None;\n }\n return result;\n });\n }\n _invokeResourcePrepare(element, callback) {\n if (element.actual.type !== 1 /* Workspace */ || typeof element.actual.prepareUndoRedo === 'undefined') {\n // no preparation needed\n return callback(Disposable.None);\n }\n const r = element.actual.prepareUndoRedo();\n if (!r) {\n // nothing to clean up\n return callback(Disposable.None);\n }\n if (isDisposable(r)) {\n return callback(r);\n }\n return r.then((disposable) => {\n return callback(disposable);\n });\n }\n _getAffectedEditStacks(element) {\n const affectedEditStacks = [];\n for (const strResource of element.strResources) {\n affectedEditStacks.push(this._editStacks.get(strResource) || missingEditStack);\n }\n return new EditStackSnapshot(affectedEditStacks);\n }\n _tryToSplitAndUndo(strResource, element, ignoreResources, message) {\n if (element.canSplit()) {\n this._splitPastWorkspaceElement(element, ignoreResources);\n this._notificationService.warn(message);\n return new WorkspaceVerificationError(this._undo(strResource, 0, true));\n }\n else {\n // Cannot safely split this workspace element => flush all undo/redo stacks\n for (const strResource of element.strResources) {\n this.removeElements(strResource);\n }\n this._notificationService.warn(message);\n return new WorkspaceVerificationError();\n }\n }\n _checkWorkspaceUndo(strResource, element, editStackSnapshot, checkInvalidatedResources) {\n if (element.removedResources) {\n return this._tryToSplitAndUndo(strResource, element, element.removedResources, nls.localize({ key: 'cannotWorkspaceUndo', comment: ['{0} is a label for an operation. {1} is another message.'] }, \"Could not undo '{0}' across all files. {1}\", element.label, element.removedResources.createMessage()));\n }\n if (checkInvalidatedResources && element.invalidatedResources) {\n return this._tryToSplitAndUndo(strResource, element, element.invalidatedResources, nls.localize({ key: 'cannotWorkspaceUndo', comment: ['{0} is a label for an operation. {1} is another message.'] }, \"Could not undo '{0}' across all files. {1}\", element.label, element.invalidatedResources.createMessage()));\n }\n // this must be the last past element in all the impacted resources!\n const cannotUndoDueToResources = [];\n for (const editStack of editStackSnapshot.editStacks) {\n if (editStack.getClosestPastElement() !== element) {\n cannotUndoDueToResources.push(editStack.resourceLabel);\n }\n }\n if (cannotUndoDueToResources.length > 0) {\n return this._tryToSplitAndUndo(strResource, element, null, nls.localize({ key: 'cannotWorkspaceUndoDueToChanges', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] }, \"Could not undo '{0}' across all files because changes were made to {1}\", element.label, cannotUndoDueToResources.join(', ')));\n }\n const cannotLockDueToResources = [];\n for (const editStack of editStackSnapshot.editStacks) {\n if (editStack.locked) {\n cannotLockDueToResources.push(editStack.resourceLabel);\n }\n }\n if (cannotLockDueToResources.length > 0) {\n return this._tryToSplitAndUndo(strResource, element, null, nls.localize({ key: 'cannotWorkspaceUndoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] }, \"Could not undo '{0}' across all files because there is already an undo or redo operation running on {1}\", element.label, cannotLockDueToResources.join(', ')));\n }\n // check if new stack elements were added in the meantime...\n if (!editStackSnapshot.isValid()) {\n return this._tryToSplitAndUndo(strResource, element, null, nls.localize({ key: 'cannotWorkspaceUndoDueToInMeantimeUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] }, \"Could not undo '{0}' across all files because an undo or redo operation occurred in the meantime\", element.label));\n }\n return null;\n }\n _workspaceUndo(strResource, element, undoConfirmed) {\n const affectedEditStacks = this._getAffectedEditStacks(element);\n const verificationError = this._checkWorkspaceUndo(strResource, element, affectedEditStacks, /*invalidated resources will be checked after the prepare call*/ false);\n if (verificationError) {\n return verificationError.returnValue;\n }\n return this._confirmAndExecuteWorkspaceUndo(strResource, element, affectedEditStacks, undoConfirmed);\n }\n _isPartOfUndoGroup(element) {\n if (!element.groupId) {\n return false;\n }\n // check that there is at least another element with the same groupId ready to be undone\n for (const [, editStack] of this._editStacks) {\n const pastElement = editStack.getClosestPastElement();\n if (!pastElement) {\n continue;\n }\n if (pastElement === element) {\n const secondPastElement = editStack.getSecondClosestPastElement();\n if (secondPastElement && secondPastElement.groupId === element.groupId) {\n // there is another element with the same group id in the same stack!\n return true;\n }\n }\n if (pastElement.groupId === element.groupId) {\n // there is another element with the same group id in another stack!\n return true;\n }\n }\n return false;\n }\n _confirmAndExecuteWorkspaceUndo(strResource, element, editStackSnapshot, undoConfirmed) {\n return __awaiter(this, void 0, void 0, function* () {\n if (element.canSplit() && !this._isPartOfUndoGroup(element)) {\n // this element can be split\n const result = yield this._dialogService.show(Severity.Info, nls.localize('confirmWorkspace', \"Would you like to undo '{0}' across all files?\", element.label), [\n nls.localize({ key: 'ok', comment: ['{0} denotes a number that is > 1'] }, \"Undo in {0} Files\", editStackSnapshot.editStacks.length),\n nls.localize('nok', \"Undo this File\"),\n nls.localize('cancel', \"Cancel\"),\n ], {\n cancelId: 2\n });\n if (result.choice === 2) {\n // choice: cancel\n return;\n }\n if (result.choice === 1) {\n // choice: undo this file\n this._splitPastWorkspaceElement(element, null);\n return this._undo(strResource, 0, true);\n }\n // choice: undo in all files\n // At this point, it is possible that the element has been made invalid in the meantime (due to the confirmation await)\n const verificationError1 = this._checkWorkspaceUndo(strResource, element, editStackSnapshot, /*invalidated resources will be checked after the prepare call*/ false);\n if (verificationError1) {\n return verificationError1.returnValue;\n }\n undoConfirmed = true;\n }\n // prepare\n let cleanup;\n try {\n cleanup = yield this._invokeWorkspacePrepare(element);\n }\n catch (err) {\n return this._onError(err, element);\n }\n // At this point, it is possible that the element has been made invalid in the meantime (due to the prepare await)\n const verificationError2 = this._checkWorkspaceUndo(strResource, element, editStackSnapshot, /*now also check that there are no more invalidated resources*/ true);\n if (verificationError2) {\n cleanup.dispose();\n return verificationError2.returnValue;\n }\n for (const editStack of editStackSnapshot.editStacks) {\n editStack.moveBackward(element);\n }\n return this._safeInvokeWithLocks(element, () => element.actual.undo(), editStackSnapshot, cleanup, () => this._continueUndoInGroup(element.groupId, undoConfirmed));\n });\n }\n _resourceUndo(editStack, element, undoConfirmed) {\n if (!element.isValid) {\n // invalid element => immediately flush edit stack!\n editStack.flushAllElements();\n return;\n }\n if (editStack.locked) {\n const message = nls.localize({ key: 'cannotResourceUndoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation.'] }, \"Could not undo '{0}' because there is already an undo or redo operation running.\", element.label);\n this._notificationService.warn(message);\n return;\n }\n return this._invokeResourcePrepare(element, (cleanup) => {\n editStack.moveBackward(element);\n return this._safeInvokeWithLocks(element, () => element.actual.undo(), new EditStackSnapshot([editStack]), cleanup, () => this._continueUndoInGroup(element.groupId, undoConfirmed));\n });\n }\n _findClosestUndoElementInGroup(groupId) {\n if (!groupId) {\n return [null, null];\n }\n // find another element with the same groupId and with the highest groupOrder ready to be undone\n let matchedElement = null;\n let matchedStrResource = null;\n for (const [strResource, editStack] of this._editStacks) {\n const candidate = editStack.getClosestPastElement();\n if (!candidate) {\n continue;\n }\n if (candidate.groupId === groupId) {\n if (!matchedElement || candidate.groupOrder > matchedElement.groupOrder) {\n matchedElement = candidate;\n matchedStrResource = strResource;\n }\n }\n }\n return [matchedElement, matchedStrResource];\n }\n _continueUndoInGroup(groupId, undoConfirmed) {\n if (!groupId) {\n return;\n }\n const [, matchedStrResource] = this._findClosestUndoElementInGroup(groupId);\n if (matchedStrResource) {\n return this._undo(matchedStrResource, 0, undoConfirmed);\n }\n }\n undo(resourceOrSource) {\n if (resourceOrSource instanceof UndoRedoSource) {\n const [, matchedStrResource] = this._findClosestUndoElementWithSource(resourceOrSource.id);\n return matchedStrResource ? this._undo(matchedStrResource, resourceOrSource.id, false) : undefined;\n }\n if (typeof resourceOrSource === 'string') {\n return this._undo(resourceOrSource, 0, false);\n }\n return this._undo(this.getUriComparisonKey(resourceOrSource), 0, false);\n }\n _undo(strResource, sourceId = 0, undoConfirmed) {\n if (!this._editStacks.has(strResource)) {\n return;\n }\n const editStack = this._editStacks.get(strResource);\n const element = editStack.getClosestPastElement();\n if (!element) {\n return;\n }\n if (element.groupId) {\n // this element is a part of a group, we need to make sure undoing in a group is in order\n const [matchedElement, matchedStrResource] = this._findClosestUndoElementInGroup(element.groupId);\n if (element !== matchedElement && matchedStrResource) {\n // there is an element in the same group that should be undone before this one\n return this._undo(matchedStrResource, sourceId, undoConfirmed);\n }\n }\n const shouldPromptForConfirmation = (element.sourceId !== sourceId || element.confirmBeforeUndo);\n if (shouldPromptForConfirmation && !undoConfirmed) {\n // Hit a different source or the element asks for prompt before undo, prompt for confirmation\n return this._confirmAndContinueUndo(strResource, sourceId, element);\n }\n try {\n if (element.type === 1 /* Workspace */) {\n return this._workspaceUndo(strResource, element, undoConfirmed);\n }\n else {\n return this._resourceUndo(editStack, element, undoConfirmed);\n }\n }\n finally {\n if (DEBUG) {\n this._print('undo');\n }\n }\n }\n _confirmAndContinueUndo(strResource, sourceId, element) {\n return __awaiter(this, void 0, void 0, function* () {\n const result = yield this._dialogService.show(Severity.Info, nls.localize('confirmDifferentSource', \"Would you like to undo '{0}'?\", element.label), [\n nls.localize('confirmDifferentSource.ok', \"Undo\"),\n nls.localize('cancel', \"Cancel\"),\n ], {\n cancelId: 1\n });\n if (result.choice === 1) {\n // choice: cancel\n return;\n }\n // choice: undo\n return this._undo(strResource, sourceId, true);\n });\n }\n _findClosestRedoElementWithSource(sourceId) {\n if (!sourceId) {\n return [null, null];\n }\n // find an element with sourceId and with the lowest sourceOrder ready to be redone\n let matchedElement = null;\n let matchedStrResource = null;\n for (const [strResource, editStack] of this._editStacks) {\n const candidate = editStack.getClosestFutureElement();\n if (!candidate) {\n continue;\n }\n if (candidate.sourceId === sourceId) {\n if (!matchedElement || candidate.sourceOrder < matchedElement.sourceOrder) {\n matchedElement = candidate;\n matchedStrResource = strResource;\n }\n }\n }\n return [matchedElement, matchedStrResource];\n }\n canRedo(resourceOrSource) {\n if (resourceOrSource instanceof UndoRedoSource) {\n const [, matchedStrResource] = this._findClosestRedoElementWithSource(resourceOrSource.id);\n return matchedStrResource ? true : false;\n }\n const strResource = this.getUriComparisonKey(resourceOrSource);\n if (this._editStacks.has(strResource)) {\n const editStack = this._editStacks.get(strResource);\n return editStack.hasFutureElements();\n }\n return false;\n }\n _tryToSplitAndRedo(strResource, element, ignoreResources, message) {\n if (element.canSplit()) {\n this._splitFutureWorkspaceElement(element, ignoreResources);\n this._notificationService.warn(message);\n return new WorkspaceVerificationError(this._redo(strResource));\n }\n else {\n // Cannot safely split this workspace element => flush all undo/redo stacks\n for (const strResource of element.strResources) {\n this.removeElements(strResource);\n }\n this._notificationService.warn(message);\n return new WorkspaceVerificationError();\n }\n }\n _checkWorkspaceRedo(strResource, element, editStackSnapshot, checkInvalidatedResources) {\n if (element.removedResources) {\n return this._tryToSplitAndRedo(strResource, element, element.removedResources, nls.localize({ key: 'cannotWorkspaceRedo', comment: ['{0} is a label for an operation. {1} is another message.'] }, \"Could not redo '{0}' across all files. {1}\", element.label, element.removedResources.createMessage()));\n }\n if (checkInvalidatedResources && element.invalidatedResources) {\n return this._tryToSplitAndRedo(strResource, element, element.invalidatedResources, nls.localize({ key: 'cannotWorkspaceRedo', comment: ['{0} is a label for an operation. {1} is another message.'] }, \"Could not redo '{0}' across all files. {1}\", element.label, element.invalidatedResources.createMessage()));\n }\n // this must be the last future element in all the impacted resources!\n const cannotRedoDueToResources = [];\n for (const editStack of editStackSnapshot.editStacks) {\n if (editStack.getClosestFutureElement() !== element) {\n cannotRedoDueToResources.push(editStack.resourceLabel);\n }\n }\n if (cannotRedoDueToResources.length > 0) {\n return this._tryToSplitAndRedo(strResource, element, null, nls.localize({ key: 'cannotWorkspaceRedoDueToChanges', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] }, \"Could not redo '{0}' across all files because changes were made to {1}\", element.label, cannotRedoDueToResources.join(', ')));\n }\n const cannotLockDueToResources = [];\n for (const editStack of editStackSnapshot.editStacks) {\n if (editStack.locked) {\n cannotLockDueToResources.push(editStack.resourceLabel);\n }\n }\n if (cannotLockDueToResources.length > 0) {\n return this._tryToSplitAndRedo(strResource, element, null, nls.localize({ key: 'cannotWorkspaceRedoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] }, \"Could not redo '{0}' across all files because there is already an undo or redo operation running on {1}\", element.label, cannotLockDueToResources.join(', ')));\n }\n // check if new stack elements were added in the meantime...\n if (!editStackSnapshot.isValid()) {\n return this._tryToSplitAndRedo(strResource, element, null, nls.localize({ key: 'cannotWorkspaceRedoDueToInMeantimeUndoRedo', comment: ['{0} is a label for an operation. {1} is a list of filenames.'] }, \"Could not redo '{0}' across all files because an undo or redo operation occurred in the meantime\", element.label));\n }\n return null;\n }\n _workspaceRedo(strResource, element) {\n const affectedEditStacks = this._getAffectedEditStacks(element);\n const verificationError = this._checkWorkspaceRedo(strResource, element, affectedEditStacks, /*invalidated resources will be checked after the prepare call*/ false);\n if (verificationError) {\n return verificationError.returnValue;\n }\n return this._executeWorkspaceRedo(strResource, element, affectedEditStacks);\n }\n _executeWorkspaceRedo(strResource, element, editStackSnapshot) {\n return __awaiter(this, void 0, void 0, function* () {\n // prepare\n let cleanup;\n try {\n cleanup = yield this._invokeWorkspacePrepare(element);\n }\n catch (err) {\n return this._onError(err, element);\n }\n // At this point, it is possible that the element has been made invalid in the meantime (due to the prepare await)\n const verificationError = this._checkWorkspaceRedo(strResource, element, editStackSnapshot, /*now also check that there are no more invalidated resources*/ true);\n if (verificationError) {\n cleanup.dispose();\n return verificationError.returnValue;\n }\n for (const editStack of editStackSnapshot.editStacks) {\n editStack.moveForward(element);\n }\n return this._safeInvokeWithLocks(element, () => element.actual.redo(), editStackSnapshot, cleanup, () => this._continueRedoInGroup(element.groupId));\n });\n }\n _resourceRedo(editStack, element) {\n if (!element.isValid) {\n // invalid element => immediately flush edit stack!\n editStack.flushAllElements();\n return;\n }\n if (editStack.locked) {\n const message = nls.localize({ key: 'cannotResourceRedoDueToInProgressUndoRedo', comment: ['{0} is a label for an operation.'] }, \"Could not redo '{0}' because there is already an undo or redo operation running.\", element.label);\n this._notificationService.warn(message);\n return;\n }\n return this._invokeResourcePrepare(element, (cleanup) => {\n editStack.moveForward(element);\n return this._safeInvokeWithLocks(element, () => element.actual.redo(), new EditStackSnapshot([editStack]), cleanup, () => this._continueRedoInGroup(element.groupId));\n });\n }\n _findClosestRedoElementInGroup(groupId) {\n if (!groupId) {\n return [null, null];\n }\n // find another element with the same groupId and with the lowest groupOrder ready to be redone\n let matchedElement = null;\n let matchedStrResource = null;\n for (const [strResource, editStack] of this._editStacks) {\n const candidate = editStack.getClosestFutureElement();\n if (!candidate) {\n continue;\n }\n if (candidate.groupId === groupId) {\n if (!matchedElement || candidate.groupOrder < matchedElement.groupOrder) {\n matchedElement = candidate;\n matchedStrResource = strResource;\n }\n }\n }\n return [matchedElement, matchedStrResource];\n }\n _continueRedoInGroup(groupId) {\n if (!groupId) {\n return;\n }\n const [, matchedStrResource] = this._findClosestRedoElementInGroup(groupId);\n if (matchedStrResource) {\n return this._redo(matchedStrResource);\n }\n }\n redo(resourceOrSource) {\n if (resourceOrSource instanceof UndoRedoSource) {\n const [, matchedStrResource] = this._findClosestRedoElementWithSource(resourceOrSource.id);\n return matchedStrResource ? this._redo(matchedStrResource) : undefined;\n }\n if (typeof resourceOrSource === 'string') {\n return this._redo(resourceOrSource);\n }\n return this._redo(this.getUriComparisonKey(resourceOrSource));\n }\n _redo(strResource) {\n if (!this._editStacks.has(strResource)) {\n return;\n }\n const editStack = this._editStacks.get(strResource);\n const element = editStack.getClosestFutureElement();\n if (!element) {\n return;\n }\n if (element.groupId) {\n // this element is a part of a group, we need to make sure redoing in a group is in order\n const [matchedElement, matchedStrResource] = this._findClosestRedoElementInGroup(element.groupId);\n if (element !== matchedElement && matchedStrResource) {\n // there is an element in the same group that should be redone before this one\n return this._redo(matchedStrResource);\n }\n }\n try {\n if (element.type === 1 /* Workspace */) {\n return this._workspaceRedo(strResource, element);\n }\n else {\n return this._resourceRedo(editStack, element);\n }\n }\n finally {\n if (DEBUG) {\n this._print('redo');\n }\n }\n }\n};\nUndoRedoService = __decorate([\n __param(0, IDialogService),\n __param(1, INotificationService)\n], UndoRedoService);\nexport { UndoRedoService };\nclass WorkspaceVerificationError {\n constructor(returnValue) {\n this.returnValue = returnValue;\n }\n}\nregisterSingleton(IUndoRedoService, UndoRedoService);\n","import { IdleValue } from './async.js';\n// When comparing large numbers of strings, such as in sorting large arrays, is better for\n// performance to create an Intl.Collator object and use the function provided by its compare\n// property than it is to use String.prototype.localeCompare()\n// A collator with numeric sorting enabled, and no sensitivity to case or to accents\nconst intlFileNameCollatorBaseNumeric = new IdleValue(() => {\n const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n return {\n collator: collator,\n collatorIsNumeric: collator.resolvedOptions().numeric\n };\n}); /** Compares filenames without distinguishing the name from the extension. Disambiguates by unicode comparison. */\nexport function compareFileNames(one, other, caseSensitive = false) {\n const a = one || '';\n const b = other || '';\n const result = intlFileNameCollatorBaseNumeric.value.collator.compare(a, b);\n // Using the numeric option in the collator will\n // make compare(`foo1`, `foo01`) === 0. We must disambiguate.\n if (intlFileNameCollatorBaseNumeric.value.collatorIsNumeric && result === 0 && a !== b) {\n return a < b ? -1 : 1;\n }\n return result;\n}\nexport function compareAnything(one, other, lookFor) {\n const elementAName = one.toLowerCase();\n const elementBName = other.toLowerCase();\n // Sort prefix matches over non prefix matches\n const prefixCompare = compareByPrefix(one, other, lookFor);\n if (prefixCompare) {\n return prefixCompare;\n }\n // Sort suffix matches over non suffix matches\n const elementASuffixMatch = elementAName.endsWith(lookFor);\n const elementBSuffixMatch = elementBName.endsWith(lookFor);\n if (elementASuffixMatch !== elementBSuffixMatch) {\n return elementASuffixMatch ? -1 : 1;\n }\n // Understand file names\n const r = compareFileNames(elementAName, elementBName);\n if (r !== 0) {\n return r;\n }\n // Compare by name\n return elementAName.localeCompare(elementBName);\n}\nexport function compareByPrefix(one, other, lookFor) {\n const elementAName = one.toLowerCase();\n const elementBName = other.toLowerCase();\n // Sort prefix matches over non prefix matches\n const elementAPrefixMatch = elementAName.startsWith(lookFor);\n const elementBPrefixMatch = elementBName.startsWith(lookFor);\n if (elementAPrefixMatch !== elementBPrefixMatch) {\n return elementAPrefixMatch ? -1 : 1;\n }\n // Same prefix: Sort shorter matches to the top to have those on top that match more precisely\n else if (elementAPrefixMatch && elementBPrefixMatch) {\n if (elementAName.length < elementBName.length) {\n return -1;\n }\n if (elementAName.length > elementBName.length) {\n return 1;\n }\n }\n return 0;\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 *--------------------------------------------------------------------------------------------*/\nimport './media/quickInput.css';\nimport * as dom from '../../../browser/dom.js';\nimport { IdGenerator } from '../../../common/idGenerator.js';\nconst iconPathToClass = {};\nconst iconClassGenerator = new IdGenerator('quick-input-button-icon-');\nexport function getIconClass(iconPath) {\n if (!iconPath) {\n return undefined;\n }\n let iconClass;\n const key = iconPath.dark.toString();\n if (iconPathToClass[key]) {\n iconClass = iconPathToClass[key];\n }\n else {\n iconClass = iconClassGenerator.nextId();\n dom.createCSSRule(`.${iconClass}`, `background-image: ${dom.asCSSUrl(iconPath.light || iconPath.dark)}`);\n dom.createCSSRule(`.vs-dark .${iconClass}, .hc-black .${iconClass}`, `background-image: ${dom.asCSSUrl(iconPath.dark)}`);\n iconPathToClass[key] = iconClass;\n }\n return iconClass;\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 *--------------------------------------------------------------------------------------------*/\nimport './keybindingLabel.css';\nimport { equals } from '../../../common/objects.js';\nimport { UILabelProvider } from '../../../common/keybindingLabels.js';\nimport * as dom from '../../dom.js';\nimport { localize } from '../../../../nls.js';\nconst $ = dom.$;\nexport class KeybindingLabel {\n constructor(container, os, options) {\n this.os = os;\n this.keyElements = new Set();\n this.options = options || Object.create(null);\n this.labelBackground = this.options.keybindingLabelBackground;\n this.labelForeground = this.options.keybindingLabelForeground;\n this.labelBorder = this.options.keybindingLabelBorder;\n this.labelBottomBorder = this.options.keybindingLabelBottomBorder;\n this.labelShadow = this.options.keybindingLabelShadow;\n this.domNode = dom.append(container, $('.monaco-keybinding'));\n this.didEverRender = false;\n container.appendChild(this.domNode);\n }\n get element() {\n return this.domNode;\n }\n set(keybinding, matches) {\n if (this.didEverRender && this.keybinding === keybinding && KeybindingLabel.areSame(this.matches, matches)) {\n return;\n }\n this.keybinding = keybinding;\n this.matches = matches;\n this.render();\n }\n render() {\n this.clear();\n if (this.keybinding) {\n let [firstPart, chordPart] = this.keybinding.getParts();\n if (firstPart) {\n this.renderPart(this.domNode, firstPart, this.matches ? this.matches.firstPart : null);\n }\n if (chordPart) {\n dom.append(this.domNode, $('span.monaco-keybinding-key-chord-separator', undefined, ' '));\n this.renderPart(this.domNode, chordPart, this.matches ? this.matches.chordPart : null);\n }\n this.domNode.title = this.keybinding.getAriaLabel() || '';\n }\n else if (this.options && this.options.renderUnboundKeybindings) {\n this.renderUnbound(this.domNode);\n }\n this.applyStyles();\n this.didEverRender = true;\n }\n clear() {\n dom.clearNode(this.domNode);\n this.keyElements.clear();\n }\n renderPart(parent, part, match) {\n const modifierLabels = UILabelProvider.modifierLabels[this.os];\n if (part.ctrlKey) {\n this.renderKey(parent, modifierLabels.ctrlKey, Boolean(match === null || match === void 0 ? void 0 : match.ctrlKey), modifierLabels.separator);\n }\n if (part.shiftKey) {\n this.renderKey(parent, modifierLabels.shiftKey, Boolean(match === null || match === void 0 ? void 0 : match.shiftKey), modifierLabels.separator);\n }\n if (part.altKey) {\n this.renderKey(parent, modifierLabels.altKey, Boolean(match === null || match === void 0 ? void 0 : match.altKey), modifierLabels.separator);\n }\n if (part.metaKey) {\n this.renderKey(parent, modifierLabels.metaKey, Boolean(match === null || match === void 0 ? void 0 : match.metaKey), modifierLabels.separator);\n }\n const keyLabel = part.keyLabel;\n if (keyLabel) {\n this.renderKey(parent, keyLabel, Boolean(match === null || match === void 0 ? void 0 : match.keyCode), '');\n }\n }\n renderKey(parent, label, highlight, separator) {\n dom.append(parent, this.createKeyElement(label, highlight ? '.highlight' : ''));\n if (separator) {\n dom.append(parent, $('span.monaco-keybinding-key-separator', undefined, separator));\n }\n }\n renderUnbound(parent) {\n dom.append(parent, this.createKeyElement(localize('unbound', \"Unbound\")));\n }\n createKeyElement(label, extraClass = '') {\n const keyElement = $('span.monaco-keybinding-key' + extraClass, undefined, label);\n this.keyElements.add(keyElement);\n return keyElement;\n }\n style(styles) {\n this.labelBackground = styles.keybindingLabelBackground;\n this.labelForeground = styles.keybindingLabelForeground;\n this.labelBorder = styles.keybindingLabelBorder;\n this.labelBottomBorder = styles.keybindingLabelBottomBorder;\n this.labelShadow = styles.keybindingLabelShadow;\n this.applyStyles();\n }\n applyStyles() {\n var _a;\n if (this.element) {\n for (const keyElement of this.keyElements) {\n if (this.labelBackground) {\n keyElement.style.backgroundColor = (_a = this.labelBackground) === null || _a === void 0 ? void 0 : _a.toString();\n }\n if (this.labelBorder) {\n keyElement.style.borderColor = this.labelBorder.toString();\n }\n if (this.labelBottomBorder) {\n keyElement.style.borderBottomColor = this.labelBottomBorder.toString();\n }\n if (this.labelShadow) {\n keyElement.style.boxShadow = `inset 0 -1px 0 ${this.labelShadow}`;\n }\n }\n if (this.labelForeground) {\n this.element.style.color = this.labelForeground.toString();\n }\n }\n }\n static areSame(a, b) {\n if (a === b || (!a && !b)) {\n return true;\n }\n return !!a && !!b && equals(a.firstPart, b.firstPart) && equals(a.chordPart, b.chordPart);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport './media/quickInput.css';\nimport * as dom from '../../../browser/dom.js';\nimport { dispose } from '../../../common/lifecycle.js';\nimport { matchesFuzzyIconAware, parseLabelWithIcons } from '../../../common/iconLabels.js';\nimport { compareAnything } from '../../../common/comparers.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { StandardKeyboardEvent } from '../../../browser/keyboardEvent.js';\nimport { IconLabel } from '../../../browser/ui/iconLabel/iconLabel.js';\nimport { HighlightedLabel } from '../../../browser/ui/highlightedlabel/highlightedLabel.js';\nimport { memoize } from '../../../common/decorators.js';\nimport { range } from '../../../common/arrays.js';\nimport * as platform from '../../../common/platform.js';\nimport { ActionBar } from '../../../browser/ui/actionbar/actionbar.js';\nimport { Action } from '../../../common/actions.js';\nimport { getIconClass } from './quickInputUtils.js';\nimport { withNullAsUndefined } from '../../../common/types.js';\nimport { KeybindingLabel } from '../../../browser/ui/keybindingLabel/keybindingLabel.js';\nimport { localize } from '../../../../nls.js';\nimport { getCodiconAriaLabel } from '../../../common/codicons.js';\nconst $ = dom.$;\nclass ListElement {\n constructor(init) {\n this.hidden = false;\n this._onChecked = new Emitter();\n this.onChecked = this._onChecked.event;\n Object.assign(this, init);\n }\n get checked() {\n return !!this._checked;\n }\n set checked(value) {\n if (value !== this._checked) {\n this._checked = value;\n this._onChecked.fire(value);\n }\n }\n dispose() {\n this._onChecked.dispose();\n }\n}\nclass ListElementRenderer {\n get templateId() {\n return ListElementRenderer.ID;\n }\n renderTemplate(container) {\n const data = Object.create(null);\n data.toDisposeElement = [];\n data.toDisposeTemplate = [];\n data.entry = dom.append(container, $('.quick-input-list-entry'));\n // Checkbox\n const label = dom.append(data.entry, $('label.quick-input-list-label'));\n data.toDisposeTemplate.push(dom.addStandardDisposableListener(label, dom.EventType.CLICK, e => {\n if (!data.checkbox.offsetParent) { // If checkbox not visible:\n e.preventDefault(); // Prevent toggle of checkbox when it is immediately shown afterwards. #91740\n }\n }));\n data.checkbox = dom.append(label, $('input.quick-input-list-checkbox'));\n data.checkbox.type = 'checkbox';\n data.toDisposeTemplate.push(dom.addStandardDisposableListener(data.checkbox, dom.EventType.CHANGE, e => {\n data.element.checked = data.checkbox.checked;\n }));\n // Rows\n const rows = dom.append(label, $('.quick-input-list-rows'));\n const row1 = dom.append(rows, $('.quick-input-list-row'));\n const row2 = dom.append(rows, $('.quick-input-list-row'));\n // Label\n data.label = new IconLabel(row1, { supportHighlights: true, supportDescriptionHighlights: true, supportIcons: true });\n // Keybinding\n const keybindingContainer = dom.append(row1, $('.quick-input-list-entry-keybinding'));\n data.keybinding = new KeybindingLabel(keybindingContainer, platform.OS);\n // Detail\n const detailContainer = dom.append(row2, $('.quick-input-list-label-meta'));\n data.detail = new HighlightedLabel(detailContainer, true);\n // Separator\n data.separator = dom.append(data.entry, $('.quick-input-list-separator'));\n // Actions\n data.actionBar = new ActionBar(data.entry);\n data.actionBar.domNode.classList.add('quick-input-list-entry-action-bar');\n data.toDisposeTemplate.push(data.actionBar);\n return data;\n }\n renderElement(element, index, data) {\n data.toDisposeElement = dispose(data.toDisposeElement);\n data.element = element;\n data.checkbox.checked = element.checked;\n data.toDisposeElement.push(element.onChecked(checked => data.checkbox.checked = checked));\n const { labelHighlights, descriptionHighlights, detailHighlights } = element;\n // Label\n const options = Object.create(null);\n options.matches = labelHighlights || [];\n options.descriptionTitle = element.saneDescription;\n options.descriptionMatches = descriptionHighlights || [];\n options.extraClasses = element.item.iconClasses;\n options.italic = element.item.italic;\n options.strikethrough = element.item.strikethrough;\n data.label.setLabel(element.saneLabel, element.saneDescription, options);\n // Keybinding\n data.keybinding.set(element.item.keybinding);\n // Meta\n data.detail.set(element.saneDetail, detailHighlights);\n // Separator\n if (element.separator && element.separator.label) {\n data.separator.textContent = element.separator.label;\n data.separator.style.display = '';\n }\n else {\n data.separator.style.display = 'none';\n }\n data.entry.classList.toggle('quick-input-list-separator-border', !!element.separator);\n // Actions\n data.actionBar.clear();\n const buttons = element.item.buttons;\n if (buttons && buttons.length) {\n data.actionBar.push(buttons.map((button, index) => {\n let cssClasses = button.iconClass || (button.iconPath ? getIconClass(button.iconPath) : undefined);\n if (button.alwaysVisible) {\n cssClasses = cssClasses ? `${cssClasses} always-visible` : 'always-visible';\n }\n const action = new Action(`id-${index}`, '', cssClasses, true, () => __awaiter(this, void 0, void 0, function* () {\n element.fireButtonTriggered({\n button,\n item: element.item\n });\n }));\n action.tooltip = button.tooltip || '';\n return action;\n }), { icon: true, label: false });\n data.entry.classList.add('has-actions');\n }\n else {\n data.entry.classList.remove('has-actions');\n }\n }\n disposeElement(element, index, data) {\n data.toDisposeElement = dispose(data.toDisposeElement);\n }\n disposeTemplate(data) {\n data.toDisposeElement = dispose(data.toDisposeElement);\n data.toDisposeTemplate = dispose(data.toDisposeTemplate);\n }\n}\nListElementRenderer.ID = 'listelement';\nclass ListElementDelegate {\n getHeight(element) {\n return element.saneDetail ? 44 : 22;\n }\n getTemplateId(element) {\n return ListElementRenderer.ID;\n }\n}\nexport var QuickInputListFocus;\n(function (QuickInputListFocus) {\n QuickInputListFocus[QuickInputListFocus[\"First\"] = 1] = \"First\";\n QuickInputListFocus[QuickInputListFocus[\"Second\"] = 2] = \"Second\";\n QuickInputListFocus[QuickInputListFocus[\"Last\"] = 3] = \"Last\";\n QuickInputListFocus[QuickInputListFocus[\"Next\"] = 4] = \"Next\";\n QuickInputListFocus[QuickInputListFocus[\"Previous\"] = 5] = \"Previous\";\n QuickInputListFocus[QuickInputListFocus[\"NextPage\"] = 6] = \"NextPage\";\n QuickInputListFocus[QuickInputListFocus[\"PreviousPage\"] = 7] = \"PreviousPage\";\n})(QuickInputListFocus || (QuickInputListFocus = {}));\nexport class QuickInputList {\n constructor(parent, id, options) {\n this.parent = parent;\n this.inputElements = [];\n this.elements = [];\n this.elementsToIndexes = new Map();\n this.matchOnDescription = false;\n this.matchOnDetail = false;\n this.matchOnLabel = true;\n this.matchOnMeta = true;\n this.sortByLabel = true;\n this._onChangedAllVisibleChecked = new Emitter();\n this.onChangedAllVisibleChecked = this._onChangedAllVisibleChecked.event;\n this._onChangedCheckedCount = new Emitter();\n this.onChangedCheckedCount = this._onChangedCheckedCount.event;\n this._onChangedVisibleCount = new Emitter();\n this.onChangedVisibleCount = this._onChangedVisibleCount.event;\n this._onChangedCheckedElements = new Emitter();\n this.onChangedCheckedElements = this._onChangedCheckedElements.event;\n this._onButtonTriggered = new Emitter();\n this.onButtonTriggered = this._onButtonTriggered.event;\n this._onKeyDown = new Emitter();\n this.onKeyDown = this._onKeyDown.event;\n this._onLeave = new Emitter();\n this.onLeave = this._onLeave.event;\n this._fireCheckedEvents = true;\n this.elementDisposables = [];\n this.disposables = [];\n this.id = id;\n this.container = dom.append(this.parent, $('.quick-input-list'));\n const delegate = new ListElementDelegate();\n const accessibilityProvider = new QuickInputAccessibilityProvider();\n this.list = options.createList('QuickInput', this.container, delegate, [new ListElementRenderer()], {\n identityProvider: { getId: element => element.saneLabel },\n setRowLineHeight: false,\n multipleSelectionSupport: false,\n horizontalScrolling: false,\n accessibilityProvider\n });\n this.list.getHTMLElement().id = id;\n this.disposables.push(this.list);\n this.disposables.push(this.list.onKeyDown(e => {\n const event = new StandardKeyboardEvent(e);\n switch (event.keyCode) {\n case 10 /* Space */:\n this.toggleCheckbox();\n break;\n case 31 /* KEY_A */:\n if (platform.isMacintosh ? e.metaKey : e.ctrlKey) {\n this.list.setFocus(range(this.list.length));\n }\n break;\n case 16 /* UpArrow */:\n const focus1 = this.list.getFocus();\n if (focus1.length === 1 && focus1[0] === 0) {\n this._onLeave.fire();\n }\n break;\n case 18 /* DownArrow */:\n const focus2 = this.list.getFocus();\n if (focus2.length === 1 && focus2[0] === this.list.length - 1) {\n this._onLeave.fire();\n }\n break;\n }\n this._onKeyDown.fire(event);\n }));\n this.disposables.push(this.list.onMouseDown(e => {\n if (e.browserEvent.button !== 2) {\n // Works around / fixes #64350.\n e.browserEvent.preventDefault();\n }\n }));\n this.disposables.push(dom.addDisposableListener(this.container, dom.EventType.CLICK, e => {\n if (e.x || e.y) { // Avoid 'click' triggered by 'space' on checkbox.\n this._onLeave.fire();\n }\n }));\n this.disposables.push(this.list.onMouseMiddleClick(e => {\n this._onLeave.fire();\n }));\n this.disposables.push(this.list.onContextMenu(e => {\n if (typeof e.index === 'number') {\n e.browserEvent.preventDefault();\n // we want to treat a context menu event as\n // a gesture to open the item at the index\n // since we do not have any context menu\n // this enables for example macOS to Ctrl-\n // click on an item to open it.\n this.list.setSelection([e.index]);\n }\n }));\n this.disposables.push(this._onChangedAllVisibleChecked, this._onChangedCheckedCount, this._onChangedVisibleCount, this._onChangedCheckedElements, this._onButtonTriggered, this._onLeave, this._onKeyDown);\n }\n get onDidChangeFocus() {\n return Event.map(this.list.onDidChangeFocus, e => e.elements.map(e => e.item));\n }\n get onDidChangeSelection() {\n return Event.map(this.list.onDidChangeSelection, e => ({ items: e.elements.map(e => e.item), event: e.browserEvent }));\n }\n getAllVisibleChecked() {\n return this.allVisibleChecked(this.elements, false);\n }\n allVisibleChecked(elements, whenNoneVisible = true) {\n for (let i = 0, n = elements.length; i < n; i++) {\n const element = elements[i];\n if (!element.hidden) {\n if (!element.checked) {\n return false;\n }\n else {\n whenNoneVisible = true;\n }\n }\n }\n return whenNoneVisible;\n }\n getCheckedCount() {\n let count = 0;\n const elements = this.elements;\n for (let i = 0, n = elements.length; i < n; i++) {\n if (elements[i].checked) {\n count++;\n }\n }\n return count;\n }\n getVisibleCount() {\n let count = 0;\n const elements = this.elements;\n for (let i = 0, n = elements.length; i < n; i++) {\n if (!elements[i].hidden) {\n count++;\n }\n }\n return count;\n }\n setAllVisibleChecked(checked) {\n try {\n this._fireCheckedEvents = false;\n this.elements.forEach(element => {\n if (!element.hidden) {\n element.checked = checked;\n }\n });\n }\n finally {\n this._fireCheckedEvents = true;\n this.fireCheckedEvents();\n }\n }\n setElements(inputElements) {\n this.elementDisposables = dispose(this.elementDisposables);\n const fireButtonTriggered = (event) => this.fireButtonTriggered(event);\n this.inputElements = inputElements;\n this.elements = inputElements.reduce((result, item, index) => {\n var _a, _b, _c;\n if (item.type !== 'separator') {\n const previous = index && inputElements[index - 1];\n const saneLabel = item.label && item.label.replace(/\\r?\\n/g, ' ');\n const saneMeta = item.meta && item.meta.replace(/\\r?\\n/g, ' ');\n const saneDescription = item.description && item.description.replace(/\\r?\\n/g, ' ');\n const saneDetail = item.detail && item.detail.replace(/\\r?\\n/g, ' ');\n const saneAriaLabel = item.ariaLabel || [saneLabel, saneDescription, saneDetail]\n .map(s => getCodiconAriaLabel(s))\n .filter(s => !!s)\n .join(', ');\n result.push(new ListElement({\n index,\n item,\n saneLabel,\n saneMeta,\n saneAriaLabel,\n saneDescription,\n saneDetail,\n labelHighlights: (_a = item.highlights) === null || _a === void 0 ? void 0 : _a.label,\n descriptionHighlights: (_b = item.highlights) === null || _b === void 0 ? void 0 : _b.description,\n detailHighlights: (_c = item.highlights) === null || _c === void 0 ? void 0 : _c.detail,\n checked: false,\n separator: previous && previous.type === 'separator' ? previous : undefined,\n fireButtonTriggered\n }));\n }\n return result;\n }, []);\n this.elementDisposables.push(...this.elements);\n this.elementDisposables.push(...this.elements.map(element => element.onChecked(() => this.fireCheckedEvents())));\n this.elementsToIndexes = this.elements.reduce((map, element, index) => {\n map.set(element.item, index);\n return map;\n }, new Map());\n this.list.splice(0, this.list.length); // Clear focus and selection first, sending the events when the list is empty.\n this.list.splice(0, this.list.length, this.elements);\n this._onChangedVisibleCount.fire(this.elements.length);\n }\n getFocusedElements() {\n return this.list.getFocusedElements()\n .map(e => e.item);\n }\n setFocusedElements(items) {\n this.list.setFocus(items\n .filter(item => this.elementsToIndexes.has(item))\n .map(item => this.elementsToIndexes.get(item)));\n if (items.length > 0) {\n const focused = this.list.getFocus()[0];\n if (typeof focused === 'number') {\n this.list.reveal(focused);\n }\n }\n }\n getActiveDescendant() {\n return this.list.getHTMLElement().getAttribute('aria-activedescendant');\n }\n setSelectedElements(items) {\n this.list.setSelection(items\n .filter(item => this.elementsToIndexes.has(item))\n .map(item => this.elementsToIndexes.get(item)));\n }\n getCheckedElements() {\n return this.elements.filter(e => e.checked)\n .map(e => e.item);\n }\n setCheckedElements(items) {\n try {\n this._fireCheckedEvents = false;\n const checked = new Set();\n for (const item of items) {\n checked.add(item);\n }\n for (const element of this.elements) {\n element.checked = checked.has(element.item);\n }\n }\n finally {\n this._fireCheckedEvents = true;\n this.fireCheckedEvents();\n }\n }\n set enabled(value) {\n this.list.getHTMLElement().style.pointerEvents = value ? '' : 'none';\n }\n focus(what) {\n if (!this.list.length) {\n return;\n }\n if (what === QuickInputListFocus.Next && this.list.getFocus()[0] === this.list.length - 1) {\n what = QuickInputListFocus.First;\n }\n if (what === QuickInputListFocus.Previous && this.list.getFocus()[0] === 0) {\n what = QuickInputListFocus.Last;\n }\n if (what === QuickInputListFocus.Second && this.list.length < 2) {\n what = QuickInputListFocus.First;\n }\n switch (what) {\n case QuickInputListFocus.First:\n this.list.focusFirst();\n break;\n case QuickInputListFocus.Second:\n this.list.focusNth(1);\n break;\n case QuickInputListFocus.Last:\n this.list.focusLast();\n break;\n case QuickInputListFocus.Next:\n this.list.focusNext();\n break;\n case QuickInputListFocus.Previous:\n this.list.focusPrevious();\n break;\n case QuickInputListFocus.NextPage:\n this.list.focusNextPage();\n break;\n case QuickInputListFocus.PreviousPage:\n this.list.focusPreviousPage();\n break;\n }\n const focused = this.list.getFocus()[0];\n if (typeof focused === 'number') {\n this.list.reveal(focused);\n }\n }\n clearFocus() {\n this.list.setFocus([]);\n }\n domFocus() {\n this.list.domFocus();\n }\n layout(maxHeight) {\n this.list.getHTMLElement().style.maxHeight = maxHeight ? `calc(${Math.floor(maxHeight / 44) * 44}px)` : '';\n this.list.layout();\n }\n filter(query) {\n if (!(this.sortByLabel || this.matchOnLabel || this.matchOnDescription || this.matchOnDetail)) {\n this.list.layout();\n return false;\n }\n query = query.trim();\n // Reset filtering\n if (!query || !(this.matchOnLabel || this.matchOnDescription || this.matchOnDetail)) {\n this.elements.forEach(element => {\n element.labelHighlights = undefined;\n element.descriptionHighlights = undefined;\n element.detailHighlights = undefined;\n element.hidden = false;\n const previous = element.index && this.inputElements[element.index - 1];\n element.separator = previous && previous.type === 'separator' ? previous : undefined;\n });\n }\n // Filter by value (since we support icons in labels, use $(..) aware fuzzy matching)\n else {\n let currentSeparator;\n this.elements.forEach(element => {\n const labelHighlights = this.matchOnLabel ? withNullAsUndefined(matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneLabel))) : undefined;\n const descriptionHighlights = this.matchOnDescription ? withNullAsUndefined(matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDescription || ''))) : undefined;\n const detailHighlights = this.matchOnDetail ? withNullAsUndefined(matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDetail || ''))) : undefined;\n const metaHighlights = this.matchOnMeta ? withNullAsUndefined(matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneMeta || ''))) : undefined;\n if (labelHighlights || descriptionHighlights || detailHighlights || metaHighlights) {\n element.labelHighlights = labelHighlights;\n element.descriptionHighlights = descriptionHighlights;\n element.detailHighlights = detailHighlights;\n element.hidden = false;\n }\n else {\n element.labelHighlights = undefined;\n element.descriptionHighlights = undefined;\n element.detailHighlights = undefined;\n element.hidden = !element.item.alwaysShow;\n }\n element.separator = undefined;\n // we can show the separator unless the list gets sorted by match\n if (!this.sortByLabel) {\n const previous = element.index && this.inputElements[element.index - 1];\n currentSeparator = previous && previous.type === 'separator' ? previous : currentSeparator;\n if (currentSeparator && !element.hidden) {\n element.separator = currentSeparator;\n currentSeparator = undefined;\n }\n }\n });\n }\n const shownElements = this.elements.filter(element => !element.hidden);\n // Sort by value\n if (this.sortByLabel && query) {\n const normalizedSearchValue = query.toLowerCase();\n shownElements.sort((a, b) => {\n return compareEntries(a, b, normalizedSearchValue);\n });\n }\n this.elementsToIndexes = shownElements.reduce((map, element, index) => {\n map.set(element.item, index);\n return map;\n }, new Map());\n this.list.splice(0, this.list.length, shownElements);\n this.list.setFocus([]);\n this.list.layout();\n this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked());\n this._onChangedVisibleCount.fire(shownElements.length);\n return true;\n }\n toggleCheckbox() {\n try {\n this._fireCheckedEvents = false;\n const elements = this.list.getFocusedElements();\n const allChecked = this.allVisibleChecked(elements);\n for (const element of elements) {\n element.checked = !allChecked;\n }\n }\n finally {\n this._fireCheckedEvents = true;\n this.fireCheckedEvents();\n }\n }\n display(display) {\n this.container.style.display = display ? '' : 'none';\n }\n isDisplayed() {\n return this.container.style.display !== 'none';\n }\n dispose() {\n this.elementDisposables = dispose(this.elementDisposables);\n this.disposables = dispose(this.disposables);\n }\n fireCheckedEvents() {\n if (this._fireCheckedEvents) {\n this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked());\n this._onChangedCheckedCount.fire(this.getCheckedCount());\n this._onChangedCheckedElements.fire(this.getCheckedElements());\n }\n }\n fireButtonTriggered(event) {\n this._onButtonTriggered.fire(event);\n }\n style(styles) {\n this.list.style(styles);\n }\n}\n__decorate([\n memoize\n], QuickInputList.prototype, \"onDidChangeFocus\", null);\n__decorate([\n memoize\n], QuickInputList.prototype, \"onDidChangeSelection\", null);\nfunction compareEntries(elementA, elementB, lookFor) {\n const labelHighlightsA = elementA.labelHighlights || [];\n const labelHighlightsB = elementB.labelHighlights || [];\n if (labelHighlightsA.length && !labelHighlightsB.length) {\n return -1;\n }\n if (!labelHighlightsA.length && labelHighlightsB.length) {\n return 1;\n }\n if (labelHighlightsA.length === 0 && labelHighlightsB.length === 0) {\n return 0;\n }\n return compareAnything(elementA.saneLabel, elementB.saneLabel, lookFor);\n}\nclass QuickInputAccessibilityProvider {\n getWidgetAriaLabel() {\n return localize('quickInput', \"Quick Input\");\n }\n getAriaLabel(element) {\n return element.saneAriaLabel;\n }\n getWidgetRole() {\n return 'listbox';\n }\n getRole() {\n return 'option';\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './media/quickInput.css';\nimport * as dom from '../../../browser/dom.js';\nimport { InputBox } from '../../../browser/ui/inputbox/inputBox.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { StandardKeyboardEvent } from '../../../browser/keyboardEvent.js';\nimport Severity from '../../../common/severity.js';\nimport { StandardMouseEvent } from '../../../browser/mouseEvent.js';\nconst $ = dom.$;\nexport class QuickInputBox extends Disposable {\n constructor(parent) {\n super();\n this.parent = parent;\n this.onKeyDown = (handler) => {\n return dom.addDisposableListener(this.inputBox.inputElement, dom.EventType.KEY_DOWN, (e) => {\n handler(new StandardKeyboardEvent(e));\n });\n };\n this.onMouseDown = (handler) => {\n return dom.addDisposableListener(this.inputBox.inputElement, dom.EventType.MOUSE_DOWN, (e) => {\n handler(new StandardMouseEvent(e));\n });\n };\n this.onDidChange = (handler) => {\n return this.inputBox.onDidChange(handler);\n };\n this.container = dom.append(this.parent, $('.quick-input-box'));\n this.inputBox = this._register(new InputBox(this.container, undefined));\n }\n get value() {\n return this.inputBox.value;\n }\n set value(value) {\n this.inputBox.value = value;\n }\n select(range = null) {\n this.inputBox.select(range);\n }\n isSelectionAtEnd() {\n return this.inputBox.isSelectionAtEnd();\n }\n get placeholder() {\n return this.inputBox.inputElement.getAttribute('placeholder') || '';\n }\n set placeholder(placeholder) {\n this.inputBox.setPlaceHolder(placeholder);\n }\n get ariaLabel() {\n return this.inputBox.getAriaLabel();\n }\n set ariaLabel(ariaLabel) {\n this.inputBox.setAriaLabel(ariaLabel);\n }\n get password() {\n return this.inputBox.inputElement.type === 'password';\n }\n set password(password) {\n this.inputBox.inputElement.type = password ? 'password' : 'text';\n }\n setAttribute(name, value) {\n this.inputBox.inputElement.setAttribute(name, value);\n }\n removeAttribute(name) {\n this.inputBox.inputElement.removeAttribute(name);\n }\n showDecoration(decoration) {\n if (decoration === Severity.Ignore) {\n this.inputBox.hideMessage();\n }\n else {\n this.inputBox.showMessage({ type: decoration === Severity.Info ? 1 /* INFO */ : decoration === Severity.Warning ? 2 /* WARNING */ : 3 /* ERROR */, content: '' });\n }\n }\n stylesForType(decoration) {\n return this.inputBox.stylesForType(decoration === Severity.Info ? 1 /* INFO */ : decoration === Severity.Warning ? 2 /* WARNING */ : 3 /* ERROR */);\n }\n setFocus() {\n this.inputBox.focus();\n }\n layout() {\n this.inputBox.layout();\n }\n style(styles) {\n this.inputBox.style(styles);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './progressbar.css';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { Color } from '../../../common/color.js';\nimport { mixin } from '../../../common/objects.js';\nimport { show } from '../../dom.js';\nimport { RunOnceScheduler } from '../../../common/async.js';\nconst CSS_DONE = 'done';\nconst CSS_ACTIVE = 'active';\nconst CSS_INFINITE = 'infinite';\nconst CSS_DISCRETE = 'discrete';\nconst defaultOpts = {\n progressBarBackground: Color.fromHex('#0E70C0')\n};\n/**\n * A progress bar with support for infinite or discrete progress.\n */\nexport class ProgressBar extends Disposable {\n constructor(container, options) {\n super();\n this.options = options || Object.create(null);\n mixin(this.options, defaultOpts, false);\n this.workedVal = 0;\n this.progressBarBackground = this.options.progressBarBackground;\n this._register(this.showDelayedScheduler = new RunOnceScheduler(() => show(this.element), 0));\n this.create(container);\n }\n create(container) {\n this.element = document.createElement('div');\n this.element.classList.add('monaco-progress-container');\n this.element.setAttribute('role', 'progressbar');\n this.element.setAttribute('aria-valuemin', '0');\n container.appendChild(this.element);\n this.bit = document.createElement('div');\n this.bit.classList.add('progress-bit');\n this.element.appendChild(this.bit);\n this.applyStyles();\n }\n off() {\n this.bit.style.width = 'inherit';\n this.bit.style.opacity = '1';\n this.element.classList.remove(CSS_ACTIVE, CSS_INFINITE, CSS_DISCRETE);\n this.workedVal = 0;\n this.totalWork = undefined;\n }\n /**\n * Stops the progressbar from showing any progress instantly without fading out.\n */\n stop() {\n return this.doDone(false);\n }\n doDone(delayed) {\n this.element.classList.add(CSS_DONE);\n // let it grow to 100% width and hide afterwards\n if (!this.element.classList.contains(CSS_INFINITE)) {\n this.bit.style.width = 'inherit';\n if (delayed) {\n setTimeout(() => this.off(), 200);\n }\n else {\n this.off();\n }\n }\n // let it fade out and hide afterwards\n else {\n this.bit.style.opacity = '0';\n if (delayed) {\n setTimeout(() => this.off(), 200);\n }\n else {\n this.off();\n }\n }\n return this;\n }\n /**\n * Use this mode to indicate progress that has no total number of work units.\n */\n infinite() {\n this.bit.style.width = '2%';\n this.bit.style.opacity = '1';\n this.element.classList.remove(CSS_DISCRETE, CSS_DONE);\n this.element.classList.add(CSS_ACTIVE, CSS_INFINITE);\n return this;\n }\n getContainer() {\n return this.element;\n }\n style(styles) {\n this.progressBarBackground = styles.progressBarBackground;\n this.applyStyles();\n }\n applyStyles() {\n if (this.bit) {\n const background = this.progressBarBackground ? this.progressBarBackground.toString() : '';\n this.bit.style.backgroundColor = background;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './button.css';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { Color } from '../../../common/color.js';\nimport { mixin } from '../../../common/objects.js';\nimport { Emitter } from '../../../common/event.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { Gesture, EventType as TouchEventType } from '../../touch.js';\nimport { renderLabelWithIcons } from '../iconLabel/iconLabels.js';\nimport { addDisposableListener, EventType, EventHelper, trackFocus, reset } from '../../dom.js';\nconst defaultOptions = {\n buttonBackground: Color.fromHex('#0E639C'),\n buttonHoverBackground: Color.fromHex('#006BB3'),\n buttonForeground: Color.white\n};\nexport class Button extends Disposable {\n constructor(container, options) {\n super();\n this._onDidClick = this._register(new Emitter());\n this.options = options || Object.create(null);\n mixin(this.options, defaultOptions, false);\n this.buttonForeground = this.options.buttonForeground;\n this.buttonBackground = this.options.buttonBackground;\n this.buttonHoverBackground = this.options.buttonHoverBackground;\n this.buttonSecondaryForeground = this.options.buttonSecondaryForeground;\n this.buttonSecondaryBackground = this.options.buttonSecondaryBackground;\n this.buttonSecondaryHoverBackground = this.options.buttonSecondaryHoverBackground;\n this.buttonBorder = this.options.buttonBorder;\n this._element = document.createElement('a');\n this._element.classList.add('monaco-button');\n this._element.tabIndex = 0;\n this._element.setAttribute('role', 'button');\n container.appendChild(this._element);\n this._register(Gesture.addTarget(this._element));\n [EventType.CLICK, TouchEventType.Tap].forEach(eventType => {\n this._register(addDisposableListener(this._element, eventType, e => {\n if (!this.enabled) {\n EventHelper.stop(e);\n return;\n }\n this._onDidClick.fire(e);\n }));\n });\n this._register(addDisposableListener(this._element, EventType.KEY_DOWN, e => {\n const event = new StandardKeyboardEvent(e);\n let eventHandled = false;\n if (this.enabled && (event.equals(3 /* Enter */) || event.equals(10 /* Space */))) {\n this._onDidClick.fire(e);\n eventHandled = true;\n }\n else if (event.equals(9 /* Escape */)) {\n this._element.blur();\n eventHandled = true;\n }\n if (eventHandled) {\n EventHelper.stop(event, true);\n }\n }));\n this._register(addDisposableListener(this._element, EventType.MOUSE_OVER, e => {\n if (!this._element.classList.contains('disabled')) {\n this.setHoverBackground();\n }\n }));\n this._register(addDisposableListener(this._element, EventType.MOUSE_OUT, e => {\n this.applyStyles(); // restore standard styles\n }));\n // Also set hover background when button is focused for feedback\n this.focusTracker = this._register(trackFocus(this._element));\n this._register(this.focusTracker.onDidFocus(() => this.setHoverBackground()));\n this._register(this.focusTracker.onDidBlur(() => this.applyStyles())); // restore standard styles\n this.applyStyles();\n }\n get onDidClick() { return this._onDidClick.event; }\n setHoverBackground() {\n let hoverBackground;\n if (this.options.secondary) {\n hoverBackground = this.buttonSecondaryHoverBackground ? this.buttonSecondaryHoverBackground.toString() : null;\n }\n else {\n hoverBackground = this.buttonHoverBackground ? this.buttonHoverBackground.toString() : null;\n }\n if (hoverBackground) {\n this._element.style.backgroundColor = hoverBackground;\n }\n }\n style(styles) {\n this.buttonForeground = styles.buttonForeground;\n this.buttonBackground = styles.buttonBackground;\n this.buttonHoverBackground = styles.buttonHoverBackground;\n this.buttonSecondaryForeground = styles.buttonSecondaryForeground;\n this.buttonSecondaryBackground = styles.buttonSecondaryBackground;\n this.buttonSecondaryHoverBackground = styles.buttonSecondaryHoverBackground;\n this.buttonBorder = styles.buttonBorder;\n this.applyStyles();\n }\n applyStyles() {\n if (this._element) {\n let background, foreground;\n if (this.options.secondary) {\n foreground = this.buttonSecondaryForeground ? this.buttonSecondaryForeground.toString() : '';\n background = this.buttonSecondaryBackground ? this.buttonSecondaryBackground.toString() : '';\n }\n else {\n foreground = this.buttonForeground ? this.buttonForeground.toString() : '';\n background = this.buttonBackground ? this.buttonBackground.toString() : '';\n }\n const border = this.buttonBorder ? this.buttonBorder.toString() : '';\n this._element.style.color = foreground;\n this._element.style.backgroundColor = background;\n this._element.style.borderWidth = border ? '1px' : '';\n this._element.style.borderStyle = border ? 'solid' : '';\n this._element.style.borderColor = border;\n }\n }\n get element() {\n return this._element;\n }\n set label(value) {\n this._element.classList.add('monaco-text-button');\n if (this.options.supportIcons) {\n reset(this._element, ...renderLabelWithIcons(value));\n }\n else {\n this._element.textContent = value;\n }\n if (typeof this.options.title === 'string') {\n this._element.title = this.options.title;\n }\n else if (this.options.title) {\n this._element.title = value;\n }\n }\n set enabled(value) {\n if (value) {\n this._element.classList.remove('disabled');\n this._element.setAttribute('aria-disabled', String(false));\n this._element.tabIndex = 0;\n }\n else {\n this._element.classList.add('disabled');\n this._element.setAttribute('aria-disabled', String(true));\n }\n }\n get enabled() {\n return !this._element.classList.contains('disabled');\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport './media/quickInput.css';\nimport { NO_KEY_MODS, ItemActivation, QuickInputHideReason } from '../common/quickInput.js';\nimport * as dom from '../../../browser/dom.js';\nimport { CancellationToken } from '../../../common/cancellation.js';\nimport { QuickInputList, QuickInputListFocus } from './quickInputList.js';\nimport { QuickInputBox } from './quickInputBox.js';\nimport { StandardKeyboardEvent } from '../../../browser/keyboardEvent.js';\nimport { localize } from '../../../../nls.js';\nimport { CountBadge } from '../../../browser/ui/countBadge/countBadge.js';\nimport { ProgressBar } from '../../../browser/ui/progressbar/progressbar.js';\nimport { Emitter } from '../../../common/event.js';\nimport { Button } from '../../../browser/ui/button/button.js';\nimport { dispose, Disposable, DisposableStore } from '../../../common/lifecycle.js';\nimport Severity from '../../../common/severity.js';\nimport { ActionBar } from '../../../browser/ui/actionbar/actionbar.js';\nimport { Action } from '../../../common/actions.js';\nimport { equals } from '../../../common/arrays.js';\nimport { TimeoutTimer } from '../../../common/async.js';\nimport { getIconClass } from './quickInputUtils.js';\nimport { registerCodicon, Codicon } from '../../../common/codicons.js';\nimport { escape } from '../../../common/strings.js';\nimport { renderLabelWithIcons } from '../../../browser/ui/iconLabel/iconLabels.js';\nconst $ = dom.$;\nconst backButtonIcon = registerCodicon('quick-input-back', Codicon.arrowLeft);\nconst backButton = {\n iconClass: backButtonIcon.classNames,\n tooltip: localize('quickInput.back', \"Back\"),\n handle: -1 // TODO\n};\nclass QuickInput extends Disposable {\n constructor(ui) {\n super();\n this.ui = ui;\n this.visible = false;\n this._enabled = true;\n this._busy = false;\n this._ignoreFocusOut = false;\n this._buttons = [];\n this.noValidationMessage = QuickInput.noPromptMessage;\n this._severity = Severity.Ignore;\n this.buttonsUpdated = false;\n this.onDidTriggerButtonEmitter = this._register(new Emitter());\n this.onDidHideEmitter = this._register(new Emitter());\n this.onDisposeEmitter = this._register(new Emitter());\n this.visibleDisposables = this._register(new DisposableStore());\n this.onDidHide = this.onDidHideEmitter.event;\n }\n get title() {\n return this._title;\n }\n set title(title) {\n this._title = title;\n this.update();\n }\n get description() {\n return this._description;\n }\n set description(description) {\n this._description = description;\n this.update();\n }\n get step() {\n return this._steps;\n }\n set step(step) {\n this._steps = step;\n this.update();\n }\n get totalSteps() {\n return this._totalSteps;\n }\n set totalSteps(totalSteps) {\n this._totalSteps = totalSteps;\n this.update();\n }\n get enabled() {\n return this._enabled;\n }\n set enabled(enabled) {\n this._enabled = enabled;\n this.update();\n }\n get contextKey() {\n return this._contextKey;\n }\n set contextKey(contextKey) {\n this._contextKey = contextKey;\n this.update();\n }\n get busy() {\n return this._busy;\n }\n set busy(busy) {\n this._busy = busy;\n this.update();\n }\n get ignoreFocusOut() {\n return this._ignoreFocusOut;\n }\n set ignoreFocusOut(ignoreFocusOut) {\n this._ignoreFocusOut = ignoreFocusOut;\n this.update();\n }\n get buttons() {\n return this._buttons;\n }\n set buttons(buttons) {\n this._buttons = buttons;\n this.buttonsUpdated = true;\n this.update();\n }\n get validationMessage() {\n return this._validationMessage;\n }\n set validationMessage(validationMessage) {\n this._validationMessage = validationMessage;\n this.update();\n }\n get severity() {\n return this._severity;\n }\n set severity(severity) {\n this._severity = severity;\n this.update();\n }\n show() {\n if (this.visible) {\n return;\n }\n this.visibleDisposables.add(this.ui.onDidTriggerButton(button => {\n if (this.buttons.indexOf(button) !== -1) {\n this.onDidTriggerButtonEmitter.fire(button);\n }\n }));\n this.ui.show(this);\n this.visible = true;\n this.update();\n }\n hide() {\n if (!this.visible) {\n return;\n }\n this.ui.hide();\n }\n didHide(reason = QuickInputHideReason.Other) {\n this.visible = false;\n this.visibleDisposables.clear();\n this.onDidHideEmitter.fire({ reason });\n }\n update() {\n if (!this.visible) {\n return;\n }\n const title = this.getTitle();\n if (title && this.ui.title.textContent !== title) {\n this.ui.title.textContent = title;\n }\n else if (!title && this.ui.title.innerHTML !== '&nbsp;') {\n this.ui.title.innerText = '\\u00a0;';\n }\n const description = this.getDescription();\n if (this.ui.description1.textContent !== description) {\n this.ui.description1.textContent = description;\n }\n if (this.ui.description2.textContent !== description) {\n this.ui.description2.textContent = description;\n }\n if (this.busy && !this.busyDelay) {\n this.busyDelay = new TimeoutTimer();\n this.busyDelay.setIfNotSet(() => {\n if (this.visible) {\n this.ui.progressBar.infinite();\n }\n }, 800);\n }\n if (!this.busy && this.busyDelay) {\n this.ui.progressBar.stop();\n this.busyDelay.cancel();\n this.busyDelay = undefined;\n }\n if (this.buttonsUpdated) {\n this.buttonsUpdated = false;\n this.ui.leftActionBar.clear();\n const leftButtons = this.buttons.filter(button => button === backButton);\n this.ui.leftActionBar.push(leftButtons.map((button, index) => {\n const action = new Action(`id-${index}`, '', button.iconClass || getIconClass(button.iconPath), true, () => __awaiter(this, void 0, void 0, function* () {\n this.onDidTriggerButtonEmitter.fire(button);\n }));\n action.tooltip = button.tooltip || '';\n return action;\n }), { icon: true, label: false });\n this.ui.rightActionBar.clear();\n const rightButtons = this.buttons.filter(button => button !== backButton);\n this.ui.rightActionBar.push(rightButtons.map((button, index) => {\n const action = new Action(`id-${index}`, '', button.iconClass || getIconClass(button.iconPath), true, () => __awaiter(this, void 0, void 0, function* () {\n this.onDidTriggerButtonEmitter.fire(button);\n }));\n action.tooltip = button.tooltip || '';\n return action;\n }), { icon: true, label: false });\n }\n this.ui.ignoreFocusOut = this.ignoreFocusOut;\n this.ui.setEnabled(this.enabled);\n this.ui.setContextKey(this.contextKey);\n const validationMessage = this.validationMessage || this.noValidationMessage;\n if (this._lastValidationMessage !== validationMessage) {\n this._lastValidationMessage = validationMessage;\n dom.reset(this.ui.message, ...renderLabelWithIcons(escape(validationMessage)));\n }\n if (this._lastSeverity !== this.severity) {\n this._lastSeverity = this.severity;\n this.showMessageDecoration(this.severity);\n }\n }\n getTitle() {\n if (this.title && this.step) {\n return `${this.title} (${this.getSteps()})`;\n }\n if (this.title) {\n return this.title;\n }\n if (this.step) {\n return this.getSteps();\n }\n return '';\n }\n getDescription() {\n return this.description || '';\n }\n getSteps() {\n if (this.step && this.totalSteps) {\n return localize('quickInput.steps', \"{0}/{1}\", this.step, this.totalSteps);\n }\n if (this.step) {\n return String(this.step);\n }\n return '';\n }\n showMessageDecoration(severity) {\n this.ui.inputBox.showDecoration(severity);\n if (severity !== Severity.Ignore) {\n const styles = this.ui.inputBox.stylesForType(severity);\n this.ui.message.style.color = styles.foreground ? `${styles.foreground}` : '';\n this.ui.message.style.backgroundColor = styles.background ? `${styles.background}` : '';\n this.ui.message.style.border = styles.border ? `1px solid ${styles.border}` : '';\n this.ui.message.style.paddingBottom = '4px';\n }\n else {\n this.ui.message.style.color = '';\n this.ui.message.style.backgroundColor = '';\n this.ui.message.style.border = '';\n this.ui.message.style.paddingBottom = '';\n }\n }\n dispose() {\n this.hide();\n this.onDisposeEmitter.fire();\n super.dispose();\n }\n}\nQuickInput.noPromptMessage = localize('inputModeEntry', \"Press 'Enter' to confirm your input or 'Escape' to cancel\");\nclass QuickPick extends QuickInput {\n constructor() {\n super(...arguments);\n this._value = '';\n this.onDidChangeValueEmitter = this._register(new Emitter());\n this.onDidAcceptEmitter = this._register(new Emitter());\n this.onDidCustomEmitter = this._register(new Emitter());\n this._items = [];\n this.itemsUpdated = false;\n this._canSelectMany = false;\n this._canAcceptInBackground = false;\n this._matchOnDescription = false;\n this._matchOnDetail = false;\n this._matchOnLabel = true;\n this._sortByLabel = true;\n this._autoFocusOnList = true;\n this._itemActivation = this.ui.isScreenReaderOptimized() ? ItemActivation.NONE /* https://github.com/microsoft/vscode/issues/57501 */ : ItemActivation.FIRST;\n this._activeItems = [];\n this.activeItemsUpdated = false;\n this.activeItemsToConfirm = [];\n this.onDidChangeActiveEmitter = this._register(new Emitter());\n this._selectedItems = [];\n this.selectedItemsUpdated = false;\n this.selectedItemsToConfirm = [];\n this.onDidChangeSelectionEmitter = this._register(new Emitter());\n this.onDidTriggerItemButtonEmitter = this._register(new Emitter());\n this.valueSelectionUpdated = true;\n this._ok = 'default';\n this._customButton = false;\n this.filterValue = (value) => value;\n this.onDidChangeValue = this.onDidChangeValueEmitter.event;\n this.onDidAccept = this.onDidAcceptEmitter.event;\n this.onDidChangeActive = this.onDidChangeActiveEmitter.event;\n this.onDidChangeSelection = this.onDidChangeSelectionEmitter.event;\n this.onDidTriggerItemButton = this.onDidTriggerItemButtonEmitter.event;\n }\n get quickNavigate() {\n return this._quickNavigate;\n }\n set quickNavigate(quickNavigate) {\n this._quickNavigate = quickNavigate;\n this.update();\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this._value = value || '';\n this.update();\n }\n set ariaLabel(ariaLabel) {\n this._ariaLabel = ariaLabel;\n this.update();\n }\n get ariaLabel() {\n return this._ariaLabel;\n }\n get placeholder() {\n return this._placeholder;\n }\n set placeholder(placeholder) {\n this._placeholder = placeholder;\n this.update();\n }\n get items() {\n return this._items;\n }\n set items(items) {\n this._items = items;\n this.itemsUpdated = true;\n this.update();\n }\n get canSelectMany() {\n return this._canSelectMany;\n }\n set canSelectMany(canSelectMany) {\n this._canSelectMany = canSelectMany;\n this.update();\n }\n get canAcceptInBackground() {\n return this._canAcceptInBackground;\n }\n set canAcceptInBackground(canAcceptInBackground) {\n this._canAcceptInBackground = canAcceptInBackground;\n }\n get matchOnDescription() {\n return this._matchOnDescription;\n }\n set matchOnDescription(matchOnDescription) {\n this._matchOnDescription = matchOnDescription;\n this.update();\n }\n get matchOnDetail() {\n return this._matchOnDetail;\n }\n set matchOnDetail(matchOnDetail) {\n this._matchOnDetail = matchOnDetail;\n this.update();\n }\n get matchOnLabel() {\n return this._matchOnLabel;\n }\n set matchOnLabel(matchOnLabel) {\n this._matchOnLabel = matchOnLabel;\n this.update();\n }\n get sortByLabel() {\n return this._sortByLabel;\n }\n set sortByLabel(sortByLabel) {\n this._sortByLabel = sortByLabel;\n this.update();\n }\n get autoFocusOnList() {\n return this._autoFocusOnList;\n }\n set autoFocusOnList(autoFocusOnList) {\n this._autoFocusOnList = autoFocusOnList;\n this.update();\n }\n get itemActivation() {\n return this._itemActivation;\n }\n set itemActivation(itemActivation) {\n this._itemActivation = itemActivation;\n }\n get activeItems() {\n return this._activeItems;\n }\n set activeItems(activeItems) {\n this._activeItems = activeItems;\n this.activeItemsUpdated = true;\n this.update();\n }\n get selectedItems() {\n return this._selectedItems;\n }\n set selectedItems(selectedItems) {\n this._selectedItems = selectedItems;\n this.selectedItemsUpdated = true;\n this.update();\n }\n get keyMods() {\n if (this._quickNavigate) {\n // Disable keyMods when quick navigate is enabled\n // because in this model the interaction is purely\n // keyboard driven and Ctrl/Alt are typically\n // pressed and hold during this interaction.\n return NO_KEY_MODS;\n }\n return this.ui.keyMods;\n }\n set valueSelection(valueSelection) {\n this._valueSelection = valueSelection;\n this.valueSelectionUpdated = true;\n this.update();\n }\n get customButton() {\n return this._customButton;\n }\n set customButton(showCustomButton) {\n this._customButton = showCustomButton;\n this.update();\n }\n get customLabel() {\n return this._customButtonLabel;\n }\n set customLabel(label) {\n this._customButtonLabel = label;\n this.update();\n }\n get customHover() {\n return this._customButtonHover;\n }\n set customHover(hover) {\n this._customButtonHover = hover;\n this.update();\n }\n get ok() {\n return this._ok;\n }\n set ok(showOkButton) {\n this._ok = showOkButton;\n this.update();\n }\n get hideInput() {\n return !!this._hideInput;\n }\n set hideInput(hideInput) {\n this._hideInput = hideInput;\n this.update();\n }\n trySelectFirst() {\n if (this.autoFocusOnList) {\n if (!this.canSelectMany) {\n this.ui.list.focus(QuickInputListFocus.First);\n }\n }\n }\n show() {\n if (!this.visible) {\n this.visibleDisposables.add(this.ui.inputBox.onDidChange(value => {\n if (value === this.value) {\n return;\n }\n this._value = value;\n const didFilter = this.ui.list.filter(this.filterValue(this.ui.inputBox.value));\n if (didFilter) {\n this.trySelectFirst();\n }\n this.onDidChangeValueEmitter.fire(value);\n }));\n this.visibleDisposables.add(this.ui.inputBox.onMouseDown(event => {\n if (!this.autoFocusOnList) {\n this.ui.list.clearFocus();\n }\n }));\n this.visibleDisposables.add((this._hideInput ? this.ui.list : this.ui.inputBox).onKeyDown((event) => {\n switch (event.keyCode) {\n case 18 /* DownArrow */:\n this.ui.list.focus(QuickInputListFocus.Next);\n if (this.canSelectMany) {\n this.ui.list.domFocus();\n }\n dom.EventHelper.stop(event, true);\n break;\n case 16 /* UpArrow */:\n if (this.ui.list.getFocusedElements().length) {\n this.ui.list.focus(QuickInputListFocus.Previous);\n }\n else {\n this.ui.list.focus(QuickInputListFocus.Last);\n }\n if (this.canSelectMany) {\n this.ui.list.domFocus();\n }\n dom.EventHelper.stop(event, true);\n break;\n case 12 /* PageDown */:\n this.ui.list.focus(QuickInputListFocus.NextPage);\n if (this.canSelectMany) {\n this.ui.list.domFocus();\n }\n dom.EventHelper.stop(event, true);\n break;\n case 11 /* PageUp */:\n this.ui.list.focus(QuickInputListFocus.PreviousPage);\n if (this.canSelectMany) {\n this.ui.list.domFocus();\n }\n dom.EventHelper.stop(event, true);\n break;\n case 17 /* RightArrow */:\n if (!this._canAcceptInBackground) {\n return; // needs to be enabled\n }\n if (!this.ui.inputBox.isSelectionAtEnd()) {\n return; // ensure input box selection at end\n }\n if (this.activeItems[0]) {\n this._selectedItems = [this.activeItems[0]];\n this.onDidChangeSelectionEmitter.fire(this.selectedItems);\n this.onDidAcceptEmitter.fire({ inBackground: true });\n }\n break;\n case 14 /* Home */:\n if ((event.ctrlKey || event.metaKey) && !event.shiftKey && !event.altKey) {\n this.ui.list.focus(QuickInputListFocus.First);\n dom.EventHelper.stop(event, true);\n }\n break;\n case 13 /* End */:\n if ((event.ctrlKey || event.metaKey) && !event.shiftKey && !event.altKey) {\n this.ui.list.focus(QuickInputListFocus.Last);\n dom.EventHelper.stop(event, true);\n }\n break;\n }\n }));\n this.visibleDisposables.add(this.ui.onDidAccept(() => {\n if (!this.canSelectMany && this.activeItems[0]) {\n this._selectedItems = [this.activeItems[0]];\n this.onDidChangeSelectionEmitter.fire(this.selectedItems);\n }\n this.onDidAcceptEmitter.fire({ inBackground: false });\n }));\n this.visibleDisposables.add(this.ui.onDidCustom(() => {\n this.onDidCustomEmitter.fire();\n }));\n this.visibleDisposables.add(this.ui.list.onDidChangeFocus(focusedItems => {\n if (this.activeItemsUpdated) {\n return; // Expect another event.\n }\n if (this.activeItemsToConfirm !== this._activeItems && equals(focusedItems, this._activeItems, (a, b) => a === b)) {\n return;\n }\n this._activeItems = focusedItems;\n this.onDidChangeActiveEmitter.fire(focusedItems);\n }));\n this.visibleDisposables.add(this.ui.list.onDidChangeSelection(({ items: selectedItems, event }) => {\n if (this.canSelectMany) {\n if (selectedItems.length) {\n this.ui.list.setSelectedElements([]);\n }\n return;\n }\n if (this.selectedItemsToConfirm !== this._selectedItems && equals(selectedItems, this._selectedItems, (a, b) => a === b)) {\n return;\n }\n this._selectedItems = selectedItems;\n this.onDidChangeSelectionEmitter.fire(selectedItems);\n if (selectedItems.length) {\n this.onDidAcceptEmitter.fire({ inBackground: event instanceof MouseEvent && event.button === 1 /* mouse middle click */ });\n }\n }));\n this.visibleDisposables.add(this.ui.list.onChangedCheckedElements(checkedItems => {\n if (!this.canSelectMany) {\n return;\n }\n if (this.selectedItemsToConfirm !== this._selectedItems && equals(checkedItems, this._selectedItems, (a, b) => a === b)) {\n return;\n }\n this._selectedItems = checkedItems;\n this.onDidChangeSelectionEmitter.fire(checkedItems);\n }));\n this.visibleDisposables.add(this.ui.list.onButtonTriggered(event => this.onDidTriggerItemButtonEmitter.fire(event)));\n this.visibleDisposables.add(this.registerQuickNavigation());\n this.valueSelectionUpdated = true;\n }\n super.show(); // TODO: Why have show() bubble up while update() trickles down? (Could move setComboboxAccessibility() here.)\n }\n registerQuickNavigation() {\n return dom.addDisposableListener(this.ui.container, dom.EventType.KEY_UP, e => {\n if (this.canSelectMany || !this._quickNavigate) {\n return;\n }\n const keyboardEvent = new StandardKeyboardEvent(e);\n const keyCode = keyboardEvent.keyCode;\n // Select element when keys are pressed that signal it\n const quickNavKeys = this._quickNavigate.keybindings;\n const wasTriggerKeyPressed = quickNavKeys.some(k => {\n const [firstPart, chordPart] = k.getParts();\n if (chordPart) {\n return false;\n }\n if (firstPart.shiftKey && keyCode === 4 /* Shift */) {\n if (keyboardEvent.ctrlKey || keyboardEvent.altKey || keyboardEvent.metaKey) {\n return false; // this is an optimistic check for the shift key being used to navigate back in quick input\n }\n return true;\n }\n if (firstPart.altKey && keyCode === 6 /* Alt */) {\n return true;\n }\n if (firstPart.ctrlKey && keyCode === 5 /* Ctrl */) {\n return true;\n }\n if (firstPart.metaKey && keyCode === 57 /* Meta */) {\n return true;\n }\n return false;\n });\n if (wasTriggerKeyPressed) {\n if (this.activeItems[0]) {\n this._selectedItems = [this.activeItems[0]];\n this.onDidChangeSelectionEmitter.fire(this.selectedItems);\n this.onDidAcceptEmitter.fire({ inBackground: false });\n }\n // Unset quick navigate after press. It is only valid once\n // and should not result in any behaviour change afterwards\n // if the picker remains open because there was no active item\n this._quickNavigate = undefined;\n }\n });\n }\n update() {\n if (!this.visible) {\n return;\n }\n const hideInput = !!this._hideInput && this._items.length > 0;\n this.ui.container.classList.toggle('hidden-input', hideInput && !this.description);\n const visibilities = {\n title: !!this.title || !!this.step || !!this.buttons.length,\n description: !!this.description,\n checkAll: this.canSelectMany && !this._hideCheckAll,\n checkBox: this.canSelectMany,\n inputBox: !hideInput,\n progressBar: !hideInput,\n visibleCount: true,\n count: this.canSelectMany,\n ok: this.ok === 'default' ? this.canSelectMany : this.ok,\n list: true,\n message: !!this.validationMessage,\n customButton: this.customButton\n };\n this.ui.setVisibilities(visibilities);\n super.update();\n if (this.ui.inputBox.value !== this.value) {\n this.ui.inputBox.value = this.value;\n }\n if (this.valueSelectionUpdated) {\n this.valueSelectionUpdated = false;\n this.ui.inputBox.select(this._valueSelection && { start: this._valueSelection[0], end: this._valueSelection[1] });\n }\n if (this.ui.inputBox.placeholder !== (this.placeholder || '')) {\n this.ui.inputBox.placeholder = (this.placeholder || '');\n }\n const ariaLabel = this.ariaLabel || this.placeholder || QuickPick.DEFAULT_ARIA_LABEL;\n if (this.ui.inputBox.ariaLabel !== ariaLabel) {\n this.ui.inputBox.ariaLabel = ariaLabel;\n }\n this.ui.list.matchOnDescription = this.matchOnDescription;\n this.ui.list.matchOnDetail = this.matchOnDetail;\n this.ui.list.matchOnLabel = this.matchOnLabel;\n this.ui.list.sortByLabel = this.sortByLabel;\n if (this.itemsUpdated) {\n this.itemsUpdated = false;\n this.ui.list.setElements(this.items);\n this.ui.list.filter(this.filterValue(this.ui.inputBox.value));\n this.ui.checkAll.checked = this.ui.list.getAllVisibleChecked();\n this.ui.visibleCount.setCount(this.ui.list.getVisibleCount());\n this.ui.count.setCount(this.ui.list.getCheckedCount());\n switch (this._itemActivation) {\n case ItemActivation.NONE:\n this._itemActivation = ItemActivation.FIRST; // only valid once, then unset\n break;\n case ItemActivation.SECOND:\n this.ui.list.focus(QuickInputListFocus.Second);\n this._itemActivation = ItemActivation.FIRST; // only valid once, then unset\n break;\n case ItemActivation.LAST:\n this.ui.list.focus(QuickInputListFocus.Last);\n this._itemActivation = ItemActivation.FIRST; // only valid once, then unset\n break;\n default:\n this.trySelectFirst();\n break;\n }\n }\n if (this.ui.container.classList.contains('show-checkboxes') !== !!this.canSelectMany) {\n if (this.canSelectMany) {\n this.ui.list.clearFocus();\n }\n else {\n this.trySelectFirst();\n }\n }\n if (this.activeItemsUpdated) {\n this.activeItemsUpdated = false;\n this.activeItemsToConfirm = this._activeItems;\n this.ui.list.setFocusedElements(this.activeItems);\n if (this.activeItemsToConfirm === this._activeItems) {\n this.activeItemsToConfirm = null;\n }\n }\n if (this.selectedItemsUpdated) {\n this.selectedItemsUpdated = false;\n this.selectedItemsToConfirm = this._selectedItems;\n if (this.canSelectMany) {\n this.ui.list.setCheckedElements(this.selectedItems);\n }\n else {\n this.ui.list.setSelectedElements(this.selectedItems);\n }\n if (this.selectedItemsToConfirm === this._selectedItems) {\n this.selectedItemsToConfirm = null;\n }\n }\n this.ui.customButton.label = this.customLabel || '';\n this.ui.customButton.element.title = this.customHover || '';\n this.ui.setComboboxAccessibility(true);\n if (!visibilities.inputBox) {\n // we need to move focus into the tree to detect keybindings\n // properly when the input box is not visible (quick nav)\n this.ui.list.domFocus();\n // Focus the first element in the list if multiselect is enabled\n if (this.canSelectMany) {\n this.ui.list.focus(QuickInputListFocus.First);\n }\n }\n }\n}\nQuickPick.DEFAULT_ARIA_LABEL = localize('quickInputBox.ariaLabel', \"Type to narrow down results.\");\nexport class QuickInputController extends Disposable {\n constructor(options) {\n super();\n this.options = options;\n this.comboboxAccessibility = false;\n this.enabled = true;\n this.onDidAcceptEmitter = this._register(new Emitter());\n this.onDidCustomEmitter = this._register(new Emitter());\n this.onDidTriggerButtonEmitter = this._register(new Emitter());\n this.keyMods = { ctrlCmd: false, alt: false };\n this.controller = null;\n this.onShowEmitter = this._register(new Emitter());\n this.onShow = this.onShowEmitter.event;\n this.onHideEmitter = this._register(new Emitter());\n this.onHide = this.onHideEmitter.event;\n this.idPrefix = options.idPrefix;\n this.parentElement = options.container;\n this.styles = options.styles;\n this.registerKeyModsListeners();\n }\n registerKeyModsListeners() {\n const listener = (e) => {\n this.keyMods.ctrlCmd = e.ctrlKey || e.metaKey;\n this.keyMods.alt = e.altKey;\n };\n this._register(dom.addDisposableListener(window, dom.EventType.KEY_DOWN, listener, true));\n this._register(dom.addDisposableListener(window, dom.EventType.KEY_UP, listener, true));\n this._register(dom.addDisposableListener(window, dom.EventType.MOUSE_DOWN, listener, true));\n }\n getUI() {\n if (this.ui) {\n return this.ui;\n }\n const container = dom.append(this.parentElement, $('.quick-input-widget.show-file-icons'));\n container.tabIndex = -1;\n container.style.display = 'none';\n const styleSheet = dom.createStyleSheet(container);\n const titleBar = dom.append(container, $('.quick-input-titlebar'));\n const leftActionBar = this._register(new ActionBar(titleBar));\n leftActionBar.domNode.classList.add('quick-input-left-action-bar');\n const title = dom.append(titleBar, $('.quick-input-title'));\n const rightActionBar = this._register(new ActionBar(titleBar));\n rightActionBar.domNode.classList.add('quick-input-right-action-bar');\n const description1 = dom.append(container, $('.quick-input-description'));\n const headerContainer = dom.append(container, $('.quick-input-header'));\n const checkAll = dom.append(headerContainer, $('input.quick-input-check-all'));\n checkAll.type = 'checkbox';\n this._register(dom.addStandardDisposableListener(checkAll, dom.EventType.CHANGE, e => {\n const checked = checkAll.checked;\n list.setAllVisibleChecked(checked);\n }));\n this._register(dom.addDisposableListener(checkAll, dom.EventType.CLICK, e => {\n if (e.x || e.y) { // Avoid 'click' triggered by 'space'...\n inputBox.setFocus();\n }\n }));\n const description2 = dom.append(headerContainer, $('.quick-input-description'));\n const extraContainer = dom.append(headerContainer, $('.quick-input-and-message'));\n const filterContainer = dom.append(extraContainer, $('.quick-input-filter'));\n const inputBox = this._register(new QuickInputBox(filterContainer));\n inputBox.setAttribute('aria-describedby', `${this.idPrefix}message`);\n const visibleCountContainer = dom.append(filterContainer, $('.quick-input-visible-count'));\n visibleCountContainer.setAttribute('aria-live', 'polite');\n visibleCountContainer.setAttribute('aria-atomic', 'true');\n const visibleCount = new CountBadge(visibleCountContainer, { countFormat: localize({ key: 'quickInput.visibleCount', comment: ['This tells the user how many items are shown in a list of items to select from. The items can be anything. Currently not visible, but read by screen readers.'] }, \"{0} Results\") });\n const countContainer = dom.append(filterContainer, $('.quick-input-count'));\n countContainer.setAttribute('aria-live', 'polite');\n const count = new CountBadge(countContainer, { countFormat: localize({ key: 'quickInput.countSelected', comment: ['This tells the user how many items are selected in a list of items to select from. The items can be anything.'] }, \"{0} Selected\") });\n const okContainer = dom.append(headerContainer, $('.quick-input-action'));\n const ok = new Button(okContainer);\n ok.label = localize('ok', \"OK\");\n this._register(ok.onDidClick(e => {\n this.onDidAcceptEmitter.fire();\n }));\n const customButtonContainer = dom.append(headerContainer, $('.quick-input-action'));\n const customButton = new Button(customButtonContainer);\n customButton.label = localize('custom', \"Custom\");\n this._register(customButton.onDidClick(e => {\n this.onDidCustomEmitter.fire();\n }));\n const message = dom.append(extraContainer, $(`#${this.idPrefix}message.quick-input-message`));\n const list = this._register(new QuickInputList(container, this.idPrefix + 'list', this.options));\n this._register(list.onChangedAllVisibleChecked(checked => {\n checkAll.checked = checked;\n }));\n this._register(list.onChangedVisibleCount(c => {\n visibleCount.setCount(c);\n }));\n this._register(list.onChangedCheckedCount(c => {\n count.setCount(c);\n }));\n this._register(list.onLeave(() => {\n // Defer to avoid the input field reacting to the triggering key.\n setTimeout(() => {\n inputBox.setFocus();\n if (this.controller instanceof QuickPick && this.controller.canSelectMany) {\n list.clearFocus();\n }\n }, 0);\n }));\n this._register(list.onDidChangeFocus(() => {\n if (this.comboboxAccessibility) {\n this.getUI().inputBox.setAttribute('aria-activedescendant', this.getUI().list.getActiveDescendant() || '');\n }\n }));\n const progressBar = new ProgressBar(container);\n progressBar.getContainer().classList.add('quick-input-progress');\n const focusTracker = dom.trackFocus(container);\n this._register(focusTracker);\n this._register(dom.addDisposableListener(container, dom.EventType.FOCUS, e => {\n this.previousFocusElement = e.relatedTarget instanceof HTMLElement ? e.relatedTarget : undefined;\n }, true));\n this._register(focusTracker.onDidBlur(() => {\n if (!this.getUI().ignoreFocusOut && !this.options.ignoreFocusOut()) {\n this.hide(QuickInputHideReason.Blur);\n }\n this.previousFocusElement = undefined;\n }));\n this._register(dom.addDisposableListener(container, dom.EventType.FOCUS, (e) => {\n inputBox.setFocus();\n }));\n this._register(dom.addDisposableListener(container, dom.EventType.KEY_DOWN, (e) => {\n const event = new StandardKeyboardEvent(e);\n switch (event.keyCode) {\n case 3 /* Enter */:\n dom.EventHelper.stop(e, true);\n this.onDidAcceptEmitter.fire();\n break;\n case 9 /* Escape */:\n dom.EventHelper.stop(e, true);\n this.hide(QuickInputHideReason.Gesture);\n break;\n case 2 /* Tab */:\n if (!event.altKey && !event.ctrlKey && !event.metaKey) {\n const selectors = ['.action-label.codicon'];\n if (container.classList.contains('show-checkboxes')) {\n selectors.push('input');\n }\n else {\n selectors.push('input[type=text]');\n }\n if (this.getUI().list.isDisplayed()) {\n selectors.push('.monaco-list');\n }\n const stops = container.querySelectorAll(selectors.join(', '));\n if (event.shiftKey && event.target === stops[0]) {\n dom.EventHelper.stop(e, true);\n stops[stops.length - 1].focus();\n }\n else if (!event.shiftKey && event.target === stops[stops.length - 1]) {\n dom.EventHelper.stop(e, true);\n stops[0].focus();\n }\n }\n break;\n }\n }));\n this.ui = {\n container,\n styleSheet,\n leftActionBar,\n titleBar,\n title,\n description1,\n description2,\n rightActionBar,\n checkAll,\n filterContainer,\n inputBox,\n visibleCountContainer,\n visibleCount,\n countContainer,\n count,\n okContainer,\n ok,\n message,\n customButtonContainer,\n customButton,\n list,\n progressBar,\n onDidAccept: this.onDidAcceptEmitter.event,\n onDidCustom: this.onDidCustomEmitter.event,\n onDidTriggerButton: this.onDidTriggerButtonEmitter.event,\n ignoreFocusOut: false,\n keyMods: this.keyMods,\n isScreenReaderOptimized: () => this.options.isScreenReaderOptimized(),\n show: controller => this.show(controller),\n hide: () => this.hide(),\n setVisibilities: visibilities => this.setVisibilities(visibilities),\n setComboboxAccessibility: enabled => this.setComboboxAccessibility(enabled),\n setEnabled: enabled => this.setEnabled(enabled),\n setContextKey: contextKey => this.options.setContextKey(contextKey),\n };\n this.updateStyles();\n return this.ui;\n }\n pick(picks, options = {}, token = CancellationToken.None) {\n return new Promise((doResolve, reject) => {\n let resolve = (result) => {\n resolve = doResolve;\n if (options.onKeyMods) {\n options.onKeyMods(input.keyMods);\n }\n doResolve(result);\n };\n if (token.isCancellationRequested) {\n resolve(undefined);\n return;\n }\n const input = this.createQuickPick();\n let activeItem;\n const disposables = [\n input,\n input.onDidAccept(() => {\n if (input.canSelectMany) {\n resolve(input.selectedItems.slice());\n input.hide();\n }\n else {\n const result = input.activeItems[0];\n if (result) {\n resolve(result);\n input.hide();\n }\n }\n }),\n input.onDidChangeActive(items => {\n const focused = items[0];\n if (focused && options.onDidFocus) {\n options.onDidFocus(focused);\n }\n }),\n input.onDidChangeSelection(items => {\n if (!input.canSelectMany) {\n const result = items[0];\n if (result) {\n resolve(result);\n input.hide();\n }\n }\n }),\n input.onDidTriggerItemButton(event => options.onDidTriggerItemButton && options.onDidTriggerItemButton(Object.assign(Object.assign({}, event), { removeItem: () => {\n const index = input.items.indexOf(event.item);\n if (index !== -1) {\n const items = input.items.slice();\n const removed = items.splice(index, 1);\n const activeItems = input.activeItems.filter((ai) => ai !== removed[0]);\n input.items = items;\n if (activeItems) {\n input.activeItems = activeItems;\n }\n }\n } }))),\n input.onDidChangeValue(value => {\n if (activeItem && !value && (input.activeItems.length !== 1 || input.activeItems[0] !== activeItem)) {\n input.activeItems = [activeItem];\n }\n }),\n token.onCancellationRequested(() => {\n input.hide();\n }),\n input.onDidHide(() => {\n dispose(disposables);\n resolve(undefined);\n }),\n ];\n input.title = options.title;\n input.canSelectMany = !!options.canPickMany;\n input.placeholder = options.placeHolder;\n input.ignoreFocusOut = !!options.ignoreFocusLost;\n input.matchOnDescription = !!options.matchOnDescription;\n input.matchOnDetail = !!options.matchOnDetail;\n input.matchOnLabel = (options.matchOnLabel === undefined) || options.matchOnLabel; // default to true\n input.autoFocusOnList = (options.autoFocusOnList === undefined) || options.autoFocusOnList; // default to true\n input.quickNavigate = options.quickNavigate;\n input.contextKey = options.contextKey;\n input.busy = true;\n Promise.all([picks, options.activeItem])\n .then(([items, _activeItem]) => {\n activeItem = _activeItem;\n input.busy = false;\n input.items = items;\n if (input.canSelectMany) {\n input.selectedItems = items.filter(item => item.type !== 'separator' && item.picked);\n }\n if (activeItem) {\n input.activeItems = [activeItem];\n }\n });\n input.show();\n Promise.resolve(picks).then(undefined, err => {\n reject(err);\n input.hide();\n });\n });\n }\n createQuickPick() {\n const ui = this.getUI();\n return new QuickPick(ui);\n }\n show(controller) {\n const ui = this.getUI();\n this.onShowEmitter.fire();\n const oldController = this.controller;\n this.controller = controller;\n if (oldController) {\n oldController.didHide();\n }\n this.setEnabled(true);\n ui.leftActionBar.clear();\n ui.title.textContent = '';\n ui.description1.textContent = '';\n ui.description2.textContent = '';\n ui.rightActionBar.clear();\n ui.checkAll.checked = false;\n // ui.inputBox.value = ''; Avoid triggering an event.\n ui.inputBox.placeholder = '';\n ui.inputBox.password = false;\n ui.inputBox.showDecoration(Severity.Ignore);\n ui.visibleCount.setCount(0);\n ui.count.setCount(0);\n dom.reset(ui.message);\n ui.progressBar.stop();\n ui.list.setElements([]);\n ui.list.matchOnDescription = false;\n ui.list.matchOnDetail = false;\n ui.list.matchOnLabel = true;\n ui.list.sortByLabel = true;\n ui.ignoreFocusOut = false;\n this.setComboboxAccessibility(false);\n ui.inputBox.ariaLabel = '';\n const backKeybindingLabel = this.options.backKeybindingLabel();\n backButton.tooltip = backKeybindingLabel ? localize('quickInput.backWithKeybinding', \"Back ({0})\", backKeybindingLabel) : localize('quickInput.back', \"Back\");\n ui.container.style.display = '';\n this.updateLayout();\n ui.inputBox.setFocus();\n }\n setVisibilities(visibilities) {\n const ui = this.getUI();\n ui.title.style.display = visibilities.title ? '' : 'none';\n ui.description1.style.display = visibilities.description && (visibilities.inputBox || visibilities.checkAll) ? '' : 'none';\n ui.description2.style.display = visibilities.description && !(visibilities.inputBox || visibilities.checkAll) ? '' : 'none';\n ui.checkAll.style.display = visibilities.checkAll ? '' : 'none';\n ui.filterContainer.style.display = visibilities.inputBox ? '' : 'none';\n ui.visibleCountContainer.style.display = visibilities.visibleCount ? '' : 'none';\n ui.countContainer.style.display = visibilities.count ? '' : 'none';\n ui.okContainer.style.display = visibilities.ok ? '' : 'none';\n ui.customButtonContainer.style.display = visibilities.customButton ? '' : 'none';\n ui.message.style.display = visibilities.message ? '' : 'none';\n ui.progressBar.getContainer().style.display = visibilities.progressBar ? '' : 'none';\n ui.list.display(!!visibilities.list);\n ui.container.classList[visibilities.checkBox ? 'add' : 'remove']('show-checkboxes');\n this.updateLayout(); // TODO\n }\n setComboboxAccessibility(enabled) {\n if (enabled !== this.comboboxAccessibility) {\n const ui = this.getUI();\n this.comboboxAccessibility = enabled;\n if (this.comboboxAccessibility) {\n ui.inputBox.setAttribute('role', 'combobox');\n ui.inputBox.setAttribute('aria-haspopup', 'true');\n ui.inputBox.setAttribute('aria-autocomplete', 'list');\n ui.inputBox.setAttribute('aria-activedescendant', ui.list.getActiveDescendant() || '');\n }\n else {\n ui.inputBox.removeAttribute('role');\n ui.inputBox.removeAttribute('aria-haspopup');\n ui.inputBox.removeAttribute('aria-autocomplete');\n ui.inputBox.removeAttribute('aria-activedescendant');\n }\n }\n }\n setEnabled(enabled) {\n if (enabled !== this.enabled) {\n this.enabled = enabled;\n for (const item of this.getUI().leftActionBar.viewItems) {\n item.getAction().enabled = enabled;\n }\n for (const item of this.getUI().rightActionBar.viewItems) {\n item.getAction().enabled = enabled;\n }\n this.getUI().checkAll.disabled = !enabled;\n // this.getUI().inputBox.enabled = enabled; Avoid loosing focus.\n this.getUI().ok.enabled = enabled;\n this.getUI().list.enabled = enabled;\n }\n }\n hide(reason) {\n var _a;\n const controller = this.controller;\n if (controller) {\n const focusChanged = !((_a = this.ui) === null || _a === void 0 ? void 0 : _a.container.contains(document.activeElement));\n this.controller = null;\n this.onHideEmitter.fire();\n this.getUI().container.style.display = 'none';\n if (!focusChanged) {\n if (this.previousFocusElement && this.previousFocusElement.offsetParent) {\n this.previousFocusElement.focus();\n this.previousFocusElement = undefined;\n }\n else {\n this.options.returnFocus();\n }\n }\n controller.didHide(reason);\n }\n }\n layout(dimension, titleBarOffset) {\n this.dimension = dimension;\n this.titleBarOffset = titleBarOffset;\n this.updateLayout();\n }\n updateLayout() {\n if (this.ui) {\n this.ui.container.style.top = `${this.titleBarOffset}px`;\n const style = this.ui.container.style;\n const width = Math.min(this.dimension.width * 0.62 /* golden cut */, QuickInputController.MAX_WIDTH);\n style.width = width + 'px';\n style.marginLeft = '-' + (width / 2) + 'px';\n this.ui.inputBox.layout();\n this.ui.list.layout(this.dimension && this.dimension.height * 0.4);\n }\n }\n applyStyles(styles) {\n this.styles = styles;\n this.updateStyles();\n }\n updateStyles() {\n if (this.ui) {\n const { quickInputTitleBackground, quickInputBackground, quickInputForeground, contrastBorder, widgetShadow, } = this.styles.widget;\n this.ui.titleBar.style.backgroundColor = quickInputTitleBackground ? quickInputTitleBackground.toString() : '';\n this.ui.container.style.backgroundColor = quickInputBackground ? quickInputBackground.toString() : '';\n this.ui.container.style.color = quickInputForeground ? quickInputForeground.toString() : '';\n this.ui.container.style.border = contrastBorder ? `1px solid ${contrastBorder}` : '';\n this.ui.container.style.boxShadow = widgetShadow ? `0 0 8px 2px ${widgetShadow}` : '';\n this.ui.inputBox.style(this.styles.inputBox);\n this.ui.count.style(this.styles.countBadge);\n this.ui.ok.style(this.styles.button);\n this.ui.customButton.style(this.styles.button);\n this.ui.progressBar.style(this.styles.progressBar);\n this.ui.list.style(this.styles.list);\n const content = [];\n if (this.styles.list.pickerGroupBorder) {\n content.push(`.quick-input-list .quick-input-list-entry { border-top-color: ${this.styles.list.pickerGroupBorder}; }`);\n }\n if (this.styles.list.pickerGroupForeground) {\n content.push(`.quick-input-list .quick-input-list-separator { color: ${this.styles.list.pickerGroupForeground}; }`);\n }\n if (this.styles.keybindingLabel.keybindingLabelBackground ||\n this.styles.keybindingLabel.keybindingLabelBorder ||\n this.styles.keybindingLabel.keybindingLabelBottomBorder ||\n this.styles.keybindingLabel.keybindingLabelShadow ||\n this.styles.keybindingLabel.keybindingLabelForeground) {\n content.push('.quick-input-list .monaco-keybinding > .monaco-keybinding-key {');\n if (this.styles.keybindingLabel.keybindingLabelBackground) {\n content.push(`background-color: ${this.styles.keybindingLabel.keybindingLabelBackground};`);\n }\n if (this.styles.keybindingLabel.keybindingLabelBorder) {\n // Order matters here. `border-color` must come before `border-bottom-color`.\n content.push(`border-color: ${this.styles.keybindingLabel.keybindingLabelBorder};`);\n }\n if (this.styles.keybindingLabel.keybindingLabelBottomBorder) {\n content.push(`border-bottom-color: ${this.styles.keybindingLabel.keybindingLabelBottomBorder};`);\n }\n if (this.styles.keybindingLabel.keybindingLabelShadow) {\n content.push(`box-shadow: inset 0 -1px 0 ${this.styles.keybindingLabel.keybindingLabelShadow};`);\n }\n if (this.styles.keybindingLabel.keybindingLabelForeground) {\n content.push(`color: ${this.styles.keybindingLabel.keybindingLabelForeground};`);\n }\n content.push('}');\n }\n const newStyles = content.join('\\n');\n if (newStyles !== this.ui.styleSheet.textContent) {\n this.ui.styleSheet.textContent = newStyles;\n }\n }\n }\n}\nQuickInputController.MAX_WIDTH = 600; // Max total width of quick input widget\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { IQuickInputService, ItemActivation } from '../common/quickInput.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js';\nimport { Extensions, DefaultQuickAccessFilterValue } from '../common/quickAccess.js';\nimport { Registry } from '../../registry/common/platform.js';\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { once } from '../../../base/common/functional.js';\nlet QuickAccessController = class QuickAccessController extends Disposable {\n constructor(quickInputService, instantiationService) {\n super();\n this.quickInputService = quickInputService;\n this.instantiationService = instantiationService;\n this.registry = Registry.as(Extensions.Quickaccess);\n this.mapProviderToDescriptor = new Map();\n this.lastAcceptedPickerValues = new Map();\n this.visibleQuickAccess = undefined;\n }\n show(value = '', options) {\n var _a;\n // Find provider for the value to show\n const [provider, descriptor] = this.getOrInstantiateProvider(value);\n // Return early if quick access is already showing on that same prefix\n const visibleQuickAccess = this.visibleQuickAccess;\n const visibleDescriptor = visibleQuickAccess === null || visibleQuickAccess === void 0 ? void 0 : visibleQuickAccess.descriptor;\n if (visibleQuickAccess && descriptor && visibleDescriptor === descriptor) {\n // Apply value only if it is more specific than the prefix\n // from the provider and we are not instructed to preserve\n if (value !== descriptor.prefix && !(options === null || options === void 0 ? void 0 : options.preserveValue)) {\n visibleQuickAccess.picker.value = value;\n }\n // Always adjust selection\n this.adjustValueSelection(visibleQuickAccess.picker, descriptor, options);\n return;\n }\n // Rewrite the filter value based on certain rules unless disabled\n if (descriptor && !(options === null || options === void 0 ? void 0 : options.preserveValue)) {\n let newValue = undefined;\n // If we have a visible provider with a value, take it's filter value but\n // rewrite to new provider prefix in case they differ\n if (visibleQuickAccess && visibleDescriptor && visibleDescriptor !== descriptor) {\n const newValueCandidateWithoutPrefix = visibleQuickAccess.value.substr(visibleDescriptor.prefix.length);\n if (newValueCandidateWithoutPrefix) {\n newValue = `${descriptor.prefix}${newValueCandidateWithoutPrefix}`;\n }\n }\n // Otherwise, take a default value as instructed\n if (!newValue) {\n const defaultFilterValue = provider === null || provider === void 0 ? void 0 : provider.defaultFilterValue;\n if (defaultFilterValue === DefaultQuickAccessFilterValue.LAST) {\n newValue = this.lastAcceptedPickerValues.get(descriptor);\n }\n else if (typeof defaultFilterValue === 'string') {\n newValue = `${descriptor.prefix}${defaultFilterValue}`;\n }\n }\n if (typeof newValue === 'string') {\n value = newValue;\n }\n }\n // Create a picker for the provider to use with the initial value\n // and adjust the filtering to exclude the prefix from filtering\n const disposables = new DisposableStore();\n const picker = disposables.add(this.quickInputService.createQuickPick());\n picker.value = value;\n this.adjustValueSelection(picker, descriptor, options);\n picker.placeholder = descriptor === null || descriptor === void 0 ? void 0 : descriptor.placeholder;\n picker.quickNavigate = options === null || options === void 0 ? void 0 : options.quickNavigateConfiguration;\n picker.hideInput = !!picker.quickNavigate && !visibleQuickAccess; // only hide input if there was no picker opened already\n if (typeof (options === null || options === void 0 ? void 0 : options.itemActivation) === 'number' || (options === null || options === void 0 ? void 0 : options.quickNavigateConfiguration)) {\n picker.itemActivation = (_a = options === null || options === void 0 ? void 0 : options.itemActivation) !== null && _a !== void 0 ? _a : ItemActivation.SECOND /* quick nav is always second */;\n }\n picker.contextKey = descriptor === null || descriptor === void 0 ? void 0 : descriptor.contextKey;\n picker.filterValue = (value) => value.substring(descriptor ? descriptor.prefix.length : 0);\n if (descriptor === null || descriptor === void 0 ? void 0 : descriptor.placeholder) {\n picker.ariaLabel = descriptor === null || descriptor === void 0 ? void 0 : descriptor.placeholder;\n }\n // Register listeners\n disposables.add(this.registerPickerListeners(picker, provider, descriptor, value));\n // Ask provider to fill the picker as needed if we have one\n // and pass over a cancellation token that will indicate when\n // the picker is hiding without a pick being made.\n const cts = disposables.add(new CancellationTokenSource());\n if (provider) {\n disposables.add(provider.provide(picker, cts.token));\n }\n // Finally, trigger disposal and cancellation when the picker\n // hides depending on items selected or not.\n once(picker.onDidHide)(() => {\n if (picker.selectedItems.length === 0) {\n cts.cancel();\n }\n // Start to dispose once picker hides\n disposables.dispose();\n });\n // Finally, show the picker. This is important because a provider\n // may not call this and then our disposables would leak that rely\n // on the onDidHide event.\n picker.show();\n }\n adjustValueSelection(picker, descriptor, options) {\n var _a;\n let valueSelection;\n // Preserve: just always put the cursor at the end\n if (options === null || options === void 0 ? void 0 : options.preserveValue) {\n valueSelection = [picker.value.length, picker.value.length];\n }\n // Otherwise: select the value up until the prefix\n else {\n valueSelection = [(_a = descriptor === null || descriptor === void 0 ? void 0 : descriptor.prefix.length) !== null && _a !== void 0 ? _a : 0, picker.value.length];\n }\n picker.valueSelection = valueSelection;\n }\n registerPickerListeners(picker, provider, descriptor, value) {\n const disposables = new DisposableStore();\n // Remember as last visible picker and clean up once picker get's disposed\n const visibleQuickAccess = this.visibleQuickAccess = { picker, descriptor, value };\n disposables.add(toDisposable(() => {\n if (visibleQuickAccess === this.visibleQuickAccess) {\n this.visibleQuickAccess = undefined;\n }\n }));\n // Whenever the value changes, check if the provider has\n // changed and if so - re-create the picker from the beginning\n disposables.add(picker.onDidChangeValue(value => {\n const [providerForValue] = this.getOrInstantiateProvider(value);\n if (providerForValue !== provider) {\n this.show(value, { preserveValue: true } /* do not rewrite value from user typing! */);\n }\n else {\n visibleQuickAccess.value = value; // remember the value in our visible one\n }\n }));\n // Remember picker input for future use when accepting\n if (descriptor) {\n disposables.add(picker.onDidAccept(() => {\n this.lastAcceptedPickerValues.set(descriptor, picker.value);\n }));\n }\n return disposables;\n }\n getOrInstantiateProvider(value) {\n const providerDescriptor = this.registry.getQuickAccessProvider(value);\n if (!providerDescriptor) {\n return [undefined, undefined];\n }\n let provider = this.mapProviderToDescriptor.get(providerDescriptor);\n if (!provider) {\n provider = this.instantiationService.createInstance(providerDescriptor.ctor);\n this.mapProviderToDescriptor.set(providerDescriptor, provider);\n }\n return [provider, providerDescriptor];\n }\n};\nQuickAccessController = __decorate([\n __param(0, IQuickInputService),\n __param(1, IInstantiationService)\n], QuickAccessController);\nexport { QuickAccessController };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { IThemeService, Themable } from '../../theme/common/themeService.js';\nimport { inputBackground, inputForeground, inputBorder, inputValidationInfoBackground, inputValidationInfoForeground, inputValidationInfoBorder, inputValidationWarningBackground, inputValidationWarningForeground, inputValidationWarningBorder, inputValidationErrorBackground, inputValidationErrorForeground, inputValidationErrorBorder, badgeBackground, badgeForeground, contrastBorder, buttonForeground, buttonBackground, buttonHoverBackground, progressBarBackground, widgetShadow, listFocusForeground, activeContrastBorder, pickerGroupBorder, pickerGroupForeground, quickInputForeground, quickInputBackground, quickInputTitleBackground, quickInputListFocusBackground, keybindingLabelBackground, keybindingLabelForeground, keybindingLabelBorder, keybindingLabelBottomBorder } from '../../theme/common/colorRegistry.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { computeStyles } from '../../theme/common/styler.js';\nimport { IContextKeyService, RawContextKey } from '../../contextkey/common/contextkey.js';\nimport { IAccessibilityService } from '../../accessibility/common/accessibility.js';\nimport { QuickInputController } from '../../../base/parts/quickinput/browser/quickInput.js';\nimport { WorkbenchList } from '../../list/browser/listService.js';\nimport { QuickAccessController } from './quickAccess.js';\nlet QuickInputService = class QuickInputService extends Themable {\n constructor(instantiationService, contextKeyService, themeService, accessibilityService, layoutService) {\n super(themeService);\n this.instantiationService = instantiationService;\n this.contextKeyService = contextKeyService;\n this.accessibilityService = accessibilityService;\n this.layoutService = layoutService;\n this.contexts = new Map();\n }\n get controller() {\n if (!this._controller) {\n this._controller = this._register(this.createController());\n }\n return this._controller;\n }\n get quickAccess() {\n if (!this._quickAccess) {\n this._quickAccess = this._register(this.instantiationService.createInstance(QuickAccessController));\n }\n return this._quickAccess;\n }\n createController(host = this.layoutService, options) {\n var _a, _b;\n const defaultOptions = {\n idPrefix: 'quickInput_',\n container: host.container,\n ignoreFocusOut: () => false,\n isScreenReaderOptimized: () => this.accessibilityService.isScreenReaderOptimized(),\n backKeybindingLabel: () => undefined,\n setContextKey: (id) => this.setContextKey(id),\n returnFocus: () => host.focus(),\n createList: (user, container, delegate, renderers, options) => this.instantiationService.createInstance(WorkbenchList, user, container, delegate, renderers, options),\n styles: this.computeStyles()\n };\n const controller = this._register(new QuickInputController(Object.assign(Object.assign({}, defaultOptions), options)));\n controller.layout(host.dimension, (_b = (_a = host.offset) === null || _a === void 0 ? void 0 : _a.top) !== null && _b !== void 0 ? _b : 0);\n // Layout changes\n this._register(host.onDidLayout(dimension => { var _a, _b; return controller.layout(dimension, (_b = (_a = host.offset) === null || _a === void 0 ? void 0 : _a.top) !== null && _b !== void 0 ? _b : 0); }));\n // Context keys\n this._register(controller.onShow(() => this.resetContextKeys()));\n this._register(controller.onHide(() => this.resetContextKeys()));\n return controller;\n }\n setContextKey(id) {\n let key;\n if (id) {\n key = this.contexts.get(id);\n if (!key) {\n key = new RawContextKey(id, false)\n .bindTo(this.contextKeyService);\n this.contexts.set(id, key);\n }\n }\n if (key && key.get()) {\n return; // already active context\n }\n this.resetContextKeys();\n if (key) {\n key.set(true);\n }\n }\n resetContextKeys() {\n this.contexts.forEach(context => {\n if (context.get()) {\n context.reset();\n }\n });\n }\n pick(picks, options = {}, token = CancellationToken.None) {\n return this.controller.pick(picks, options, token);\n }\n createQuickPick() {\n return this.controller.createQuickPick();\n }\n updateStyles() {\n this.controller.applyStyles(this.computeStyles());\n }\n computeStyles() {\n return {\n widget: Object.assign({}, computeStyles(this.theme, {\n quickInputBackground,\n quickInputForeground,\n quickInputTitleBackground,\n contrastBorder,\n widgetShadow\n })),\n inputBox: computeStyles(this.theme, {\n inputForeground,\n inputBackground,\n inputBorder,\n inputValidationInfoBackground,\n inputValidationInfoForeground,\n inputValidationInfoBorder,\n inputValidationWarningBackground,\n inputValidationWarningForeground,\n inputValidationWarningBorder,\n inputValidationErrorBackground,\n inputValidationErrorForeground,\n inputValidationErrorBorder\n }),\n countBadge: computeStyles(this.theme, {\n badgeBackground,\n badgeForeground,\n badgeBorder: contrastBorder\n }),\n button: computeStyles(this.theme, {\n buttonForeground,\n buttonBackground,\n buttonHoverBackground,\n buttonBorder: contrastBorder\n }),\n progressBar: computeStyles(this.theme, {\n progressBarBackground\n }),\n keybindingLabel: computeStyles(this.theme, {\n keybindingLabelBackground,\n keybindingLabelForeground,\n keybindingLabelBorder,\n keybindingLabelBottomBorder,\n keybindingLabelShadow: widgetShadow\n }),\n list: computeStyles(this.theme, {\n listBackground: quickInputBackground,\n // Look like focused when inactive.\n listInactiveFocusForeground: listFocusForeground,\n listInactiveFocusBackground: quickInputListFocusBackground,\n listFocusOutline: activeContrastBorder,\n listInactiveFocusOutline: activeContrastBorder,\n pickerGroupBorder,\n pickerGroupForeground\n })\n };\n }\n};\nQuickInputService = __decorate([\n __param(0, IInstantiationService),\n __param(1, IContextKeyService),\n __param(2, IThemeService),\n __param(3, IAccessibilityService),\n __param(4, ILayoutService)\n], QuickInputService);\nexport { QuickInputService };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport './standaloneQuickInput.css';\nimport { registerEditorContribution } from '../../../browser/editorExtensions.js';\nimport { IThemeService } from '../../../../platform/theme/common/themeService.js';\nimport { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js';\nimport { ILayoutService } from '../../../../platform/layout/browser/layoutService.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { QuickInputService } from '../../../../platform/quickinput/browser/quickInput.js';\nimport { once } from '../../../../base/common/functional.js';\nlet EditorScopedQuickInputServiceImpl = class EditorScopedQuickInputServiceImpl extends QuickInputService {\n constructor(editor, instantiationService, contextKeyService, themeService, accessibilityService, layoutService) {\n super(instantiationService, contextKeyService, themeService, accessibilityService, layoutService);\n this.host = undefined;\n // Use the passed in code editor as host for the quick input widget\n const contribution = QuickInputEditorContribution.get(editor);\n this.host = {\n _serviceBrand: undefined,\n get container() { return contribution.widget.getDomNode(); },\n get dimension() { return editor.getLayoutInfo(); },\n get onDidLayout() { return editor.onDidLayoutChange; },\n focus: () => editor.focus()\n };\n }\n createController() {\n return super.createController(this.host);\n }\n};\nEditorScopedQuickInputServiceImpl = __decorate([\n __param(1, IInstantiationService),\n __param(2, IContextKeyService),\n __param(3, IThemeService),\n __param(4, IAccessibilityService),\n __param(5, ILayoutService)\n], EditorScopedQuickInputServiceImpl);\nexport { EditorScopedQuickInputServiceImpl };\nlet StandaloneQuickInputServiceImpl = class StandaloneQuickInputServiceImpl {\n constructor(instantiationService, codeEditorService) {\n this.instantiationService = instantiationService;\n this.codeEditorService = codeEditorService;\n this.mapEditorToService = new Map();\n }\n get activeService() {\n const editor = this.codeEditorService.getFocusedCodeEditor();\n if (!editor) {\n throw new Error('Quick input service needs a focused editor to work.');\n }\n // Find the quick input implementation for the focused\n // editor or create it lazily if not yet created\n let quickInputService = this.mapEditorToService.get(editor);\n if (!quickInputService) {\n const newQuickInputService = quickInputService = this.instantiationService.createInstance(EditorScopedQuickInputServiceImpl, editor);\n this.mapEditorToService.set(editor, quickInputService);\n once(editor.onDidDispose)(() => {\n newQuickInputService.dispose();\n this.mapEditorToService.delete(editor);\n });\n }\n return quickInputService;\n }\n get quickAccess() { return this.activeService.quickAccess; }\n pick(picks, options = {}, token = CancellationToken.None) {\n return this.activeService /* TS fail */.pick(picks, options, token);\n }\n createQuickPick() {\n return this.activeService.createQuickPick();\n }\n};\nStandaloneQuickInputServiceImpl = __decorate([\n __param(0, IInstantiationService),\n __param(1, ICodeEditorService)\n], StandaloneQuickInputServiceImpl);\nexport { StandaloneQuickInputServiceImpl };\nexport class QuickInputEditorContribution {\n constructor(editor) {\n this.editor = editor;\n this.widget = new QuickInputEditorWidget(this.editor);\n }\n static get(editor) {\n return editor.getContribution(QuickInputEditorContribution.ID);\n }\n dispose() {\n this.widget.dispose();\n }\n}\nQuickInputEditorContribution.ID = 'editor.controller.quickInput';\nexport class QuickInputEditorWidget {\n constructor(codeEditor) {\n this.codeEditor = codeEditor;\n this.domNode = document.createElement('div');\n this.codeEditor.addOverlayWidget(this);\n }\n getId() {\n return QuickInputEditorWidget.ID;\n }\n getDomNode() {\n return this.domNode;\n }\n getPosition() {\n return { preference: 2 /* TOP_CENTER */ };\n }\n dispose() {\n this.codeEditor.removeOverlayWidget(this);\n }\n}\nQuickInputEditorWidget.ID = 'editor.contrib.quickInputWidget';\nregisterEditorContribution(QuickInputEditorContribution.ID, QuickInputEditorContribution);\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 *--------------------------------------------------------------------------------------------*/\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { IBulkEditService } from '../../browser/services/bulkEditService.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\nimport { EditorWorkerServiceImpl } from '../../common/services/editorWorkerServiceImpl.js';\nimport { IModeService } from '../../common/services/modeService.js';\nimport { ModeServiceImpl } from '../../common/services/modeServiceImpl.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { ModelServiceImpl } from '../../common/services/modelServiceImpl.js';\nimport { ITextResourceConfigurationService, ITextResourcePropertiesService } from '../../common/services/textResourceConfigurationService.js';\nimport { SimpleBulkEditService, SimpleConfigurationService, SimpleDialogService, SimpleNotificationService, SimpleEditorProgressService, SimpleResourceConfigurationService, SimpleResourcePropertiesService, SimpleUriLabelService, SimpleWorkspaceContextService, StandaloneCommandService, StandaloneKeybindingService, StandaloneTelemetryService, SimpleLayoutService } from './simpleServices.js';\nimport { StandaloneCodeEditorServiceImpl } from './standaloneCodeServiceImpl.js';\nimport { StandaloneThemeServiceImpl } from './standaloneThemeServiceImpl.js';\nimport { IStandaloneThemeService } from '../common/standaloneThemeService.js';\nimport { IMenuService } from '../../../platform/actions/common/actions.js';\nimport { ICommandService } from '../../../platform/commands/common/commands.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { ContextKeyService } from '../../../platform/contextkey/browser/contextKeyService.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { ContextMenuService } from '../../../platform/contextview/browser/contextMenuService.js';\nimport { IContextMenuService, IContextViewService } from '../../../platform/contextview/browser/contextView.js';\nimport { ContextViewService } from '../../../platform/contextview/browser/contextViewService.js';\nimport { IDialogService } from '../../../platform/dialogs/common/dialogs.js';\nimport { IInstantiationService, createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { InstantiationService } from '../../../platform/instantiation/common/instantiationService.js';\nimport { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { ILabelService } from '../../../platform/label/common/label.js';\nimport { IListService, ListService } from '../../../platform/list/browser/listService.js';\nimport { ConsoleLogger, ILogService, LogService } from '../../../platform/log/common/log.js';\nimport { MarkerService } from '../../../platform/markers/common/markerService.js';\nimport { IMarkerService } from '../../../platform/markers/common/markers.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\nimport { IStorageService, InMemoryStorageService } from '../../../platform/storage/common/storage.js';\nimport { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nimport { IWorkspaceContextService } from '../../../platform/workspace/common/workspace.js';\nimport { MenuService } from '../../../platform/actions/common/menuService.js';\nimport { IMarkerDecorationsService } from '../../common/services/markersDecorationService.js';\nimport { MarkerDecorationsService } from '../../common/services/markerDecorationsServiceImpl.js';\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { ILayoutService } from '../../../platform/layout/browser/layoutService.js';\nimport { getSingletonServiceDescriptors } from '../../../platform/instantiation/common/extensions.js';\nimport { AccessibilityService } from '../../../platform/accessibility/common/accessibilityService.js';\nimport { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js';\nimport { BrowserClipboardService } from '../../../platform/clipboard/browser/clipboardService.js';\nimport { IUndoRedoService } from '../../../platform/undoRedo/common/undoRedo.js';\nimport { UndoRedoService } from '../../../platform/undoRedo/common/undoRedoService.js';\nimport { StandaloneQuickInputServiceImpl } from './quickInput/standaloneQuickInputServiceImpl.js';\nimport { IQuickInputService } from '../../../platform/quickinput/common/quickInput.js';\nexport var StaticServices;\n(function (StaticServices) {\n const _serviceCollection = new ServiceCollection();\n class LazyStaticService {\n constructor(serviceId, factory) {\n this._serviceId = serviceId;\n this._factory = factory;\n this._value = null;\n }\n get id() { return this._serviceId; }\n get(overrides) {\n if (!this._value) {\n if (overrides) {\n this._value = overrides[this._serviceId.toString()];\n }\n if (!this._value) {\n this._value = this._factory(overrides);\n }\n if (!this._value) {\n throw new Error('Service ' + this._serviceId + ' is missing!');\n }\n _serviceCollection.set(this._serviceId, this._value);\n }\n return this._value;\n }\n }\n StaticServices.LazyStaticService = LazyStaticService;\n let _all = [];\n function define(serviceId, factory) {\n let r = new LazyStaticService(serviceId, factory);\n _all.push(r);\n return r;\n }\n function init(overrides) {\n // Create a fresh service collection\n let result = new ServiceCollection();\n // make sure to add all services that use `registerSingleton`\n for (const [id, descriptor] of getSingletonServiceDescriptors()) {\n result.set(id, descriptor);\n }\n // Initialize the service collection with the overrides\n for (let serviceId in overrides) {\n if (overrides.hasOwnProperty(serviceId)) {\n result.set(createDecorator(serviceId), overrides[serviceId]);\n }\n }\n // Make sure the same static services are present in all service collections\n _all.forEach(service => result.set(service.id, service.get(overrides)));\n // Ensure the collection gets the correct instantiation service\n let instantiationService = new InstantiationService(result, true);\n result.set(IInstantiationService, instantiationService);\n return [result, instantiationService];\n }\n StaticServices.init = init;\n StaticServices.instantiationService = define(IInstantiationService, () => new InstantiationService(_serviceCollection, true));\n const configurationServiceImpl = new SimpleConfigurationService();\n StaticServices.configurationService = define(IConfigurationService, () => configurationServiceImpl);\n StaticServices.resourceConfigurationService = define(ITextResourceConfigurationService, () => new SimpleResourceConfigurationService(configurationServiceImpl));\n StaticServices.resourcePropertiesService = define(ITextResourcePropertiesService, () => new SimpleResourcePropertiesService(configurationServiceImpl));\n StaticServices.contextService = define(IWorkspaceContextService, () => new SimpleWorkspaceContextService());\n StaticServices.labelService = define(ILabelService, () => new SimpleUriLabelService());\n StaticServices.telemetryService = define(ITelemetryService, () => new StandaloneTelemetryService());\n StaticServices.dialogService = define(IDialogService, () => new SimpleDialogService());\n StaticServices.notificationService = define(INotificationService, () => new SimpleNotificationService());\n StaticServices.markerService = define(IMarkerService, () => new MarkerService());\n StaticServices.modeService = define(IModeService, (o) => new ModeServiceImpl());\n StaticServices.standaloneThemeService = define(IStandaloneThemeService, () => new StandaloneThemeServiceImpl());\n StaticServices.logService = define(ILogService, () => new LogService(new ConsoleLogger()));\n StaticServices.undoRedoService = define(IUndoRedoService, (o) => new UndoRedoService(StaticServices.dialogService.get(o), StaticServices.notificationService.get(o)));\n StaticServices.modelService = define(IModelService, (o) => new ModelServiceImpl(StaticServices.configurationService.get(o), StaticServices.resourcePropertiesService.get(o), StaticServices.standaloneThemeService.get(o), StaticServices.logService.get(o), StaticServices.undoRedoService.get(o)));\n StaticServices.markerDecorationsService = define(IMarkerDecorationsService, (o) => new MarkerDecorationsService(StaticServices.modelService.get(o), StaticServices.markerService.get(o)));\n StaticServices.contextKeyService = define(IContextKeyService, (o) => new ContextKeyService(StaticServices.configurationService.get(o)));\n StaticServices.codeEditorService = define(ICodeEditorService, (o) => new StandaloneCodeEditorServiceImpl(null, StaticServices.contextKeyService.get(o), StaticServices.standaloneThemeService.get(o)));\n StaticServices.editorProgressService = define(IEditorProgressService, () => new SimpleEditorProgressService());\n StaticServices.storageService = define(IStorageService, () => new InMemoryStorageService());\n StaticServices.editorWorkerService = define(IEditorWorkerService, (o) => new EditorWorkerServiceImpl(StaticServices.modelService.get(o), StaticServices.resourceConfigurationService.get(o), StaticServices.logService.get(o)));\n})(StaticServices || (StaticServices = {}));\nexport class DynamicStandaloneServices extends Disposable {\n constructor(domElement, overrides) {\n super();\n const [_serviceCollection, _instantiationService] = StaticServices.init(overrides);\n this._serviceCollection = _serviceCollection;\n this._instantiationService = _instantiationService;\n const configurationService = this.get(IConfigurationService);\n const notificationService = this.get(INotificationService);\n const telemetryService = this.get(ITelemetryService);\n const themeService = this.get(IThemeService);\n const logService = this.get(ILogService);\n const contextKeyService = this.get(IContextKeyService);\n let ensure = (serviceId, factory) => {\n let value = null;\n if (overrides) {\n value = overrides[serviceId.toString()];\n }\n if (!value) {\n value = factory();\n }\n this._serviceCollection.set(serviceId, value);\n return value;\n };\n ensure(IAccessibilityService, () => new AccessibilityService(contextKeyService, configurationService));\n ensure(IListService, () => new ListService(themeService));\n let commandService = ensure(ICommandService, () => new StandaloneCommandService(this._instantiationService));\n let keybindingService = ensure(IKeybindingService, () => this._register(new StandaloneKeybindingService(contextKeyService, commandService, telemetryService, notificationService, logService, domElement)));\n let layoutService = ensure(ILayoutService, () => new SimpleLayoutService(StaticServices.codeEditorService.get(ICodeEditorService), domElement));\n ensure(IQuickInputService, () => new StandaloneQuickInputServiceImpl(_instantiationService, StaticServices.codeEditorService.get(ICodeEditorService)));\n let contextViewService = ensure(IContextViewService, () => this._register(new ContextViewService(layoutService)));\n ensure(IClipboardService, () => new BrowserClipboardService());\n ensure(IContextMenuService, () => {\n const contextMenuService = new ContextMenuService(telemetryService, notificationService, contextViewService, keybindingService, themeService);\n contextMenuService.configure({ blockMouse: false }); // we do not want that in the standalone editor\n return this._register(contextMenuService);\n });\n ensure(IMenuService, () => new MenuService(commandService));\n ensure(IBulkEditService, () => new SimpleBulkEditService(StaticServices.modelService.get(IModelService)));\n }\n get(serviceId) {\n let r = this._serviceCollection.get(serviceId);\n if (!r) {\n throw new Error('Missing service ' + serviceId);\n }\n return r;\n }\n set(serviceId, instance) {\n this._serviceCollection.set(serviceId, instance);\n }\n has(serviceId) {\n return this._serviceCollection.has(serviceId);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './standalone-tokens.css';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { OpenerService } from '../../browser/services/openerService.js';\nimport { DiffNavigator } from '../../browser/widget/diffNavigator.js';\nimport { EditorOptions, ConfigurationChangedEvent } from '../../common/config/editorOptions.js';\nimport { BareFontInfo, FontInfo } from '../../common/config/fontInfo.js';\nimport { EditorType } from '../../common/editorCommon.js';\nimport { FindMatch, TextModelResolvedOptions } from '../../common/model.js';\nimport * as modes from '../../common/modes.js';\nimport { NULL_STATE, nullTokenize } from '../../common/modes/nullMode.js';\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\nimport { IModeService } from '../../common/services/modeService.js';\nimport { ITextModelService } from '../../common/services/resolverService.js';\nimport { createWebWorker as actualCreateWebWorker } from '../../common/services/webWorker.js';\nimport * as standaloneEnums from '../../common/standalone/standaloneEnums.js';\nimport { Colorizer } from './colorizer.js';\nimport { SimpleEditorModelResolverService } from './simpleServices.js';\nimport { StandaloneDiffEditor, StandaloneEditor, createTextModel } from './standaloneCodeEditor.js';\nimport { DynamicStandaloneServices, StaticServices } from './standaloneServices.js';\nimport { IStandaloneThemeService } from '../common/standaloneThemeService.js';\nimport { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IContextViewService, IContextMenuService } from '../../../platform/contextview/browser/contextView.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { clearAllFontInfos } from '../../browser/config/configuration.js';\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\nimport { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js';\nimport { splitLines } from '../../../base/common/strings.js';\nimport { IModelService } from '../../common/services/modelService.js';\nfunction withAllStandaloneServices(domElement, override, callback) {\n let services = new DynamicStandaloneServices(domElement, override);\n let simpleEditorModelResolverService = null;\n if (!services.has(ITextModelService)) {\n simpleEditorModelResolverService = new SimpleEditorModelResolverService(StaticServices.modelService.get());\n services.set(ITextModelService, simpleEditorModelResolverService);\n }\n if (!services.has(IOpenerService)) {\n services.set(IOpenerService, new OpenerService(services.get(ICodeEditorService), services.get(ICommandService)));\n }\n let result = callback(services);\n if (simpleEditorModelResolverService) {\n simpleEditorModelResolverService.setEditor(result);\n }\n return result;\n}\n/**\n * Create a new editor under `domElement`.\n * `domElement` should be empty (not contain other dom nodes).\n * The editor will read the size of `domElement`.\n */\nexport function create(domElement, options, override) {\n return withAllStandaloneServices(domElement, override || {}, (services) => {\n return new StandaloneEditor(domElement, options, services, services.get(IInstantiationService), services.get(ICodeEditorService), services.get(ICommandService), services.get(IContextKeyService), services.get(IKeybindingService), services.get(IContextViewService), services.get(IStandaloneThemeService), services.get(INotificationService), services.get(IConfigurationService), services.get(IAccessibilityService), services.get(IModelService), services.get(IModeService));\n });\n}\n/**\n * Emitted when an editor is created.\n * Creating a diff editor might cause this listener to be invoked with the two editors.\n * @event\n */\nexport function onDidCreateEditor(listener) {\n return StaticServices.codeEditorService.get().onCodeEditorAdd((editor) => {\n listener(editor);\n });\n}\n/**\n * Create a new diff editor under `domElement`.\n * `domElement` should be empty (not contain other dom nodes).\n * The editor will read the size of `domElement`.\n */\nexport function createDiffEditor(domElement, options, override) {\n return withAllStandaloneServices(domElement, override || {}, (services) => {\n return new StandaloneDiffEditor(domElement, options, services, services.get(IInstantiationService), services.get(IContextKeyService), services.get(IKeybindingService), services.get(IContextViewService), services.get(IEditorWorkerService), services.get(ICodeEditorService), services.get(IStandaloneThemeService), services.get(INotificationService), services.get(IConfigurationService), services.get(IContextMenuService), services.get(IEditorProgressService), services.get(IClipboardService));\n });\n}\nexport function createDiffNavigator(diffEditor, opts) {\n return new DiffNavigator(diffEditor, opts);\n}\n/**\n * Create a new editor model.\n * You can specify the language that should be set for this model or let the language be inferred from the `uri`.\n */\nexport function createModel(value, language, uri) {\n return createTextModel(StaticServices.modelService.get(), StaticServices.modeService.get(), value, language, uri);\n}\n/**\n * Change the language for a model.\n */\nexport function setModelLanguage(model, languageId) {\n StaticServices.modelService.get().setMode(model, StaticServices.modeService.get().create(languageId));\n}\n/**\n * Set the markers for a model.\n */\nexport function setModelMarkers(model, owner, markers) {\n if (model) {\n StaticServices.markerService.get().changeOne(owner, model.uri, markers);\n }\n}\n/**\n * Get markers for owner and/or resource\n *\n * @returns list of markers\n */\nexport function getModelMarkers(filter) {\n return StaticServices.markerService.get().read(filter);\n}\n/**\n * Emitted when markers change for a model.\n * @event\n */\nexport function onDidChangeMarkers(listener) {\n return StaticServices.markerService.get().onMarkerChanged(listener);\n}\n/**\n * Get the model that has `uri` if it exists.\n */\nexport function getModel(uri) {\n return StaticServices.modelService.get().getModel(uri);\n}\n/**\n * Get all the created models.\n */\nexport function getModels() {\n return StaticServices.modelService.get().getModels();\n}\n/**\n * Emitted when a model is created.\n * @event\n */\nexport function onDidCreateModel(listener) {\n return StaticServices.modelService.get().onModelAdded(listener);\n}\n/**\n * Emitted right before a model is disposed.\n * @event\n */\nexport function onWillDisposeModel(listener) {\n return StaticServices.modelService.get().onModelRemoved(listener);\n}\n/**\n * Emitted when a different language is set to a model.\n * @event\n */\nexport function onDidChangeModelLanguage(listener) {\n return StaticServices.modelService.get().onModelModeChanged((e) => {\n listener({\n model: e.model,\n oldLanguage: e.oldModeId\n });\n });\n}\n/**\n * Create a new web worker that has model syncing capabilities built in.\n * Specify an AMD module to load that will `create` an object that will be proxied.\n */\nexport function createWebWorker(opts) {\n return actualCreateWebWorker(StaticServices.modelService.get(), opts);\n}\n/**\n * Colorize the contents of `domNode` using attribute `data-lang`.\n */\nexport function colorizeElement(domNode, options) {\n const themeService = StaticServices.standaloneThemeService.get();\n themeService.registerEditorContainer(domNode);\n return Colorizer.colorizeElement(themeService, StaticServices.modeService.get(), domNode, options);\n}\n/**\n * Colorize `text` using language `languageId`.\n */\nexport function colorize(text, languageId, options) {\n const themeService = StaticServices.standaloneThemeService.get();\n themeService.registerEditorContainer(document.body);\n return Colorizer.colorize(StaticServices.modeService.get(), text, languageId, options);\n}\n/**\n * Colorize a line in a model.\n */\nexport function colorizeModelLine(model, lineNumber, tabSize = 4) {\n const themeService = StaticServices.standaloneThemeService.get();\n themeService.registerEditorContainer(document.body);\n return Colorizer.colorizeModelLine(model, lineNumber, tabSize);\n}\n/**\n * @internal\n */\nfunction getSafeTokenizationSupport(language) {\n let tokenizationSupport = modes.TokenizationRegistry.get(language);\n if (tokenizationSupport) {\n return tokenizationSupport;\n }\n return {\n getInitialState: () => NULL_STATE,\n tokenize: (line, hasEOL, state, deltaOffset) => nullTokenize(language, line, state, deltaOffset)\n };\n}\n/**\n * Tokenize `text` using language `languageId`\n */\nexport function tokenize(text, languageId) {\n let modeService = StaticServices.modeService.get();\n // Needed in order to get the mode registered for subsequent look-ups\n modeService.triggerMode(languageId);\n let tokenizationSupport = getSafeTokenizationSupport(languageId);\n let lines = splitLines(text);\n let result = [];\n let state = tokenizationSupport.getInitialState();\n for (let i = 0, len = lines.length; i < len; i++) {\n let line = lines[i];\n let tokenizationResult = tokenizationSupport.tokenize(line, true, state, 0);\n result[i] = tokenizationResult.tokens;\n state = tokenizationResult.endState;\n }\n return result;\n}\n/**\n * Define a new theme or update an existing theme.\n */\nexport function defineTheme(themeName, themeData) {\n StaticServices.standaloneThemeService.get().defineTheme(themeName, themeData);\n}\n/**\n * Switches to a theme.\n */\nexport function setTheme(themeName) {\n StaticServices.standaloneThemeService.get().setTheme(themeName);\n}\n/**\n * Clears all cached font measurements and triggers re-measurement.\n */\nexport function remeasureFonts() {\n clearAllFontInfos();\n}\n/**\n * Register a command.\n */\nexport function registerCommand(id, handler) {\n return CommandsRegistry.registerCommand({ id, handler });\n}\n/**\n * @internal\n */\nexport function createMonacoEditorAPI() {\n return {\n // methods\n create: create,\n onDidCreateEditor: onDidCreateEditor,\n createDiffEditor: createDiffEditor,\n createDiffNavigator: createDiffNavigator,\n createModel: createModel,\n setModelLanguage: setModelLanguage,\n setModelMarkers: setModelMarkers,\n getModelMarkers: getModelMarkers,\n onDidChangeMarkers: onDidChangeMarkers,\n getModels: getModels,\n getModel: getModel,\n onDidCreateModel: onDidCreateModel,\n onWillDisposeModel: onWillDisposeModel,\n onDidChangeModelLanguage: onDidChangeModelLanguage,\n createWebWorker: createWebWorker,\n colorizeElement: colorizeElement,\n colorize: colorize,\n colorizeModelLine: colorizeModelLine,\n tokenize: tokenize,\n defineTheme: defineTheme,\n setTheme: setTheme,\n remeasureFonts: remeasureFonts,\n registerCommand: registerCommand,\n // enums\n AccessibilitySupport: standaloneEnums.AccessibilitySupport,\n ContentWidgetPositionPreference: standaloneEnums.ContentWidgetPositionPreference,\n CursorChangeReason: standaloneEnums.CursorChangeReason,\n DefaultEndOfLine: standaloneEnums.DefaultEndOfLine,\n EditorAutoIndentStrategy: standaloneEnums.EditorAutoIndentStrategy,\n EditorOption: standaloneEnums.EditorOption,\n EndOfLinePreference: standaloneEnums.EndOfLinePreference,\n EndOfLineSequence: standaloneEnums.EndOfLineSequence,\n MinimapPosition: standaloneEnums.MinimapPosition,\n MouseTargetType: standaloneEnums.MouseTargetType,\n OverlayWidgetPositionPreference: standaloneEnums.OverlayWidgetPositionPreference,\n OverviewRulerLane: standaloneEnums.OverviewRulerLane,\n RenderLineNumbersType: standaloneEnums.RenderLineNumbersType,\n RenderMinimap: standaloneEnums.RenderMinimap,\n ScrollbarVisibility: standaloneEnums.ScrollbarVisibility,\n ScrollType: standaloneEnums.ScrollType,\n TextEditorCursorBlinkingStyle: standaloneEnums.TextEditorCursorBlinkingStyle,\n TextEditorCursorStyle: standaloneEnums.TextEditorCursorStyle,\n TrackedRangeStickiness: standaloneEnums.TrackedRangeStickiness,\n WrappingIndent: standaloneEnums.WrappingIndent,\n // classes\n ConfigurationChangedEvent: ConfigurationChangedEvent,\n BareFontInfo: BareFontInfo,\n FontInfo: FontInfo,\n TextModelResolvedOptions: TextModelResolvedOptions,\n FindMatch: FindMatch,\n // vars\n EditorType: EditorType,\n EditorOptions: EditorOptions\n };\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/*\n * This module only exports 'compile' which compiles a JSON language definition\n * into a typed and checked ILexer definition.\n */\nimport * as monarchCommon from './monarchCommon.js';\n/*\n * Type helpers\n *\n * Note: this is just for sanity checks on the JSON description which is\n * helpful for the programmer. No checks are done anymore once the lexer is\n * already 'compiled and checked'.\n *\n */\nfunction isArrayOf(elemType, obj) {\n if (!obj) {\n return false;\n }\n if (!(Array.isArray(obj))) {\n return false;\n }\n for (const el of obj) {\n if (!(elemType(el))) {\n return false;\n }\n }\n return true;\n}\nfunction bool(prop, defValue) {\n if (typeof prop === 'boolean') {\n return prop;\n }\n return defValue;\n}\nfunction string(prop, defValue) {\n if (typeof (prop) === 'string') {\n return prop;\n }\n return defValue;\n}\nfunction arrayToHash(array) {\n const result = {};\n for (const e of array) {\n result[e] = true;\n }\n return result;\n}\nfunction createKeywordMatcher(arr, caseInsensitive = false) {\n if (caseInsensitive) {\n arr = arr.map(function (x) { return x.toLowerCase(); });\n }\n const hash = arrayToHash(arr);\n if (caseInsensitive) {\n return function (word) {\n return hash[word.toLowerCase()] !== undefined && hash.hasOwnProperty(word.toLowerCase());\n };\n }\n else {\n return function (word) {\n return hash[word] !== undefined && hash.hasOwnProperty(word);\n };\n }\n}\n// Lexer helpers\n/**\n * Compiles a regular expression string, adding the 'i' flag if 'ignoreCase' is set, and the 'u' flag if 'unicode' is set.\n * Also replaces @\\w+ or sequences with the content of the specified attribute\n * @\\w+ replacement can be avoided by escaping `@` signs with another `@` sign.\n * @example /@attr/ will be replaced with the value of lexer[attr]\n * @example /@@text/ will not be replaced and will become /@text/.\n */\nfunction compileRegExp(lexer, str) {\n // @@ must be interpreted as a literal @, so we replace all occurences of @@ with a placeholder character\n str = str.replace(/@@/g, `\\x01`);\n let n = 0;\n let hadExpansion;\n do {\n hadExpansion = false;\n str = str.replace(/@(\\w+)/g, function (s, attr) {\n hadExpansion = true;\n let sub = '';\n if (typeof (lexer[attr]) === 'string') {\n sub = lexer[attr];\n }\n else if (lexer[attr] && lexer[attr] instanceof RegExp) {\n sub = lexer[attr].source;\n }\n else {\n if (lexer[attr] === undefined) {\n throw monarchCommon.createError(lexer, 'language definition does not contain attribute \\'' + attr + '\\', used at: ' + str);\n }\n else {\n throw monarchCommon.createError(lexer, 'attribute reference \\'' + attr + '\\' must be a string, used at: ' + str);\n }\n }\n return (monarchCommon.empty(sub) ? '' : '(?:' + sub + ')');\n });\n n++;\n } while (hadExpansion && n < 5);\n // handle escaped @@\n str = str.replace(/\\x01/g, '@');\n let flags = (lexer.ignoreCase ? 'i' : '') + (lexer.unicode ? 'u' : '');\n return new RegExp(str, flags);\n}\n/**\n * Compiles guard functions for case matches.\n * This compiles 'cases' attributes into efficient match functions.\n *\n */\nfunction selectScrutinee(id, matches, state, num) {\n if (num < 0) {\n return id;\n }\n if (num < matches.length) {\n return matches[num];\n }\n if (num >= 100) {\n num = num - 100;\n let parts = state.split('.');\n parts.unshift(state);\n if (num < parts.length) {\n return parts[num];\n }\n }\n return null;\n}\nfunction createGuard(lexer, ruleName, tkey, val) {\n // get the scrutinee and pattern\n let scrut = -1; // -1: $!, 0-99: $n, 100+n: $Sn\n let oppat = tkey;\n let matches = tkey.match(/^\\$(([sS]?)(\\d\\d?)|#)(.*)$/);\n if (matches) {\n if (matches[3]) { // if digits\n scrut = parseInt(matches[3]);\n if (matches[2]) {\n scrut = scrut + 100; // if [sS] present\n }\n }\n oppat = matches[4];\n }\n // get operator\n let op = '~';\n let pat = oppat;\n if (!oppat || oppat.length === 0) {\n op = '!=';\n pat = '';\n }\n else if (/^\\w*$/.test(pat)) { // just a word\n op = '==';\n }\n else {\n matches = oppat.match(/^(@|!@|~|!~|==|!=)(.*)$/);\n if (matches) {\n op = matches[1];\n pat = matches[2];\n }\n }\n // set the tester function\n let tester;\n // special case a regexp that matches just words\n if ((op === '~' || op === '!~') && /^(\\w|\\|)*$/.test(pat)) {\n let inWords = createKeywordMatcher(pat.split('|'), lexer.ignoreCase);\n tester = function (s) { return (op === '~' ? inWords(s) : !inWords(s)); };\n }\n else if (op === '@' || op === '!@') {\n let words = lexer[pat];\n if (!words) {\n throw monarchCommon.createError(lexer, 'the @ match target \\'' + pat + '\\' is not defined, in rule: ' + ruleName);\n }\n if (!(isArrayOf(function (elem) { return (typeof (elem) === 'string'); }, words))) {\n throw monarchCommon.createError(lexer, 'the @ match target \\'' + pat + '\\' must be an array of strings, in rule: ' + ruleName);\n }\n let inWords = createKeywordMatcher(words, lexer.ignoreCase);\n tester = function (s) { return (op === '@' ? inWords(s) : !inWords(s)); };\n }\n else if (op === '~' || op === '!~') {\n if (pat.indexOf('$') < 0) {\n // precompile regular expression\n let re = compileRegExp(lexer, '^' + pat + '$');\n tester = function (s) { return (op === '~' ? re.test(s) : !re.test(s)); };\n }\n else {\n tester = function (s, id, matches, state) {\n let re = compileRegExp(lexer, '^' + monarchCommon.substituteMatches(lexer, pat, id, matches, state) + '$');\n return re.test(s);\n };\n }\n }\n else { // if (op==='==' || op==='!=') {\n if (pat.indexOf('$') < 0) {\n let patx = monarchCommon.fixCase(lexer, pat);\n tester = function (s) { return (op === '==' ? s === patx : s !== patx); };\n }\n else {\n let patx = monarchCommon.fixCase(lexer, pat);\n tester = function (s, id, matches, state, eos) {\n let patexp = monarchCommon.substituteMatches(lexer, patx, id, matches, state);\n return (op === '==' ? s === patexp : s !== patexp);\n };\n }\n }\n // return the branch object\n if (scrut === -1) {\n return {\n name: tkey, value: val, test: function (id, matches, state, eos) {\n return tester(id, id, matches, state, eos);\n }\n };\n }\n else {\n return {\n name: tkey, value: val, test: function (id, matches, state, eos) {\n let scrutinee = selectScrutinee(id, matches, state, scrut);\n return tester(!scrutinee ? '' : scrutinee, id, matches, state, eos);\n }\n };\n }\n}\n/**\n * Compiles an action: i.e. optimize regular expressions and case matches\n * and do many sanity checks.\n *\n * This is called only during compilation but if the lexer definition\n * contains user functions as actions (which is usually not allowed), then this\n * may be called during lexing. It is important therefore to compile common cases efficiently\n */\nfunction compileAction(lexer, ruleName, action) {\n if (!action) {\n return { token: '' };\n }\n else if (typeof (action) === 'string') {\n return action; // { token: action };\n }\n else if (action.token || action.token === '') {\n if (typeof (action.token) !== 'string') {\n throw monarchCommon.createError(lexer, 'a \\'token\\' attribute must be of type string, in rule: ' + ruleName);\n }\n else {\n // only copy specific typed fields (only happens once during compile Lexer)\n let newAction = { token: action.token };\n if (action.token.indexOf('$') >= 0) {\n newAction.tokenSubst = true;\n }\n if (typeof (action.bracket) === 'string') {\n if (action.bracket === '@open') {\n newAction.bracket = 1 /* Open */;\n }\n else if (action.bracket === '@close') {\n newAction.bracket = -1 /* Close */;\n }\n else {\n throw monarchCommon.createError(lexer, 'a \\'bracket\\' attribute must be either \\'@open\\' or \\'@close\\', in rule: ' + ruleName);\n }\n }\n if (action.next) {\n if (typeof (action.next) !== 'string') {\n throw monarchCommon.createError(lexer, 'the next state must be a string value in rule: ' + ruleName);\n }\n else {\n let next = action.next;\n if (!/^(@pop|@push|@popall)$/.test(next)) {\n if (next[0] === '@') {\n next = next.substr(1); // peel off starting @ sign\n }\n if (next.indexOf('$') < 0) { // no dollar substitution, we can check if the state exists\n if (!monarchCommon.stateExists(lexer, monarchCommon.substituteMatches(lexer, next, '', [], ''))) {\n throw monarchCommon.createError(lexer, 'the next state \\'' + action.next + '\\' is not defined in rule: ' + ruleName);\n }\n }\n }\n newAction.next = next;\n }\n }\n if (typeof (action.goBack) === 'number') {\n newAction.goBack = action.goBack;\n }\n if (typeof (action.switchTo) === 'string') {\n newAction.switchTo = action.switchTo;\n }\n if (typeof (action.log) === 'string') {\n newAction.log = action.log;\n }\n if (typeof (action.nextEmbedded) === 'string') {\n newAction.nextEmbedded = action.nextEmbedded;\n lexer.usesEmbedded = true;\n }\n return newAction;\n }\n }\n else if (Array.isArray(action)) {\n let results = [];\n for (let i = 0, len = action.length; i < len; i++) {\n results[i] = compileAction(lexer, ruleName, action[i]);\n }\n return { group: results };\n }\n else if (action.cases) {\n // build an array of test cases\n let cases = [];\n // for each case, push a test function and result value\n for (let tkey in action.cases) {\n if (action.cases.hasOwnProperty(tkey)) {\n const val = compileAction(lexer, ruleName, action.cases[tkey]);\n // what kind of case\n if (tkey === '@default' || tkey === '@' || tkey === '') {\n cases.push({ test: undefined, value: val, name: tkey });\n }\n else if (tkey === '@eos') {\n cases.push({ test: function (id, matches, state, eos) { return eos; }, value: val, name: tkey });\n }\n else {\n cases.push(createGuard(lexer, ruleName, tkey, val)); // call separate function to avoid local variable capture\n }\n }\n }\n // create a matching function\n const def = lexer.defaultToken;\n return {\n test: function (id, matches, state, eos) {\n for (const _case of cases) {\n const didmatch = (!_case.test || _case.test(id, matches, state, eos));\n if (didmatch) {\n return _case.value;\n }\n }\n return def;\n }\n };\n }\n else {\n throw monarchCommon.createError(lexer, 'an action must be a string, an object with a \\'token\\' or \\'cases\\' attribute, or an array of actions; in rule: ' + ruleName);\n }\n}\n/**\n * Helper class for creating matching rules\n */\nclass Rule {\n constructor(name) {\n this.regex = new RegExp('');\n this.action = { token: '' };\n this.matchOnlyAtLineStart = false;\n this.name = '';\n this.name = name;\n }\n setRegex(lexer, re) {\n let sregex;\n if (typeof (re) === 'string') {\n sregex = re;\n }\n else if (re instanceof RegExp) {\n sregex = re.source;\n }\n else {\n throw monarchCommon.createError(lexer, 'rules must start with a match string or regular expression: ' + this.name);\n }\n this.matchOnlyAtLineStart = (sregex.length > 0 && sregex[0] === '^');\n this.name = this.name + ': ' + sregex;\n this.regex = compileRegExp(lexer, '^(?:' + (this.matchOnlyAtLineStart ? sregex.substr(1) : sregex) + ')');\n }\n setAction(lexer, act) {\n this.action = compileAction(lexer, this.name, act);\n }\n}\n/**\n * Compiles a json description function into json where all regular expressions,\n * case matches etc, are compiled and all include rules are expanded.\n * We also compile the bracket definitions, supply defaults, and do many sanity checks.\n * If the 'jsonStrict' parameter is 'false', we allow at certain locations\n * regular expression objects and functions that get called during lexing.\n * (Currently we have no samples that need this so perhaps we should always have\n * jsonStrict to true).\n */\nexport function compile(languageId, json) {\n if (!json || typeof (json) !== 'object') {\n throw new Error('Monarch: expecting a language definition object');\n }\n // Create our lexer\n let lexer = {};\n lexer.languageId = languageId;\n lexer.includeLF = bool(json.includeLF, false);\n lexer.noThrow = false; // raise exceptions during compilation\n lexer.maxStack = 100;\n // Set standard fields: be defensive about types\n lexer.start = (typeof json.start === 'string' ? json.start : null);\n lexer.ignoreCase = bool(json.ignoreCase, false);\n lexer.unicode = bool(json.unicode, false);\n lexer.tokenPostfix = string(json.tokenPostfix, '.' + lexer.languageId);\n lexer.defaultToken = string(json.defaultToken, 'source');\n lexer.usesEmbedded = false; // becomes true if we find a nextEmbedded action\n // For calling compileAction later on\n let lexerMin = json;\n lexerMin.languageId = languageId;\n lexerMin.includeLF = lexer.includeLF;\n lexerMin.ignoreCase = lexer.ignoreCase;\n lexerMin.unicode = lexer.unicode;\n lexerMin.noThrow = lexer.noThrow;\n lexerMin.usesEmbedded = lexer.usesEmbedded;\n lexerMin.stateNames = json.tokenizer;\n lexerMin.defaultToken = lexer.defaultToken;\n // Compile an array of rules into newrules where RegExp objects are created.\n function addRules(state, newrules, rules) {\n for (const rule of rules) {\n let include = rule.include;\n if (include) {\n if (typeof (include) !== 'string') {\n throw monarchCommon.createError(lexer, 'an \\'include\\' attribute must be a string at: ' + state);\n }\n if (include[0] === '@') {\n include = include.substr(1); // peel off starting @\n }\n if (!json.tokenizer[include]) {\n throw monarchCommon.createError(lexer, 'include target \\'' + include + '\\' is not defined at: ' + state);\n }\n addRules(state + '.' + include, newrules, json.tokenizer[include]);\n }\n else {\n const newrule = new Rule(state);\n // Set up new rule attributes\n if (Array.isArray(rule) && rule.length >= 1 && rule.length <= 3) {\n newrule.setRegex(lexerMin, rule[0]);\n if (rule.length >= 3) {\n if (typeof (rule[1]) === 'string') {\n newrule.setAction(lexerMin, { token: rule[1], next: rule[2] });\n }\n else if (typeof (rule[1]) === 'object') {\n const rule1 = rule[1];\n rule1.next = rule[2];\n newrule.setAction(lexerMin, rule1);\n }\n else {\n throw monarchCommon.createError(lexer, 'a next state as the last element of a rule can only be given if the action is either an object or a string, at: ' + state);\n }\n }\n else {\n newrule.setAction(lexerMin, rule[1]);\n }\n }\n else {\n if (!rule.regex) {\n throw monarchCommon.createError(lexer, 'a rule must either be an array, or an object with a \\'regex\\' or \\'include\\' field at: ' + state);\n }\n if (rule.name) {\n if (typeof rule.name === 'string') {\n newrule.name = rule.name;\n }\n }\n if (rule.matchOnlyAtStart) {\n newrule.matchOnlyAtLineStart = bool(rule.matchOnlyAtLineStart, false);\n }\n newrule.setRegex(lexerMin, rule.regex);\n newrule.setAction(lexerMin, rule.action);\n }\n newrules.push(newrule);\n }\n }\n }\n // compile the tokenizer rules\n if (!json.tokenizer || typeof (json.tokenizer) !== 'object') {\n throw monarchCommon.createError(lexer, 'a language definition must define the \\'tokenizer\\' attribute as an object');\n }\n lexer.tokenizer = [];\n for (let key in json.tokenizer) {\n if (json.tokenizer.hasOwnProperty(key)) {\n if (!lexer.start) {\n lexer.start = key;\n }\n const rules = json.tokenizer[key];\n lexer.tokenizer[key] = new Array();\n addRules('tokenizer.' + key, lexer.tokenizer[key], rules);\n }\n }\n lexer.usesEmbedded = lexerMin.usesEmbedded; // can be set during compileAction\n // Set simple brackets\n if (json.brackets) {\n if (!(Array.isArray(json.brackets))) {\n throw monarchCommon.createError(lexer, 'the \\'brackets\\' attribute must be defined as an array');\n }\n }\n else {\n json.brackets = [\n { open: '{', close: '}', token: 'delimiter.curly' },\n { open: '[', close: ']', token: 'delimiter.square' },\n { open: '(', close: ')', token: 'delimiter.parenthesis' },\n { open: '<', close: '>', token: 'delimiter.angle' }\n ];\n }\n let brackets = [];\n for (let el of json.brackets) {\n let desc = el;\n if (desc && Array.isArray(desc) && desc.length === 3) {\n desc = { token: desc[2], open: desc[0], close: desc[1] };\n }\n if (desc.open === desc.close) {\n throw monarchCommon.createError(lexer, 'open and close brackets in a \\'brackets\\' attribute must be different: ' + desc.open +\n '\\n hint: use the \\'bracket\\' attribute if matching on equal brackets is required.');\n }\n if (typeof desc.open === 'string' && typeof desc.token === 'string' && typeof desc.close === 'string') {\n brackets.push({\n token: desc.token + lexer.tokenPostfix,\n open: monarchCommon.fixCase(lexer, desc.open),\n close: monarchCommon.fixCase(lexer, desc.close)\n });\n }\n else {\n throw monarchCommon.createError(lexer, 'every element in the \\'brackets\\' array must be a \\'{open,close,token}\\' object or array');\n }\n }\n lexer.brackets = brackets;\n // Disable throw so the syntax highlighter goes, no matter what\n lexer.noThrow = true;\n return lexer;\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 *--------------------------------------------------------------------------------------------*/\nimport { Color } from '../../../base/common/color.js';\nimport { Range } from '../../common/core/range.js';\nimport { Token, TokenizationResult, TokenizationResult2 } from '../../common/core/token.js';\nimport * as modes from '../../common/modes.js';\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\nimport { ModesRegistry } from '../../common/modes/modesRegistry.js';\nimport * as standaloneEnums from '../../common/standalone/standaloneEnums.js';\nimport { StaticServices } from './standaloneServices.js';\nimport { compile } from '../common/monarch/monarchCompile.js';\nimport { createTokenizationSupport } from '../common/monarch/monarchLexer.js';\n/**\n * Register information about a new language.\n */\nexport function register(language) {\n ModesRegistry.registerLanguage(language);\n}\n/**\n * Get the information of all the registered languages.\n */\nexport function getLanguages() {\n let result = [];\n result = result.concat(ModesRegistry.getLanguages());\n return result;\n}\nexport function getEncodedLanguageId(languageId) {\n let lid = StaticServices.modeService.get().getLanguageIdentifier(languageId);\n return lid ? lid.id : 0;\n}\n/**\n * An event emitted when a language is first time needed (e.g. a model has it set).\n * @event\n */\nexport function onLanguage(languageId, callback) {\n let disposable = StaticServices.modeService.get().onDidCreateMode((mode) => {\n if (mode.getId() === languageId) {\n // stop listening\n disposable.dispose();\n // invoke actual listener\n callback();\n }\n });\n return disposable;\n}\n/**\n * Set the editing configuration for a language.\n */\nexport function setLanguageConfiguration(languageId, configuration) {\n let languageIdentifier = StaticServices.modeService.get().getLanguageIdentifier(languageId);\n if (!languageIdentifier) {\n throw new Error(`Cannot set configuration for unknown language ${languageId}`);\n }\n return LanguageConfigurationRegistry.register(languageIdentifier, configuration, 100);\n}\n/**\n * @internal\n */\nexport class EncodedTokenizationSupport2Adapter {\n constructor(languageIdentifier, actual) {\n this._languageIdentifier = languageIdentifier;\n this._actual = actual;\n }\n getInitialState() {\n return this._actual.getInitialState();\n }\n tokenize(line, hasEOL, state, offsetDelta) {\n if (typeof this._actual.tokenize === 'function') {\n return TokenizationSupport2Adapter.adaptTokenize(this._languageIdentifier.language, this._actual, line, state, offsetDelta);\n }\n throw new Error('Not supported!');\n }\n tokenize2(line, hasEOL, state) {\n let result = this._actual.tokenizeEncoded(line, state);\n return new TokenizationResult2(result.tokens, result.endState);\n }\n}\n/**\n * @internal\n */\nexport class TokenizationSupport2Adapter {\n constructor(standaloneThemeService, languageIdentifier, actual) {\n this._standaloneThemeService = standaloneThemeService;\n this._languageIdentifier = languageIdentifier;\n this._actual = actual;\n }\n getInitialState() {\n return this._actual.getInitialState();\n }\n static _toClassicTokens(tokens, language, offsetDelta) {\n let result = [];\n let previousStartIndex = 0;\n for (let i = 0, len = tokens.length; i < len; i++) {\n const t = tokens[i];\n let startIndex = t.startIndex;\n // Prevent issues stemming from a buggy external tokenizer.\n if (i === 0) {\n // Force first token to start at first index!\n startIndex = 0;\n }\n else if (startIndex < previousStartIndex) {\n // Force tokens to be after one another!\n startIndex = previousStartIndex;\n }\n result[i] = new Token(startIndex + offsetDelta, t.scopes, language);\n previousStartIndex = startIndex;\n }\n return result;\n }\n static adaptTokenize(language, actual, line, state, offsetDelta) {\n let actualResult = actual.tokenize(line, state);\n let tokens = TokenizationSupport2Adapter._toClassicTokens(actualResult.tokens, language, offsetDelta);\n let endState;\n // try to save an object if possible\n if (actualResult.endState.equals(state)) {\n endState = state;\n }\n else {\n endState = actualResult.endState;\n }\n return new TokenizationResult(tokens, endState);\n }\n tokenize(line, hasEOL, state, offsetDelta) {\n return TokenizationSupport2Adapter.adaptTokenize(this._languageIdentifier.language, this._actual, line, state, offsetDelta);\n }\n _toBinaryTokens(tokens, offsetDelta) {\n const languageId = this._languageIdentifier.id;\n const tokenTheme = this._standaloneThemeService.getColorTheme().tokenTheme;\n let result = [], resultLen = 0;\n let previousStartIndex = 0;\n for (let i = 0, len = tokens.length; i < len; i++) {\n const t = tokens[i];\n const metadata = tokenTheme.match(languageId, t.scopes);\n if (resultLen > 0 && result[resultLen - 1] === metadata) {\n // same metadata\n continue;\n }\n let startIndex = t.startIndex;\n // Prevent issues stemming from a buggy external tokenizer.\n if (i === 0) {\n // Force first token to start at first index!\n startIndex = 0;\n }\n else if (startIndex < previousStartIndex) {\n // Force tokens to be after one another!\n startIndex = previousStartIndex;\n }\n result[resultLen++] = startIndex + offsetDelta;\n result[resultLen++] = metadata;\n previousStartIndex = startIndex;\n }\n let actualResult = new Uint32Array(resultLen);\n for (let i = 0; i < resultLen; i++) {\n actualResult[i] = result[i];\n }\n return actualResult;\n }\n tokenize2(line, hasEOL, state, offsetDelta) {\n let actualResult = this._actual.tokenize(line, state);\n let tokens = this._toBinaryTokens(actualResult.tokens, offsetDelta);\n let endState;\n // try to save an object if possible\n if (actualResult.endState.equals(state)) {\n endState = state;\n }\n else {\n endState = actualResult.endState;\n }\n return new TokenizationResult2(tokens, endState);\n }\n}\nfunction isEncodedTokensProvider(provider) {\n return 'tokenizeEncoded' in provider;\n}\nfunction isThenable(obj) {\n return obj && typeof obj.then === 'function';\n}\n/**\n * Change the color map that is used for token colors.\n * Supported formats (hex): #RRGGBB, $RRGGBBAA, #RGB, #RGBA\n */\nexport function setColorMap(colorMap) {\n if (colorMap) {\n const result = [null];\n for (let i = 1, len = colorMap.length; i < len; i++) {\n result[i] = Color.fromHex(colorMap[i]);\n }\n StaticServices.standaloneThemeService.get().setColorMapOverride(result);\n }\n else {\n StaticServices.standaloneThemeService.get().setColorMapOverride(null);\n }\n}\n/**\n * Set the tokens provider for a language (manual implementation).\n */\nexport function setTokensProvider(languageId, provider) {\n let languageIdentifier = StaticServices.modeService.get().getLanguageIdentifier(languageId);\n if (!languageIdentifier) {\n throw new Error(`Cannot set tokens provider for unknown language ${languageId}`);\n }\n const create = (provider) => {\n if (isEncodedTokensProvider(provider)) {\n return new EncodedTokenizationSupport2Adapter(languageIdentifier, provider);\n }\n else {\n return new TokenizationSupport2Adapter(StaticServices.standaloneThemeService.get(), languageIdentifier, provider);\n }\n };\n if (isThenable(provider)) {\n return modes.TokenizationRegistry.registerPromise(languageId, provider.then(provider => create(provider)));\n }\n return modes.TokenizationRegistry.register(languageId, create(provider));\n}\n/**\n * Set the tokens provider for a language (monarch implementation).\n */\nexport function setMonarchTokensProvider(languageId, languageDef) {\n const create = (languageDef) => {\n return createTokenizationSupport(StaticServices.modeService.get(), StaticServices.standaloneThemeService.get(), languageId, compile(languageId, languageDef));\n };\n if (isThenable(languageDef)) {\n return modes.TokenizationRegistry.registerPromise(languageId, languageDef.then(languageDef => create(languageDef)));\n }\n return modes.TokenizationRegistry.register(languageId, create(languageDef));\n}\n/**\n * Register a reference provider (used by e.g. reference search).\n */\nexport function registerReferenceProvider(languageId, provider) {\n return modes.ReferenceProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a rename provider (used by e.g. rename symbol).\n */\nexport function registerRenameProvider(languageId, provider) {\n return modes.RenameProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a signature help provider (used by e.g. parameter hints).\n */\nexport function registerSignatureHelpProvider(languageId, provider) {\n return modes.SignatureHelpProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a hover provider (used by e.g. editor hover).\n */\nexport function registerHoverProvider(languageId, provider) {\n return modes.HoverProviderRegistry.register(languageId, {\n provideHover: (model, position, token) => {\n let word = model.getWordAtPosition(position);\n return Promise.resolve(provider.provideHover(model, position, token)).then((value) => {\n if (!value) {\n return undefined;\n }\n if (!value.range && word) {\n value.range = new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);\n }\n if (!value.range) {\n value.range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);\n }\n return value;\n });\n }\n });\n}\n/**\n * Register a document symbol provider (used by e.g. outline).\n */\nexport function registerDocumentSymbolProvider(languageId, provider) {\n return modes.DocumentSymbolProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a document highlight provider (used by e.g. highlight occurrences).\n */\nexport function registerDocumentHighlightProvider(languageId, provider) {\n return modes.DocumentHighlightProviderRegistry.register(languageId, provider);\n}\n/**\n * Register an linked editing range provider.\n */\nexport function registerLinkedEditingRangeProvider(languageId, provider) {\n return modes.LinkedEditingRangeProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a definition provider (used by e.g. go to definition).\n */\nexport function registerDefinitionProvider(languageId, provider) {\n return modes.DefinitionProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a implementation provider (used by e.g. go to implementation).\n */\nexport function registerImplementationProvider(languageId, provider) {\n return modes.ImplementationProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a type definition provider (used by e.g. go to type definition).\n */\nexport function registerTypeDefinitionProvider(languageId, provider) {\n return modes.TypeDefinitionProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a code lens provider (used by e.g. inline code lenses).\n */\nexport function registerCodeLensProvider(languageId, provider) {\n return modes.CodeLensProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a code action provider (used by e.g. quick fix).\n */\nexport function registerCodeActionProvider(languageId, provider) {\n return modes.CodeActionProviderRegistry.register(languageId, {\n provideCodeActions: (model, range, context, token) => {\n let markers = StaticServices.markerService.get().read({ resource: model.uri }).filter(m => {\n return Range.areIntersectingOrTouching(m, range);\n });\n return provider.provideCodeActions(model, range, { markers, only: context.only }, token);\n }\n });\n}\n/**\n * Register a formatter that can handle only entire models.\n */\nexport function registerDocumentFormattingEditProvider(languageId, provider) {\n return modes.DocumentFormattingEditProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a formatter that can handle a range inside a model.\n */\nexport function registerDocumentRangeFormattingEditProvider(languageId, provider) {\n return modes.DocumentRangeFormattingEditProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a formatter than can do formatting as the user types.\n */\nexport function registerOnTypeFormattingEditProvider(languageId, provider) {\n return modes.OnTypeFormattingEditProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a link provider that can find links in text.\n */\nexport function registerLinkProvider(languageId, provider) {\n return modes.LinkProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a completion item provider (use by e.g. suggestions).\n */\nexport function registerCompletionItemProvider(languageId, provider) {\n return modes.CompletionProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a document color provider (used by Color Picker, Color Decorator).\n */\nexport function registerColorProvider(languageId, provider) {\n return modes.ColorProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a folding range provider\n */\nexport function registerFoldingRangeProvider(languageId, provider) {\n return modes.FoldingRangeProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a declaration provider\n */\nexport function registerDeclarationProvider(languageId, provider) {\n return modes.DeclarationProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a selection range provider\n */\nexport function registerSelectionRangeProvider(languageId, provider) {\n return modes.SelectionRangeRegistry.register(languageId, provider);\n}\n/**\n * Register a document semantic tokens provider\n */\nexport function registerDocumentSemanticTokensProvider(languageId, provider) {\n return modes.DocumentSemanticTokensProviderRegistry.register(languageId, provider);\n}\n/**\n * Register a document range semantic tokens provider\n */\nexport function registerDocumentRangeSemanticTokensProvider(languageId, provider) {\n return modes.DocumentRangeSemanticTokensProviderRegistry.register(languageId, provider);\n}\n/**\n * @internal\n */\nexport function createMonacoLanguagesAPI() {\n return {\n register: register,\n getLanguages: getLanguages,\n onLanguage: onLanguage,\n getEncodedLanguageId: getEncodedLanguageId,\n // provider methods\n setLanguageConfiguration: setLanguageConfiguration,\n setColorMap: setColorMap,\n setTokensProvider: setTokensProvider,\n setMonarchTokensProvider: setMonarchTokensProvider,\n registerReferenceProvider: registerReferenceProvider,\n registerRenameProvider: registerRenameProvider,\n registerCompletionItemProvider: registerCompletionItemProvider,\n registerSignatureHelpProvider: registerSignatureHelpProvider,\n registerHoverProvider: registerHoverProvider,\n registerDocumentSymbolProvider: registerDocumentSymbolProvider,\n registerDocumentHighlightProvider: registerDocumentHighlightProvider,\n registerLinkedEditingRangeProvider: registerLinkedEditingRangeProvider,\n registerDefinitionProvider: registerDefinitionProvider,\n registerImplementationProvider: registerImplementationProvider,\n registerTypeDefinitionProvider: registerTypeDefinitionProvider,\n registerCodeLensProvider: registerCodeLensProvider,\n registerCodeActionProvider: registerCodeActionProvider,\n registerDocumentFormattingEditProvider: registerDocumentFormattingEditProvider,\n registerDocumentRangeFormattingEditProvider: registerDocumentRangeFormattingEditProvider,\n registerOnTypeFormattingEditProvider: registerOnTypeFormattingEditProvider,\n registerLinkProvider: registerLinkProvider,\n registerColorProvider: registerColorProvider,\n registerFoldingRangeProvider: registerFoldingRangeProvider,\n registerDeclarationProvider: registerDeclarationProvider,\n registerSelectionRangeProvider: registerSelectionRangeProvider,\n registerDocumentSemanticTokensProvider: registerDocumentSemanticTokensProvider,\n registerDocumentRangeSemanticTokensProvider: registerDocumentRangeSemanticTokensProvider,\n // enums\n DocumentHighlightKind: standaloneEnums.DocumentHighlightKind,\n CompletionItemKind: standaloneEnums.CompletionItemKind,\n CompletionItemTag: standaloneEnums.CompletionItemTag,\n CompletionItemInsertTextRule: standaloneEnums.CompletionItemInsertTextRule,\n SymbolKind: standaloneEnums.SymbolKind,\n SymbolTag: standaloneEnums.SymbolTag,\n IndentAction: standaloneEnums.IndentAction,\n CompletionTriggerKind: standaloneEnums.CompletionTriggerKind,\n SignatureHelpTriggerKind: standaloneEnums.SignatureHelpTriggerKind,\n InlineHintKind: standaloneEnums.InlineHintKind,\n // classes\n FoldingRangeKind: modes.FoldingRangeKind,\n };\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 *--------------------------------------------------------------------------------------------*/\nvar _a;\nimport { EditorOptions } from './common/config/editorOptions.js';\nimport { createMonacoBaseAPI } from './common/standalone/standaloneBase.js';\nimport { createMonacoEditorAPI } from './standalone/browser/standaloneEditor.js';\nimport { createMonacoLanguagesAPI } from './standalone/browser/standaloneLanguages.js';\nimport { globals } from '../base/common/platform.js';\nimport { FormattingConflicts } from './contrib/format/format.js';\n// Set defaults for standalone editor\nEditorOptions.wrappingIndent.defaultValue = 0 /* None */;\nEditorOptions.glyphMargin.defaultValue = false;\nEditorOptions.autoIndent.defaultValue = 3 /* Advanced */;\nEditorOptions.overviewRulerLanes.defaultValue = 2;\n// We need to register a formatter selector which simply picks the first available formatter.\n// See https://github.com/microsoft/monaco-editor/issues/2327\nFormattingConflicts.setFormatterSelector((formatter, document, mode) => Promise.resolve(formatter[0]));\nconst api = createMonacoBaseAPI();\napi.editor = createMonacoEditorAPI();\napi.languages = createMonacoLanguagesAPI();\nexport const CancellationTokenSource = api.CancellationTokenSource;\nexport const Emitter = api.Emitter;\nexport const KeyCode = api.KeyCode;\nexport const KeyMod = api.KeyMod;\nexport const Position = api.Position;\nexport const Range = api.Range;\nexport const Selection = api.Selection;\nexport const SelectionDirection = api.SelectionDirection;\nexport const MarkerSeverity = api.MarkerSeverity;\nexport const MarkerTag = api.MarkerTag;\nexport const Uri = api.Uri;\nexport const Token = api.Token;\nexport const editor = api.editor;\nexport const languages = api.languages;\nif (((_a = globals.MonacoEnvironment) === null || _a === void 0 ? void 0 : _a.globalAPI) || (typeof define === 'function' && define.amd)) {\n self.monaco = api;\n}\nif (typeof self.require !== 'undefined' && typeof self.require.config === 'function') {\n self.require.config({\n ignoreDuplicateModules: [\n 'vscode-languageserver-types',\n 'vscode-languageserver-types/main',\n 'vscode-languageserver-textdocument',\n 'vscode-languageserver-textdocument/main',\n 'vscode-nls',\n 'vscode-nls/vscode-nls',\n 'jsonc-parser',\n 'jsonc-parser/main',\n 'vscode-uri',\n 'vscode-uri/index',\n 'vs/basic-languages/typescript/typescript'\n ]\n });\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const IStandaloneThemeService = createDecorator('themeService');\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 *--------------------------------------------------------------------------------------------*/\nfunction _format(message, args) {\n let result;\n if (args.length === 0) {\n result = message;\n }\n else {\n result = message.replace(/\\{(\\d+)\\}/g, function (match, rest) {\n const index = rest[0];\n return typeof args[index] !== 'undefined' ? args[index] : match;\n });\n }\n return result;\n}\nexport function localize(data, message, ...args) {\n return _format(message, args);\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { RawContextKey } from '../../contextkey/common/contextkey.js';\nexport const IAccessibilityService = createDecorator('accessibilityService');\nexport const CONTEXT_ACCESSIBILITY_MODE_ENABLED = new RawContextKey('accessibilityModeEnabled', false);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { Separator, SubmenuAction } from '../../../base/common/actions.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\nimport { ICommandService } from '../../commands/common/commands.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { ThemeIcon } from '../../theme/common/themeService.js';\nimport { Iterable } from '../../../base/common/iterator.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { CSSIcon } from '../../../base/common/codicons.js';\nexport function isIMenuItem(item) {\n return item.command !== undefined;\n}\nexport class MenuId {\n constructor(debugName) {\n this.id = MenuId._idPool++;\n this._debugName = debugName;\n }\n}\nMenuId._idPool = 0;\nMenuId.CommandPalette = new MenuId('CommandPalette');\nMenuId.EditorContext = new MenuId('EditorContext');\nMenuId.EditorContextCopy = new MenuId('EditorContextCopy');\nMenuId.EditorContextPeek = new MenuId('EditorContextPeek');\nMenuId.MenubarEditMenu = new MenuId('MenubarEditMenu');\nMenuId.MenubarCopy = new MenuId('MenubarCopy');\nMenuId.MenubarGoMenu = new MenuId('MenubarGoMenu');\nMenuId.MenubarSelectionMenu = new MenuId('MenubarSelectionMenu');\nexport const IMenuService = createDecorator('menuService');\nexport const MenuRegistry = new class {\n constructor() {\n this._commands = new Map();\n this._menuItems = new Map();\n this._onDidChangeMenu = new Emitter();\n this.onDidChangeMenu = this._onDidChangeMenu.event;\n this._commandPaletteChangeEvent = {\n has: id => id === MenuId.CommandPalette\n };\n }\n addCommand(command) {\n return this.addCommands(Iterable.single(command));\n }\n addCommands(commands) {\n for (const command of commands) {\n this._commands.set(command.id, command);\n }\n this._onDidChangeMenu.fire(this._commandPaletteChangeEvent);\n return toDisposable(() => {\n let didChange = false;\n for (const command of commands) {\n didChange = this._commands.delete(command.id) || didChange;\n }\n if (didChange) {\n this._onDidChangeMenu.fire(this._commandPaletteChangeEvent);\n }\n });\n }\n getCommand(id) {\n return this._commands.get(id);\n }\n getCommands() {\n const map = new Map();\n this._commands.forEach((value, key) => map.set(key, value));\n return map;\n }\n appendMenuItem(id, item) {\n return this.appendMenuItems(Iterable.single({ id, item }));\n }\n appendMenuItems(items) {\n const changedIds = new Set();\n const toRemove = new LinkedList();\n for (const { id, item } of items) {\n let list = this._menuItems.get(id);\n if (!list) {\n list = new LinkedList();\n this._menuItems.set(id, list);\n }\n toRemove.push(list.push(item));\n changedIds.add(id);\n }\n this._onDidChangeMenu.fire(changedIds);\n return toDisposable(() => {\n if (toRemove.size > 0) {\n for (let fn of toRemove) {\n fn();\n }\n this._onDidChangeMenu.fire(changedIds);\n toRemove.clear();\n }\n });\n }\n getMenuItems(id) {\n let result;\n if (this._menuItems.has(id)) {\n result = [...this._menuItems.get(id)];\n }\n else {\n result = [];\n }\n if (id === MenuId.CommandPalette) {\n // CommandPalette is special because it shows\n // all commands by default\n this._appendImplicitItems(result);\n }\n return result;\n }\n _appendImplicitItems(result) {\n const set = new Set();\n for (const item of result) {\n if (isIMenuItem(item)) {\n set.add(item.command.id);\n if (item.alt) {\n set.add(item.alt.id);\n }\n }\n }\n this._commands.forEach((command, id) => {\n if (!set.has(id)) {\n result.push({ command });\n }\n });\n }\n};\nexport class SubmenuItemAction extends SubmenuAction {\n constructor(item, _menuService, _contextKeyService, _options) {\n super(`submenuitem.${item.submenu.id}`, typeof item.title === 'string' ? item.title : item.title.value, [], 'submenu');\n this.item = item;\n this._menuService = _menuService;\n this._contextKeyService = _contextKeyService;\n this._options = _options;\n }\n get actions() {\n const result = [];\n const menu = this._menuService.createMenu(this.item.submenu, this._contextKeyService);\n const groups = menu.getActions(this._options);\n menu.dispose();\n for (const [, actions] of groups) {\n if (actions.length > 0) {\n result.push(...actions);\n result.push(new Separator());\n }\n }\n if (result.length) {\n result.pop(); // remove last separator\n }\n return result;\n }\n}\n// implements IAction, does NOT extend Action, so that no one\n// subscribes to events of Action or modified properties\nlet MenuItemAction = class MenuItemAction {\n constructor(item, alt, options, contextKeyService, _commandService) {\n var _a;\n this._commandService = _commandService;\n this.id = item.id;\n this.label = typeof item.title === 'string' ? item.title : item.title.value;\n this.tooltip = (_a = item.tooltip) !== null && _a !== void 0 ? _a : '';\n this.enabled = !item.precondition || contextKeyService.contextMatchesRules(item.precondition);\n this.checked = false;\n if (item.toggled) {\n const toggled = (item.toggled.condition ? item.toggled : { condition: item.toggled });\n this.checked = contextKeyService.contextMatchesRules(toggled.condition);\n if (this.checked && toggled.tooltip) {\n this.tooltip = typeof toggled.tooltip === 'string' ? toggled.tooltip : toggled.tooltip.value;\n }\n if (toggled.title) {\n this.label = typeof toggled.title === 'string' ? toggled.title : toggled.title.value;\n }\n }\n this.item = item;\n this.alt = alt ? new MenuItemAction(alt, undefined, options, contextKeyService, _commandService) : undefined;\n this._options = options;\n if (ThemeIcon.isThemeIcon(item.icon)) {\n this.class = CSSIcon.asClassName(item.icon);\n }\n }\n dispose() {\n // there is NOTHING to dispose and the MenuItemAction should\n // never have anything to dispose as it is a convenience type\n // to bridge into the rendering world.\n }\n run(...args) {\n var _a, _b;\n let runArgs = [];\n if ((_a = this._options) === null || _a === void 0 ? void 0 : _a.arg) {\n runArgs = [...runArgs, this._options.arg];\n }\n if ((_b = this._options) === null || _b === void 0 ? void 0 : _b.shouldForwardArgs) {\n runArgs = [...runArgs, ...args];\n }\n return this._commandService.executeCommand(this.id, ...runArgs);\n }\n};\nMenuItemAction = __decorate([\n __param(3, IContextKeyService),\n __param(4, ICommandService)\n], MenuItemAction);\nexport { MenuItemAction };\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IClipboardService = createDecorator('clipboardService');\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 *--------------------------------------------------------------------------------------------*/\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nimport { validateConstraints } from '../../../base/common/types.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { Iterable } from '../../../base/common/iterator.js';\nexport const ICommandService = createDecorator('commandService');\nexport const CommandsRegistry = new class {\n constructor() {\n this._commands = new Map();\n this._onDidRegisterCommand = new Emitter();\n this.onDidRegisterCommand = this._onDidRegisterCommand.event;\n }\n registerCommand(idOrCommand, handler) {\n if (!idOrCommand) {\n throw new Error(`invalid command`);\n }\n if (typeof idOrCommand === 'string') {\n if (!handler) {\n throw new Error(`invalid command`);\n }\n return this.registerCommand({ id: idOrCommand, handler });\n }\n // add argument validation if rich command metadata is provided\n if (idOrCommand.description) {\n const constraints = [];\n for (let arg of idOrCommand.description.args) {\n constraints.push(arg.constraint);\n }\n const actualHandler = idOrCommand.handler;\n idOrCommand.handler = function (accessor, ...args) {\n validateConstraints(args, constraints);\n return actualHandler(accessor, ...args);\n };\n }\n // find a place to store the command\n const { id } = idOrCommand;\n let commands = this._commands.get(id);\n if (!commands) {\n commands = new LinkedList();\n this._commands.set(id, commands);\n }\n let removeFn = commands.unshift(idOrCommand);\n let ret = toDisposable(() => {\n removeFn();\n const command = this._commands.get(id);\n if (command === null || command === void 0 ? void 0 : command.isEmpty()) {\n this._commands.delete(id);\n }\n });\n // tell the world about this command\n this._onDidRegisterCommand.fire(id);\n return ret;\n }\n registerCommandAlias(oldId, newId) {\n return CommandsRegistry.registerCommand(oldId, (accessor, ...args) => accessor.get(ICommandService).executeCommand(newId, ...args));\n }\n getCommand(id) {\n const list = this._commands.get(id);\n if (!list || list.isEmpty()) {\n return undefined;\n }\n return Iterable.first(list);\n }\n getCommands() {\n const result = new Map();\n for (const key of this._commands.keys()) {\n const command = this.getCommand(key);\n if (command) {\n result.set(key, command);\n }\n }\n return result;\n }\n};\nCommandsRegistry.registerCommand('noop', () => { });\n","import { Registry } from '../../registry/common/platform.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { Extensions } from './configurationRegistry.js';\nexport const IConfigurationService = createDecorator('configurationService');\nexport function toValuesTree(properties, conflictReporter) {\n const root = Object.create(null);\n for (let key in properties) {\n addToValueTree(root, key, properties[key], conflictReporter);\n }\n return root;\n}\nexport function addToValueTree(settingsTreeRoot, key, value, conflictReporter) {\n const segments = key.split('.');\n const last = segments.pop();\n let curr = settingsTreeRoot;\n for (let i = 0; i < segments.length; i++) {\n let s = segments[i];\n let obj = curr[s];\n switch (typeof obj) {\n case 'undefined':\n obj = curr[s] = Object.create(null);\n break;\n case 'object':\n break;\n default:\n conflictReporter(`Ignoring ${key} as ${segments.slice(0, i + 1).join('.')} is ${JSON.stringify(obj)}`);\n return;\n }\n curr = obj;\n }\n if (typeof curr === 'object' && curr !== null) {\n try {\n curr[last] = value; // workaround https://github.com/microsoft/vscode/issues/13606\n }\n catch (e) {\n conflictReporter(`Ignoring ${key} as ${segments.join('.')} is ${JSON.stringify(curr)}`);\n }\n }\n else {\n conflictReporter(`Ignoring ${key} as ${segments.join('.')} is ${JSON.stringify(curr)}`);\n }\n}\nexport function removeFromValueTree(valueTree, key) {\n const segments = key.split('.');\n doRemoveFromValueTree(valueTree, segments);\n}\nfunction doRemoveFromValueTree(valueTree, segments) {\n const first = segments.shift();\n if (segments.length === 0) {\n // Reached last segment\n delete valueTree[first];\n return;\n }\n if (Object.keys(valueTree).indexOf(first) !== -1) {\n const value = valueTree[first];\n if (typeof value === 'object' && !Array.isArray(value)) {\n doRemoveFromValueTree(value, segments);\n if (Object.keys(value).length === 0) {\n delete valueTree[first];\n }\n }\n }\n}\n/**\n * A helper function to get the configuration value with a specific settings path (e.g. config.some.setting)\n */\nexport function getConfigurationValue(config, settingPath, defaultValue) {\n function accessSetting(config, path) {\n let current = config;\n for (const component of path) {\n if (typeof current !== 'object' || current === null) {\n return undefined;\n }\n current = current[component];\n }\n return current;\n }\n const path = settingPath.split('.');\n const result = accessSetting(config, path);\n return typeof result === 'undefined' ? defaultValue : result;\n}\nexport function getConfigurationKeys() {\n const properties = Registry.as(Extensions.Configuration).getConfigurationProperties();\n return Object.keys(properties);\n}\nexport function getDefaultValues() {\n const valueTreeRoot = Object.create(null);\n const properties = Registry.as(Extensions.Configuration).getConfigurationProperties();\n for (let key in properties) {\n let value = properties[key].default;\n addToValueTree(valueTreeRoot, key, value, message => console.error(`Conflict in default settings: ${message}`));\n }\n return valueTreeRoot;\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Registry } from '../../registry/common/platform.js';\nimport * as types from '../../../base/common/types.js';\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\nexport const Extensions = {\n Configuration: 'base.contributions.configuration'\n};\nexport const allSettings = { properties: {}, patternProperties: {} };\nexport const applicationSettings = { properties: {}, patternProperties: {} };\nexport const machineSettings = { properties: {}, patternProperties: {} };\nexport const machineOverridableSettings = { properties: {}, patternProperties: {} };\nexport const windowSettings = { properties: {}, patternProperties: {} };\nexport const resourceSettings = { properties: {}, patternProperties: {} };\nexport const resourceLanguageSettingsSchemaId = 'vscode://schemas/settings/resourceLanguage';\nconst contributionRegistry = Registry.as(JSONExtensions.JSONContribution);\nclass ConfigurationRegistry {\n constructor() {\n this.overrideIdentifiers = new Set();\n this._onDidSchemaChange = new Emitter();\n this._onDidUpdateConfiguration = new Emitter();\n this.defaultValues = {};\n this.defaultLanguageConfigurationOverridesNode = {\n id: 'defaultOverrides',\n title: nls.localize('defaultLanguageConfigurationOverrides.title', \"Default Language Configuration Overrides\"),\n properties: {}\n };\n this.configurationContributors = [this.defaultLanguageConfigurationOverridesNode];\n this.resourceLanguageSettingsSchema = { properties: {}, patternProperties: {}, additionalProperties: false, errorMessage: 'Unknown editor configuration setting', allowTrailingCommas: true, allowComments: true };\n this.configurationProperties = {};\n this.excludedConfigurationProperties = {};\n contributionRegistry.registerSchema(resourceLanguageSettingsSchemaId, this.resourceLanguageSettingsSchema);\n }\n registerConfiguration(configuration, validate = true) {\n this.registerConfigurations([configuration], validate);\n }\n registerConfigurations(configurations, validate = true) {\n const properties = [];\n configurations.forEach(configuration => {\n properties.push(...this.validateAndRegisterProperties(configuration, validate, configuration.extensionInfo)); // fills in defaults\n this.configurationContributors.push(configuration);\n this.registerJSONConfiguration(configuration);\n });\n contributionRegistry.registerSchema(resourceLanguageSettingsSchemaId, this.resourceLanguageSettingsSchema);\n this._onDidSchemaChange.fire();\n this._onDidUpdateConfiguration.fire(properties);\n }\n registerOverrideIdentifiers(overrideIdentifiers) {\n for (const overrideIdentifier of overrideIdentifiers) {\n this.overrideIdentifiers.add(overrideIdentifier);\n }\n this.updateOverridePropertyPatternKey();\n }\n validateAndRegisterProperties(configuration, validate = true, extensionInfo, scope = 3 /* WINDOW */) {\n var _a;\n scope = types.isUndefinedOrNull(configuration.scope) ? scope : configuration.scope;\n let propertyKeys = [];\n let properties = configuration.properties;\n if (properties) {\n for (let key in properties) {\n if (validate && validateProperty(key)) {\n delete properties[key];\n continue;\n }\n const property = properties[key];\n // update default value\n this.updatePropertyDefaultValue(key, property);\n // update scope\n if (OVERRIDE_PROPERTY_PATTERN.test(key)) {\n property.scope = undefined; // No scope for overridable properties `[${identifier}]`\n }\n else {\n property.scope = types.isUndefinedOrNull(property.scope) ? scope : property.scope;\n property.restricted = types.isUndefinedOrNull(property.restricted) ? !!((_a = extensionInfo === null || extensionInfo === void 0 ? void 0 : extensionInfo.restrictedConfigurations) === null || _a === void 0 ? void 0 : _a.includes(key)) : property.restricted;\n }\n // Add to properties maps\n // Property is included by default if 'included' is unspecified\n if (properties[key].hasOwnProperty('included') && !properties[key].included) {\n this.excludedConfigurationProperties[key] = properties[key];\n delete properties[key];\n continue;\n }\n else {\n this.configurationProperties[key] = properties[key];\n }\n if (!properties[key].deprecationMessage && properties[key].markdownDeprecationMessage) {\n // If not set, default deprecationMessage to the markdown source\n properties[key].deprecationMessage = properties[key].markdownDeprecationMessage;\n }\n propertyKeys.push(key);\n }\n }\n let subNodes = configuration.allOf;\n if (subNodes) {\n for (let node of subNodes) {\n propertyKeys.push(...this.validateAndRegisterProperties(node, validate, extensionInfo, scope));\n }\n }\n return propertyKeys;\n }\n getConfigurationProperties() {\n return this.configurationProperties;\n }\n registerJSONConfiguration(configuration) {\n const register = (configuration) => {\n let properties = configuration.properties;\n if (properties) {\n for (const key in properties) {\n this.updateSchema(key, properties[key]);\n }\n }\n let subNodes = configuration.allOf;\n if (subNodes) {\n subNodes.forEach(register);\n }\n };\n register(configuration);\n }\n updateSchema(key, property) {\n allSettings.properties[key] = property;\n switch (property.scope) {\n case 1 /* APPLICATION */:\n applicationSettings.properties[key] = property;\n break;\n case 2 /* MACHINE */:\n machineSettings.properties[key] = property;\n break;\n case 6 /* MACHINE_OVERRIDABLE */:\n machineOverridableSettings.properties[key] = property;\n break;\n case 3 /* WINDOW */:\n windowSettings.properties[key] = property;\n break;\n case 4 /* RESOURCE */:\n resourceSettings.properties[key] = property;\n break;\n case 5 /* LANGUAGE_OVERRIDABLE */:\n resourceSettings.properties[key] = property;\n this.resourceLanguageSettingsSchema.properties[key] = property;\n break;\n }\n }\n updateOverridePropertyPatternKey() {\n for (const overrideIdentifier of this.overrideIdentifiers.values()) {\n const overrideIdentifierProperty = `[${overrideIdentifier}]`;\n const resourceLanguagePropertiesSchema = {\n type: 'object',\n description: nls.localize('overrideSettings.defaultDescription', \"Configure editor settings to be overridden for a language.\"),\n errorMessage: nls.localize('overrideSettings.errorMessage', \"This setting does not support per-language configuration.\"),\n $ref: resourceLanguageSettingsSchemaId,\n };\n this.updatePropertyDefaultValue(overrideIdentifierProperty, resourceLanguagePropertiesSchema);\n allSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n applicationSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n machineSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n machineOverridableSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n windowSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n resourceSettings.properties[overrideIdentifierProperty] = resourceLanguagePropertiesSchema;\n }\n this._onDidSchemaChange.fire();\n }\n updatePropertyDefaultValue(key, property) {\n let defaultValue = this.defaultValues[key];\n if (types.isUndefined(defaultValue)) {\n defaultValue = property.default;\n }\n if (types.isUndefined(defaultValue)) {\n defaultValue = getDefaultValue(property.type);\n }\n property.default = defaultValue;\n }\n}\nconst OVERRIDE_PROPERTY = '\\\\[.*\\\\]$';\nexport const OVERRIDE_PROPERTY_PATTERN = new RegExp(OVERRIDE_PROPERTY);\nexport function overrideIdentifierFromKey(key) {\n return key.substring(1, key.length - 1);\n}\nexport function getDefaultValue(type) {\n const t = Array.isArray(type) ? type[0] : type;\n switch (t) {\n case 'boolean':\n return false;\n case 'integer':\n case 'number':\n return 0;\n case 'string':\n return '';\n case 'array':\n return [];\n case 'object':\n return {};\n default:\n return null;\n }\n}\nconst configurationRegistry = new ConfigurationRegistry();\nRegistry.add(Extensions.Configuration, configurationRegistry);\nexport function validateProperty(property) {\n if (!property.trim()) {\n return nls.localize('config.property.empty', \"Cannot register an empty property\");\n }\n if (OVERRIDE_PROPERTY_PATTERN.test(property)) {\n return nls.localize('config.property.languageDefault', \"Cannot register '{0}'. This matches property pattern '\\\\\\\\[.*\\\\\\\\]$' for describing language specific editor settings. Use 'configurationDefaults' contribution.\", property);\n }\n if (configurationRegistry.getConfigurationProperties()[property] !== undefined) {\n return nls.localize('config.property.duplicate', \"Cannot register '{0}'. This property is already registered.\", property);\n }\n return null;\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 *--------------------------------------------------------------------------------------------*/\nimport { isFalsyOrWhitespace } from '../../../base/common/strings.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { userAgent, isMacintosh, isLinux, isWindows, isWeb } from '../../../base/common/platform.js';\nlet _userAgent = userAgent || '';\nconst STATIC_VALUES = new Map();\nSTATIC_VALUES.set('false', false);\nSTATIC_VALUES.set('true', true);\nSTATIC_VALUES.set('isMac', isMacintosh);\nSTATIC_VALUES.set('isLinux', isLinux);\nSTATIC_VALUES.set('isWindows', isWindows);\nSTATIC_VALUES.set('isWeb', isWeb);\nSTATIC_VALUES.set('isMacNative', isMacintosh && !isWeb);\nSTATIC_VALUES.set('isEdge', _userAgent.indexOf('Edg/') >= 0);\nSTATIC_VALUES.set('isFirefox', _userAgent.indexOf('Firefox') >= 0);\nSTATIC_VALUES.set('isChrome', _userAgent.indexOf('Chrome') >= 0);\nSTATIC_VALUES.set('isSafari', _userAgent.indexOf('Safari') >= 0);\nSTATIC_VALUES.set('isIPad', _userAgent.indexOf('iPad') >= 0);\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport class ContextKeyExpr {\n static has(key) {\n return ContextKeyDefinedExpr.create(key);\n }\n static equals(key, value) {\n return ContextKeyEqualsExpr.create(key, value);\n }\n static regex(key, value) {\n return ContextKeyRegexExpr.create(key, value);\n }\n static not(key) {\n return ContextKeyNotExpr.create(key);\n }\n static and(...expr) {\n return ContextKeyAndExpr.create(expr);\n }\n static or(...expr) {\n return ContextKeyOrExpr.create(expr);\n }\n static deserialize(serialized, strict = false) {\n if (!serialized) {\n return undefined;\n }\n return this._deserializeOrExpression(serialized, strict);\n }\n static _deserializeOrExpression(serialized, strict) {\n let pieces = serialized.split('||');\n return ContextKeyOrExpr.create(pieces.map(p => this._deserializeAndExpression(p, strict)));\n }\n static _deserializeAndExpression(serialized, strict) {\n let pieces = serialized.split('&&');\n return ContextKeyAndExpr.create(pieces.map(p => this._deserializeOne(p, strict)));\n }\n static _deserializeOne(serializedOne, strict) {\n serializedOne = serializedOne.trim();\n if (serializedOne.indexOf('!=') >= 0) {\n let pieces = serializedOne.split('!=');\n return ContextKeyNotEqualsExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1], strict));\n }\n if (serializedOne.indexOf('==') >= 0) {\n let pieces = serializedOne.split('==');\n return ContextKeyEqualsExpr.create(pieces[0].trim(), this._deserializeValue(pieces[1], strict));\n }\n if (serializedOne.indexOf('=~') >= 0) {\n let pieces = serializedOne.split('=~');\n return ContextKeyRegexExpr.create(pieces[0].trim(), this._deserializeRegexValue(pieces[1], strict));\n }\n if (serializedOne.indexOf(' in ') >= 0) {\n let pieces = serializedOne.split(' in ');\n return ContextKeyInExpr.create(pieces[0].trim(), pieces[1].trim());\n }\n if (/^[^<=>]+>=[^<=>]+$/.test(serializedOne)) {\n const pieces = serializedOne.split('>=');\n return ContextKeyGreaterEqualsExpr.create(pieces[0].trim(), pieces[1].trim());\n }\n if (/^[^<=>]+>[^<=>]+$/.test(serializedOne)) {\n const pieces = serializedOne.split('>');\n return ContextKeyGreaterExpr.create(pieces[0].trim(), pieces[1].trim());\n }\n if (/^[^<=>]+<=[^<=>]+$/.test(serializedOne)) {\n const pieces = serializedOne.split('<=');\n return ContextKeySmallerEqualsExpr.create(pieces[0].trim(), pieces[1].trim());\n }\n if (/^[^<=>]+<[^<=>]+$/.test(serializedOne)) {\n const pieces = serializedOne.split('<');\n return ContextKeySmallerExpr.create(pieces[0].trim(), pieces[1].trim());\n }\n if (/^\\!\\s*/.test(serializedOne)) {\n return ContextKeyNotExpr.create(serializedOne.substr(1).trim());\n }\n return ContextKeyDefinedExpr.create(serializedOne);\n }\n static _deserializeValue(serializedValue, strict) {\n serializedValue = serializedValue.trim();\n if (serializedValue === 'true') {\n return true;\n }\n if (serializedValue === 'false') {\n return false;\n }\n let m = /^'([^']*)'$/.exec(serializedValue);\n if (m) {\n return m[1].trim();\n }\n return serializedValue;\n }\n static _deserializeRegexValue(serializedValue, strict) {\n if (isFalsyOrWhitespace(serializedValue)) {\n if (strict) {\n throw new Error('missing regexp-value for =~-expression');\n }\n else {\n console.warn('missing regexp-value for =~-expression');\n }\n return null;\n }\n let start = serializedValue.indexOf('/');\n let end = serializedValue.lastIndexOf('/');\n if (start === end || start < 0 /* || to < 0 */) {\n if (strict) {\n throw new Error(`bad regexp-value '${serializedValue}', missing /-enclosure`);\n }\n else {\n console.warn(`bad regexp-value '${serializedValue}', missing /-enclosure`);\n }\n return null;\n }\n let value = serializedValue.slice(start + 1, end);\n let caseIgnoreFlag = serializedValue[end + 1] === 'i' ? 'i' : '';\n try {\n return new RegExp(value, caseIgnoreFlag);\n }\n catch (e) {\n if (strict) {\n throw new Error(`bad regexp-value '${serializedValue}', parse error: ${e}`);\n }\n else {\n console.warn(`bad regexp-value '${serializedValue}', parse error: ${e}`);\n }\n return null;\n }\n }\n}\nfunction cmp(a, b) {\n return a.cmp(b);\n}\nexport class ContextKeyFalseExpr {\n constructor() {\n this.type = 0 /* False */;\n }\n cmp(other) {\n return this.type - other.type;\n }\n equals(other) {\n return (other.type === this.type);\n }\n evaluate(context) {\n return false;\n }\n serialize() {\n return 'false';\n }\n keys() {\n return [];\n }\n negate() {\n return ContextKeyTrueExpr.INSTANCE;\n }\n}\nContextKeyFalseExpr.INSTANCE = new ContextKeyFalseExpr();\nexport class ContextKeyTrueExpr {\n constructor() {\n this.type = 1 /* True */;\n }\n cmp(other) {\n return this.type - other.type;\n }\n equals(other) {\n return (other.type === this.type);\n }\n evaluate(context) {\n return true;\n }\n serialize() {\n return 'true';\n }\n keys() {\n return [];\n }\n negate() {\n return ContextKeyFalseExpr.INSTANCE;\n }\n}\nContextKeyTrueExpr.INSTANCE = new ContextKeyTrueExpr();\nexport class ContextKeyDefinedExpr {\n constructor(key) {\n this.key = key;\n this.type = 2 /* Defined */;\n }\n static create(key) {\n const staticValue = STATIC_VALUES.get(key);\n if (typeof staticValue === 'boolean') {\n return staticValue ? ContextKeyTrueExpr.INSTANCE : ContextKeyFalseExpr.INSTANCE;\n }\n return new ContextKeyDefinedExpr(key);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp1(this.key, other.key);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key);\n }\n return false;\n }\n evaluate(context) {\n return (!!context.getValue(this.key));\n }\n serialize() {\n return this.key;\n }\n keys() {\n return [this.key];\n }\n negate() {\n return ContextKeyNotExpr.create(this.key);\n }\n}\nexport class ContextKeyEqualsExpr {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n this.type = 4 /* Equals */;\n }\n static create(key, value) {\n if (typeof value === 'boolean') {\n return (value ? ContextKeyDefinedExpr.create(key) : ContextKeyNotExpr.create(key));\n }\n const staticValue = STATIC_VALUES.get(key);\n if (typeof staticValue === 'boolean') {\n const trueValue = staticValue ? 'true' : 'false';\n return (value === trueValue ? ContextKeyTrueExpr.INSTANCE : ContextKeyFalseExpr.INSTANCE);\n }\n return new ContextKeyEqualsExpr(key, value);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n evaluate(context) {\n // Intentional ==\n // eslint-disable-next-line eqeqeq\n return (context.getValue(this.key) == this.value);\n }\n serialize() {\n return `${this.key} == '${this.value}'`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n return ContextKeyNotEqualsExpr.create(this.key, this.value);\n }\n}\nexport class ContextKeyInExpr {\n constructor(key, valueKey) {\n this.key = key;\n this.valueKey = valueKey;\n this.type = 10 /* In */;\n }\n static create(key, valueKey) {\n return new ContextKeyInExpr(key, valueKey);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.valueKey, other.key, other.valueKey);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.valueKey === other.valueKey);\n }\n return false;\n }\n evaluate(context) {\n const source = context.getValue(this.valueKey);\n const item = context.getValue(this.key);\n if (Array.isArray(source)) {\n return (source.indexOf(item) >= 0);\n }\n if (typeof item === 'string' && typeof source === 'object' && source !== null) {\n return hasOwnProperty.call(source, item);\n }\n return false;\n }\n serialize() {\n return `${this.key} in '${this.valueKey}'`;\n }\n keys() {\n return [this.key, this.valueKey];\n }\n negate() {\n return ContextKeyNotInExpr.create(this);\n }\n}\nexport class ContextKeyNotInExpr {\n constructor(_actual) {\n this._actual = _actual;\n this.type = 11 /* NotIn */;\n //\n }\n static create(actual) {\n return new ContextKeyNotInExpr(actual);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return this._actual.cmp(other._actual);\n }\n equals(other) {\n if (other.type === this.type) {\n return this._actual.equals(other._actual);\n }\n return false;\n }\n evaluate(context) {\n return !this._actual.evaluate(context);\n }\n serialize() {\n throw new Error('Method not implemented.');\n }\n keys() {\n return this._actual.keys();\n }\n negate() {\n return this._actual;\n }\n}\nexport class ContextKeyNotEqualsExpr {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n this.type = 5 /* NotEquals */;\n }\n static create(key, value) {\n if (typeof value === 'boolean') {\n if (value) {\n return ContextKeyNotExpr.create(key);\n }\n return ContextKeyDefinedExpr.create(key);\n }\n const staticValue = STATIC_VALUES.get(key);\n if (typeof staticValue === 'boolean') {\n const falseValue = staticValue ? 'true' : 'false';\n return (value === falseValue ? ContextKeyFalseExpr.INSTANCE : ContextKeyTrueExpr.INSTANCE);\n }\n return new ContextKeyNotEqualsExpr(key, value);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n evaluate(context) {\n // Intentional !=\n // eslint-disable-next-line eqeqeq\n return (context.getValue(this.key) != this.value);\n }\n serialize() {\n return `${this.key} != '${this.value}'`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n return ContextKeyEqualsExpr.create(this.key, this.value);\n }\n}\nexport class ContextKeyNotExpr {\n constructor(key) {\n this.key = key;\n this.type = 3 /* Not */;\n }\n static create(key) {\n const staticValue = STATIC_VALUES.get(key);\n if (typeof staticValue === 'boolean') {\n return (staticValue ? ContextKeyFalseExpr.INSTANCE : ContextKeyTrueExpr.INSTANCE);\n }\n return new ContextKeyNotExpr(key);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp1(this.key, other.key);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key);\n }\n return false;\n }\n evaluate(context) {\n return (!context.getValue(this.key));\n }\n serialize() {\n return `!${this.key}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n return ContextKeyDefinedExpr.create(this.key);\n }\n}\nexport class ContextKeyGreaterExpr {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n this.type = 12 /* Greater */;\n }\n static create(key, value) {\n return new ContextKeyGreaterExpr(key, value);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n evaluate(context) {\n return (parseFloat(context.getValue(this.key)) > parseFloat(this.value));\n }\n serialize() {\n return `${this.key} > ${this.value}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n return ContextKeySmallerEqualsExpr.create(this.key, this.value);\n }\n}\nexport class ContextKeyGreaterEqualsExpr {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n this.type = 13 /* GreaterEquals */;\n }\n static create(key, value) {\n return new ContextKeyGreaterEqualsExpr(key, value);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n evaluate(context) {\n return (parseFloat(context.getValue(this.key)) >= parseFloat(this.value));\n }\n serialize() {\n return `${this.key} >= ${this.value}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n return ContextKeySmallerExpr.create(this.key, this.value);\n }\n}\nexport class ContextKeySmallerExpr {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n this.type = 14 /* Smaller */;\n }\n static create(key, value) {\n return new ContextKeySmallerExpr(key, value);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n evaluate(context) {\n return (parseFloat(context.getValue(this.key)) < parseFloat(this.value));\n }\n serialize() {\n return `${this.key} < ${this.value}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n return ContextKeyGreaterEqualsExpr.create(this.key, this.value);\n }\n}\nexport class ContextKeySmallerEqualsExpr {\n constructor(key, value) {\n this.key = key;\n this.value = value;\n this.type = 15 /* SmallerEquals */;\n }\n static create(key, value) {\n return new ContextKeySmallerEqualsExpr(key, value);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return cmp2(this.key, this.value, other.key, other.value);\n }\n equals(other) {\n if (other.type === this.type) {\n return (this.key === other.key && this.value === other.value);\n }\n return false;\n }\n evaluate(context) {\n return (parseFloat(context.getValue(this.key)) <= parseFloat(this.value));\n }\n serialize() {\n return `${this.key} <= ${this.value}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n return ContextKeyGreaterExpr.create(this.key, this.value);\n }\n}\nexport class ContextKeyRegexExpr {\n constructor(key, regexp) {\n this.key = key;\n this.regexp = regexp;\n this.type = 7 /* Regex */;\n //\n }\n static create(key, regexp) {\n return new ContextKeyRegexExpr(key, regexp);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n if (this.key < other.key) {\n return -1;\n }\n if (this.key > other.key) {\n return 1;\n }\n const thisSource = this.regexp ? this.regexp.source : '';\n const otherSource = other.regexp ? other.regexp.source : '';\n if (thisSource < otherSource) {\n return -1;\n }\n if (thisSource > otherSource) {\n return 1;\n }\n return 0;\n }\n equals(other) {\n if (other.type === this.type) {\n const thisSource = this.regexp ? this.regexp.source : '';\n const otherSource = other.regexp ? other.regexp.source : '';\n return (this.key === other.key && thisSource === otherSource);\n }\n return false;\n }\n evaluate(context) {\n let value = context.getValue(this.key);\n return this.regexp ? this.regexp.test(value) : false;\n }\n serialize() {\n const value = this.regexp\n ? `/${this.regexp.source}/${this.regexp.ignoreCase ? 'i' : ''}`\n : '/invalid/';\n return `${this.key} =~ ${value}`;\n }\n keys() {\n return [this.key];\n }\n negate() {\n return ContextKeyNotRegexExpr.create(this);\n }\n}\nexport class ContextKeyNotRegexExpr {\n constructor(_actual) {\n this._actual = _actual;\n this.type = 8 /* NotRegex */;\n //\n }\n static create(actual) {\n return new ContextKeyNotRegexExpr(actual);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n return this._actual.cmp(other._actual);\n }\n equals(other) {\n if (other.type === this.type) {\n return this._actual.equals(other._actual);\n }\n return false;\n }\n evaluate(context) {\n return !this._actual.evaluate(context);\n }\n serialize() {\n throw new Error('Method not implemented.');\n }\n keys() {\n return this._actual.keys();\n }\n negate() {\n return this._actual;\n }\n}\nexport class ContextKeyAndExpr {\n constructor(expr) {\n this.expr = expr;\n this.type = 6 /* And */;\n }\n static create(_expr) {\n return ContextKeyAndExpr._normalizeArr(_expr);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n if (this.expr.length < other.expr.length) {\n return -1;\n }\n if (this.expr.length > other.expr.length) {\n return 1;\n }\n for (let i = 0, len = this.expr.length; i < len; i++) {\n const r = cmp(this.expr[i], other.expr[i]);\n if (r !== 0) {\n return r;\n }\n }\n return 0;\n }\n equals(other) {\n if (other.type === this.type) {\n if (this.expr.length !== other.expr.length) {\n return false;\n }\n for (let i = 0, len = this.expr.length; i < len; i++) {\n if (!this.expr[i].equals(other.expr[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n evaluate(context) {\n for (let i = 0, len = this.expr.length; i < len; i++) {\n if (!this.expr[i].evaluate(context)) {\n return false;\n }\n }\n return true;\n }\n static _normalizeArr(arr) {\n const expr = [];\n let hasTrue = false;\n for (const e of arr) {\n if (!e) {\n continue;\n }\n if (e.type === 1 /* True */) {\n // anything && true ==> anything\n hasTrue = true;\n continue;\n }\n if (e.type === 0 /* False */) {\n // anything && false ==> false\n return ContextKeyFalseExpr.INSTANCE;\n }\n if (e.type === 6 /* And */) {\n expr.push(...e.expr);\n continue;\n }\n expr.push(e);\n }\n if (expr.length === 0 && hasTrue) {\n return ContextKeyTrueExpr.INSTANCE;\n }\n if (expr.length === 0) {\n return undefined;\n }\n if (expr.length === 1) {\n return expr[0];\n }\n expr.sort(cmp);\n // We must distribute any OR expression because we don't support parens\n // OR extensions will be at the end (due to sorting rules)\n while (expr.length > 1) {\n const lastElement = expr[expr.length - 1];\n if (lastElement.type !== 9 /* Or */) {\n break;\n }\n // pop the last element\n expr.pop();\n // pop the second to last element\n const secondToLastElement = expr.pop();\n // distribute `lastElement` over `secondToLastElement`\n const resultElement = ContextKeyOrExpr.create(lastElement.expr.map(el => ContextKeyAndExpr.create([el, secondToLastElement])));\n if (resultElement) {\n expr.push(resultElement);\n expr.sort(cmp);\n }\n }\n if (expr.length === 1) {\n return expr[0];\n }\n return new ContextKeyAndExpr(expr);\n }\n serialize() {\n return this.expr.map(e => e.serialize()).join(' && ');\n }\n keys() {\n const result = [];\n for (let expr of this.expr) {\n result.push(...expr.keys());\n }\n return result;\n }\n negate() {\n let result = [];\n for (let expr of this.expr) {\n result.push(expr.negate());\n }\n return ContextKeyOrExpr.create(result);\n }\n}\nexport class ContextKeyOrExpr {\n constructor(expr) {\n this.expr = expr;\n this.type = 9 /* Or */;\n }\n static create(_expr) {\n const expr = ContextKeyOrExpr._normalizeArr(_expr);\n if (expr.length === 0) {\n return undefined;\n }\n if (expr.length === 1) {\n return expr[0];\n }\n return new ContextKeyOrExpr(expr);\n }\n cmp(other) {\n if (other.type !== this.type) {\n return this.type - other.type;\n }\n if (this.expr.length < other.expr.length) {\n return -1;\n }\n if (this.expr.length > other.expr.length) {\n return 1;\n }\n for (let i = 0, len = this.expr.length; i < len; i++) {\n const r = cmp(this.expr[i], other.expr[i]);\n if (r !== 0) {\n return r;\n }\n }\n return 0;\n }\n equals(other) {\n if (other.type === this.type) {\n if (this.expr.length !== other.expr.length) {\n return false;\n }\n for (let i = 0, len = this.expr.length; i < len; i++) {\n if (!this.expr[i].equals(other.expr[i])) {\n return false;\n }\n }\n return true;\n }\n return false;\n }\n evaluate(context) {\n for (let i = 0, len = this.expr.length; i < len; i++) {\n if (this.expr[i].evaluate(context)) {\n return true;\n }\n }\n return false;\n }\n static _normalizeArr(arr) {\n let expr = [];\n let hasFalse = false;\n if (arr) {\n for (let i = 0, len = arr.length; i < len; i++) {\n const e = arr[i];\n if (!e) {\n continue;\n }\n if (e.type === 0 /* False */) {\n // anything || false ==> anything\n hasFalse = true;\n continue;\n }\n if (e.type === 1 /* True */) {\n // anything || true ==> true\n return [ContextKeyTrueExpr.INSTANCE];\n }\n if (e.type === 9 /* Or */) {\n expr = expr.concat(e.expr);\n continue;\n }\n expr.push(e);\n }\n if (expr.length === 0 && hasFalse) {\n return [ContextKeyFalseExpr.INSTANCE];\n }\n expr.sort(cmp);\n }\n return expr;\n }\n serialize() {\n return this.expr.map(e => e.serialize()).join(' || ');\n }\n keys() {\n const result = [];\n for (let expr of this.expr) {\n result.push(...expr.keys());\n }\n return result;\n }\n negate() {\n let result = [];\n for (let expr of this.expr) {\n result.push(expr.negate());\n }\n const terminals = (node) => {\n if (node.type === 9 /* Or */) {\n return node.expr;\n }\n return [node];\n };\n // We don't support parens, so here we distribute the AND over the OR terminals\n // We always take the first 2 AND pairs and distribute them\n while (result.length > 1) {\n const LEFT = result.shift();\n const RIGHT = result.shift();\n const all = [];\n for (const left of terminals(LEFT)) {\n for (const right of terminals(RIGHT)) {\n all.push(ContextKeyExpr.and(left, right));\n }\n }\n result.unshift(ContextKeyExpr.or(...all));\n }\n return result[0];\n }\n}\nexport class RawContextKey extends ContextKeyDefinedExpr {\n constructor(key, defaultValue, metaOrHide) {\n super(key);\n this._defaultValue = defaultValue;\n // collect all context keys into a central place\n if (typeof metaOrHide === 'object') {\n RawContextKey._info.push(Object.assign(Object.assign({}, metaOrHide), { key }));\n }\n else if (metaOrHide !== true) {\n RawContextKey._info.push({ key, description: metaOrHide, type: defaultValue !== null && defaultValue !== undefined ? typeof defaultValue : undefined });\n }\n }\n static all() {\n return RawContextKey._info.values();\n }\n bindTo(target) {\n return target.createKey(this.key, this._defaultValue);\n }\n getValue(target) {\n return target.getContextKeyValue(this.key);\n }\n toNegated() {\n return ContextKeyExpr.not(this.key);\n }\n isEqualTo(value) {\n return ContextKeyExpr.equals(this.key, value);\n }\n}\nRawContextKey._info = [];\nexport const IContextKeyService = createDecorator('contextKeyService');\nexport const SET_CONTEXT_COMMAND_ID = 'setContext';\nfunction cmp1(key1, key2) {\n if (key1 < key2) {\n return -1;\n }\n if (key1 > key2) {\n return 1;\n }\n return 0;\n}\nfunction cmp2(key1, value1, key2, value2) {\n if (key1 < key2) {\n return -1;\n }\n if (key1 > key2) {\n return 1;\n }\n if (value1 < value2) {\n return -1;\n }\n if (value1 > value2) {\n return 1;\n }\n return 0;\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 *--------------------------------------------------------------------------------------------*/\nimport { localize } from '../../../nls.js';\nimport { RawContextKey } from './contextkey.js';\nimport { isWindows } from '../../../base/common/platform.js';\nexport const IsWindowsContext = new RawContextKey('isWindows', isWindows, localize('isWindows', \"Whether the operating system is Windows\"));\nexport const InputFocusedContextKey = 'inputFocus';\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IContextViewService = createDecorator('contextViewService');\nexport const IContextMenuService = createDecorator('contextMenuService');\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IDialogService = createDecorator('dialogService');\n","export class SyncDescriptor {\n constructor(ctor, staticArguments = [], supportsDelayedInstantiation = false) {\n this.ctor = ctor;\n this.staticArguments = staticArguments;\n this.supportsDelayedInstantiation = supportsDelayedInstantiation;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { SyncDescriptor } from './descriptors.js';\nconst _registry = [];\nexport function registerSingleton(id, ctorOrDescriptor, supportsDelayedInstantiation) {\n if (!(ctorOrDescriptor instanceof SyncDescriptor)) {\n ctorOrDescriptor = new SyncDescriptor(ctorOrDescriptor, [], supportsDelayedInstantiation);\n }\n _registry.push([id, ctorOrDescriptor]);\n}\nexport function getSingletonServiceDescriptors() {\n return _registry;\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// ------ internal util\nexport var _util;\n(function (_util) {\n _util.serviceIds = new Map();\n _util.DI_TARGET = '$di$target';\n _util.DI_DEPENDENCIES = '$di$dependencies';\n function getServiceDependencies(ctor) {\n return ctor[_util.DI_DEPENDENCIES] || [];\n }\n _util.getServiceDependencies = getServiceDependencies;\n})(_util || (_util = {}));\nexport const IInstantiationService = createDecorator('instantiationService');\nfunction storeServiceDependency(id, target, index, optional) {\n if (target[_util.DI_TARGET] === target) {\n target[_util.DI_DEPENDENCIES].push({ id, index, optional });\n }\n else {\n target[_util.DI_DEPENDENCIES] = [{ id, index, optional }];\n target[_util.DI_TARGET] = target;\n }\n}\n/**\n * The *only* valid way to create a {{ServiceIdentifier}}.\n */\nexport function createDecorator(serviceId) {\n if (_util.serviceIds.has(serviceId)) {\n return _util.serviceIds.get(serviceId);\n }\n const id = function (target, key, index) {\n if (arguments.length !== 3) {\n throw new Error('@IServiceName-decorator can only be used to decorate a parameter');\n }\n storeServiceDependency(id, target, index, false);\n };\n id.toString = () => serviceId;\n _util.serviceIds.set(serviceId, id);\n return id;\n}\n/**\n * Mark a service dependency as optional.\n */\nexport function optional(serviceIdentifier) {\n return function (target, key, index) {\n if (arguments.length !== 3) {\n throw new Error('@optional-decorator can only be used to decorate a parameter');\n }\n storeServiceDependency(serviceIdentifier, target, index, true);\n };\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 *--------------------------------------------------------------------------------------------*/\nexport class ServiceCollection {\n constructor(...entries) {\n this._entries = new Map();\n for (let [id, service] of entries) {\n this.set(id, service);\n }\n }\n set(id, instanceOrDescriptor) {\n const result = this._entries.get(id);\n this._entries.set(id, instanceOrDescriptor);\n return result;\n }\n has(id) {\n return this._entries.has(id);\n }\n get(id) {\n return this._entries.get(id);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as platform from '../../registry/common/platform.js';\nimport { Emitter } from '../../../base/common/event.js';\nexport const Extensions = {\n JSONContribution: 'base.contributions.json'\n};\nfunction normalizeId(id) {\n if (id.length > 0 && id.charAt(id.length - 1) === '#') {\n return id.substring(0, id.length - 1);\n }\n return id;\n}\nclass JSONContributionRegistry {\n constructor() {\n this._onDidChangeSchema = new Emitter();\n this.schemasById = {};\n }\n registerSchema(uri, unresolvedSchemaContent) {\n this.schemasById[normalizeId(uri)] = unresolvedSchemaContent;\n this._onDidChangeSchema.fire(uri);\n }\n notifySchemaChanged(uri) {\n this._onDidChangeSchema.fire(uri);\n }\n}\nconst jsonContributionRegistry = new JSONContributionRegistry();\nplatform.Registry.add(Extensions.JSONContribution, jsonContributionRegistry);\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IKeybindingService = createDecorator('keybindingService');\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 *--------------------------------------------------------------------------------------------*/\nimport { createKeybinding } from '../../../base/common/keyCodes.js';\nimport { OS } from '../../../base/common/platform.js';\nimport { CommandsRegistry } from '../../commands/common/commands.js';\nimport { Registry } from '../../registry/common/platform.js';\nclass KeybindingsRegistryImpl {\n constructor() {\n this._coreKeybindings = [];\n this._extensionKeybindings = [];\n this._cachedMergedKeybindings = null;\n }\n /**\n * Take current platform into account and reduce to primary & secondary.\n */\n static bindToCurrentPlatform(kb) {\n if (OS === 1 /* Windows */) {\n if (kb && kb.win) {\n return kb.win;\n }\n }\n else if (OS === 2 /* Macintosh */) {\n if (kb && kb.mac) {\n return kb.mac;\n }\n }\n else {\n if (kb && kb.linux) {\n return kb.linux;\n }\n }\n return kb;\n }\n registerKeybindingRule(rule) {\n const actualKb = KeybindingsRegistryImpl.bindToCurrentPlatform(rule);\n if (actualKb && actualKb.primary) {\n const kk = createKeybinding(actualKb.primary, OS);\n if (kk) {\n this._registerDefaultKeybinding(kk, rule.id, rule.args, rule.weight, 0, rule.when);\n }\n }\n if (actualKb && Array.isArray(actualKb.secondary)) {\n for (let i = 0, len = actualKb.secondary.length; i < len; i++) {\n const k = actualKb.secondary[i];\n const kk = createKeybinding(k, OS);\n if (kk) {\n this._registerDefaultKeybinding(kk, rule.id, rule.args, rule.weight, -i - 1, rule.when);\n }\n }\n }\n }\n registerCommandAndKeybindingRule(desc) {\n this.registerKeybindingRule(desc);\n CommandsRegistry.registerCommand(desc);\n }\n static _mightProduceChar(keyCode) {\n if (keyCode >= 21 /* KEY_0 */ && keyCode <= 30 /* KEY_9 */) {\n return true;\n }\n if (keyCode >= 31 /* KEY_A */ && keyCode <= 56 /* KEY_Z */) {\n return true;\n }\n return (keyCode === 80 /* US_SEMICOLON */\n || keyCode === 81 /* US_EQUAL */\n || keyCode === 82 /* US_COMMA */\n || keyCode === 83 /* US_MINUS */\n || keyCode === 84 /* US_DOT */\n || keyCode === 85 /* US_SLASH */\n || keyCode === 86 /* US_BACKTICK */\n || keyCode === 110 /* ABNT_C1 */\n || keyCode === 111 /* ABNT_C2 */\n || keyCode === 87 /* US_OPEN_SQUARE_BRACKET */\n || keyCode === 88 /* US_BACKSLASH */\n || keyCode === 89 /* US_CLOSE_SQUARE_BRACKET */\n || keyCode === 90 /* US_QUOTE */\n || keyCode === 91 /* OEM_8 */\n || keyCode === 92 /* OEM_102 */);\n }\n _assertNoCtrlAlt(keybinding, commandId) {\n if (keybinding.ctrlKey && keybinding.altKey && !keybinding.metaKey) {\n if (KeybindingsRegistryImpl._mightProduceChar(keybinding.keyCode)) {\n console.warn('Ctrl+Alt+ keybindings should not be used by default under Windows. Offender: ', keybinding, ' for ', commandId);\n }\n }\n }\n _registerDefaultKeybinding(keybinding, commandId, commandArgs, weight1, weight2, when) {\n if (OS === 1 /* Windows */) {\n this._assertNoCtrlAlt(keybinding.parts[0], commandId);\n }\n this._coreKeybindings.push({\n keybinding: keybinding,\n command: commandId,\n commandArgs: commandArgs,\n when: when,\n weight1: weight1,\n weight2: weight2,\n extensionId: null,\n isBuiltinExtension: false\n });\n this._cachedMergedKeybindings = null;\n }\n getDefaultKeybindings() {\n if (!this._cachedMergedKeybindings) {\n this._cachedMergedKeybindings = [].concat(this._coreKeybindings).concat(this._extensionKeybindings);\n this._cachedMergedKeybindings.sort(sorter);\n }\n return this._cachedMergedKeybindings.slice(0);\n }\n}\nexport const KeybindingsRegistry = new KeybindingsRegistryImpl();\n// Define extension point ids\nexport const Extensions = {\n EditorModes: 'platform.keybindingsRegistry'\n};\nRegistry.add(Extensions.EditorModes, KeybindingsRegistry);\nfunction sorter(a, b) {\n if (a.weight1 !== b.weight1) {\n return a.weight1 - b.weight1;\n }\n if (a.command < b.command) {\n return -1;\n }\n if (a.command > b.command) {\n return 1;\n }\n return a.weight2 - b.weight2;\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const ILabelService = createDecorator('labelService');\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 *--------------------------------------------------------------------------------------------*/\nimport './list.css';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { range } from '../../../common/arrays.js';\nimport { List } from './listWidget.js';\nimport { Event } from '../../../common/event.js';\nimport { CancellationTokenSource } from '../../../common/cancellation.js';\nclass PagedRenderer {\n constructor(renderer, modelProvider) {\n this.renderer = renderer;\n this.modelProvider = modelProvider;\n }\n get templateId() { return this.renderer.templateId; }\n renderTemplate(container) {\n const data = this.renderer.renderTemplate(container);\n return { data, disposable: Disposable.None };\n }\n renderElement(index, _, data, height) {\n if (data.disposable) {\n data.disposable.dispose();\n }\n if (!data.data) {\n return;\n }\n const model = this.modelProvider();\n if (model.isResolved(index)) {\n return this.renderer.renderElement(model.get(index), index, data.data, height);\n }\n const cts = new CancellationTokenSource();\n const promise = model.resolve(index, cts.token);\n data.disposable = { dispose: () => cts.cancel() };\n this.renderer.renderPlaceholder(index, data.data);\n promise.then(entry => this.renderer.renderElement(entry, index, data.data, height));\n }\n disposeTemplate(data) {\n if (data.disposable) {\n data.disposable.dispose();\n data.disposable = undefined;\n }\n if (data.data) {\n this.renderer.disposeTemplate(data.data);\n data.data = undefined;\n }\n }\n}\nclass PagedAccessibilityProvider {\n constructor(modelProvider, accessibilityProvider) {\n this.modelProvider = modelProvider;\n this.accessibilityProvider = accessibilityProvider;\n }\n getWidgetAriaLabel() {\n return this.accessibilityProvider.getWidgetAriaLabel();\n }\n getAriaLabel(index) {\n const model = this.modelProvider();\n if (!model.isResolved(index)) {\n return null;\n }\n return this.accessibilityProvider.getAriaLabel(model.get(index));\n }\n}\nfunction fromPagedListOptions(modelProvider, options) {\n return Object.assign(Object.assign({}, options), { accessibilityProvider: options.accessibilityProvider && new PagedAccessibilityProvider(modelProvider, options.accessibilityProvider) });\n}\nexport class PagedList {\n constructor(user, container, virtualDelegate, renderers, options = {}) {\n const modelProvider = () => this.model;\n const pagedRenderers = renderers.map(r => new PagedRenderer(r, modelProvider));\n this.list = new List(user, container, virtualDelegate, pagedRenderers, fromPagedListOptions(modelProvider, options));\n }\n updateOptions(options) {\n this.list.updateOptions(options);\n }\n getHTMLElement() {\n return this.list.getHTMLElement();\n }\n get onDidFocus() {\n return this.list.onDidFocus;\n }\n get onDidDispose() {\n return this.list.onDidDispose;\n }\n get onMouseDblClick() {\n return Event.map(this.list.onMouseDblClick, ({ element, index, browserEvent }) => ({ element: element === undefined ? undefined : this._model.get(element), index, browserEvent }));\n }\n get onPointer() {\n return Event.map(this.list.onPointer, ({ element, index, browserEvent }) => ({ element: element === undefined ? undefined : this._model.get(element), index, browserEvent }));\n }\n get onDidChangeSelection() {\n return Event.map(this.list.onDidChangeSelection, ({ elements, indexes, browserEvent }) => ({ elements: elements.map(e => this._model.get(e)), indexes, browserEvent }));\n }\n get model() {\n return this._model;\n }\n set model(model) {\n this._model = model;\n this.list.splice(0, this.list.length, range(model.length));\n }\n getFocus() {\n return this.list.getFocus();\n }\n getSelection() {\n return this.list.getSelection();\n }\n getSelectedElements() {\n return this.getSelection().map(i => this.model.get(i));\n }\n style(styles) {\n this.list.style(styles);\n }\n dispose() {\n this.list.dispose();\n }\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 *--------------------------------------------------------------------------------------------*/\nexport var TreeMouseEventTarget;\n(function (TreeMouseEventTarget) {\n TreeMouseEventTarget[TreeMouseEventTarget[\"Unknown\"] = 0] = \"Unknown\";\n TreeMouseEventTarget[TreeMouseEventTarget[\"Twistie\"] = 1] = \"Twistie\";\n TreeMouseEventTarget[TreeMouseEventTarget[\"Element\"] = 2] = \"Element\";\n})(TreeMouseEventTarget || (TreeMouseEventTarget = {}));\nexport class TreeError extends Error {\n constructor(user, message) {\n super(`TreeError [${user}] ${message}`);\n }\n}\nexport class WeakMapper {\n constructor(fn) {\n this.fn = fn;\n this._map = new WeakMap();\n }\n map(key) {\n let result = this._map.get(key);\n if (!result) {\n result = this.fn(key);\n this._map.set(key, result);\n }\n return result;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { TreeError } from './tree.js';\nimport { tail2 } from '../../../common/arrays.js';\nimport { LcsDiff } from '../../../common/diff/diff.js';\nimport { Emitter, EventBufferer } from '../../../common/event.js';\nimport { Iterable } from '../../../common/iterator.js';\nexport function isFilterResult(obj) {\n return typeof obj === 'object' && 'visibility' in obj && 'data' in obj;\n}\nexport function getVisibleState(visibility) {\n switch (visibility) {\n case true: return 1 /* Visible */;\n case false: return 0 /* Hidden */;\n default: return visibility;\n }\n}\nfunction isCollapsibleStateUpdate(update) {\n return typeof update.collapsible === 'boolean';\n}\nexport class IndexTreeModel {\n constructor(user, list, rootElement, options = {}) {\n this.user = user;\n this.list = list;\n this.rootRef = [];\n this.eventBufferer = new EventBufferer();\n this._onDidChangeCollapseState = new Emitter();\n this.onDidChangeCollapseState = this.eventBufferer.wrapEvent(this._onDidChangeCollapseState.event);\n this._onDidChangeRenderNodeCount = new Emitter();\n this.onDidChangeRenderNodeCount = this.eventBufferer.wrapEvent(this._onDidChangeRenderNodeCount.event);\n this._onDidSplice = new Emitter();\n this.onDidSplice = this._onDidSplice.event;\n this.collapseByDefault = typeof options.collapseByDefault === 'undefined' ? false : options.collapseByDefault;\n this.filter = options.filter;\n this.autoExpandSingleChildren = typeof options.autoExpandSingleChildren === 'undefined' ? false : options.autoExpandSingleChildren;\n this.root = {\n parent: undefined,\n element: rootElement,\n children: [],\n depth: 0,\n visibleChildrenCount: 0,\n visibleChildIndex: -1,\n collapsible: false,\n collapsed: false,\n renderNodeCount: 0,\n visibility: 1 /* Visible */,\n visible: true,\n filterData: undefined\n };\n }\n splice(location, deleteCount, toInsert = Iterable.empty(), options = {}) {\n if (location.length === 0) {\n throw new TreeError(this.user, 'Invalid tree location');\n }\n if (options.diffIdentityProvider) {\n this.spliceSmart(options.diffIdentityProvider, location, deleteCount, toInsert, options);\n }\n else {\n this.spliceSimple(location, deleteCount, toInsert, options);\n }\n }\n spliceSmart(identity, location, deleteCount, toInsertIterable, options, recurseLevels) {\n var _a;\n if (toInsertIterable === void 0) { toInsertIterable = Iterable.empty(); }\n if (recurseLevels === void 0) { recurseLevels = (_a = options.diffDepth) !== null && _a !== void 0 ? _a : 0; }\n const { parentNode } = this.getParentNodeWithListIndex(location);\n const toInsert = [...toInsertIterable];\n const index = location[location.length - 1];\n const diff = new LcsDiff({ getElements: () => parentNode.children.map(e => identity.getId(e.element).toString()) }, {\n getElements: () => [\n ...parentNode.children.slice(0, index),\n ...toInsert,\n ...parentNode.children.slice(index + deleteCount),\n ].map(e => identity.getId(e.element).toString())\n }).ComputeDiff(false);\n // if we were given a 'best effort' diff, use default behavior\n if (diff.quitEarly) {\n return this.spliceSimple(location, deleteCount, toInsert, options);\n }\n const locationPrefix = location.slice(0, -1);\n const recurseSplice = (fromOriginal, fromModified, count) => {\n if (recurseLevels > 0) {\n for (let i = 0; i < count; i++) {\n fromOriginal--;\n fromModified--;\n this.spliceSmart(identity, [...locationPrefix, fromOriginal, 0], Number.MAX_SAFE_INTEGER, toInsert[fromModified].children, options, recurseLevels - 1);\n }\n }\n };\n let lastStartO = Math.min(parentNode.children.length, index + deleteCount);\n let lastStartM = toInsert.length;\n for (const change of diff.changes.sort((a, b) => b.originalStart - a.originalStart)) {\n recurseSplice(lastStartO, lastStartM, lastStartO - (change.originalStart + change.originalLength));\n lastStartO = change.originalStart;\n lastStartM = change.modifiedStart - index;\n this.spliceSimple([...locationPrefix, lastStartO], change.originalLength, Iterable.slice(toInsert, lastStartM, lastStartM + change.modifiedLength), options);\n }\n // at this point, startO === startM === count since any remaining prefix should match\n recurseSplice(lastStartO, lastStartM, lastStartO);\n }\n spliceSimple(location, deleteCount, toInsert = Iterable.empty(), { onDidCreateNode, onDidDeleteNode }) {\n const { parentNode, listIndex, revealed, visible } = this.getParentNodeWithListIndex(location);\n const treeListElementsToInsert = [];\n const nodesToInsertIterator = Iterable.map(toInsert, el => this.createTreeNode(el, parentNode, parentNode.visible ? 1 /* Visible */ : 0 /* Hidden */, revealed, treeListElementsToInsert, onDidCreateNode));\n const lastIndex = location[location.length - 1];\n const lastHadChildren = parentNode.children.length > 0;\n // figure out what's the visible child start index right before the\n // splice point\n let visibleChildStartIndex = 0;\n for (let i = lastIndex; i >= 0 && i < parentNode.children.length; i--) {\n const child = parentNode.children[i];\n if (child.visible) {\n visibleChildStartIndex = child.visibleChildIndex;\n break;\n }\n }\n const nodesToInsert = [];\n let insertedVisibleChildrenCount = 0;\n let renderNodeCount = 0;\n for (const child of nodesToInsertIterator) {\n nodesToInsert.push(child);\n renderNodeCount += child.renderNodeCount;\n if (child.visible) {\n child.visibleChildIndex = visibleChildStartIndex + insertedVisibleChildrenCount++;\n }\n }\n const deletedNodes = parentNode.children.splice(lastIndex, deleteCount, ...nodesToInsert);\n // figure out what is the count of deleted visible children\n let deletedVisibleChildrenCount = 0;\n for (const child of deletedNodes) {\n if (child.visible) {\n deletedVisibleChildrenCount++;\n }\n }\n // and adjust for all visible children after the splice point\n if (deletedVisibleChildrenCount !== 0) {\n for (let i = lastIndex + nodesToInsert.length; i < parentNode.children.length; i++) {\n const child = parentNode.children[i];\n if (child.visible) {\n child.visibleChildIndex -= deletedVisibleChildrenCount;\n }\n }\n }\n // update parent's visible children count\n parentNode.visibleChildrenCount += insertedVisibleChildrenCount - deletedVisibleChildrenCount;\n if (revealed && visible) {\n const visibleDeleteCount = deletedNodes.reduce((r, node) => r + (node.visible ? node.renderNodeCount : 0), 0);\n this._updateAncestorsRenderNodeCount(parentNode, renderNodeCount - visibleDeleteCount);\n this.list.splice(listIndex, visibleDeleteCount, treeListElementsToInsert);\n }\n if (deletedNodes.length > 0 && onDidDeleteNode) {\n const visit = (node) => {\n onDidDeleteNode(node);\n node.children.forEach(visit);\n };\n deletedNodes.forEach(visit);\n }\n const currentlyHasChildren = parentNode.children.length > 0;\n if (lastHadChildren !== currentlyHasChildren) {\n this.setCollapsible(location.slice(0, -1), currentlyHasChildren);\n }\n this._onDidSplice.fire({ insertedNodes: nodesToInsert, deletedNodes });\n let node = parentNode;\n while (node) {\n if (node.visibility === 2 /* Recurse */) {\n this.refilter();\n break;\n }\n node = node.parent;\n }\n }\n rerender(location) {\n if (location.length === 0) {\n throw new TreeError(this.user, 'Invalid tree location');\n }\n const { node, listIndex, revealed } = this.getTreeNodeWithListIndex(location);\n if (node.visible && revealed) {\n this.list.splice(listIndex, 1, [node]);\n }\n }\n has(location) {\n return this.hasTreeNode(location);\n }\n getListIndex(location) {\n const { listIndex, visible, revealed } = this.getTreeNodeWithListIndex(location);\n return visible && revealed ? listIndex : -1;\n }\n getListRenderCount(location) {\n return this.getTreeNode(location).renderNodeCount;\n }\n isCollapsible(location) {\n return this.getTreeNode(location).collapsible;\n }\n setCollapsible(location, collapsible) {\n const node = this.getTreeNode(location);\n if (typeof collapsible === 'undefined') {\n collapsible = !node.collapsible;\n }\n const update = { collapsible };\n return this.eventBufferer.bufferEvents(() => this._setCollapseState(location, update));\n }\n isCollapsed(location) {\n return this.getTreeNode(location).collapsed;\n }\n setCollapsed(location, collapsed, recursive) {\n const node = this.getTreeNode(location);\n if (typeof collapsed === 'undefined') {\n collapsed = !node.collapsed;\n }\n const update = { collapsed, recursive: recursive || false };\n return this.eventBufferer.bufferEvents(() => this._setCollapseState(location, update));\n }\n _setCollapseState(location, update) {\n const { node, listIndex, revealed } = this.getTreeNodeWithListIndex(location);\n const result = this._setListNodeCollapseState(node, listIndex, revealed, update);\n if (node !== this.root && this.autoExpandSingleChildren && result && !isCollapsibleStateUpdate(update) && node.collapsible && !node.collapsed && !update.recursive) {\n let onlyVisibleChildIndex = -1;\n for (let i = 0; i < node.children.length; i++) {\n const child = node.children[i];\n if (child.visible) {\n if (onlyVisibleChildIndex > -1) {\n onlyVisibleChildIndex = -1;\n break;\n }\n else {\n onlyVisibleChildIndex = i;\n }\n }\n }\n if (onlyVisibleChildIndex > -1) {\n this._setCollapseState([...location, onlyVisibleChildIndex], update);\n }\n }\n return result;\n }\n _setListNodeCollapseState(node, listIndex, revealed, update) {\n const result = this._setNodeCollapseState(node, update, false);\n if (!revealed || !node.visible || !result) {\n return result;\n }\n const previousRenderNodeCount = node.renderNodeCount;\n const toInsert = this.updateNodeAfterCollapseChange(node);\n const deleteCount = previousRenderNodeCount - (listIndex === -1 ? 0 : 1);\n this.list.splice(listIndex + 1, deleteCount, toInsert.slice(1));\n return result;\n }\n _setNodeCollapseState(node, update, deep) {\n let result;\n if (node === this.root) {\n result = false;\n }\n else {\n if (isCollapsibleStateUpdate(update)) {\n result = node.collapsible !== update.collapsible;\n node.collapsible = update.collapsible;\n }\n else if (!node.collapsible) {\n result = false;\n }\n else {\n result = node.collapsed !== update.collapsed;\n node.collapsed = update.collapsed;\n }\n if (result) {\n this._onDidChangeCollapseState.fire({ node, deep });\n }\n }\n if (!isCollapsibleStateUpdate(update) && update.recursive) {\n for (const child of node.children) {\n result = this._setNodeCollapseState(child, update, true) || result;\n }\n }\n return result;\n }\n expandTo(location) {\n this.eventBufferer.bufferEvents(() => {\n let node = this.getTreeNode(location);\n while (node.parent) {\n node = node.parent;\n location = location.slice(0, location.length - 1);\n if (node.collapsed) {\n this._setCollapseState(location, { collapsed: false, recursive: false });\n }\n }\n });\n }\n refilter() {\n const previousRenderNodeCount = this.root.renderNodeCount;\n const toInsert = this.updateNodeAfterFilterChange(this.root);\n this.list.splice(0, previousRenderNodeCount, toInsert);\n }\n createTreeNode(treeElement, parent, parentVisibility, revealed, treeListElements, onDidCreateNode) {\n const node = {\n parent,\n element: treeElement.element,\n children: [],\n depth: parent.depth + 1,\n visibleChildrenCount: 0,\n visibleChildIndex: -1,\n collapsible: typeof treeElement.collapsible === 'boolean' ? treeElement.collapsible : (typeof treeElement.collapsed !== 'undefined'),\n collapsed: typeof treeElement.collapsed === 'undefined' ? this.collapseByDefault : treeElement.collapsed,\n renderNodeCount: 1,\n visibility: 1 /* Visible */,\n visible: true,\n filterData: undefined\n };\n const visibility = this._filterNode(node, parentVisibility);\n node.visibility = visibility;\n if (revealed) {\n treeListElements.push(node);\n }\n const childElements = treeElement.children || Iterable.empty();\n const childRevealed = revealed && visibility !== 0 /* Hidden */ && !node.collapsed;\n const childNodes = Iterable.map(childElements, el => this.createTreeNode(el, node, visibility, childRevealed, treeListElements, onDidCreateNode));\n let visibleChildrenCount = 0;\n let renderNodeCount = 1;\n for (const child of childNodes) {\n node.children.push(child);\n renderNodeCount += child.renderNodeCount;\n if (child.visible) {\n child.visibleChildIndex = visibleChildrenCount++;\n }\n }\n node.collapsible = node.collapsible || node.children.length > 0;\n node.visibleChildrenCount = visibleChildrenCount;\n node.visible = visibility === 2 /* Recurse */ ? visibleChildrenCount > 0 : (visibility === 1 /* Visible */);\n if (!node.visible) {\n node.renderNodeCount = 0;\n if (revealed) {\n treeListElements.pop();\n }\n }\n else if (!node.collapsed) {\n node.renderNodeCount = renderNodeCount;\n }\n if (onDidCreateNode) {\n onDidCreateNode(node);\n }\n return node;\n }\n updateNodeAfterCollapseChange(node) {\n const previousRenderNodeCount = node.renderNodeCount;\n const result = [];\n this._updateNodeAfterCollapseChange(node, result);\n this._updateAncestorsRenderNodeCount(node.parent, result.length - previousRenderNodeCount);\n return result;\n }\n _updateNodeAfterCollapseChange(node, result) {\n if (node.visible === false) {\n return 0;\n }\n result.push(node);\n node.renderNodeCount = 1;\n if (!node.collapsed) {\n for (const child of node.children) {\n node.renderNodeCount += this._updateNodeAfterCollapseChange(child, result);\n }\n }\n this._onDidChangeRenderNodeCount.fire(node);\n return node.renderNodeCount;\n }\n updateNodeAfterFilterChange(node) {\n const previousRenderNodeCount = node.renderNodeCount;\n const result = [];\n this._updateNodeAfterFilterChange(node, node.visible ? 1 /* Visible */ : 0 /* Hidden */, result);\n this._updateAncestorsRenderNodeCount(node.parent, result.length - previousRenderNodeCount);\n return result;\n }\n _updateNodeAfterFilterChange(node, parentVisibility, result, revealed = true) {\n let visibility;\n if (node !== this.root) {\n visibility = this._filterNode(node, parentVisibility);\n if (visibility === 0 /* Hidden */) {\n node.visible = false;\n node.renderNodeCount = 0;\n return false;\n }\n if (revealed) {\n result.push(node);\n }\n }\n const resultStartLength = result.length;\n node.renderNodeCount = node === this.root ? 0 : 1;\n let hasVisibleDescendants = false;\n if (!node.collapsed || visibility !== 0 /* Hidden */) {\n let visibleChildIndex = 0;\n for (const child of node.children) {\n hasVisibleDescendants = this._updateNodeAfterFilterChange(child, visibility, result, revealed && !node.collapsed) || hasVisibleDescendants;\n if (child.visible) {\n child.visibleChildIndex = visibleChildIndex++;\n }\n }\n node.visibleChildrenCount = visibleChildIndex;\n }\n else {\n node.visibleChildrenCount = 0;\n }\n if (node !== this.root) {\n node.visible = visibility === 2 /* Recurse */ ? hasVisibleDescendants : (visibility === 1 /* Visible */);\n }\n if (!node.visible) {\n node.renderNodeCount = 0;\n if (revealed) {\n result.pop();\n }\n }\n else if (!node.collapsed) {\n node.renderNodeCount += result.length - resultStartLength;\n }\n this._onDidChangeRenderNodeCount.fire(node);\n return node.visible;\n }\n _updateAncestorsRenderNodeCount(node, diff) {\n if (diff === 0) {\n return;\n }\n while (node) {\n node.renderNodeCount += diff;\n this._onDidChangeRenderNodeCount.fire(node);\n node = node.parent;\n }\n }\n _filterNode(node, parentVisibility) {\n const result = this.filter ? this.filter.filter(node.element, parentVisibility) : 1 /* Visible */;\n if (typeof result === 'boolean') {\n node.filterData = undefined;\n return result ? 1 /* Visible */ : 0 /* Hidden */;\n }\n else if (isFilterResult(result)) {\n node.filterData = result.data;\n return getVisibleState(result.visibility);\n }\n else {\n node.filterData = undefined;\n return getVisibleState(result);\n }\n }\n // cheap\n hasTreeNode(location, node = this.root) {\n if (!location || location.length === 0) {\n return true;\n }\n const [index, ...rest] = location;\n if (index < 0 || index > node.children.length) {\n return false;\n }\n return this.hasTreeNode(rest, node.children[index]);\n }\n // cheap\n getTreeNode(location, node = this.root) {\n if (!location || location.length === 0) {\n return node;\n }\n const [index, ...rest] = location;\n if (index < 0 || index > node.children.length) {\n throw new TreeError(this.user, 'Invalid tree location');\n }\n return this.getTreeNode(rest, node.children[index]);\n }\n // expensive\n getTreeNodeWithListIndex(location) {\n if (location.length === 0) {\n return { node: this.root, listIndex: -1, revealed: true, visible: false };\n }\n const { parentNode, listIndex, revealed, visible } = this.getParentNodeWithListIndex(location);\n const index = location[location.length - 1];\n if (index < 0 || index > parentNode.children.length) {\n throw new TreeError(this.user, 'Invalid tree location');\n }\n const node = parentNode.children[index];\n return { node, listIndex, revealed, visible: visible && node.visible };\n }\n getParentNodeWithListIndex(location, node = this.root, listIndex = 0, revealed = true, visible = true) {\n const [index, ...rest] = location;\n if (index < 0 || index > node.children.length) {\n throw new TreeError(this.user, 'Invalid tree location');\n }\n // TODO@joao perf!\n for (let i = 0; i < index; i++) {\n listIndex += node.children[i].renderNodeCount;\n }\n revealed = revealed && !node.collapsed;\n visible = visible && node.visible;\n if (rest.length === 0) {\n return { parentNode: node, listIndex, revealed, visible };\n }\n return this.getParentNodeWithListIndex(rest, node.children[index], listIndex + 1, revealed, visible);\n }\n getNode(location = []) {\n return this.getTreeNode(location);\n }\n // TODO@joao perf!\n getNodeLocation(node) {\n const location = [];\n let indexTreeNode = node; // typing woes\n while (indexTreeNode.parent) {\n location.push(indexTreeNode.parent.children.indexOf(indexTreeNode));\n indexTreeNode = indexTreeNode.parent;\n }\n return location.reverse();\n }\n getParentNodeLocation(location) {\n if (location.length === 0) {\n return undefined;\n }\n else if (location.length === 1) {\n return [];\n }\n else {\n return tail2(location)[0];\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Codicon, registerCodicon } from '../../../common/codicons.js';\nexport const treeItemExpandedIcon = registerCodicon('tree-item-expanded', Codicon.chevronDown); // collapsed is done with rotation\nexport const treeFilterOnTypeOnIcon = registerCodicon('tree-filter-on-type-on', Codicon.listFilter);\nexport const treeFilterOnTypeOffIcon = registerCodicon('tree-filter-on-type-off', Codicon.listSelection);\nexport const treeFilterClearIcon = registerCodicon('tree-filter-clear', Codicon.close);\nexport const treeItemLoadingIcon = registerCodicon('tree-item-loading', Codicon.loading);\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 *--------------------------------------------------------------------------------------------*/\nimport './media/tree.css';\nimport { dispose, Disposable, toDisposable, DisposableStore } from '../../../common/lifecycle.js';\nimport { List, MouseController, DefaultKeyboardNavigationDelegate, isInputElement, isMonacoEditor } from '../list/listWidget.js';\nimport { append, $, getDomNodePagePosition, hasParentWithClass, createStyleSheet, clearNode } from '../../dom.js';\nimport { Event, Relay, Emitter, EventBufferer } from '../../../common/event.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { TreeMouseEventTarget } from './tree.js';\nimport { StaticDND, DragAndDropData } from '../../dnd.js';\nimport { range, equals, distinctES6 } from '../../../common/arrays.js';\nimport { ElementsDragAndDropData } from '../list/listView.js';\nimport { domEvent } from '../../event.js';\nimport { fuzzyScore, FuzzyScore } from '../../../common/filters.js';\nimport { getVisibleState, isFilterResult } from './indexTreeModel.js';\nimport { localize } from '../../../../nls.js';\nimport { disposableTimeout } from '../../../common/async.js';\nimport { isMacintosh } from '../../../common/platform.js';\nimport { clamp } from '../../../common/numbers.js';\nimport { SetMap } from '../../../common/collections.js';\nimport { treeItemExpandedIcon, treeFilterOnTypeOnIcon, treeFilterOnTypeOffIcon, treeFilterClearIcon } from './treeIcons.js';\nclass TreeElementsDragAndDropData extends ElementsDragAndDropData {\n constructor(data) {\n super(data.elements.map(node => node.element));\n this.data = data;\n }\n}\nfunction asTreeDragAndDropData(data) {\n if (data instanceof ElementsDragAndDropData) {\n return new TreeElementsDragAndDropData(data);\n }\n return data;\n}\nclass TreeNodeListDragAndDrop {\n constructor(modelProvider, dnd) {\n this.modelProvider = modelProvider;\n this.dnd = dnd;\n this.autoExpandDisposable = Disposable.None;\n }\n getDragURI(node) {\n return this.dnd.getDragURI(node.element);\n }\n getDragLabel(nodes, originalEvent) {\n if (this.dnd.getDragLabel) {\n return this.dnd.getDragLabel(nodes.map(node => node.element), originalEvent);\n }\n return undefined;\n }\n onDragStart(data, originalEvent) {\n if (this.dnd.onDragStart) {\n this.dnd.onDragStart(asTreeDragAndDropData(data), originalEvent);\n }\n }\n onDragOver(data, targetNode, targetIndex, originalEvent, raw = true) {\n const result = this.dnd.onDragOver(asTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, originalEvent);\n const didChangeAutoExpandNode = this.autoExpandNode !== targetNode;\n if (didChangeAutoExpandNode) {\n this.autoExpandDisposable.dispose();\n this.autoExpandNode = targetNode;\n }\n if (typeof targetNode === 'undefined') {\n return result;\n }\n if (didChangeAutoExpandNode && typeof result !== 'boolean' && result.autoExpand) {\n this.autoExpandDisposable = disposableTimeout(() => {\n const model = this.modelProvider();\n const ref = model.getNodeLocation(targetNode);\n if (model.isCollapsed(ref)) {\n model.setCollapsed(ref, false);\n }\n this.autoExpandNode = undefined;\n }, 500);\n }\n if (typeof result === 'boolean' || !result.accept || typeof result.bubble === 'undefined' || result.feedback) {\n if (!raw) {\n const accept = typeof result === 'boolean' ? result : result.accept;\n const effect = typeof result === 'boolean' ? undefined : result.effect;\n return { accept, effect, feedback: [targetIndex] };\n }\n return result;\n }\n if (result.bubble === 1 /* Up */) {\n const model = this.modelProvider();\n const ref = model.getNodeLocation(targetNode);\n const parentRef = model.getParentNodeLocation(ref);\n const parentNode = model.getNode(parentRef);\n const parentIndex = parentRef && model.getListIndex(parentRef);\n return this.onDragOver(data, parentNode, parentIndex, originalEvent, false);\n }\n const model = this.modelProvider();\n const ref = model.getNodeLocation(targetNode);\n const start = model.getListIndex(ref);\n const length = model.getListRenderCount(ref);\n return Object.assign(Object.assign({}, result), { feedback: range(start, start + length) });\n }\n drop(data, targetNode, targetIndex, originalEvent) {\n this.autoExpandDisposable.dispose();\n this.autoExpandNode = undefined;\n this.dnd.drop(asTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, originalEvent);\n }\n onDragEnd(originalEvent) {\n if (this.dnd.onDragEnd) {\n this.dnd.onDragEnd(originalEvent);\n }\n }\n}\nfunction asListOptions(modelProvider, options) {\n return options && Object.assign(Object.assign({}, options), { identityProvider: options.identityProvider && {\n getId(el) {\n return options.identityProvider.getId(el.element);\n }\n }, dnd: options.dnd && new TreeNodeListDragAndDrop(modelProvider, options.dnd), multipleSelectionController: options.multipleSelectionController && {\n isSelectionSingleChangeEvent(e) {\n return options.multipleSelectionController.isSelectionSingleChangeEvent(Object.assign(Object.assign({}, e), { element: e.element }));\n },\n isSelectionRangeChangeEvent(e) {\n return options.multipleSelectionController.isSelectionRangeChangeEvent(Object.assign(Object.assign({}, e), { element: e.element }));\n }\n }, accessibilityProvider: options.accessibilityProvider && Object.assign(Object.assign({}, options.accessibilityProvider), { getSetSize(node) {\n const model = modelProvider();\n const ref = model.getNodeLocation(node);\n const parentRef = model.getParentNodeLocation(ref);\n const parentNode = model.getNode(parentRef);\n return parentNode.visibleChildrenCount;\n },\n getPosInSet(node) {\n return node.visibleChildIndex + 1;\n }, isChecked: options.accessibilityProvider && options.accessibilityProvider.isChecked ? (node) => {\n return options.accessibilityProvider.isChecked(node.element);\n } : undefined, getRole: options.accessibilityProvider && options.accessibilityProvider.getRole ? (node) => {\n return options.accessibilityProvider.getRole(node.element);\n } : () => 'treeitem', getAriaLabel(e) {\n return options.accessibilityProvider.getAriaLabel(e.element);\n },\n getWidgetAriaLabel() {\n return options.accessibilityProvider.getWidgetAriaLabel();\n }, getWidgetRole: options.accessibilityProvider && options.accessibilityProvider.getWidgetRole ? () => options.accessibilityProvider.getWidgetRole() : () => 'tree', getAriaLevel: options.accessibilityProvider && options.accessibilityProvider.getAriaLevel ? (node) => options.accessibilityProvider.getAriaLevel(node.element) : (node) => {\n return node.depth;\n }, getActiveDescendantId: options.accessibilityProvider.getActiveDescendantId && (node => {\n return options.accessibilityProvider.getActiveDescendantId(node.element);\n }) }), keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && Object.assign(Object.assign({}, options.keyboardNavigationLabelProvider), { getKeyboardNavigationLabel(node) {\n return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(node.element);\n } }), enableKeyboardNavigation: options.simpleKeyboardNavigation });\n}\nexport class ComposedTreeDelegate {\n constructor(delegate) {\n this.delegate = delegate;\n }\n getHeight(element) {\n return this.delegate.getHeight(element.element);\n }\n getTemplateId(element) {\n return this.delegate.getTemplateId(element.element);\n }\n hasDynamicHeight(element) {\n return !!this.delegate.hasDynamicHeight && this.delegate.hasDynamicHeight(element.element);\n }\n setDynamicHeight(element, height) {\n if (this.delegate.setDynamicHeight) {\n this.delegate.setDynamicHeight(element.element, height);\n }\n }\n}\nexport var RenderIndentGuides;\n(function (RenderIndentGuides) {\n RenderIndentGuides[\"None\"] = \"none\";\n RenderIndentGuides[\"OnHover\"] = \"onHover\";\n RenderIndentGuides[\"Always\"] = \"always\";\n})(RenderIndentGuides || (RenderIndentGuides = {}));\nclass EventCollection {\n constructor(onDidChange, _elements = []) {\n this._elements = _elements;\n this.onDidChange = Event.forEach(onDidChange, elements => this._elements = elements);\n }\n get elements() {\n return this._elements;\n }\n}\nclass TreeRenderer {\n constructor(renderer, modelProvider, onDidChangeCollapseState, activeNodes, options = {}) {\n this.renderer = renderer;\n this.modelProvider = modelProvider;\n this.activeNodes = activeNodes;\n this.renderedElements = new Map();\n this.renderedNodes = new Map();\n this.indent = TreeRenderer.DefaultIndent;\n this.hideTwistiesOfChildlessElements = false;\n this.shouldRenderIndentGuides = false;\n this.renderedIndentGuides = new SetMap();\n this.activeIndentNodes = new Set();\n this.indentGuidesDisposable = Disposable.None;\n this.disposables = new DisposableStore();\n this.templateId = renderer.templateId;\n this.updateOptions(options);\n Event.map(onDidChangeCollapseState, e => e.node)(this.onDidChangeNodeTwistieState, this, this.disposables);\n if (renderer.onDidChangeTwistieState) {\n renderer.onDidChangeTwistieState(this.onDidChangeTwistieState, this, this.disposables);\n }\n }\n updateOptions(options = {}) {\n if (typeof options.indent !== 'undefined') {\n this.indent = clamp(options.indent, 0, 40);\n }\n if (typeof options.renderIndentGuides !== 'undefined') {\n const shouldRenderIndentGuides = options.renderIndentGuides !== RenderIndentGuides.None;\n if (shouldRenderIndentGuides !== this.shouldRenderIndentGuides) {\n this.shouldRenderIndentGuides = shouldRenderIndentGuides;\n this.indentGuidesDisposable.dispose();\n if (shouldRenderIndentGuides) {\n const disposables = new DisposableStore();\n this.activeNodes.onDidChange(this._onDidChangeActiveNodes, this, disposables);\n this.indentGuidesDisposable = disposables;\n this._onDidChangeActiveNodes(this.activeNodes.elements);\n }\n }\n }\n if (typeof options.hideTwistiesOfChildlessElements !== 'undefined') {\n this.hideTwistiesOfChildlessElements = options.hideTwistiesOfChildlessElements;\n }\n }\n renderTemplate(container) {\n const el = append(container, $('.monaco-tl-row'));\n const indent = append(el, $('.monaco-tl-indent'));\n const twistie = append(el, $('.monaco-tl-twistie'));\n const contents = append(el, $('.monaco-tl-contents'));\n const templateData = this.renderer.renderTemplate(contents);\n return { container, indent, twistie, indentGuidesDisposable: Disposable.None, templateData };\n }\n renderElement(node, index, templateData, height) {\n if (typeof height === 'number') {\n this.renderedNodes.set(node, { templateData, height });\n this.renderedElements.set(node.element, node);\n }\n const indent = TreeRenderer.DefaultIndent + (node.depth - 1) * this.indent;\n templateData.twistie.style.paddingLeft = `${indent}px`;\n templateData.indent.style.width = `${indent + this.indent - 16}px`;\n this.renderTwistie(node, templateData);\n if (typeof height === 'number') {\n this.renderIndentGuides(node, templateData);\n }\n this.renderer.renderElement(node, index, templateData.templateData, height);\n }\n disposeElement(node, index, templateData, height) {\n templateData.indentGuidesDisposable.dispose();\n if (this.renderer.disposeElement) {\n this.renderer.disposeElement(node, index, templateData.templateData, height);\n }\n if (typeof height === 'number') {\n this.renderedNodes.delete(node);\n this.renderedElements.delete(node.element);\n }\n }\n disposeTemplate(templateData) {\n this.renderer.disposeTemplate(templateData.templateData);\n }\n onDidChangeTwistieState(element) {\n const node = this.renderedElements.get(element);\n if (!node) {\n return;\n }\n this.onDidChangeNodeTwistieState(node);\n }\n onDidChangeNodeTwistieState(node) {\n const data = this.renderedNodes.get(node);\n if (!data) {\n return;\n }\n this.renderTwistie(node, data.templateData);\n this._onDidChangeActiveNodes(this.activeNodes.elements);\n this.renderIndentGuides(node, data.templateData);\n }\n renderTwistie(node, templateData) {\n templateData.twistie.classList.remove(...treeItemExpandedIcon.classNamesArray);\n let twistieRendered = false;\n if (this.renderer.renderTwistie) {\n twistieRendered = this.renderer.renderTwistie(node.element, templateData.twistie);\n }\n if (node.collapsible && (!this.hideTwistiesOfChildlessElements || node.visibleChildrenCount > 0)) {\n if (!twistieRendered) {\n templateData.twistie.classList.add(...treeItemExpandedIcon.classNamesArray);\n }\n templateData.twistie.classList.add('collapsible');\n templateData.twistie.classList.toggle('collapsed', node.collapsed);\n }\n else {\n templateData.twistie.classList.remove('collapsible', 'collapsed');\n }\n if (node.collapsible) {\n templateData.container.setAttribute('aria-expanded', String(!node.collapsed));\n }\n else {\n templateData.container.removeAttribute('aria-expanded');\n }\n }\n renderIndentGuides(target, templateData) {\n clearNode(templateData.indent);\n templateData.indentGuidesDisposable.dispose();\n if (!this.shouldRenderIndentGuides) {\n return;\n }\n const disposableStore = new DisposableStore();\n const model = this.modelProvider();\n let node = target;\n while (true) {\n const ref = model.getNodeLocation(node);\n const parentRef = model.getParentNodeLocation(ref);\n if (!parentRef) {\n break;\n }\n const parent = model.getNode(parentRef);\n const guide = $('.indent-guide', { style: `width: ${this.indent}px` });\n if (this.activeIndentNodes.has(parent)) {\n guide.classList.add('active');\n }\n if (templateData.indent.childElementCount === 0) {\n templateData.indent.appendChild(guide);\n }\n else {\n templateData.indent.insertBefore(guide, templateData.indent.firstElementChild);\n }\n this.renderedIndentGuides.add(parent, guide);\n disposableStore.add(toDisposable(() => this.renderedIndentGuides.delete(parent, guide)));\n node = parent;\n }\n templateData.indentGuidesDisposable = disposableStore;\n }\n _onDidChangeActiveNodes(nodes) {\n if (!this.shouldRenderIndentGuides) {\n return;\n }\n const set = new Set();\n const model = this.modelProvider();\n nodes.forEach(node => {\n const ref = model.getNodeLocation(node);\n try {\n const parentRef = model.getParentNodeLocation(ref);\n if (node.collapsible && node.children.length > 0 && !node.collapsed) {\n set.add(node);\n }\n else if (parentRef) {\n set.add(model.getNode(parentRef));\n }\n }\n catch (_a) {\n // noop\n }\n });\n this.activeIndentNodes.forEach(node => {\n if (!set.has(node)) {\n this.renderedIndentGuides.forEach(node, line => line.classList.remove('active'));\n }\n });\n set.forEach(node => {\n if (!this.activeIndentNodes.has(node)) {\n this.renderedIndentGuides.forEach(node, line => line.classList.add('active'));\n }\n });\n this.activeIndentNodes = set;\n }\n dispose() {\n this.renderedNodes.clear();\n this.renderedElements.clear();\n this.indentGuidesDisposable.dispose();\n dispose(this.disposables);\n }\n}\nTreeRenderer.DefaultIndent = 8;\nclass TypeFilter {\n constructor(tree, keyboardNavigationLabelProvider, _filter) {\n this.tree = tree;\n this.keyboardNavigationLabelProvider = keyboardNavigationLabelProvider;\n this._filter = _filter;\n this._totalCount = 0;\n this._matchCount = 0;\n this._pattern = '';\n this._lowercasePattern = '';\n this.disposables = new DisposableStore();\n tree.onWillRefilter(this.reset, this, this.disposables);\n }\n get totalCount() { return this._totalCount; }\n get matchCount() { return this._matchCount; }\n set pattern(pattern) {\n this._pattern = pattern;\n this._lowercasePattern = pattern.toLowerCase();\n }\n filter(element, parentVisibility) {\n if (this._filter) {\n const result = this._filter.filter(element, parentVisibility);\n if (this.tree.options.simpleKeyboardNavigation) {\n return result;\n }\n let visibility;\n if (typeof result === 'boolean') {\n visibility = result ? 1 /* Visible */ : 0 /* Hidden */;\n }\n else if (isFilterResult(result)) {\n visibility = getVisibleState(result.visibility);\n }\n else {\n visibility = result;\n }\n if (visibility === 0 /* Hidden */) {\n return false;\n }\n }\n this._totalCount++;\n if (this.tree.options.simpleKeyboardNavigation || !this._pattern) {\n this._matchCount++;\n return { data: FuzzyScore.Default, visibility: true };\n }\n const label = this.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(element);\n const labels = Array.isArray(label) ? label : [label];\n for (const l of labels) {\n const labelStr = l && l.toString();\n if (typeof labelStr === 'undefined') {\n return { data: FuzzyScore.Default, visibility: true };\n }\n const score = fuzzyScore(this._pattern, this._lowercasePattern, 0, labelStr, labelStr.toLowerCase(), 0, true);\n if (score) {\n this._matchCount++;\n return labels.length === 1 ?\n { data: score, visibility: true } :\n { data: { label: labelStr, score: score }, visibility: true };\n }\n }\n if (this.tree.options.filterOnType) {\n return 2 /* Recurse */;\n }\n else {\n return { data: FuzzyScore.Default, visibility: true };\n }\n }\n reset() {\n this._totalCount = 0;\n this._matchCount = 0;\n }\n dispose() {\n dispose(this.disposables);\n }\n}\nclass TypeFilterController {\n constructor(tree, model, view, filter, keyboardNavigationDelegate) {\n this.tree = tree;\n this.view = view;\n this.filter = filter;\n this.keyboardNavigationDelegate = keyboardNavigationDelegate;\n this._enabled = false;\n this._pattern = '';\n this._empty = false;\n this._onDidChangeEmptyState = new Emitter();\n this.positionClassName = 'ne';\n this.automaticKeyboardNavigation = true;\n this.triggered = false;\n this._onDidChangePattern = new Emitter();\n this.enabledDisposables = new DisposableStore();\n this.disposables = new DisposableStore();\n this.domNode = $(`.monaco-list-type-filter.${this.positionClassName}`);\n this.domNode.draggable = true;\n domEvent(this.domNode, 'dragstart')(this.onDragStart, this, this.disposables);\n this.messageDomNode = append(view.getHTMLElement(), $(`.monaco-list-type-filter-message`));\n this.labelDomNode = append(this.domNode, $('span.label'));\n const controls = append(this.domNode, $('.controls'));\n this._filterOnType = !!tree.options.filterOnType;\n this.filterOnTypeDomNode = append(controls, $('input.filter'));\n this.filterOnTypeDomNode.type = 'checkbox';\n this.filterOnTypeDomNode.checked = this._filterOnType;\n this.filterOnTypeDomNode.tabIndex = -1;\n this.updateFilterOnTypeTitleAndIcon();\n domEvent(this.filterOnTypeDomNode, 'input')(this.onDidChangeFilterOnType, this, this.disposables);\n this.clearDomNode = append(controls, $('button.clear' + treeFilterClearIcon.cssSelector));\n this.clearDomNode.tabIndex = -1;\n this.clearDomNode.title = localize('clear', \"Clear\");\n this.keyboardNavigationEventFilter = tree.options.keyboardNavigationEventFilter;\n model.onDidSplice(this.onDidSpliceModel, this, this.disposables);\n this.updateOptions(tree.options);\n }\n get enabled() { return this._enabled; }\n get pattern() { return this._pattern; }\n get filterOnType() { return this._filterOnType; }\n updateOptions(options) {\n if (options.simpleKeyboardNavigation) {\n this.disable();\n }\n else {\n this.enable();\n }\n if (typeof options.filterOnType !== 'undefined') {\n this._filterOnType = !!options.filterOnType;\n this.filterOnTypeDomNode.checked = this._filterOnType;\n this.updateFilterOnTypeTitleAndIcon();\n }\n if (typeof options.automaticKeyboardNavigation !== 'undefined') {\n this.automaticKeyboardNavigation = options.automaticKeyboardNavigation;\n }\n this.tree.refilter();\n this.render();\n if (!this.automaticKeyboardNavigation) {\n this.onEventOrInput('');\n }\n }\n enable() {\n if (this._enabled) {\n return;\n }\n const onKeyDown = Event.chain(domEvent(this.view.getHTMLElement(), 'keydown'))\n .filter(e => !isInputElement(e.target) || e.target === this.filterOnTypeDomNode)\n .filter(e => e.key !== 'Dead' && !/^Media/.test(e.key))\n .map(e => new StandardKeyboardEvent(e))\n .filter(this.keyboardNavigationEventFilter || (() => true))\n .filter(() => this.automaticKeyboardNavigation || this.triggered)\n .filter(e => (this.keyboardNavigationDelegate.mightProducePrintableCharacter(e) && !(e.keyCode === 18 /* DownArrow */ || e.keyCode === 16 /* UpArrow */ || e.keyCode === 15 /* LeftArrow */ || e.keyCode === 17 /* RightArrow */)) || ((this.pattern.length > 0 || this.triggered) && ((e.keyCode === 9 /* Escape */ || e.keyCode === 1 /* Backspace */) && !e.altKey && !e.ctrlKey && !e.metaKey) || (e.keyCode === 1 /* Backspace */ && (isMacintosh ? (e.altKey && !e.metaKey) : e.ctrlKey) && !e.shiftKey)))\n .forEach(e => { e.stopPropagation(); e.preventDefault(); })\n .event;\n const onClear = domEvent(this.clearDomNode, 'click');\n Event.chain(Event.any(onKeyDown, onClear))\n .event(this.onEventOrInput, this, this.enabledDisposables);\n this.filter.pattern = '';\n this.tree.refilter();\n this.render();\n this._enabled = true;\n this.triggered = false;\n }\n disable() {\n if (!this._enabled) {\n return;\n }\n this.domNode.remove();\n this.enabledDisposables.clear();\n this.tree.refilter();\n this.render();\n this._enabled = false;\n this.triggered = false;\n }\n onEventOrInput(e) {\n if (typeof e === 'string') {\n this.onInput(e);\n }\n else if (e instanceof MouseEvent || e.keyCode === 9 /* Escape */ || (e.keyCode === 1 /* Backspace */ && (isMacintosh ? e.altKey : e.ctrlKey))) {\n this.onInput('');\n }\n else if (e.keyCode === 1 /* Backspace */) {\n this.onInput(this.pattern.length === 0 ? '' : this.pattern.substr(0, this.pattern.length - 1));\n }\n else {\n this.onInput(this.pattern + e.browserEvent.key);\n }\n }\n onInput(pattern) {\n const container = this.view.getHTMLElement();\n if (pattern && !this.domNode.parentElement) {\n container.append(this.domNode);\n }\n else if (!pattern && this.domNode.parentElement) {\n this.domNode.remove();\n this.tree.domFocus();\n }\n this._pattern = pattern;\n this._onDidChangePattern.fire(pattern);\n this.filter.pattern = pattern;\n this.tree.refilter();\n if (pattern) {\n this.tree.focusNext(0, true, undefined, node => !FuzzyScore.isDefault(node.filterData));\n }\n const focus = this.tree.getFocus();\n if (focus.length > 0) {\n const element = focus[0];\n if (this.tree.getRelativeTop(element) === null) {\n this.tree.reveal(element, 0.5);\n }\n }\n this.render();\n if (!pattern) {\n this.triggered = false;\n }\n }\n onDragStart() {\n const container = this.view.getHTMLElement();\n const { left } = getDomNodePagePosition(container);\n const containerWidth = container.clientWidth;\n const midContainerWidth = containerWidth / 2;\n const width = this.domNode.clientWidth;\n const disposables = new DisposableStore();\n let positionClassName = this.positionClassName;\n const updatePosition = () => {\n switch (positionClassName) {\n case 'nw':\n this.domNode.style.top = `4px`;\n this.domNode.style.left = `4px`;\n break;\n case 'ne':\n this.domNode.style.top = `4px`;\n this.domNode.style.left = `${containerWidth - width - 6}px`;\n break;\n }\n };\n const onDragOver = (event) => {\n event.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)\n const x = event.clientX - left;\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'none';\n }\n if (x < midContainerWidth) {\n positionClassName = 'nw';\n }\n else {\n positionClassName = 'ne';\n }\n updatePosition();\n };\n const onDragEnd = () => {\n this.positionClassName = positionClassName;\n this.domNode.className = `monaco-list-type-filter ${this.positionClassName}`;\n this.domNode.style.top = '';\n this.domNode.style.left = '';\n dispose(disposables);\n };\n updatePosition();\n this.domNode.classList.remove(positionClassName);\n this.domNode.classList.add('dragging');\n disposables.add(toDisposable(() => this.domNode.classList.remove('dragging')));\n domEvent(document, 'dragover')(onDragOver, null, disposables);\n domEvent(this.domNode, 'dragend')(onDragEnd, null, disposables);\n StaticDND.CurrentDragAndDropData = new DragAndDropData('vscode-ui');\n disposables.add(toDisposable(() => StaticDND.CurrentDragAndDropData = undefined));\n }\n onDidSpliceModel() {\n if (!this._enabled || this.pattern.length === 0) {\n return;\n }\n this.tree.refilter();\n this.render();\n }\n onDidChangeFilterOnType() {\n this.tree.updateOptions({ filterOnType: this.filterOnTypeDomNode.checked });\n this.tree.refilter();\n this.tree.domFocus();\n this.render();\n this.updateFilterOnTypeTitleAndIcon();\n }\n updateFilterOnTypeTitleAndIcon() {\n if (this.filterOnType) {\n this.filterOnTypeDomNode.classList.remove(...treeFilterOnTypeOffIcon.classNamesArray);\n this.filterOnTypeDomNode.classList.add(...treeFilterOnTypeOnIcon.classNamesArray);\n this.filterOnTypeDomNode.title = localize('disable filter on type', \"Disable Filter on Type\");\n }\n else {\n this.filterOnTypeDomNode.classList.remove(...treeFilterOnTypeOnIcon.classNamesArray);\n this.filterOnTypeDomNode.classList.add(...treeFilterOnTypeOffIcon.classNamesArray);\n this.filterOnTypeDomNode.title = localize('enable filter on type', \"Enable Filter on Type\");\n }\n }\n render() {\n const noMatches = this.filter.totalCount > 0 && this.filter.matchCount === 0;\n if (this.pattern && this.tree.options.filterOnType && noMatches) {\n this.messageDomNode.textContent = localize('empty', \"No elements found\");\n this._empty = true;\n }\n else {\n this.messageDomNode.innerText = '';\n this._empty = false;\n }\n this.domNode.classList.toggle('no-matches', noMatches);\n this.domNode.title = localize('found', \"Matched {0} out of {1} elements\", this.filter.matchCount, this.filter.totalCount);\n this.labelDomNode.textContent = this.pattern.length > 16 ? '…' + this.pattern.substr(this.pattern.length - 16) : this.pattern;\n this._onDidChangeEmptyState.fire(this._empty);\n }\n shouldAllowFocus(node) {\n if (!this.enabled || !this.pattern || this.filterOnType) {\n return true;\n }\n if (this.filter.totalCount > 0 && this.filter.matchCount <= 1) {\n return true;\n }\n return !FuzzyScore.isDefault(node.filterData);\n }\n dispose() {\n if (this._enabled) {\n this.domNode.remove();\n this.enabledDisposables.dispose();\n this._enabled = false;\n this.triggered = false;\n }\n this._onDidChangePattern.dispose();\n dispose(this.disposables);\n }\n}\nfunction asTreeMouseEvent(event) {\n let target = TreeMouseEventTarget.Unknown;\n if (hasParentWithClass(event.browserEvent.target, 'monaco-tl-twistie', 'monaco-tl-row')) {\n target = TreeMouseEventTarget.Twistie;\n }\n else if (hasParentWithClass(event.browserEvent.target, 'monaco-tl-contents', 'monaco-tl-row')) {\n target = TreeMouseEventTarget.Element;\n }\n return {\n browserEvent: event.browserEvent,\n element: event.element ? event.element.element : null,\n target\n };\n}\nfunction dfs(node, fn) {\n fn(node);\n node.children.forEach(child => dfs(child, fn));\n}\n/**\n * The trait concept needs to exist at the tree level, because collapsed\n * tree nodes will not be known by the list.\n */\nclass Trait {\n constructor(identityProvider) {\n this.identityProvider = identityProvider;\n this.nodes = [];\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n }\n get nodeSet() {\n if (!this._nodeSet) {\n this._nodeSet = this.createNodeSet();\n }\n return this._nodeSet;\n }\n set(nodes, browserEvent) {\n var _a;\n if (!((_a = browserEvent) === null || _a === void 0 ? void 0 : _a.__forceEvent) && equals(this.nodes, nodes)) {\n return;\n }\n this._set(nodes, false, browserEvent);\n }\n _set(nodes, silent, browserEvent) {\n this.nodes = [...nodes];\n this.elements = undefined;\n this._nodeSet = undefined;\n if (!silent) {\n const that = this;\n this._onDidChange.fire({ get elements() { return that.get(); }, browserEvent });\n }\n }\n get() {\n if (!this.elements) {\n this.elements = this.nodes.map(node => node.element);\n }\n return [...this.elements];\n }\n getNodes() {\n return this.nodes;\n }\n has(node) {\n return this.nodeSet.has(node);\n }\n onDidModelSplice({ insertedNodes, deletedNodes }) {\n if (!this.identityProvider) {\n const set = this.createNodeSet();\n const visit = (node) => set.delete(node);\n deletedNodes.forEach(node => dfs(node, visit));\n this.set([...set.values()]);\n return;\n }\n const deletedNodesIdSet = new Set();\n const deletedNodesVisitor = (node) => deletedNodesIdSet.add(this.identityProvider.getId(node.element).toString());\n deletedNodes.forEach(node => dfs(node, deletedNodesVisitor));\n const insertedNodesMap = new Map();\n const insertedNodesVisitor = (node) => insertedNodesMap.set(this.identityProvider.getId(node.element).toString(), node);\n insertedNodes.forEach(node => dfs(node, insertedNodesVisitor));\n const nodes = [];\n for (const node of this.nodes) {\n const id = this.identityProvider.getId(node.element).toString();\n const wasDeleted = deletedNodesIdSet.has(id);\n if (!wasDeleted) {\n nodes.push(node);\n }\n else {\n const insertedNode = insertedNodesMap.get(id);\n if (insertedNode) {\n nodes.push(insertedNode);\n }\n }\n }\n this._set(nodes, true);\n }\n createNodeSet() {\n const set = new Set();\n for (const node of this.nodes) {\n set.add(node);\n }\n return set;\n }\n}\nclass TreeNodeListMouseController extends MouseController {\n constructor(list, tree) {\n super(list);\n this.tree = tree;\n }\n onViewPointer(e) {\n if (isInputElement(e.browserEvent.target) || isMonacoEditor(e.browserEvent.target)) {\n return;\n }\n const node = e.element;\n if (!node) {\n return super.onViewPointer(e);\n }\n if (this.isSelectionRangeChangeEvent(e) || this.isSelectionSingleChangeEvent(e)) {\n return super.onViewPointer(e);\n }\n const target = e.browserEvent.target;\n const onTwistie = target.classList.contains('monaco-tl-twistie')\n || (target.classList.contains('monaco-icon-label') && target.classList.contains('folder-icon') && e.browserEvent.offsetX < 16);\n let expandOnlyOnTwistieClick = false;\n if (typeof this.tree.expandOnlyOnTwistieClick === 'function') {\n expandOnlyOnTwistieClick = this.tree.expandOnlyOnTwistieClick(node.element);\n }\n else {\n expandOnlyOnTwistieClick = !!this.tree.expandOnlyOnTwistieClick;\n }\n if (expandOnlyOnTwistieClick && !onTwistie && e.browserEvent.detail !== 2) {\n return super.onViewPointer(e);\n }\n if (!this.tree.expandOnDoubleClick && e.browserEvent.detail === 2) {\n return super.onViewPointer(e);\n }\n if (node.collapsible) {\n const model = this.tree.model; // internal\n const location = model.getNodeLocation(node);\n const recursive = e.browserEvent.altKey;\n this.tree.setFocus([location]);\n model.setCollapsed(location, undefined, recursive);\n if (expandOnlyOnTwistieClick && onTwistie) {\n return;\n }\n }\n super.onViewPointer(e);\n }\n onDoubleClick(e) {\n const onTwistie = e.browserEvent.target.classList.contains('monaco-tl-twistie');\n if (onTwistie || !this.tree.expandOnDoubleClick) {\n return;\n }\n super.onDoubleClick(e);\n }\n}\n/**\n * We use this List subclass to restore selection and focus as nodes\n * get rendered in the list, possibly due to a node expand() call.\n */\nclass TreeNodeList extends List {\n constructor(user, container, virtualDelegate, renderers, focusTrait, selectionTrait, anchorTrait, options) {\n super(user, container, virtualDelegate, renderers, options);\n this.focusTrait = focusTrait;\n this.selectionTrait = selectionTrait;\n this.anchorTrait = anchorTrait;\n }\n createMouseController(options) {\n return new TreeNodeListMouseController(this, options.tree);\n }\n splice(start, deleteCount, elements = []) {\n super.splice(start, deleteCount, elements);\n if (elements.length === 0) {\n return;\n }\n const additionalFocus = [];\n const additionalSelection = [];\n let anchor;\n elements.forEach((node, index) => {\n if (this.focusTrait.has(node)) {\n additionalFocus.push(start + index);\n }\n if (this.selectionTrait.has(node)) {\n additionalSelection.push(start + index);\n }\n if (this.anchorTrait.has(node)) {\n anchor = start + index;\n }\n });\n if (additionalFocus.length > 0) {\n super.setFocus(distinctES6([...super.getFocus(), ...additionalFocus]));\n }\n if (additionalSelection.length > 0) {\n super.setSelection(distinctES6([...super.getSelection(), ...additionalSelection]));\n }\n if (typeof anchor === 'number') {\n super.setAnchor(anchor);\n }\n }\n setFocus(indexes, browserEvent, fromAPI = false) {\n super.setFocus(indexes, browserEvent);\n if (!fromAPI) {\n this.focusTrait.set(indexes.map(i => this.element(i)), browserEvent);\n }\n }\n setSelection(indexes, browserEvent, fromAPI = false) {\n super.setSelection(indexes, browserEvent);\n if (!fromAPI) {\n this.selectionTrait.set(indexes.map(i => this.element(i)), browserEvent);\n }\n }\n setAnchor(index, fromAPI = false) {\n super.setAnchor(index);\n if (!fromAPI) {\n if (typeof index === 'undefined') {\n this.anchorTrait.set([]);\n }\n else {\n this.anchorTrait.set([this.element(index)]);\n }\n }\n }\n}\nexport class AbstractTree {\n constructor(user, container, delegate, renderers, _options = {}) {\n this._options = _options;\n this.eventBufferer = new EventBufferer();\n this.disposables = new DisposableStore();\n this._onWillRefilter = new Emitter();\n this.onWillRefilter = this._onWillRefilter.event;\n this._onDidUpdateOptions = new Emitter();\n const treeDelegate = new ComposedTreeDelegate(delegate);\n const onDidChangeCollapseStateRelay = new Relay();\n const onDidChangeActiveNodes = new Relay();\n const activeNodes = new EventCollection(onDidChangeActiveNodes.event);\n this.renderers = renderers.map(r => new TreeRenderer(r, () => this.model, onDidChangeCollapseStateRelay.event, activeNodes, _options));\n for (let r of this.renderers) {\n this.disposables.add(r);\n }\n let filter;\n if (_options.keyboardNavigationLabelProvider) {\n filter = new TypeFilter(this, _options.keyboardNavigationLabelProvider, _options.filter);\n _options = Object.assign(Object.assign({}, _options), { filter: filter }); // TODO need typescript help here\n this.disposables.add(filter);\n }\n this.focus = new Trait(_options.identityProvider);\n this.selection = new Trait(_options.identityProvider);\n this.anchor = new Trait(_options.identityProvider);\n this.view = new TreeNodeList(user, container, treeDelegate, this.renderers, this.focus, this.selection, this.anchor, Object.assign(Object.assign({}, asListOptions(() => this.model, _options)), { tree: this }));\n this.model = this.createModel(user, this.view, _options);\n onDidChangeCollapseStateRelay.input = this.model.onDidChangeCollapseState;\n const onDidModelSplice = Event.forEach(this.model.onDidSplice, e => {\n this.eventBufferer.bufferEvents(() => {\n this.focus.onDidModelSplice(e);\n this.selection.onDidModelSplice(e);\n });\n });\n // Make sure the `forEach` always runs\n onDidModelSplice(() => null, null, this.disposables);\n // Active nodes can change when the model changes or when focus or selection change.\n // We debounce it with 0 delay since these events may fire in the same stack and we only\n // want to run this once. It also doesn't matter if it runs on the next tick since it's only\n // a nice to have UI feature.\n onDidChangeActiveNodes.input = Event.chain(Event.any(onDidModelSplice, this.focus.onDidChange, this.selection.onDidChange))\n .debounce(() => null, 0)\n .map(() => {\n const set = new Set();\n for (const node of this.focus.getNodes()) {\n set.add(node);\n }\n for (const node of this.selection.getNodes()) {\n set.add(node);\n }\n return [...set.values()];\n }).event;\n if (_options.keyboardSupport !== false) {\n const onKeyDown = Event.chain(this.view.onKeyDown)\n .filter(e => !isInputElement(e.target))\n .map(e => new StandardKeyboardEvent(e));\n onKeyDown.filter(e => e.keyCode === 15 /* LeftArrow */).on(this.onLeftArrow, this, this.disposables);\n onKeyDown.filter(e => e.keyCode === 17 /* RightArrow */).on(this.onRightArrow, this, this.disposables);\n onKeyDown.filter(e => e.keyCode === 10 /* Space */).on(this.onSpace, this, this.disposables);\n }\n if (_options.keyboardNavigationLabelProvider) {\n const delegate = _options.keyboardNavigationDelegate || DefaultKeyboardNavigationDelegate;\n this.typeFilterController = new TypeFilterController(this, this.model, this.view, filter, delegate);\n this.focusNavigationFilter = node => this.typeFilterController.shouldAllowFocus(node);\n this.disposables.add(this.typeFilterController);\n }\n this.styleElement = createStyleSheet(this.view.getHTMLElement());\n this.getHTMLElement().classList.toggle('always', this._options.renderIndentGuides === RenderIndentGuides.Always);\n }\n get onDidChangeFocus() { return this.eventBufferer.wrapEvent(this.focus.onDidChange); }\n get onDidChangeSelection() { return this.eventBufferer.wrapEvent(this.selection.onDidChange); }\n get onMouseDblClick() { return Event.map(this.view.onMouseDblClick, asTreeMouseEvent); }\n get onPointer() { return Event.map(this.view.onPointer, asTreeMouseEvent); }\n get onDidFocus() { return this.view.onDidFocus; }\n get onDidChangeCollapseState() { return this.model.onDidChangeCollapseState; }\n get expandOnDoubleClick() { return typeof this._options.expandOnDoubleClick === 'undefined' ? true : this._options.expandOnDoubleClick; }\n get expandOnlyOnTwistieClick() { return typeof this._options.expandOnlyOnTwistieClick === 'undefined' ? true : this._options.expandOnlyOnTwistieClick; }\n get onDidDispose() { return this.view.onDidDispose; }\n updateOptions(optionsUpdate = {}) {\n this._options = Object.assign(Object.assign({}, this._options), optionsUpdate);\n for (const renderer of this.renderers) {\n renderer.updateOptions(optionsUpdate);\n }\n this.view.updateOptions({\n enableKeyboardNavigation: this._options.simpleKeyboardNavigation,\n automaticKeyboardNavigation: this._options.automaticKeyboardNavigation,\n smoothScrolling: this._options.smoothScrolling,\n horizontalScrolling: this._options.horizontalScrolling\n });\n if (this.typeFilterController) {\n this.typeFilterController.updateOptions(this._options);\n }\n this._onDidUpdateOptions.fire(this._options);\n this.getHTMLElement().classList.toggle('always', this._options.renderIndentGuides === RenderIndentGuides.Always);\n }\n get options() {\n return this._options;\n }\n // Widget\n getHTMLElement() {\n return this.view.getHTMLElement();\n }\n get scrollTop() {\n return this.view.scrollTop;\n }\n set scrollTop(scrollTop) {\n this.view.scrollTop = scrollTop;\n }\n domFocus() {\n this.view.domFocus();\n }\n layout(height, width) {\n this.view.layout(height, width);\n }\n style(styles) {\n const suffix = `.${this.view.domId}`;\n const content = [];\n if (styles.treeIndentGuidesStroke) {\n content.push(`.monaco-list${suffix}:hover .monaco-tl-indent > .indent-guide, .monaco-list${suffix}.always .monaco-tl-indent > .indent-guide { border-color: ${styles.treeIndentGuidesStroke.transparent(0.4)}; }`);\n content.push(`.monaco-list${suffix} .monaco-tl-indent > .indent-guide.active { border-color: ${styles.treeIndentGuidesStroke}; }`);\n }\n this.styleElement.textContent = content.join('\\n');\n this.view.style(styles);\n }\n collapse(location, recursive = false) {\n return this.model.setCollapsed(location, true, recursive);\n }\n expand(location, recursive = false) {\n return this.model.setCollapsed(location, false, recursive);\n }\n isCollapsible(location) {\n return this.model.isCollapsible(location);\n }\n setCollapsible(location, collapsible) {\n return this.model.setCollapsible(location, collapsible);\n }\n isCollapsed(location) {\n return this.model.isCollapsed(location);\n }\n refilter() {\n this._onWillRefilter.fire(undefined);\n this.model.refilter();\n }\n setSelection(elements, browserEvent) {\n const nodes = elements.map(e => this.model.getNode(e));\n this.selection.set(nodes, browserEvent);\n const indexes = elements.map(e => this.model.getListIndex(e)).filter(i => i > -1);\n this.view.setSelection(indexes, browserEvent, true);\n }\n getSelection() {\n return this.selection.get();\n }\n setFocus(elements, browserEvent) {\n const nodes = elements.map(e => this.model.getNode(e));\n this.focus.set(nodes, browserEvent);\n const indexes = elements.map(e => this.model.getListIndex(e)).filter(i => i > -1);\n this.view.setFocus(indexes, browserEvent, true);\n }\n focusNext(n = 1, loop = false, browserEvent, filter = this.focusNavigationFilter) {\n this.view.focusNext(n, loop, browserEvent, filter);\n }\n getFocus() {\n return this.focus.get();\n }\n reveal(location, relativeTop) {\n this.model.expandTo(location);\n const index = this.model.getListIndex(location);\n if (index === -1) {\n return;\n }\n this.view.reveal(index, relativeTop);\n }\n /**\n * Returns the relative position of an element rendered in the list.\n * Returns `null` if the element isn't *entirely* in the visible viewport.\n */\n getRelativeTop(location) {\n const index = this.model.getListIndex(location);\n if (index === -1) {\n return null;\n }\n return this.view.getRelativeTop(index);\n }\n // List\n onLeftArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n const nodes = this.view.getFocusedElements();\n if (nodes.length === 0) {\n return;\n }\n const node = nodes[0];\n const location = this.model.getNodeLocation(node);\n const didChange = this.model.setCollapsed(location, true);\n if (!didChange) {\n const parentLocation = this.model.getParentNodeLocation(location);\n if (!parentLocation) {\n return;\n }\n const parentListIndex = this.model.getListIndex(parentLocation);\n this.view.reveal(parentListIndex);\n this.view.setFocus([parentListIndex]);\n }\n }\n onRightArrow(e) {\n e.preventDefault();\n e.stopPropagation();\n const nodes = this.view.getFocusedElements();\n if (nodes.length === 0) {\n return;\n }\n const node = nodes[0];\n const location = this.model.getNodeLocation(node);\n const didChange = this.model.setCollapsed(location, false);\n if (!didChange) {\n if (!node.children.some(child => child.visible)) {\n return;\n }\n const [focusedIndex] = this.view.getFocus();\n const firstChildIndex = focusedIndex + 1;\n this.view.reveal(firstChildIndex);\n this.view.setFocus([firstChildIndex]);\n }\n }\n onSpace(e) {\n e.preventDefault();\n e.stopPropagation();\n const nodes = this.view.getFocusedElements();\n if (nodes.length === 0) {\n return;\n }\n const node = nodes[0];\n const location = this.model.getNodeLocation(node);\n const recursive = e.browserEvent.altKey;\n this.model.setCollapsed(location, undefined, recursive);\n }\n dispose() {\n dispose(this.disposables);\n this.view.dispose();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Iterable } from '../../../common/iterator.js';\nimport { IndexTreeModel } from './indexTreeModel.js';\nimport { TreeError } from './tree.js';\nexport class ObjectTreeModel {\n constructor(user, list, options = {}) {\n this.user = user;\n this.rootRef = null;\n this.nodes = new Map();\n this.nodesByIdentity = new Map();\n this.model = new IndexTreeModel(user, list, null, options);\n this.onDidSplice = this.model.onDidSplice;\n this.onDidChangeCollapseState = this.model.onDidChangeCollapseState;\n this.onDidChangeRenderNodeCount = this.model.onDidChangeRenderNodeCount;\n if (options.sorter) {\n this.sorter = {\n compare(a, b) {\n return options.sorter.compare(a.element, b.element);\n }\n };\n }\n this.identityProvider = options.identityProvider;\n }\n setChildren(element, children = Iterable.empty(), options = {}) {\n const location = this.getElementLocation(element);\n this._setChildren(location, this.preserveCollapseState(children), options);\n }\n _setChildren(location, children = Iterable.empty(), options) {\n const insertedElements = new Set();\n const insertedElementIds = new Set();\n const onDidCreateNode = (node) => {\n var _a;\n if (node.element === null) {\n return;\n }\n const tnode = node;\n insertedElements.add(tnode.element);\n this.nodes.set(tnode.element, tnode);\n if (this.identityProvider) {\n const id = this.identityProvider.getId(tnode.element).toString();\n insertedElementIds.add(id);\n this.nodesByIdentity.set(id, tnode);\n }\n (_a = options.onDidCreateNode) === null || _a === void 0 ? void 0 : _a.call(options, tnode);\n };\n const onDidDeleteNode = (node) => {\n var _a;\n if (node.element === null) {\n return;\n }\n const tnode = node;\n if (!insertedElements.has(tnode.element)) {\n this.nodes.delete(tnode.element);\n }\n if (this.identityProvider) {\n const id = this.identityProvider.getId(tnode.element).toString();\n if (!insertedElementIds.has(id)) {\n this.nodesByIdentity.delete(id);\n }\n }\n (_a = options.onDidDeleteNode) === null || _a === void 0 ? void 0 : _a.call(options, tnode);\n };\n this.model.splice([...location, 0], Number.MAX_VALUE, children, Object.assign(Object.assign({}, options), { onDidCreateNode, onDidDeleteNode }));\n }\n preserveCollapseState(elements = Iterable.empty()) {\n if (this.sorter) {\n elements = [...elements].sort(this.sorter.compare.bind(this.sorter));\n }\n return Iterable.map(elements, treeElement => {\n let node = this.nodes.get(treeElement.element);\n if (!node && this.identityProvider) {\n const id = this.identityProvider.getId(treeElement.element).toString();\n node = this.nodesByIdentity.get(id);\n }\n if (!node) {\n return Object.assign(Object.assign({}, treeElement), { children: this.preserveCollapseState(treeElement.children) });\n }\n const collapsible = typeof treeElement.collapsible === 'boolean' ? treeElement.collapsible : node.collapsible;\n const collapsed = typeof treeElement.collapsed !== 'undefined' ? treeElement.collapsed : node.collapsed;\n return Object.assign(Object.assign({}, treeElement), { collapsible,\n collapsed, children: this.preserveCollapseState(treeElement.children) });\n });\n }\n rerender(element) {\n const location = this.getElementLocation(element);\n this.model.rerender(location);\n }\n has(element) {\n return this.nodes.has(element);\n }\n getListIndex(element) {\n const location = this.getElementLocation(element);\n return this.model.getListIndex(location);\n }\n getListRenderCount(element) {\n const location = this.getElementLocation(element);\n return this.model.getListRenderCount(location);\n }\n isCollapsible(element) {\n const location = this.getElementLocation(element);\n return this.model.isCollapsible(location);\n }\n setCollapsible(element, collapsible) {\n const location = this.getElementLocation(element);\n return this.model.setCollapsible(location, collapsible);\n }\n isCollapsed(element) {\n const location = this.getElementLocation(element);\n return this.model.isCollapsed(location);\n }\n setCollapsed(element, collapsed, recursive) {\n const location = this.getElementLocation(element);\n return this.model.setCollapsed(location, collapsed, recursive);\n }\n expandTo(element) {\n const location = this.getElementLocation(element);\n this.model.expandTo(location);\n }\n refilter() {\n this.model.refilter();\n }\n getNode(element = null) {\n if (element === null) {\n return this.model.getNode(this.model.rootRef);\n }\n const node = this.nodes.get(element);\n if (!node) {\n throw new TreeError(this.user, `Tree element not found: ${element}`);\n }\n return node;\n }\n getNodeLocation(node) {\n return node.element;\n }\n getParentNodeLocation(element) {\n if (element === null) {\n throw new TreeError(this.user, `Invalid getParentNodeLocation call`);\n }\n const node = this.nodes.get(element);\n if (!node) {\n throw new TreeError(this.user, `Tree element not found: ${element}`);\n }\n const location = this.model.getNodeLocation(node);\n const parentLocation = this.model.getParentNodeLocation(location);\n const parent = this.model.getNode(parentLocation);\n return parent.element;\n }\n getElementLocation(element) {\n if (element === null) {\n return [];\n }\n const node = this.nodes.get(element);\n if (!node) {\n throw new TreeError(this.user, `Tree element not found: ${element}`);\n }\n return this.model.getNodeLocation(node);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Iterable } from '../../../common/iterator.js';\nimport { Event } from '../../../common/event.js';\nimport { TreeError, WeakMapper } from './tree.js';\nimport { ObjectTreeModel } from './objectTreeModel.js';\nfunction noCompress(element) {\n const elements = [element.element];\n const incompressible = element.incompressible || false;\n return {\n element: { elements, incompressible },\n children: Iterable.map(Iterable.from(element.children), noCompress),\n collapsible: element.collapsible,\n collapsed: element.collapsed\n };\n}\n// Exported only for test reasons, do not use directly\nexport function compress(element) {\n const elements = [element.element];\n const incompressible = element.incompressible || false;\n let childrenIterator;\n let children;\n while (true) {\n [children, childrenIterator] = Iterable.consume(Iterable.from(element.children), 2);\n if (children.length !== 1) {\n break;\n }\n if (children[0].incompressible) {\n break;\n }\n element = children[0];\n elements.push(element.element);\n }\n return {\n element: { elements, incompressible },\n children: Iterable.map(Iterable.concat(children, childrenIterator), compress),\n collapsible: element.collapsible,\n collapsed: element.collapsed\n };\n}\nfunction _decompress(element, index = 0) {\n let children;\n if (index < element.element.elements.length - 1) {\n children = [_decompress(element, index + 1)];\n }\n else {\n children = Iterable.map(Iterable.from(element.children), el => _decompress(el, 0));\n }\n if (index === 0 && element.element.incompressible) {\n return {\n element: element.element.elements[index],\n children,\n incompressible: true,\n collapsible: element.collapsible,\n collapsed: element.collapsed\n };\n }\n return {\n element: element.element.elements[index],\n children,\n collapsible: element.collapsible,\n collapsed: element.collapsed\n };\n}\n// Exported only for test reasons, do not use directly\nexport function decompress(element) {\n return _decompress(element, 0);\n}\nfunction splice(treeElement, element, children) {\n if (treeElement.element === element) {\n return Object.assign(Object.assign({}, treeElement), { children });\n }\n return Object.assign(Object.assign({}, treeElement), { children: Iterable.map(Iterable.from(treeElement.children), e => splice(e, element, children)) });\n}\nconst wrapIdentityProvider = (base) => ({\n getId(node) {\n return node.elements.map(e => base.getId(e).toString()).join('\\0');\n }\n});\n// Exported only for test reasons, do not use directly\nexport class CompressedObjectTreeModel {\n constructor(user, list, options = {}) {\n this.user = user;\n this.rootRef = null;\n this.nodes = new Map();\n this.model = new ObjectTreeModel(user, list, options);\n this.enabled = typeof options.compressionEnabled === 'undefined' ? true : options.compressionEnabled;\n this.identityProvider = options.identityProvider;\n }\n get onDidSplice() { return this.model.onDidSplice; }\n get onDidChangeCollapseState() { return this.model.onDidChangeCollapseState; }\n get onDidChangeRenderNodeCount() { return this.model.onDidChangeRenderNodeCount; }\n setChildren(element, children = Iterable.empty(), options) {\n // Diffs must be deem, since the compression can affect nested elements.\n // @see https://github.com/microsoft/vscode/pull/114237#issuecomment-759425034\n const diffIdentityProvider = options.diffIdentityProvider && wrapIdentityProvider(options.diffIdentityProvider);\n if (element === null) {\n const compressedChildren = Iterable.map(children, this.enabled ? compress : noCompress);\n this._setChildren(null, compressedChildren, { diffIdentityProvider, diffDepth: Infinity });\n return;\n }\n const compressedNode = this.nodes.get(element);\n if (!compressedNode) {\n throw new Error('Unknown compressed tree node');\n }\n const node = this.model.getNode(compressedNode);\n const compressedParentNode = this.model.getParentNodeLocation(compressedNode);\n const parent = this.model.getNode(compressedParentNode);\n const decompressedElement = decompress(node);\n const splicedElement = splice(decompressedElement, element, children);\n const recompressedElement = (this.enabled ? compress : noCompress)(splicedElement);\n const parentChildren = parent.children\n .map(child => child === node ? recompressedElement : child);\n this._setChildren(parent.element, parentChildren, {\n diffIdentityProvider,\n diffDepth: node.depth - parent.depth,\n });\n }\n setCompressionEnabled(enabled) {\n if (enabled === this.enabled) {\n return;\n }\n this.enabled = enabled;\n const root = this.model.getNode();\n const rootChildren = root.children;\n const decompressedRootChildren = Iterable.map(rootChildren, decompress);\n const recompressedRootChildren = Iterable.map(decompressedRootChildren, enabled ? compress : noCompress);\n // it should be safe to always use deep diff mode here if an identity\n // provider is available, since we know the raw nodes are unchanged.\n this._setChildren(null, recompressedRootChildren, {\n diffIdentityProvider: this.identityProvider,\n diffDepth: Infinity,\n });\n }\n _setChildren(node, children, options) {\n const insertedElements = new Set();\n const onDidCreateNode = (node) => {\n for (const element of node.element.elements) {\n insertedElements.add(element);\n this.nodes.set(element, node.element);\n }\n };\n const onDidDeleteNode = (node) => {\n for (const element of node.element.elements) {\n if (!insertedElements.has(element)) {\n this.nodes.delete(element);\n }\n }\n };\n this.model.setChildren(node, children, Object.assign(Object.assign({}, options), { onDidCreateNode, onDidDeleteNode }));\n }\n has(element) {\n return this.nodes.has(element);\n }\n getListIndex(location) {\n const node = this.getCompressedNode(location);\n return this.model.getListIndex(node);\n }\n getListRenderCount(location) {\n const node = this.getCompressedNode(location);\n return this.model.getListRenderCount(node);\n }\n getNode(location) {\n if (typeof location === 'undefined') {\n return this.model.getNode();\n }\n const node = this.getCompressedNode(location);\n return this.model.getNode(node);\n }\n // TODO: review this\n getNodeLocation(node) {\n const compressedNode = this.model.getNodeLocation(node);\n if (compressedNode === null) {\n return null;\n }\n return compressedNode.elements[compressedNode.elements.length - 1];\n }\n // TODO: review this\n getParentNodeLocation(location) {\n const compressedNode = this.getCompressedNode(location);\n const parentNode = this.model.getParentNodeLocation(compressedNode);\n if (parentNode === null) {\n return null;\n }\n return parentNode.elements[parentNode.elements.length - 1];\n }\n isCollapsible(location) {\n const compressedNode = this.getCompressedNode(location);\n return this.model.isCollapsible(compressedNode);\n }\n setCollapsible(location, collapsible) {\n const compressedNode = this.getCompressedNode(location);\n return this.model.setCollapsible(compressedNode, collapsible);\n }\n isCollapsed(location) {\n const compressedNode = this.getCompressedNode(location);\n return this.model.isCollapsed(compressedNode);\n }\n setCollapsed(location, collapsed, recursive) {\n const compressedNode = this.getCompressedNode(location);\n return this.model.setCollapsed(compressedNode, collapsed, recursive);\n }\n expandTo(location) {\n const compressedNode = this.getCompressedNode(location);\n this.model.expandTo(compressedNode);\n }\n rerender(location) {\n const compressedNode = this.getCompressedNode(location);\n this.model.rerender(compressedNode);\n }\n refilter() {\n this.model.refilter();\n }\n getCompressedNode(element) {\n if (element === null) {\n return null;\n }\n const node = this.nodes.get(element);\n if (!node) {\n throw new TreeError(this.user, `Tree element not found: ${element}`);\n }\n return node;\n }\n}\nexport const DefaultElementMapper = elements => elements[elements.length - 1];\nclass CompressedTreeNodeWrapper {\n constructor(unwrapper, node) {\n this.unwrapper = unwrapper;\n this.node = node;\n }\n get element() { return this.node.element === null ? null : this.unwrapper(this.node.element); }\n get children() { return this.node.children.map(node => new CompressedTreeNodeWrapper(this.unwrapper, node)); }\n get depth() { return this.node.depth; }\n get visibleChildrenCount() { return this.node.visibleChildrenCount; }\n get visibleChildIndex() { return this.node.visibleChildIndex; }\n get collapsible() { return this.node.collapsible; }\n get collapsed() { return this.node.collapsed; }\n get visible() { return this.node.visible; }\n get filterData() { return this.node.filterData; }\n}\nfunction mapList(nodeMapper, list) {\n return {\n splice(start, deleteCount, toInsert) {\n list.splice(start, deleteCount, toInsert.map(node => nodeMapper.map(node)));\n },\n updateElementHeight(index, height) {\n list.updateElementHeight(index, height);\n }\n };\n}\nfunction mapOptions(compressedNodeUnwrapper, options) {\n return Object.assign(Object.assign({}, options), { identityProvider: options.identityProvider && {\n getId(node) {\n return options.identityProvider.getId(compressedNodeUnwrapper(node));\n }\n }, sorter: options.sorter && {\n compare(node, otherNode) {\n return options.sorter.compare(node.elements[0], otherNode.elements[0]);\n }\n }, filter: options.filter && {\n filter(node, parentVisibility) {\n return options.filter.filter(compressedNodeUnwrapper(node), parentVisibility);\n }\n } });\n}\nexport class CompressibleObjectTreeModel {\n constructor(user, list, options = {}) {\n this.rootRef = null;\n this.elementMapper = options.elementMapper || DefaultElementMapper;\n const compressedNodeUnwrapper = node => this.elementMapper(node.elements);\n this.nodeMapper = new WeakMapper(node => new CompressedTreeNodeWrapper(compressedNodeUnwrapper, node));\n this.model = new CompressedObjectTreeModel(user, mapList(this.nodeMapper, list), mapOptions(compressedNodeUnwrapper, options));\n }\n get onDidSplice() {\n return Event.map(this.model.onDidSplice, ({ insertedNodes, deletedNodes }) => ({\n insertedNodes: insertedNodes.map(node => this.nodeMapper.map(node)),\n deletedNodes: deletedNodes.map(node => this.nodeMapper.map(node)),\n }));\n }\n get onDidChangeCollapseState() {\n return Event.map(this.model.onDidChangeCollapseState, ({ node, deep }) => ({\n node: this.nodeMapper.map(node),\n deep\n }));\n }\n get onDidChangeRenderNodeCount() {\n return Event.map(this.model.onDidChangeRenderNodeCount, node => this.nodeMapper.map(node));\n }\n setChildren(element, children = Iterable.empty(), options = {}) {\n this.model.setChildren(element, children, options);\n }\n setCompressionEnabled(enabled) {\n this.model.setCompressionEnabled(enabled);\n }\n has(location) {\n return this.model.has(location);\n }\n getListIndex(location) {\n return this.model.getListIndex(location);\n }\n getListRenderCount(location) {\n return this.model.getListRenderCount(location);\n }\n getNode(location) {\n return this.nodeMapper.map(this.model.getNode(location));\n }\n getNodeLocation(node) {\n return node.element;\n }\n getParentNodeLocation(location) {\n return this.model.getParentNodeLocation(location);\n }\n isCollapsible(location) {\n return this.model.isCollapsible(location);\n }\n setCollapsible(location, collapsed) {\n return this.model.setCollapsible(location, collapsed);\n }\n isCollapsed(location) {\n return this.model.isCollapsed(location);\n }\n setCollapsed(location, collapsed, recursive) {\n return this.model.setCollapsed(location, collapsed, recursive);\n }\n expandTo(location) {\n return this.model.expandTo(location);\n }\n rerender(location) {\n return this.model.rerender(location);\n }\n refilter() {\n return this.model.refilter();\n }\n getCompressedTreeNode(location = null) {\n return this.model.getNode(location);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Iterable } from '../../../common/iterator.js';\nimport { AbstractTree } from './abstractTree.js';\nimport { ObjectTreeModel } from './objectTreeModel.js';\nimport { CompressibleObjectTreeModel } from './compressedObjectTreeModel.js';\nimport { memoize } from '../../../common/decorators.js';\nexport class ObjectTree extends AbstractTree {\n constructor(user, container, delegate, renderers, options = {}) {\n super(user, container, delegate, renderers, options);\n }\n get onDidChangeCollapseState() { return this.model.onDidChangeCollapseState; }\n setChildren(element, children = Iterable.empty(), options) {\n this.model.setChildren(element, children, options);\n }\n rerender(element) {\n if (element === undefined) {\n this.view.rerender();\n return;\n }\n this.model.rerender(element);\n }\n hasElement(element) {\n return this.model.has(element);\n }\n createModel(user, view, options) {\n return new ObjectTreeModel(user, view, options);\n }\n}\nclass CompressibleRenderer {\n constructor(_compressedTreeNodeProvider, renderer) {\n this._compressedTreeNodeProvider = _compressedTreeNodeProvider;\n this.renderer = renderer;\n this.templateId = renderer.templateId;\n if (renderer.onDidChangeTwistieState) {\n this.onDidChangeTwistieState = renderer.onDidChangeTwistieState;\n }\n }\n get compressedTreeNodeProvider() {\n return this._compressedTreeNodeProvider();\n }\n renderTemplate(container) {\n const data = this.renderer.renderTemplate(container);\n return { compressedTreeNode: undefined, data };\n }\n renderElement(node, index, templateData, height) {\n const compressedTreeNode = this.compressedTreeNodeProvider.getCompressedTreeNode(node.element);\n if (compressedTreeNode.element.elements.length === 1) {\n templateData.compressedTreeNode = undefined;\n this.renderer.renderElement(node, index, templateData.data, height);\n }\n else {\n templateData.compressedTreeNode = compressedTreeNode;\n this.renderer.renderCompressedElements(compressedTreeNode, index, templateData.data, height);\n }\n }\n disposeElement(node, index, templateData, height) {\n if (templateData.compressedTreeNode) {\n if (this.renderer.disposeCompressedElements) {\n this.renderer.disposeCompressedElements(templateData.compressedTreeNode, index, templateData.data, height);\n }\n }\n else {\n if (this.renderer.disposeElement) {\n this.renderer.disposeElement(node, index, templateData.data, height);\n }\n }\n }\n disposeTemplate(templateData) {\n this.renderer.disposeTemplate(templateData.data);\n }\n renderTwistie(element, twistieElement) {\n if (this.renderer.renderTwistie) {\n return this.renderer.renderTwistie(element, twistieElement);\n }\n return false;\n }\n}\n__decorate([\n memoize\n], CompressibleRenderer.prototype, \"compressedTreeNodeProvider\", null);\nfunction asObjectTreeOptions(compressedTreeNodeProvider, options) {\n return options && Object.assign(Object.assign({}, options), { keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && {\n getKeyboardNavigationLabel(e) {\n let compressedTreeNode;\n try {\n compressedTreeNode = compressedTreeNodeProvider().getCompressedTreeNode(e);\n }\n catch (_a) {\n return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e);\n }\n if (compressedTreeNode.element.elements.length === 1) {\n return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e);\n }\n else {\n return options.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(compressedTreeNode.element.elements);\n }\n }\n } });\n}\nexport class CompressibleObjectTree extends ObjectTree {\n constructor(user, container, delegate, renderers, options = {}) {\n const compressedTreeNodeProvider = () => this;\n const compressibleRenderers = renderers.map(r => new CompressibleRenderer(compressedTreeNodeProvider, r));\n super(user, container, delegate, compressibleRenderers, asObjectTreeOptions(compressedTreeNodeProvider, options));\n }\n setChildren(element, children = Iterable.empty(), options) {\n this.model.setChildren(element, children, options);\n }\n createModel(user, view, options) {\n return new CompressibleObjectTreeModel(user, view, options);\n }\n updateOptions(optionsUpdate = {}) {\n super.updateOptions(optionsUpdate);\n if (typeof optionsUpdate.compressionEnabled !== 'undefined') {\n this.model.setCompressionEnabled(optionsUpdate.compressionEnabled);\n }\n }\n getCompressedTreeNode(element = null) {\n return this.model.getCompressedTreeNode(element);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ComposedTreeDelegate } from './abstractTree.js';\nimport { ObjectTree, CompressibleObjectTree } from './objectTree.js';\nimport { TreeError, WeakMapper } from './tree.js';\nimport { dispose, DisposableStore } from '../../../common/lifecycle.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { timeout, createCancelablePromise, Promises } from '../../../common/async.js';\nimport { Iterable } from '../../../common/iterator.js';\nimport { ElementsDragAndDropData } from '../list/listView.js';\nimport { isPromiseCanceledError, onUnexpectedError } from '../../../common/errors.js';\nimport { isFilterResult, getVisibleState } from './indexTreeModel.js';\nimport { treeItemLoadingIcon } from './treeIcons.js';\nfunction createAsyncDataTreeNode(props) {\n return Object.assign(Object.assign({}, props), { children: [], refreshPromise: undefined, stale: true, slow: false, collapsedByDefault: undefined });\n}\nfunction isAncestor(ancestor, descendant) {\n if (!descendant.parent) {\n return false;\n }\n else if (descendant.parent === ancestor) {\n return true;\n }\n else {\n return isAncestor(ancestor, descendant.parent);\n }\n}\nfunction intersects(node, other) {\n return node === other || isAncestor(node, other) || isAncestor(other, node);\n}\nclass AsyncDataTreeNodeWrapper {\n constructor(node) {\n this.node = node;\n }\n get element() { return this.node.element.element; }\n get children() { return this.node.children.map(node => new AsyncDataTreeNodeWrapper(node)); }\n get depth() { return this.node.depth; }\n get visibleChildrenCount() { return this.node.visibleChildrenCount; }\n get visibleChildIndex() { return this.node.visibleChildIndex; }\n get collapsible() { return this.node.collapsible; }\n get collapsed() { return this.node.collapsed; }\n get visible() { return this.node.visible; }\n get filterData() { return this.node.filterData; }\n}\nclass AsyncDataTreeRenderer {\n constructor(renderer, nodeMapper, onDidChangeTwistieState) {\n this.renderer = renderer;\n this.nodeMapper = nodeMapper;\n this.onDidChangeTwistieState = onDidChangeTwistieState;\n this.renderedNodes = new Map();\n this.templateId = renderer.templateId;\n }\n renderTemplate(container) {\n const templateData = this.renderer.renderTemplate(container);\n return { templateData };\n }\n renderElement(node, index, templateData, height) {\n this.renderer.renderElement(this.nodeMapper.map(node), index, templateData.templateData, height);\n }\n renderTwistie(element, twistieElement) {\n if (element.slow) {\n twistieElement.classList.add(...treeItemLoadingIcon.classNamesArray);\n return true;\n }\n else {\n twistieElement.classList.remove(...treeItemLoadingIcon.classNamesArray);\n return false;\n }\n }\n disposeElement(node, index, templateData, height) {\n if (this.renderer.disposeElement) {\n this.renderer.disposeElement(this.nodeMapper.map(node), index, templateData.templateData, height);\n }\n }\n disposeTemplate(templateData) {\n this.renderer.disposeTemplate(templateData.templateData);\n }\n dispose() {\n this.renderedNodes.clear();\n }\n}\nfunction asTreeEvent(e) {\n return {\n browserEvent: e.browserEvent,\n elements: e.elements.map(e => e.element)\n };\n}\nfunction asTreeMouseEvent(e) {\n return {\n browserEvent: e.browserEvent,\n element: e.element && e.element.element,\n target: e.target\n };\n}\nclass AsyncDataTreeElementsDragAndDropData extends ElementsDragAndDropData {\n constructor(data) {\n super(data.elements.map(node => node.element));\n this.data = data;\n }\n}\nfunction asAsyncDataTreeDragAndDropData(data) {\n if (data instanceof ElementsDragAndDropData) {\n return new AsyncDataTreeElementsDragAndDropData(data);\n }\n return data;\n}\nclass AsyncDataTreeNodeListDragAndDrop {\n constructor(dnd) {\n this.dnd = dnd;\n }\n getDragURI(node) {\n return this.dnd.getDragURI(node.element);\n }\n getDragLabel(nodes, originalEvent) {\n if (this.dnd.getDragLabel) {\n return this.dnd.getDragLabel(nodes.map(node => node.element), originalEvent);\n }\n return undefined;\n }\n onDragStart(data, originalEvent) {\n if (this.dnd.onDragStart) {\n this.dnd.onDragStart(asAsyncDataTreeDragAndDropData(data), originalEvent);\n }\n }\n onDragOver(data, targetNode, targetIndex, originalEvent, raw = true) {\n return this.dnd.onDragOver(asAsyncDataTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, originalEvent);\n }\n drop(data, targetNode, targetIndex, originalEvent) {\n this.dnd.drop(asAsyncDataTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, originalEvent);\n }\n onDragEnd(originalEvent) {\n if (this.dnd.onDragEnd) {\n this.dnd.onDragEnd(originalEvent);\n }\n }\n}\nfunction asObjectTreeOptions(options) {\n return options && Object.assign(Object.assign({}, options), { collapseByDefault: true, identityProvider: options.identityProvider && {\n getId(el) {\n return options.identityProvider.getId(el.element);\n }\n }, dnd: options.dnd && new AsyncDataTreeNodeListDragAndDrop(options.dnd), multipleSelectionController: options.multipleSelectionController && {\n isSelectionSingleChangeEvent(e) {\n return options.multipleSelectionController.isSelectionSingleChangeEvent(Object.assign(Object.assign({}, e), { element: e.element }));\n },\n isSelectionRangeChangeEvent(e) {\n return options.multipleSelectionController.isSelectionRangeChangeEvent(Object.assign(Object.assign({}, e), { element: e.element }));\n }\n }, accessibilityProvider: options.accessibilityProvider && Object.assign(Object.assign({}, options.accessibilityProvider), { getPosInSet: undefined, getSetSize: undefined, getRole: options.accessibilityProvider.getRole ? (el) => {\n return options.accessibilityProvider.getRole(el.element);\n } : () => 'treeitem', isChecked: options.accessibilityProvider.isChecked ? (e) => {\n var _a;\n return !!((_a = options.accessibilityProvider) === null || _a === void 0 ? void 0 : _a.isChecked(e.element));\n } : undefined, getAriaLabel(e) {\n return options.accessibilityProvider.getAriaLabel(e.element);\n },\n getWidgetAriaLabel() {\n return options.accessibilityProvider.getWidgetAriaLabel();\n }, getWidgetRole: options.accessibilityProvider.getWidgetRole ? () => options.accessibilityProvider.getWidgetRole() : () => 'tree', getAriaLevel: options.accessibilityProvider.getAriaLevel && (node => {\n return options.accessibilityProvider.getAriaLevel(node.element);\n }), getActiveDescendantId: options.accessibilityProvider.getActiveDescendantId && (node => {\n return options.accessibilityProvider.getActiveDescendantId(node.element);\n }) }), filter: options.filter && {\n filter(e, parentVisibility) {\n return options.filter.filter(e.element, parentVisibility);\n }\n }, keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && Object.assign(Object.assign({}, options.keyboardNavigationLabelProvider), { getKeyboardNavigationLabel(e) {\n return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e.element);\n } }), sorter: undefined, expandOnlyOnTwistieClick: typeof options.expandOnlyOnTwistieClick === 'undefined' ? undefined : (typeof options.expandOnlyOnTwistieClick !== 'function' ? options.expandOnlyOnTwistieClick : (e => options.expandOnlyOnTwistieClick(e.element))), additionalScrollHeight: options.additionalScrollHeight });\n}\nfunction dfs(node, fn) {\n fn(node);\n node.children.forEach(child => dfs(child, fn));\n}\nexport class AsyncDataTree {\n constructor(user, container, delegate, renderers, dataSource, options = {}) {\n this.user = user;\n this.dataSource = dataSource;\n this.nodes = new Map();\n this.subTreeRefreshPromises = new Map();\n this.refreshPromises = new Map();\n this._onDidRender = new Emitter();\n this._onDidChangeNodeSlowState = new Emitter();\n this.nodeMapper = new WeakMapper(node => new AsyncDataTreeNodeWrapper(node));\n this.disposables = new DisposableStore();\n this.identityProvider = options.identityProvider;\n this.autoExpandSingleChildren = typeof options.autoExpandSingleChildren === 'undefined' ? false : options.autoExpandSingleChildren;\n this.sorter = options.sorter;\n this.collapseByDefault = options.collapseByDefault;\n this.tree = this.createTree(user, container, delegate, renderers, options);\n this.root = createAsyncDataTreeNode({\n element: undefined,\n parent: null,\n hasChildren: true\n });\n if (this.identityProvider) {\n this.root = Object.assign(Object.assign({}, this.root), { id: null });\n }\n this.nodes.set(null, this.root);\n this.tree.onDidChangeCollapseState(this._onDidChangeCollapseState, this, this.disposables);\n }\n get onDidChangeFocus() { return Event.map(this.tree.onDidChangeFocus, asTreeEvent); }\n get onDidChangeSelection() { return Event.map(this.tree.onDidChangeSelection, asTreeEvent); }\n get onMouseDblClick() { return Event.map(this.tree.onMouseDblClick, asTreeMouseEvent); }\n get onPointer() { return Event.map(this.tree.onPointer, asTreeMouseEvent); }\n get onDidFocus() { return this.tree.onDidFocus; }\n get onDidDispose() { return this.tree.onDidDispose; }\n createTree(user, container, delegate, renderers, options) {\n const objectTreeDelegate = new ComposedTreeDelegate(delegate);\n const objectTreeRenderers = renderers.map(r => new AsyncDataTreeRenderer(r, this.nodeMapper, this._onDidChangeNodeSlowState.event));\n const objectTreeOptions = asObjectTreeOptions(options) || {};\n return new ObjectTree(user, container, objectTreeDelegate, objectTreeRenderers, objectTreeOptions);\n }\n updateOptions(options = {}) {\n this.tree.updateOptions(options);\n }\n // Widget\n getHTMLElement() {\n return this.tree.getHTMLElement();\n }\n get scrollTop() {\n return this.tree.scrollTop;\n }\n set scrollTop(scrollTop) {\n this.tree.scrollTop = scrollTop;\n }\n domFocus() {\n this.tree.domFocus();\n }\n layout(height, width) {\n this.tree.layout(height, width);\n }\n style(styles) {\n this.tree.style(styles);\n }\n // Model\n getInput() {\n return this.root.element;\n }\n setInput(input, viewState) {\n return __awaiter(this, void 0, void 0, function* () {\n this.refreshPromises.forEach(promise => promise.cancel());\n this.refreshPromises.clear();\n this.root.element = input;\n const viewStateContext = viewState && { viewState, focus: [], selection: [] };\n yield this._updateChildren(input, true, false, viewStateContext);\n if (viewStateContext) {\n this.tree.setFocus(viewStateContext.focus);\n this.tree.setSelection(viewStateContext.selection);\n }\n if (viewState && typeof viewState.scrollTop === 'number') {\n this.scrollTop = viewState.scrollTop;\n }\n });\n }\n _updateChildren(element = this.root.element, recursive = true, rerender = false, viewStateContext, options) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof this.root.element === 'undefined') {\n throw new TreeError(this.user, 'Tree input not set');\n }\n if (this.root.refreshPromise) {\n yield this.root.refreshPromise;\n yield Event.toPromise(this._onDidRender.event);\n }\n const node = this.getDataNode(element);\n yield this.refreshAndRenderNode(node, recursive, viewStateContext, options);\n if (rerender) {\n try {\n this.tree.rerender(node);\n }\n catch (_a) {\n // missing nodes are fine, this could've resulted from\n // parallel refresh calls, removing `node` altogether\n }\n }\n });\n }\n // View\n rerender(element) {\n if (element === undefined || element === this.root.element) {\n this.tree.rerender();\n return;\n }\n const node = this.getDataNode(element);\n this.tree.rerender(node);\n }\n collapse(element, recursive = false) {\n const node = this.getDataNode(element);\n return this.tree.collapse(node === this.root ? null : node, recursive);\n }\n expand(element, recursive = false) {\n return __awaiter(this, void 0, void 0, function* () {\n if (typeof this.root.element === 'undefined') {\n throw new TreeError(this.user, 'Tree input not set');\n }\n if (this.root.refreshPromise) {\n yield this.root.refreshPromise;\n yield Event.toPromise(this._onDidRender.event);\n }\n const node = this.getDataNode(element);\n if (this.tree.hasElement(node) && !this.tree.isCollapsible(node)) {\n return false;\n }\n if (node.refreshPromise) {\n yield this.root.refreshPromise;\n yield Event.toPromise(this._onDidRender.event);\n }\n if (node !== this.root && !node.refreshPromise && !this.tree.isCollapsed(node)) {\n return false;\n }\n const result = this.tree.expand(node === this.root ? null : node, recursive);\n if (node.refreshPromise) {\n yield this.root.refreshPromise;\n yield Event.toPromise(this._onDidRender.event);\n }\n return result;\n });\n }\n setSelection(elements, browserEvent) {\n const nodes = elements.map(e => this.getDataNode(e));\n this.tree.setSelection(nodes, browserEvent);\n }\n getSelection() {\n const nodes = this.tree.getSelection();\n return nodes.map(n => n.element);\n }\n setFocus(elements, browserEvent) {\n const nodes = elements.map(e => this.getDataNode(e));\n this.tree.setFocus(nodes, browserEvent);\n }\n getFocus() {\n const nodes = this.tree.getFocus();\n return nodes.map(n => n.element);\n }\n reveal(element, relativeTop) {\n this.tree.reveal(this.getDataNode(element), relativeTop);\n }\n // Implementation\n getDataNode(element) {\n const node = this.nodes.get((element === this.root.element ? null : element));\n if (!node) {\n throw new TreeError(this.user, `Data tree node not found: ${element}`);\n }\n return node;\n }\n refreshAndRenderNode(node, recursive, viewStateContext, options) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.refreshNode(node, recursive, viewStateContext);\n this.render(node, viewStateContext, options);\n });\n }\n refreshNode(node, recursive, viewStateContext) {\n return __awaiter(this, void 0, void 0, function* () {\n let result;\n this.subTreeRefreshPromises.forEach((refreshPromise, refreshNode) => {\n if (!result && intersects(refreshNode, node)) {\n result = refreshPromise.then(() => this.refreshNode(node, recursive, viewStateContext));\n }\n });\n if (result) {\n return result;\n }\n return this.doRefreshSubTree(node, recursive, viewStateContext);\n });\n }\n doRefreshSubTree(node, recursive, viewStateContext) {\n return __awaiter(this, void 0, void 0, function* () {\n let done;\n node.refreshPromise = new Promise(c => done = c);\n this.subTreeRefreshPromises.set(node, node.refreshPromise);\n node.refreshPromise.finally(() => {\n node.refreshPromise = undefined;\n this.subTreeRefreshPromises.delete(node);\n });\n try {\n const childrenToRefresh = yield this.doRefreshNode(node, recursive, viewStateContext);\n node.stale = false;\n yield Promises.settled(childrenToRefresh.map(child => this.doRefreshSubTree(child, recursive, viewStateContext)));\n }\n finally {\n done();\n }\n });\n }\n doRefreshNode(node, recursive, viewStateContext) {\n return __awaiter(this, void 0, void 0, function* () {\n node.hasChildren = !!this.dataSource.hasChildren(node.element);\n let childrenPromise;\n if (!node.hasChildren) {\n childrenPromise = Promise.resolve(Iterable.empty());\n }\n else {\n const slowTimeout = timeout(800);\n slowTimeout.then(() => {\n node.slow = true;\n this._onDidChangeNodeSlowState.fire(node);\n }, _ => null);\n childrenPromise = this.doGetChildren(node)\n .finally(() => slowTimeout.cancel());\n }\n try {\n const children = yield childrenPromise;\n return this.setChildren(node, children, recursive, viewStateContext);\n }\n catch (err) {\n if (node !== this.root && this.tree.hasElement(node)) {\n this.tree.collapse(node);\n }\n if (isPromiseCanceledError(err)) {\n return [];\n }\n throw err;\n }\n finally {\n if (node.slow) {\n node.slow = false;\n this._onDidChangeNodeSlowState.fire(node);\n }\n }\n });\n }\n doGetChildren(node) {\n let result = this.refreshPromises.get(node);\n if (result) {\n return result;\n }\n result = createCancelablePromise(() => __awaiter(this, void 0, void 0, function* () {\n const children = yield this.dataSource.getChildren(node.element);\n return this.processChildren(children);\n }));\n this.refreshPromises.set(node, result);\n return result.finally(() => { this.refreshPromises.delete(node); });\n }\n _onDidChangeCollapseState({ node, deep }) {\n if (node.element === null) {\n return;\n }\n if (!node.collapsed && node.element.stale) {\n if (deep) {\n this.collapse(node.element.element);\n }\n else {\n this.refreshAndRenderNode(node.element, false)\n .catch(onUnexpectedError);\n }\n }\n }\n setChildren(node, childrenElementsIterable, recursive, viewStateContext) {\n const childrenElements = [...childrenElementsIterable];\n // perf: if the node was and still is a leaf, avoid all this hassle\n if (node.children.length === 0 && childrenElements.length === 0) {\n return [];\n }\n const nodesToForget = new Map();\n const childrenTreeNodesById = new Map();\n for (const child of node.children) {\n nodesToForget.set(child.element, child);\n if (this.identityProvider) {\n const collapsed = this.tree.isCollapsed(child);\n childrenTreeNodesById.set(child.id, { node: child, collapsed });\n }\n }\n const childrenToRefresh = [];\n const children = childrenElements.map(element => {\n const hasChildren = !!this.dataSource.hasChildren(element);\n if (!this.identityProvider) {\n const asyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, hasChildren });\n if (hasChildren && this.collapseByDefault && !this.collapseByDefault(element)) {\n asyncDataTreeNode.collapsedByDefault = false;\n childrenToRefresh.push(asyncDataTreeNode);\n }\n return asyncDataTreeNode;\n }\n const id = this.identityProvider.getId(element).toString();\n const result = childrenTreeNodesById.get(id);\n if (result) {\n const asyncDataTreeNode = result.node;\n nodesToForget.delete(asyncDataTreeNode.element);\n this.nodes.delete(asyncDataTreeNode.element);\n this.nodes.set(element, asyncDataTreeNode);\n asyncDataTreeNode.element = element;\n asyncDataTreeNode.hasChildren = hasChildren;\n if (recursive) {\n if (result.collapsed) {\n asyncDataTreeNode.children.forEach(node => dfs(node, node => this.nodes.delete(node.element)));\n asyncDataTreeNode.children.splice(0, asyncDataTreeNode.children.length);\n asyncDataTreeNode.stale = true;\n }\n else {\n childrenToRefresh.push(asyncDataTreeNode);\n }\n }\n else if (hasChildren && this.collapseByDefault && !this.collapseByDefault(element)) {\n asyncDataTreeNode.collapsedByDefault = false;\n childrenToRefresh.push(asyncDataTreeNode);\n }\n return asyncDataTreeNode;\n }\n const childAsyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, id, hasChildren });\n if (viewStateContext && viewStateContext.viewState.focus && viewStateContext.viewState.focus.indexOf(id) > -1) {\n viewStateContext.focus.push(childAsyncDataTreeNode);\n }\n if (viewStateContext && viewStateContext.viewState.selection && viewStateContext.viewState.selection.indexOf(id) > -1) {\n viewStateContext.selection.push(childAsyncDataTreeNode);\n }\n if (viewStateContext && viewStateContext.viewState.expanded && viewStateContext.viewState.expanded.indexOf(id) > -1) {\n childrenToRefresh.push(childAsyncDataTreeNode);\n }\n else if (hasChildren && this.collapseByDefault && !this.collapseByDefault(element)) {\n childAsyncDataTreeNode.collapsedByDefault = false;\n childrenToRefresh.push(childAsyncDataTreeNode);\n }\n return childAsyncDataTreeNode;\n });\n for (const node of nodesToForget.values()) {\n dfs(node, node => this.nodes.delete(node.element));\n }\n for (const child of children) {\n this.nodes.set(child.element, child);\n }\n node.children.splice(0, node.children.length, ...children);\n // TODO@joao this doesn't take filter into account\n if (node !== this.root && this.autoExpandSingleChildren && children.length === 1 && childrenToRefresh.length === 0) {\n children[0].collapsedByDefault = false;\n childrenToRefresh.push(children[0]);\n }\n return childrenToRefresh;\n }\n render(node, viewStateContext, options) {\n const children = node.children.map(node => this.asTreeElement(node, viewStateContext));\n const objectTreeOptions = options && Object.assign(Object.assign({}, options), { diffIdentityProvider: options.diffIdentityProvider && {\n getId(node) {\n return options.diffIdentityProvider.getId(node.element);\n }\n } });\n this.tree.setChildren(node === this.root ? null : node, children, objectTreeOptions);\n if (node !== this.root) {\n this.tree.setCollapsible(node, node.hasChildren);\n }\n this._onDidRender.fire();\n }\n asTreeElement(node, viewStateContext) {\n if (node.stale) {\n return {\n element: node,\n collapsible: node.hasChildren,\n collapsed: true\n };\n }\n let collapsed;\n if (viewStateContext && viewStateContext.viewState.expanded && node.id && viewStateContext.viewState.expanded.indexOf(node.id) > -1) {\n collapsed = false;\n }\n else {\n collapsed = node.collapsedByDefault;\n }\n node.collapsedByDefault = undefined;\n return {\n element: node,\n children: node.hasChildren ? Iterable.map(node.children, child => this.asTreeElement(child, viewStateContext)) : [],\n collapsible: node.hasChildren,\n collapsed\n };\n }\n processChildren(children) {\n if (this.sorter) {\n children = [...children].sort(this.sorter.compare.bind(this.sorter));\n }\n return children;\n }\n dispose() {\n this.disposables.dispose();\n }\n}\nclass CompressibleAsyncDataTreeNodeWrapper {\n constructor(node) {\n this.node = node;\n }\n get element() {\n return {\n elements: this.node.element.elements.map(e => e.element),\n incompressible: this.node.element.incompressible\n };\n }\n get children() { return this.node.children.map(node => new CompressibleAsyncDataTreeNodeWrapper(node)); }\n get depth() { return this.node.depth; }\n get visibleChildrenCount() { return this.node.visibleChildrenCount; }\n get visibleChildIndex() { return this.node.visibleChildIndex; }\n get collapsible() { return this.node.collapsible; }\n get collapsed() { return this.node.collapsed; }\n get visible() { return this.node.visible; }\n get filterData() { return this.node.filterData; }\n}\nclass CompressibleAsyncDataTreeRenderer {\n constructor(renderer, nodeMapper, compressibleNodeMapperProvider, onDidChangeTwistieState) {\n this.renderer = renderer;\n this.nodeMapper = nodeMapper;\n this.compressibleNodeMapperProvider = compressibleNodeMapperProvider;\n this.onDidChangeTwistieState = onDidChangeTwistieState;\n this.renderedNodes = new Map();\n this.disposables = [];\n this.templateId = renderer.templateId;\n }\n renderTemplate(container) {\n const templateData = this.renderer.renderTemplate(container);\n return { templateData };\n }\n renderElement(node, index, templateData, height) {\n this.renderer.renderElement(this.nodeMapper.map(node), index, templateData.templateData, height);\n }\n renderCompressedElements(node, index, templateData, height) {\n this.renderer.renderCompressedElements(this.compressibleNodeMapperProvider().map(node), index, templateData.templateData, height);\n }\n renderTwistie(element, twistieElement) {\n if (element.slow) {\n twistieElement.classList.add(...treeItemLoadingIcon.classNamesArray);\n return true;\n }\n else {\n twistieElement.classList.remove(...treeItemLoadingIcon.classNamesArray);\n return false;\n }\n }\n disposeElement(node, index, templateData, height) {\n if (this.renderer.disposeElement) {\n this.renderer.disposeElement(this.nodeMapper.map(node), index, templateData.templateData, height);\n }\n }\n disposeCompressedElements(node, index, templateData, height) {\n if (this.renderer.disposeCompressedElements) {\n this.renderer.disposeCompressedElements(this.compressibleNodeMapperProvider().map(node), index, templateData.templateData, height);\n }\n }\n disposeTemplate(templateData) {\n this.renderer.disposeTemplate(templateData.templateData);\n }\n dispose() {\n this.renderedNodes.clear();\n this.disposables = dispose(this.disposables);\n }\n}\nfunction asCompressibleObjectTreeOptions(options) {\n const objectTreeOptions = options && asObjectTreeOptions(options);\n return objectTreeOptions && Object.assign(Object.assign({}, objectTreeOptions), { keyboardNavigationLabelProvider: objectTreeOptions.keyboardNavigationLabelProvider && Object.assign(Object.assign({}, objectTreeOptions.keyboardNavigationLabelProvider), { getCompressedNodeKeyboardNavigationLabel(els) {\n return options.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(els.map(e => e.element));\n } }) });\n}\nexport class CompressibleAsyncDataTree extends AsyncDataTree {\n constructor(user, container, virtualDelegate, compressionDelegate, renderers, dataSource, options = {}) {\n super(user, container, virtualDelegate, renderers, dataSource, options);\n this.compressionDelegate = compressionDelegate;\n this.compressibleNodeMapper = new WeakMapper(node => new CompressibleAsyncDataTreeNodeWrapper(node));\n this.filter = options.filter;\n }\n createTree(user, container, delegate, renderers, options) {\n const objectTreeDelegate = new ComposedTreeDelegate(delegate);\n const objectTreeRenderers = renderers.map(r => new CompressibleAsyncDataTreeRenderer(r, this.nodeMapper, () => this.compressibleNodeMapper, this._onDidChangeNodeSlowState.event));\n const objectTreeOptions = asCompressibleObjectTreeOptions(options) || {};\n return new CompressibleObjectTree(user, container, objectTreeDelegate, objectTreeRenderers, objectTreeOptions);\n }\n asTreeElement(node, viewStateContext) {\n return Object.assign({ incompressible: this.compressionDelegate.isIncompressible(node.element) }, super.asTreeElement(node, viewStateContext));\n }\n updateOptions(options = {}) {\n this.tree.updateOptions(options);\n }\n render(node, viewStateContext) {\n if (!this.identityProvider) {\n return super.render(node, viewStateContext);\n }\n // Preserve traits across compressions. Hacky but does the trick.\n // This is hard to fix properly since it requires rewriting the traits\n // across trees and lists. Let's just keep it this way for now.\n const getId = (element) => this.identityProvider.getId(element).toString();\n const getUncompressedIds = (nodes) => {\n const result = new Set();\n for (const node of nodes) {\n const compressedNode = this.tree.getCompressedTreeNode(node === this.root ? null : node);\n if (!compressedNode.element) {\n continue;\n }\n for (const node of compressedNode.element.elements) {\n result.add(getId(node.element));\n }\n }\n return result;\n };\n const oldSelection = getUncompressedIds(this.tree.getSelection());\n const oldFocus = getUncompressedIds(this.tree.getFocus());\n super.render(node, viewStateContext);\n const selection = this.getSelection();\n let didChangeSelection = false;\n const focus = this.getFocus();\n let didChangeFocus = false;\n const visit = (node) => {\n const compressedNode = node.element;\n if (compressedNode) {\n for (let i = 0; i < compressedNode.elements.length; i++) {\n const id = getId(compressedNode.elements[i].element);\n const element = compressedNode.elements[compressedNode.elements.length - 1].element;\n // github.com/microsoft/vscode/issues/85938\n if (oldSelection.has(id) && selection.indexOf(element) === -1) {\n selection.push(element);\n didChangeSelection = true;\n }\n if (oldFocus.has(id) && focus.indexOf(element) === -1) {\n focus.push(element);\n didChangeFocus = true;\n }\n }\n }\n node.children.forEach(visit);\n };\n visit(this.tree.getCompressedTreeNode(node === this.root ? null : node));\n if (didChangeSelection) {\n this.setSelection(selection);\n }\n if (didChangeFocus) {\n this.setFocus(focus);\n }\n }\n // For compressed async data trees, `TreeVisibility.Recurse` doesn't currently work\n // and we have to filter everything beforehand\n // Related to #85193 and #85835\n processChildren(children) {\n if (this.filter) {\n children = Iterable.filter(children, e => {\n const result = this.filter.filter(e, 1 /* Visible */);\n const visibility = getVisibility(result);\n if (visibility === 2 /* Recurse */) {\n throw new Error('Recursive tree visibility not supported in async data compressed trees');\n }\n return visibility === 1 /* Visible */;\n });\n }\n return super.processChildren(children);\n }\n}\nfunction getVisibility(filterResult) {\n if (typeof filterResult === 'boolean') {\n return filterResult ? 1 /* Visible */ : 0 /* Hidden */;\n }\n else if (isFilterResult(filterResult)) {\n return getVisibleState(filterResult.visibility);\n }\n else {\n return getVisibleState(filterResult);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { AbstractTree } from './abstractTree.js';\nimport { ObjectTreeModel } from './objectTreeModel.js';\nexport class DataTree extends AbstractTree {\n constructor(user, container, delegate, renderers, dataSource, options = {}) {\n super(user, container, delegate, renderers, options);\n this.user = user;\n this.dataSource = dataSource;\n this.identityProvider = options.identityProvider;\n }\n createModel(user, view, options) {\n return new ObjectTreeModel(user, view, options);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './table.css';\nimport { List } from '../list/listWidget.js';\nimport { $, append, clearNode, createStyleSheet } from '../../dom.js';\nimport { SplitView } from '../splitview/splitview.js';\nimport { Emitter, Event } from '../../../common/event.js';\nclass TableListRenderer {\n constructor(columns, renderers, getColumnSize) {\n this.columns = columns;\n this.getColumnSize = getColumnSize;\n this.templateId = TableListRenderer.TemplateId;\n this.renderedTemplates = new Set();\n const rendererMap = new Map(renderers.map(r => [r.templateId, r]));\n this.renderers = [];\n for (const column of columns) {\n const renderer = rendererMap.get(column.templateId);\n if (!renderer) {\n throw new Error(`Table cell renderer for template id ${column.templateId} not found.`);\n }\n this.renderers.push(renderer);\n }\n }\n renderTemplate(container) {\n const rowContainer = append(container, $('.monaco-table-tr'));\n const cellContainers = [];\n const cellTemplateData = [];\n for (let i = 0; i < this.columns.length; i++) {\n const renderer = this.renderers[i];\n const cellContainer = append(rowContainer, $('.monaco-table-td', { 'data-col-index': i }));\n cellContainer.style.width = `${this.getColumnSize(i)}px`;\n cellContainers.push(cellContainer);\n cellTemplateData.push(renderer.renderTemplate(cellContainer));\n }\n const result = { container, cellContainers, cellTemplateData };\n this.renderedTemplates.add(result);\n return result;\n }\n renderElement(element, index, templateData, height) {\n for (let i = 0; i < this.columns.length; i++) {\n const column = this.columns[i];\n const cell = column.project(element);\n const renderer = this.renderers[i];\n renderer.renderElement(cell, index, templateData.cellTemplateData[i], height);\n }\n }\n disposeElement(element, index, templateData, height) {\n for (let i = 0; i < this.columns.length; i++) {\n const renderer = this.renderers[i];\n if (renderer.disposeElement) {\n const column = this.columns[i];\n const cell = column.project(element);\n renderer.disposeElement(cell, index, templateData.cellTemplateData[i], height);\n }\n }\n }\n disposeTemplate(templateData) {\n for (let i = 0; i < this.columns.length; i++) {\n const renderer = this.renderers[i];\n renderer.disposeTemplate(templateData.cellTemplateData[i]);\n }\n clearNode(templateData.container);\n this.renderedTemplates.delete(templateData);\n }\n layoutColumn(index, size) {\n for (const { cellContainers } of this.renderedTemplates) {\n cellContainers[index].style.width = `${size}px`;\n }\n }\n}\nTableListRenderer.TemplateId = 'row';\nfunction asListVirtualDelegate(delegate) {\n return {\n getHeight(row) { return delegate.getHeight(row); },\n getTemplateId() { return TableListRenderer.TemplateId; },\n };\n}\nclass ColumnHeader {\n constructor(column, index) {\n this.column = column;\n this.index = index;\n this._onDidLayout = new Emitter();\n this.onDidLayout = this._onDidLayout.event;\n this.element = $('.monaco-table-th', { 'data-col-index': index, title: column.tooltip }, column.label);\n }\n get minimumSize() { var _a; return (_a = this.column.minimumWidth) !== null && _a !== void 0 ? _a : 120; }\n get maximumSize() { var _a; return (_a = this.column.maximumWidth) !== null && _a !== void 0 ? _a : Number.POSITIVE_INFINITY; }\n get onDidChange() { var _a; return (_a = this.column.onDidChangeWidthConstraints) !== null && _a !== void 0 ? _a : Event.None; }\n layout(size) {\n this._onDidLayout.fire([this.index, size]);\n }\n}\nexport class Table {\n constructor(user, container, virtualDelegate, columns, renderers, _options) {\n this.virtualDelegate = virtualDelegate;\n this.domId = `table_id_${++Table.InstanceCount}`;\n this.cachedHeight = 0;\n this.domNode = append(container, $(`.monaco-table.${this.domId}`));\n const headers = columns.map((c, i) => new ColumnHeader(c, i));\n const descriptor = {\n size: headers.reduce((a, b) => a + b.column.weight, 0),\n views: headers.map(view => ({ size: view.column.weight, view }))\n };\n this.splitview = new SplitView(this.domNode, {\n orientation: 1 /* HORIZONTAL */,\n scrollbarVisibility: 2 /* Hidden */,\n getSashOrthogonalSize: () => this.cachedHeight,\n descriptor\n });\n this.splitview.el.style.height = `${virtualDelegate.headerRowHeight}px`;\n this.splitview.el.style.lineHeight = `${virtualDelegate.headerRowHeight}px`;\n const renderer = new TableListRenderer(columns, renderers, i => this.splitview.getViewSize(i));\n this.list = new List(user, this.domNode, asListVirtualDelegate(virtualDelegate), [renderer], _options);\n this.columnLayoutDisposable = Event.any(...headers.map(h => h.onDidLayout))(([index, size]) => renderer.layoutColumn(index, size));\n this.styleElement = createStyleSheet(this.domNode);\n this.style({});\n }\n get onDidChangeFocus() { return this.list.onDidChangeFocus; }\n get onDidChangeSelection() { return this.list.onDidChangeSelection; }\n get onMouseDblClick() { return this.list.onMouseDblClick; }\n get onPointer() { return this.list.onPointer; }\n get onDidFocus() { return this.list.onDidFocus; }\n get onDidDispose() { return this.list.onDidDispose; }\n updateOptions(options) {\n this.list.updateOptions(options);\n }\n splice(start, deleteCount, elements = []) {\n this.list.splice(start, deleteCount, elements);\n }\n getHTMLElement() {\n return this.domNode;\n }\n style(styles) {\n const content = [];\n content.push(`.monaco-table.${this.domId} > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\ttop: ${this.virtualDelegate.headerRowHeight + 1}px;\n\t\t\theight: calc(100% - ${this.virtualDelegate.headerRowHeight}px);\n\t\t}`);\n this.styleElement.textContent = content.join('\\n');\n this.list.style(styles);\n }\n getSelectedElements() {\n return this.list.getSelectedElements();\n }\n getSelection() {\n return this.list.getSelection();\n }\n getFocus() {\n return this.list.getFocus();\n }\n dispose() {\n this.splitview.dispose();\n this.list.dispose();\n this.columnLayoutDisposable.dispose();\n }\n}\nTable.InstanceCount = 0;\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { createStyleSheet } from '../../../base/browser/dom.js';\nimport { PagedList } from '../../../base/browser/ui/list/listPaging.js';\nimport { DefaultStyleController, isSelectionRangeChangeEvent, isSelectionSingleChangeEvent, List } from '../../../base/browser/ui/list/listWidget.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { Disposable, dispose, toDisposable, DisposableStore, combinedDisposable } from '../../../base/common/lifecycle.js';\nimport { localize } from '../../../nls.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\nimport { Extensions as ConfigurationExtensions } from '../../configuration/common/configurationRegistry.js';\nimport { ContextKeyExpr, IContextKeyService, RawContextKey } from '../../contextkey/common/contextkey.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { Registry } from '../../registry/common/platform.js';\nimport { attachListStyler, computeStyles, defaultListStyles } from '../../theme/common/styler.js';\nimport { IThemeService } from '../../theme/common/themeService.js';\nimport { InputFocusedContextKey } from '../../contextkey/common/contextkeys.js';\nimport { ObjectTree, CompressibleObjectTree } from '../../../base/browser/ui/tree/objectTree.js';\nimport { AsyncDataTree, CompressibleAsyncDataTree } from '../../../base/browser/ui/tree/asyncDataTree.js';\nimport { DataTree } from '../../../base/browser/ui/tree/dataTree.js';\nimport { IAccessibilityService } from '../../accessibility/common/accessibility.js';\nimport { Table } from '../../../base/browser/ui/table/tableWidget.js';\nexport const IListService = createDecorator('listService');\nlet ListService = class ListService {\n constructor(_themeService) {\n this._themeService = _themeService;\n this.disposables = new DisposableStore();\n this.lists = [];\n this._lastFocusedWidget = undefined;\n this._hasCreatedStyleController = false;\n }\n get lastFocusedList() {\n return this._lastFocusedWidget;\n }\n register(widget, extraContextKeys) {\n if (!this._hasCreatedStyleController) {\n this._hasCreatedStyleController = true;\n // create a shared default tree style sheet for performance reasons\n const styleController = new DefaultStyleController(createStyleSheet(), '');\n this.disposables.add(attachListStyler(styleController, this._themeService));\n }\n if (this.lists.some(l => l.widget === widget)) {\n throw new Error('Cannot register the same widget multiple times');\n }\n // Keep in our lists list\n const registeredList = { widget, extraContextKeys };\n this.lists.push(registeredList);\n // Check for currently being focused\n if (widget.getHTMLElement() === document.activeElement) {\n this._lastFocusedWidget = widget;\n }\n return combinedDisposable(widget.onDidFocus(() => this._lastFocusedWidget = widget), toDisposable(() => this.lists.splice(this.lists.indexOf(registeredList), 1)), widget.onDidDispose(() => {\n this.lists = this.lists.filter(l => l !== registeredList);\n if (this._lastFocusedWidget === widget) {\n this._lastFocusedWidget = undefined;\n }\n }));\n }\n dispose() {\n this.disposables.dispose();\n }\n};\nListService = __decorate([\n __param(0, IThemeService)\n], ListService);\nexport { ListService };\nconst RawWorkbenchListFocusContextKey = new RawContextKey('listFocus', true);\nexport const WorkbenchListSupportsMultiSelectContextKey = new RawContextKey('listSupportsMultiselect', true);\nexport const WorkbenchListFocusContextKey = ContextKeyExpr.and(RawWorkbenchListFocusContextKey, ContextKeyExpr.not(InputFocusedContextKey));\nexport const WorkbenchListHasSelectionOrFocus = new RawContextKey('listHasSelectionOrFocus', false);\nexport const WorkbenchListDoubleSelection = new RawContextKey('listDoubleSelection', false);\nexport const WorkbenchListMultiSelection = new RawContextKey('listMultiSelection', false);\nexport const WorkbenchListSelectionNavigation = new RawContextKey('listSelectionNavigation', false);\nexport const WorkbenchListSupportsKeyboardNavigation = new RawContextKey('listSupportsKeyboardNavigation', true);\nexport const WorkbenchListAutomaticKeyboardNavigationKey = 'listAutomaticKeyboardNavigation';\nexport const WorkbenchListAutomaticKeyboardNavigation = new RawContextKey(WorkbenchListAutomaticKeyboardNavigationKey, true);\nexport let didBindWorkbenchListAutomaticKeyboardNavigation = false;\nfunction createScopedContextKeyService(contextKeyService, widget) {\n const result = contextKeyService.createScoped(widget.getHTMLElement());\n RawWorkbenchListFocusContextKey.bindTo(result);\n return result;\n}\nconst multiSelectModifierSettingKey = 'workbench.list.multiSelectModifier';\nconst openModeSettingKey = 'workbench.list.openMode';\nconst horizontalScrollingKey = 'workbench.list.horizontalScrolling';\nconst keyboardNavigationSettingKey = 'workbench.list.keyboardNavigation';\nconst automaticKeyboardNavigationSettingKey = 'workbench.list.automaticKeyboardNavigation';\nconst treeIndentKey = 'workbench.tree.indent';\nconst treeRenderIndentGuidesKey = 'workbench.tree.renderIndentGuides';\nconst listSmoothScrolling = 'workbench.list.smoothScrolling';\nconst treeExpandMode = 'workbench.tree.expandMode';\nfunction useAltAsMultipleSelectionModifier(configurationService) {\n return configurationService.getValue(multiSelectModifierSettingKey) === 'alt';\n}\nclass MultipleSelectionController extends Disposable {\n constructor(configurationService) {\n super();\n this.configurationService = configurationService;\n this.useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\n this.registerListeners();\n }\n registerListeners() {\n this._register(this.configurationService.onDidChangeConfiguration(e => {\n if (e.affectsConfiguration(multiSelectModifierSettingKey)) {\n this.useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(this.configurationService);\n }\n }));\n }\n isSelectionSingleChangeEvent(event) {\n if (this.useAltAsMultipleSelectionModifier) {\n return event.browserEvent.altKey;\n }\n return isSelectionSingleChangeEvent(event);\n }\n isSelectionRangeChangeEvent(event) {\n return isSelectionRangeChangeEvent(event);\n }\n}\nfunction toWorkbenchListOptions(options, configurationService, keybindingService) {\n const disposables = new DisposableStore();\n const result = Object.assign({}, options);\n if (options.multipleSelectionSupport !== false && !options.multipleSelectionController) {\n const multipleSelectionController = new MultipleSelectionController(configurationService);\n result.multipleSelectionController = multipleSelectionController;\n disposables.add(multipleSelectionController);\n }\n result.keyboardNavigationDelegate = {\n mightProducePrintableCharacter(e) {\n return keybindingService.mightProducePrintableCharacter(e);\n }\n };\n result.smoothScrolling = configurationService.getValue(listSmoothScrolling);\n return [result, disposables];\n}\nlet WorkbenchList = class WorkbenchList extends List {\n constructor(user, container, delegate, renderers, options, contextKeyService, listService, themeService, configurationService, keybindingService) {\n const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : configurationService.getValue(horizontalScrollingKey);\n const [workbenchListOptions, workbenchListOptionsDisposable] = toWorkbenchListOptions(options, configurationService, keybindingService);\n super(user, container, delegate, renderers, Object.assign(Object.assign(Object.assign({ keyboardSupport: false }, computeStyles(themeService.getColorTheme(), defaultListStyles)), workbenchListOptions), { horizontalScrolling }));\n this.disposables.add(workbenchListOptionsDisposable);\n this.contextKeyService = createScopedContextKeyService(contextKeyService, this);\n this.themeService = themeService;\n const listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);\n listSupportsMultiSelect.set(!(options.multipleSelectionSupport === false));\n const listSelectionNavigation = WorkbenchListSelectionNavigation.bindTo(this.contextKeyService);\n listSelectionNavigation.set(Boolean(options.selectionNavigation));\n this.listHasSelectionOrFocus = WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService);\n this.listDoubleSelection = WorkbenchListDoubleSelection.bindTo(this.contextKeyService);\n this.listMultiSelection = WorkbenchListMultiSelection.bindTo(this.contextKeyService);\n this.horizontalScrolling = options.horizontalScrolling;\n this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\n this.disposables.add(this.contextKeyService);\n this.disposables.add(listService.register(this));\n if (options.overrideStyles) {\n this.updateStyles(options.overrideStyles);\n }\n this.disposables.add(this.onDidChangeSelection(() => {\n const selection = this.getSelection();\n const focus = this.getFocus();\n this.contextKeyService.bufferChangeEvents(() => {\n this.listHasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);\n this.listMultiSelection.set(selection.length > 1);\n this.listDoubleSelection.set(selection.length === 2);\n });\n }));\n this.disposables.add(this.onDidChangeFocus(() => {\n const selection = this.getSelection();\n const focus = this.getFocus();\n this.listHasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);\n }));\n this.disposables.add(configurationService.onDidChangeConfiguration(e => {\n if (e.affectsConfiguration(multiSelectModifierSettingKey)) {\n this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\n }\n let options = {};\n if (e.affectsConfiguration(horizontalScrollingKey) && this.horizontalScrolling === undefined) {\n const horizontalScrolling = configurationService.getValue(horizontalScrollingKey);\n options = Object.assign(Object.assign({}, options), { horizontalScrolling });\n }\n if (e.affectsConfiguration(listSmoothScrolling)) {\n const smoothScrolling = configurationService.getValue(listSmoothScrolling);\n options = Object.assign(Object.assign({}, options), { smoothScrolling });\n }\n if (Object.keys(options).length > 0) {\n this.updateOptions(options);\n }\n }));\n this.navigator = new ListResourceNavigator(this, Object.assign({ configurationService }, options));\n this.disposables.add(this.navigator);\n }\n updateOptions(options) {\n super.updateOptions(options);\n if (options.overrideStyles) {\n this.updateStyles(options.overrideStyles);\n }\n }\n updateStyles(styles) {\n var _a;\n (_a = this._styler) === null || _a === void 0 ? void 0 : _a.dispose();\n this._styler = attachListStyler(this, this.themeService, styles);\n }\n dispose() {\n var _a;\n (_a = this._styler) === null || _a === void 0 ? void 0 : _a.dispose();\n super.dispose();\n }\n};\nWorkbenchList = __decorate([\n __param(5, IContextKeyService),\n __param(6, IListService),\n __param(7, IThemeService),\n __param(8, IConfigurationService),\n __param(9, IKeybindingService)\n], WorkbenchList);\nexport { WorkbenchList };\nlet WorkbenchPagedList = class WorkbenchPagedList extends PagedList {\n constructor(user, container, delegate, renderers, options, contextKeyService, listService, themeService, configurationService, keybindingService) {\n const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : configurationService.getValue(horizontalScrollingKey);\n const [workbenchListOptions, workbenchListOptionsDisposable] = toWorkbenchListOptions(options, configurationService, keybindingService);\n super(user, container, delegate, renderers, Object.assign(Object.assign(Object.assign({ keyboardSupport: false }, computeStyles(themeService.getColorTheme(), defaultListStyles)), workbenchListOptions), { horizontalScrolling }));\n this.disposables = new DisposableStore();\n this.disposables.add(workbenchListOptionsDisposable);\n this.contextKeyService = createScopedContextKeyService(contextKeyService, this);\n this.themeService = themeService;\n this.horizontalScrolling = options.horizontalScrolling;\n const listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);\n listSupportsMultiSelect.set(!(options.multipleSelectionSupport === false));\n const listSelectionNavigation = WorkbenchListSelectionNavigation.bindTo(this.contextKeyService);\n listSelectionNavigation.set(Boolean(options.selectionNavigation));\n this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\n this.disposables.add(this.contextKeyService);\n this.disposables.add(listService.register(this));\n if (options.overrideStyles) {\n this.updateStyles(options.overrideStyles);\n }\n if (options.overrideStyles) {\n this.disposables.add(attachListStyler(this, themeService, options.overrideStyles));\n }\n this.disposables.add(configurationService.onDidChangeConfiguration(e => {\n if (e.affectsConfiguration(multiSelectModifierSettingKey)) {\n this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\n }\n let options = {};\n if (e.affectsConfiguration(horizontalScrollingKey) && this.horizontalScrolling === undefined) {\n const horizontalScrolling = configurationService.getValue(horizontalScrollingKey);\n options = Object.assign(Object.assign({}, options), { horizontalScrolling });\n }\n if (e.affectsConfiguration(listSmoothScrolling)) {\n const smoothScrolling = configurationService.getValue(listSmoothScrolling);\n options = Object.assign(Object.assign({}, options), { smoothScrolling });\n }\n if (Object.keys(options).length > 0) {\n this.updateOptions(options);\n }\n }));\n this.navigator = new ListResourceNavigator(this, Object.assign({ configurationService }, options));\n this.disposables.add(this.navigator);\n }\n updateOptions(options) {\n super.updateOptions(options);\n if (options.overrideStyles) {\n this.updateStyles(options.overrideStyles);\n }\n }\n updateStyles(styles) {\n var _a;\n (_a = this._styler) === null || _a === void 0 ? void 0 : _a.dispose();\n this._styler = attachListStyler(this, this.themeService, styles);\n }\n dispose() {\n var _a;\n (_a = this._styler) === null || _a === void 0 ? void 0 : _a.dispose();\n this.disposables.dispose();\n super.dispose();\n }\n};\nWorkbenchPagedList = __decorate([\n __param(5, IContextKeyService),\n __param(6, IListService),\n __param(7, IThemeService),\n __param(8, IConfigurationService),\n __param(9, IKeybindingService)\n], WorkbenchPagedList);\nexport { WorkbenchPagedList };\nlet WorkbenchTable = class WorkbenchTable extends Table {\n constructor(user, container, delegate, columns, renderers, options, contextKeyService, listService, themeService, configurationService, keybindingService) {\n const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : configurationService.getValue(horizontalScrollingKey);\n const [workbenchListOptions, workbenchListOptionsDisposable] = toWorkbenchListOptions(options, configurationService, keybindingService);\n super(user, container, delegate, columns, renderers, Object.assign(Object.assign(Object.assign({ keyboardSupport: false }, computeStyles(themeService.getColorTheme(), defaultListStyles)), workbenchListOptions), { horizontalScrolling }));\n this.disposables = new DisposableStore();\n this.disposables.add(workbenchListOptionsDisposable);\n this.contextKeyService = createScopedContextKeyService(contextKeyService, this);\n this.themeService = themeService;\n const listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);\n listSupportsMultiSelect.set(!(options.multipleSelectionSupport === false));\n const listSelectionNavigation = WorkbenchListSelectionNavigation.bindTo(this.contextKeyService);\n listSelectionNavigation.set(Boolean(options.selectionNavigation));\n this.listHasSelectionOrFocus = WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService);\n this.listDoubleSelection = WorkbenchListDoubleSelection.bindTo(this.contextKeyService);\n this.listMultiSelection = WorkbenchListMultiSelection.bindTo(this.contextKeyService);\n this.horizontalScrolling = options.horizontalScrolling;\n this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\n this.disposables.add(this.contextKeyService);\n this.disposables.add(listService.register(this));\n if (options.overrideStyles) {\n this.updateStyles(options.overrideStyles);\n }\n this.disposables.add(this.onDidChangeSelection(() => {\n const selection = this.getSelection();\n const focus = this.getFocus();\n this.contextKeyService.bufferChangeEvents(() => {\n this.listHasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);\n this.listMultiSelection.set(selection.length > 1);\n this.listDoubleSelection.set(selection.length === 2);\n });\n }));\n this.disposables.add(this.onDidChangeFocus(() => {\n const selection = this.getSelection();\n const focus = this.getFocus();\n this.listHasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);\n }));\n this.disposables.add(configurationService.onDidChangeConfiguration(e => {\n if (e.affectsConfiguration(multiSelectModifierSettingKey)) {\n this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\n }\n let options = {};\n if (e.affectsConfiguration(horizontalScrollingKey) && this.horizontalScrolling === undefined) {\n const horizontalScrolling = configurationService.getValue(horizontalScrollingKey);\n options = Object.assign(Object.assign({}, options), { horizontalScrolling });\n }\n if (e.affectsConfiguration(listSmoothScrolling)) {\n const smoothScrolling = configurationService.getValue(listSmoothScrolling);\n options = Object.assign(Object.assign({}, options), { smoothScrolling });\n }\n if (Object.keys(options).length > 0) {\n this.updateOptions(options);\n }\n }));\n this.navigator = new TableResourceNavigator(this, Object.assign({ configurationService }, options));\n this.disposables.add(this.navigator);\n }\n updateOptions(options) {\n super.updateOptions(options);\n if (options.overrideStyles) {\n this.updateStyles(options.overrideStyles);\n }\n }\n updateStyles(styles) {\n var _a;\n (_a = this._styler) === null || _a === void 0 ? void 0 : _a.dispose();\n this._styler = attachListStyler(this, this.themeService, styles);\n }\n dispose() {\n var _a;\n (_a = this._styler) === null || _a === void 0 ? void 0 : _a.dispose();\n this.disposables.dispose();\n super.dispose();\n }\n};\nWorkbenchTable = __decorate([\n __param(6, IContextKeyService),\n __param(7, IListService),\n __param(8, IThemeService),\n __param(9, IConfigurationService),\n __param(10, IKeybindingService)\n], WorkbenchTable);\nexport { WorkbenchTable };\nclass ResourceNavigator extends Disposable {\n constructor(widget, options) {\n var _a;\n super();\n this.widget = widget;\n this._onDidOpen = this._register(new Emitter());\n this.onDidOpen = this._onDidOpen.event;\n this._register(Event.filter(this.widget.onDidChangeSelection, e => e.browserEvent instanceof KeyboardEvent)(e => this.onSelectionFromKeyboard(e)));\n this._register(this.widget.onPointer((e) => this.onPointer(e.element, e.browserEvent)));\n this._register(this.widget.onMouseDblClick((e) => this.onMouseDblClick(e.element, e.browserEvent)));\n if (typeof (options === null || options === void 0 ? void 0 : options.openOnSingleClick) !== 'boolean' && (options === null || options === void 0 ? void 0 : options.configurationService)) {\n this.openOnSingleClick = (options === null || options === void 0 ? void 0 : options.configurationService.getValue(openModeSettingKey)) !== 'doubleClick';\n this._register(options === null || options === void 0 ? void 0 : options.configurationService.onDidChangeConfiguration(() => {\n this.openOnSingleClick = (options === null || options === void 0 ? void 0 : options.configurationService.getValue(openModeSettingKey)) !== 'doubleClick';\n }));\n }\n else {\n this.openOnSingleClick = (_a = options === null || options === void 0 ? void 0 : options.openOnSingleClick) !== null && _a !== void 0 ? _a : true;\n }\n }\n onSelectionFromKeyboard(event) {\n if (event.elements.length !== 1) {\n return;\n }\n const selectionKeyboardEvent = event.browserEvent;\n const preserveFocus = typeof selectionKeyboardEvent.preserveFocus === 'boolean' ? selectionKeyboardEvent.preserveFocus : true;\n const pinned = typeof selectionKeyboardEvent.pinned === 'boolean' ? selectionKeyboardEvent.pinned : !preserveFocus;\n const sideBySide = false;\n this._open(this.getSelectedElement(), preserveFocus, pinned, sideBySide, event.browserEvent);\n }\n onPointer(element, browserEvent) {\n if (!this.openOnSingleClick) {\n return;\n }\n const isDoubleClick = browserEvent.detail === 2;\n if (isDoubleClick) {\n return;\n }\n const isMiddleClick = browserEvent.button === 1;\n const preserveFocus = true;\n const pinned = isMiddleClick;\n const sideBySide = browserEvent.ctrlKey || browserEvent.metaKey || browserEvent.altKey;\n this._open(element, preserveFocus, pinned, sideBySide, browserEvent);\n }\n onMouseDblClick(element, browserEvent) {\n if (!browserEvent) {\n return;\n }\n // copied from AbstractTree\n const target = browserEvent.target;\n const onTwistie = target.classList.contains('monaco-tl-twistie')\n || (target.classList.contains('monaco-icon-label') && target.classList.contains('folder-icon') && browserEvent.offsetX < 16);\n if (onTwistie) {\n return;\n }\n const preserveFocus = false;\n const pinned = true;\n const sideBySide = (browserEvent.ctrlKey || browserEvent.metaKey || browserEvent.altKey);\n this._open(element, preserveFocus, pinned, sideBySide, browserEvent);\n }\n _open(element, preserveFocus, pinned, sideBySide, browserEvent) {\n if (!element) {\n return;\n }\n this._onDidOpen.fire({\n editorOptions: {\n preserveFocus,\n pinned,\n revealIfVisible: true\n },\n sideBySide,\n element,\n browserEvent\n });\n }\n}\nclass ListResourceNavigator extends ResourceNavigator {\n constructor(widget, options) {\n super(widget, options);\n this.widget = widget;\n }\n getSelectedElement() {\n return this.widget.getSelectedElements()[0];\n }\n}\nclass TableResourceNavigator extends ResourceNavigator {\n constructor(widget, options) {\n super(widget, options);\n }\n getSelectedElement() {\n return this.widget.getSelectedElements()[0];\n }\n}\nclass TreeResourceNavigator extends ResourceNavigator {\n constructor(widget, options) {\n super(widget, options);\n }\n getSelectedElement() {\n var _a;\n return (_a = this.widget.getSelection()[0]) !== null && _a !== void 0 ? _a : undefined;\n }\n}\nfunction createKeyboardNavigationEventFilter(container, keybindingService) {\n let inChord = false;\n return event => {\n if (inChord) {\n inChord = false;\n return false;\n }\n const result = keybindingService.softDispatch(event, container);\n if (result && result.enterChord) {\n inChord = true;\n return false;\n }\n inChord = false;\n return true;\n };\n}\nlet WorkbenchObjectTree = class WorkbenchObjectTree extends ObjectTree {\n constructor(user, container, delegate, renderers, options, contextKeyService, listService, themeService, configurationService, keybindingService, accessibilityService) {\n const { options: treeOptions, getAutomaticKeyboardNavigation, disposable } = workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService);\n super(user, container, delegate, renderers, treeOptions);\n this.disposables.add(disposable);\n this.internals = new WorkbenchTreeInternals(this, options, getAutomaticKeyboardNavigation, options.overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService);\n this.disposables.add(this.internals);\n }\n};\nWorkbenchObjectTree = __decorate([\n __param(5, IContextKeyService),\n __param(6, IListService),\n __param(7, IThemeService),\n __param(8, IConfigurationService),\n __param(9, IKeybindingService),\n __param(10, IAccessibilityService)\n], WorkbenchObjectTree);\nexport { WorkbenchObjectTree };\nlet WorkbenchCompressibleObjectTree = class WorkbenchCompressibleObjectTree extends CompressibleObjectTree {\n constructor(user, container, delegate, renderers, options, contextKeyService, listService, themeService, configurationService, keybindingService, accessibilityService) {\n const { options: treeOptions, getAutomaticKeyboardNavigation, disposable } = workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService);\n super(user, container, delegate, renderers, treeOptions);\n this.disposables.add(disposable);\n this.internals = new WorkbenchTreeInternals(this, options, getAutomaticKeyboardNavigation, options.overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService);\n this.disposables.add(this.internals);\n }\n updateOptions(options = {}) {\n super.updateOptions(options);\n if (options.overrideStyles) {\n this.internals.updateStyleOverrides(options.overrideStyles);\n }\n }\n};\nWorkbenchCompressibleObjectTree = __decorate([\n __param(5, IContextKeyService),\n __param(6, IListService),\n __param(7, IThemeService),\n __param(8, IConfigurationService),\n __param(9, IKeybindingService),\n __param(10, IAccessibilityService)\n], WorkbenchCompressibleObjectTree);\nexport { WorkbenchCompressibleObjectTree };\nlet WorkbenchDataTree = class WorkbenchDataTree extends DataTree {\n constructor(user, container, delegate, renderers, dataSource, options, contextKeyService, listService, themeService, configurationService, keybindingService, accessibilityService) {\n const { options: treeOptions, getAutomaticKeyboardNavigation, disposable } = workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService);\n super(user, container, delegate, renderers, dataSource, treeOptions);\n this.disposables.add(disposable);\n this.internals = new WorkbenchTreeInternals(this, options, getAutomaticKeyboardNavigation, options.overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService);\n this.disposables.add(this.internals);\n }\n updateOptions(options = {}) {\n super.updateOptions(options);\n if (options.overrideStyles) {\n this.internals.updateStyleOverrides(options.overrideStyles);\n }\n }\n};\nWorkbenchDataTree = __decorate([\n __param(6, IContextKeyService),\n __param(7, IListService),\n __param(8, IThemeService),\n __param(9, IConfigurationService),\n __param(10, IKeybindingService),\n __param(11, IAccessibilityService)\n], WorkbenchDataTree);\nexport { WorkbenchDataTree };\nlet WorkbenchAsyncDataTree = class WorkbenchAsyncDataTree extends AsyncDataTree {\n constructor(user, container, delegate, renderers, dataSource, options, contextKeyService, listService, themeService, configurationService, keybindingService, accessibilityService) {\n const { options: treeOptions, getAutomaticKeyboardNavigation, disposable } = workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService);\n super(user, container, delegate, renderers, dataSource, treeOptions);\n this.disposables.add(disposable);\n this.internals = new WorkbenchTreeInternals(this, options, getAutomaticKeyboardNavigation, options.overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService);\n this.disposables.add(this.internals);\n }\n get onDidOpen() { return this.internals.onDidOpen; }\n updateOptions(options = {}) {\n super.updateOptions(options);\n if (options.overrideStyles) {\n this.internals.updateStyleOverrides(options.overrideStyles);\n }\n }\n};\nWorkbenchAsyncDataTree = __decorate([\n __param(6, IContextKeyService),\n __param(7, IListService),\n __param(8, IThemeService),\n __param(9, IConfigurationService),\n __param(10, IKeybindingService),\n __param(11, IAccessibilityService)\n], WorkbenchAsyncDataTree);\nexport { WorkbenchAsyncDataTree };\nlet WorkbenchCompressibleAsyncDataTree = class WorkbenchCompressibleAsyncDataTree extends CompressibleAsyncDataTree {\n constructor(user, container, virtualDelegate, compressionDelegate, renderers, dataSource, options, contextKeyService, listService, themeService, configurationService, keybindingService, accessibilityService) {\n const { options: treeOptions, getAutomaticKeyboardNavigation, disposable } = workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService);\n super(user, container, virtualDelegate, compressionDelegate, renderers, dataSource, treeOptions);\n this.disposables.add(disposable);\n this.internals = new WorkbenchTreeInternals(this, options, getAutomaticKeyboardNavigation, options.overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService);\n this.disposables.add(this.internals);\n }\n};\nWorkbenchCompressibleAsyncDataTree = __decorate([\n __param(7, IContextKeyService),\n __param(8, IListService),\n __param(9, IThemeService),\n __param(10, IConfigurationService),\n __param(11, IKeybindingService),\n __param(12, IAccessibilityService)\n], WorkbenchCompressibleAsyncDataTree);\nexport { WorkbenchCompressibleAsyncDataTree };\nfunction workbenchTreeDataPreamble(container, options, contextKeyService, configurationService, keybindingService, accessibilityService) {\n var _a;\n WorkbenchListSupportsKeyboardNavigation.bindTo(contextKeyService);\n if (!didBindWorkbenchListAutomaticKeyboardNavigation) {\n WorkbenchListAutomaticKeyboardNavigation.bindTo(contextKeyService);\n didBindWorkbenchListAutomaticKeyboardNavigation = true;\n }\n const getAutomaticKeyboardNavigation = () => {\n // give priority to the context key value to disable this completely\n let automaticKeyboardNavigation = contextKeyService.getContextKeyValue(WorkbenchListAutomaticKeyboardNavigationKey);\n if (automaticKeyboardNavigation) {\n automaticKeyboardNavigation = configurationService.getValue(automaticKeyboardNavigationSettingKey);\n }\n return automaticKeyboardNavigation;\n };\n const accessibilityOn = accessibilityService.isScreenReaderOptimized();\n const keyboardNavigation = options.simpleKeyboardNavigation || accessibilityOn ? 'simple' : configurationService.getValue(keyboardNavigationSettingKey);\n const horizontalScrolling = options.horizontalScrolling !== undefined ? options.horizontalScrolling : configurationService.getValue(horizontalScrollingKey);\n const [workbenchListOptions, disposable] = toWorkbenchListOptions(options, configurationService, keybindingService);\n const additionalScrollHeight = options.additionalScrollHeight;\n return {\n getAutomaticKeyboardNavigation,\n disposable,\n options: Object.assign(Object.assign({ \n // ...options, // TODO@Joao why is this not splatted here?\n keyboardSupport: false }, workbenchListOptions), { indent: configurationService.getValue(treeIndentKey), renderIndentGuides: configurationService.getValue(treeRenderIndentGuidesKey), smoothScrolling: configurationService.getValue(listSmoothScrolling), automaticKeyboardNavigation: getAutomaticKeyboardNavigation(), simpleKeyboardNavigation: keyboardNavigation === 'simple', filterOnType: keyboardNavigation === 'filter', horizontalScrolling, keyboardNavigationEventFilter: createKeyboardNavigationEventFilter(container, keybindingService), additionalScrollHeight, hideTwistiesOfChildlessElements: options.hideTwistiesOfChildlessElements, expandOnlyOnTwistieClick: (_a = options.expandOnlyOnTwistieClick) !== null && _a !== void 0 ? _a : (configurationService.getValue(treeExpandMode) === 'doubleClick') })\n };\n}\nlet WorkbenchTreeInternals = class WorkbenchTreeInternals {\n constructor(tree, options, getAutomaticKeyboardNavigation, overrideStyles, contextKeyService, listService, themeService, configurationService, accessibilityService) {\n this.tree = tree;\n this.themeService = themeService;\n this.disposables = [];\n this.contextKeyService = createScopedContextKeyService(contextKeyService, tree);\n const listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);\n listSupportsMultiSelect.set(!(options.multipleSelectionSupport === false));\n const listSelectionNavigation = WorkbenchListSelectionNavigation.bindTo(this.contextKeyService);\n listSelectionNavigation.set(Boolean(options.selectionNavigation));\n this.hasSelectionOrFocus = WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService);\n this.hasDoubleSelection = WorkbenchListDoubleSelection.bindTo(this.contextKeyService);\n this.hasMultiSelection = WorkbenchListMultiSelection.bindTo(this.contextKeyService);\n this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\n const interestingContextKeys = new Set();\n interestingContextKeys.add(WorkbenchListAutomaticKeyboardNavigationKey);\n const updateKeyboardNavigation = () => {\n const accessibilityOn = accessibilityService.isScreenReaderOptimized();\n const keyboardNavigation = accessibilityOn ? 'simple' : configurationService.getValue(keyboardNavigationSettingKey);\n tree.updateOptions({\n simpleKeyboardNavigation: keyboardNavigation === 'simple',\n filterOnType: keyboardNavigation === 'filter'\n });\n };\n this.updateStyleOverrides(overrideStyles);\n this.disposables.push(this.contextKeyService, listService.register(tree), tree.onDidChangeSelection(() => {\n const selection = tree.getSelection();\n const focus = tree.getFocus();\n this.contextKeyService.bufferChangeEvents(() => {\n this.hasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);\n this.hasMultiSelection.set(selection.length > 1);\n this.hasDoubleSelection.set(selection.length === 2);\n });\n }), tree.onDidChangeFocus(() => {\n const selection = tree.getSelection();\n const focus = tree.getFocus();\n this.hasSelectionOrFocus.set(selection.length > 0 || focus.length > 0);\n }), configurationService.onDidChangeConfiguration(e => {\n let newOptions = {};\n if (e.affectsConfiguration(multiSelectModifierSettingKey)) {\n this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\n }\n if (e.affectsConfiguration(treeIndentKey)) {\n const indent = configurationService.getValue(treeIndentKey);\n newOptions = Object.assign(Object.assign({}, newOptions), { indent });\n }\n if (e.affectsConfiguration(treeRenderIndentGuidesKey)) {\n const renderIndentGuides = configurationService.getValue(treeRenderIndentGuidesKey);\n newOptions = Object.assign(Object.assign({}, newOptions), { renderIndentGuides });\n }\n if (e.affectsConfiguration(listSmoothScrolling)) {\n const smoothScrolling = configurationService.getValue(listSmoothScrolling);\n newOptions = Object.assign(Object.assign({}, newOptions), { smoothScrolling });\n }\n if (e.affectsConfiguration(keyboardNavigationSettingKey)) {\n updateKeyboardNavigation();\n }\n if (e.affectsConfiguration(automaticKeyboardNavigationSettingKey)) {\n newOptions = Object.assign(Object.assign({}, newOptions), { automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });\n }\n if (e.affectsConfiguration(horizontalScrollingKey) && options.horizontalScrolling === undefined) {\n const horizontalScrolling = configurationService.getValue(horizontalScrollingKey);\n newOptions = Object.assign(Object.assign({}, newOptions), { horizontalScrolling });\n }\n if (e.affectsConfiguration(treeExpandMode) && options.expandOnlyOnTwistieClick === undefined) {\n newOptions = Object.assign(Object.assign({}, newOptions), { expandOnlyOnTwistieClick: configurationService.getValue(treeExpandMode) === 'doubleClick' });\n }\n if (Object.keys(newOptions).length > 0) {\n tree.updateOptions(newOptions);\n }\n }), this.contextKeyService.onDidChangeContext(e => {\n if (e.affectsSome(interestingContextKeys)) {\n tree.updateOptions({ automaticKeyboardNavigation: getAutomaticKeyboardNavigation() });\n }\n }), accessibilityService.onDidChangeScreenReaderOptimized(() => updateKeyboardNavigation()));\n this.navigator = new TreeResourceNavigator(tree, Object.assign({ configurationService }, options));\n this.disposables.push(this.navigator);\n }\n get onDidOpen() { return this.navigator.onDidOpen; }\n updateStyleOverrides(overrideStyles) {\n dispose(this.styler);\n this.styler = overrideStyles ? attachListStyler(this.tree, this.themeService, overrideStyles) : Disposable.None;\n }\n dispose() {\n this.disposables = dispose(this.disposables);\n dispose(this.styler);\n this.styler = undefined;\n }\n};\nWorkbenchTreeInternals = __decorate([\n __param(4, IContextKeyService),\n __param(5, IListService),\n __param(6, IThemeService),\n __param(7, IConfigurationService),\n __param(8, IAccessibilityService)\n], WorkbenchTreeInternals);\nconst configurationRegistry = Registry.as(ConfigurationExtensions.Configuration);\nconfigurationRegistry.registerConfiguration({\n 'id': 'workbench',\n 'order': 7,\n 'title': localize('workbenchConfigurationTitle', \"Workbench\"),\n 'type': 'object',\n 'properties': {\n [multiSelectModifierSettingKey]: {\n 'type': 'string',\n 'enum': ['ctrlCmd', 'alt'],\n 'enumDescriptions': [\n localize('multiSelectModifier.ctrlCmd', \"Maps to `Control` on Windows and Linux and to `Command` on macOS.\"),\n localize('multiSelectModifier.alt', \"Maps to `Alt` on Windows and Linux and to `Option` on macOS.\")\n ],\n 'default': 'ctrlCmd',\n 'description': localize({\n key: 'multiSelectModifier',\n comment: [\n '- `ctrlCmd` refers to a value the setting can take and should not be localized.',\n '- `Control` and `Command` refer to the modifier keys Ctrl or Cmd on the keyboard and can be localized.'\n ]\n }, \"The modifier to be used to add an item in trees and lists to a multi-selection with the mouse (for example in the explorer, open editors and scm view). The 'Open to Side' mouse gestures - if supported - will adapt such that they do not conflict with the multiselect modifier.\")\n },\n [openModeSettingKey]: {\n 'type': 'string',\n 'enum': ['singleClick', 'doubleClick'],\n 'default': 'singleClick',\n 'description': localize({\n key: 'openModeModifier',\n comment: ['`singleClick` and `doubleClick` refers to a value the setting can take and should not be localized.']\n }, \"Controls how to open items in trees and lists using the mouse (if supported). Note that some trees and lists might choose to ignore this setting if it is not applicable.\")\n },\n [horizontalScrollingKey]: {\n 'type': 'boolean',\n 'default': false,\n 'description': localize('horizontalScrolling setting', \"Controls whether lists and trees support horizontal scrolling in the workbench. Warning: turning on this setting has a performance implication.\")\n },\n [treeIndentKey]: {\n 'type': 'number',\n 'default': 8,\n minimum: 0,\n maximum: 40,\n 'description': localize('tree indent setting', \"Controls tree indentation in pixels.\")\n },\n [treeRenderIndentGuidesKey]: {\n type: 'string',\n enum: ['none', 'onHover', 'always'],\n default: 'onHover',\n description: localize('render tree indent guides', \"Controls whether the tree should render indent guides.\")\n },\n [listSmoothScrolling]: {\n type: 'boolean',\n default: false,\n description: localize('list smoothScrolling setting', \"Controls whether lists and trees have smooth scrolling.\"),\n },\n [keyboardNavigationSettingKey]: {\n 'type': 'string',\n 'enum': ['simple', 'highlight', 'filter'],\n 'enumDescriptions': [\n localize('keyboardNavigationSettingKey.simple', \"Simple keyboard navigation focuses elements which match the keyboard input. Matching is done only on prefixes.\"),\n localize('keyboardNavigationSettingKey.highlight', \"Highlight keyboard navigation highlights elements which match the keyboard input. Further up and down navigation will traverse only the highlighted elements.\"),\n localize('keyboardNavigationSettingKey.filter', \"Filter keyboard navigation will filter out and hide all the elements which do not match the keyboard input.\")\n ],\n 'default': 'highlight',\n 'description': localize('keyboardNavigationSettingKey', \"Controls the keyboard navigation style for lists and trees in the workbench. Can be simple, highlight and filter.\")\n },\n [automaticKeyboardNavigationSettingKey]: {\n 'type': 'boolean',\n 'default': true,\n markdownDescription: localize('automatic keyboard navigation setting', \"Controls whether keyboard navigation in lists and trees is automatically triggered simply by typing. If set to `false`, keyboard navigation is only triggered when executing the `list.toggleKeyboardNavigation` command, for which you can assign a keyboard shortcut.\")\n },\n [treeExpandMode]: {\n type: 'string',\n enum: ['singleClick', 'doubleClick'],\n default: 'singleClick',\n description: localize('expand mode', \"Controls how tree folders are expanded when clicking the folder names. Note that some trees and lists might choose to ignore this setting if it is not applicable.\"),\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator as createServiceDecorator } from '../../instantiation/common/instantiation.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { Emitter } from '../../../base/common/event.js';\nexport const ILogService = createServiceDecorator('logService');\nexport var LogLevel;\n(function (LogLevel) {\n LogLevel[LogLevel[\"Trace\"] = 0] = \"Trace\";\n LogLevel[LogLevel[\"Debug\"] = 1] = \"Debug\";\n LogLevel[LogLevel[\"Info\"] = 2] = \"Info\";\n LogLevel[LogLevel[\"Warning\"] = 3] = \"Warning\";\n LogLevel[LogLevel[\"Error\"] = 4] = \"Error\";\n LogLevel[LogLevel[\"Critical\"] = 5] = \"Critical\";\n LogLevel[LogLevel[\"Off\"] = 6] = \"Off\";\n})(LogLevel || (LogLevel = {}));\nexport const DEFAULT_LOG_LEVEL = LogLevel.Info;\nexport class AbstractLogger extends Disposable {\n constructor() {\n super(...arguments);\n this.level = DEFAULT_LOG_LEVEL;\n this._onDidChangeLogLevel = this._register(new Emitter());\n }\n setLevel(level) {\n if (this.level !== level) {\n this.level = level;\n this._onDidChangeLogLevel.fire(this.level);\n }\n }\n getLevel() {\n return this.level;\n }\n}\nexport class ConsoleLogger extends AbstractLogger {\n constructor(logLevel = DEFAULT_LOG_LEVEL) {\n super();\n this.setLevel(logLevel);\n }\n trace(message, ...args) {\n if (this.getLevel() <= LogLevel.Trace) {\n console.log('%cTRACE', 'color: #888', message, ...args);\n }\n }\n debug(message, ...args) {\n if (this.getLevel() <= LogLevel.Debug) {\n console.log('%cDEBUG', 'background: #eee; color: #888', message, ...args);\n }\n }\n info(message, ...args) {\n if (this.getLevel() <= LogLevel.Info) {\n console.log('%c INFO', 'color: #33f', message, ...args);\n }\n }\n error(message, ...args) {\n if (this.getLevel() <= LogLevel.Error) {\n console.log('%c ERR', 'color: #f33', message, ...args);\n }\n }\n dispose() {\n // noop\n }\n}\nexport class LogService extends Disposable {\n constructor(logger) {\n super();\n this.logger = logger;\n this._register(logger);\n }\n getLevel() {\n return this.logger.getLevel();\n }\n trace(message, ...args) {\n this.logger.trace(message, ...args);\n }\n debug(message, ...args) {\n this.logger.debug(message, ...args);\n }\n info(message, ...args) {\n this.logger.info(message, ...args);\n }\n error(message, ...args) {\n this.logger.error(message, ...args);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { localize } from '../../../nls.js';\nimport Severity from '../../../base/common/severity.js';\nexport var MarkerSeverity;\n(function (MarkerSeverity) {\n MarkerSeverity[MarkerSeverity[\"Hint\"] = 1] = \"Hint\";\n MarkerSeverity[MarkerSeverity[\"Info\"] = 2] = \"Info\";\n MarkerSeverity[MarkerSeverity[\"Warning\"] = 4] = \"Warning\";\n MarkerSeverity[MarkerSeverity[\"Error\"] = 8] = \"Error\";\n})(MarkerSeverity || (MarkerSeverity = {}));\n(function (MarkerSeverity) {\n function compare(a, b) {\n return b - a;\n }\n MarkerSeverity.compare = compare;\n const _displayStrings = Object.create(null);\n _displayStrings[MarkerSeverity.Error] = localize('sev.error', \"Error\");\n _displayStrings[MarkerSeverity.Warning] = localize('sev.warning', \"Warning\");\n _displayStrings[MarkerSeverity.Info] = localize('sev.info', \"Info\");\n function toString(a) {\n return _displayStrings[a] || '';\n }\n MarkerSeverity.toString = toString;\n function fromSeverity(severity) {\n switch (severity) {\n case Severity.Error: return MarkerSeverity.Error;\n case Severity.Warning: return MarkerSeverity.Warning;\n case Severity.Info: return MarkerSeverity.Info;\n case Severity.Ignore: return MarkerSeverity.Hint;\n }\n }\n MarkerSeverity.fromSeverity = fromSeverity;\n function toSeverity(severity) {\n switch (severity) {\n case MarkerSeverity.Error: return Severity.Error;\n case MarkerSeverity.Warning: return Severity.Warning;\n case MarkerSeverity.Info: return Severity.Info;\n case MarkerSeverity.Hint: return Severity.Ignore;\n }\n }\n MarkerSeverity.toSeverity = toSeverity;\n})(MarkerSeverity || (MarkerSeverity = {}));\nexport var IMarkerData;\n(function (IMarkerData) {\n const emptyString = '';\n function makeKey(markerData) {\n return makeKeyOptionalMessage(markerData, true);\n }\n IMarkerData.makeKey = makeKey;\n function makeKeyOptionalMessage(markerData, useMessage) {\n let result = [emptyString];\n if (markerData.source) {\n result.push(markerData.source.replace('¦', '\\\\¦'));\n }\n else {\n result.push(emptyString);\n }\n if (markerData.code) {\n if (typeof markerData.code === 'string') {\n result.push(markerData.code.replace('¦', '\\\\¦'));\n }\n else {\n result.push(markerData.code.value.replace('¦', '\\\\¦'));\n }\n }\n else {\n result.push(emptyString);\n }\n if (markerData.severity !== undefined && markerData.severity !== null) {\n result.push(MarkerSeverity.toString(markerData.severity));\n }\n else {\n result.push(emptyString);\n }\n // Modifed to not include the message as part of the marker key to work around\n // https://github.com/microsoft/vscode/issues/77475\n if (markerData.message && useMessage) {\n result.push(markerData.message.replace('¦', '\\\\¦'));\n }\n else {\n result.push(emptyString);\n }\n if (markerData.startLineNumber !== undefined && markerData.startLineNumber !== null) {\n result.push(markerData.startLineNumber.toString());\n }\n else {\n result.push(emptyString);\n }\n if (markerData.startColumn !== undefined && markerData.startColumn !== null) {\n result.push(markerData.startColumn.toString());\n }\n else {\n result.push(emptyString);\n }\n if (markerData.endLineNumber !== undefined && markerData.endLineNumber !== null) {\n result.push(markerData.endLineNumber.toString());\n }\n else {\n result.push(emptyString);\n }\n if (markerData.endColumn !== undefined && markerData.endColumn !== null) {\n result.push(markerData.endColumn.toString());\n }\n else {\n result.push(emptyString);\n }\n result.push(emptyString);\n return result.join('¦');\n }\n IMarkerData.makeKeyOptionalMessage = makeKeyOptionalMessage;\n})(IMarkerData || (IMarkerData = {}));\nexport const IMarkerService = createDecorator('markerService');\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 *--------------------------------------------------------------------------------------------*/\nimport BaseSeverity from '../../../base/common/severity.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport var Severity = BaseSeverity;\nexport const INotificationService = createDecorator('notificationService');\nexport class NoOpNotification {\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { equalsIgnoreCase, startsWithIgnoreCase } from '../../../base/common/strings.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IOpenerService = createDecorator('openerService');\nexport const NullOpenerService = Object.freeze({\n _serviceBrand: undefined,\n registerOpener() { return Disposable.None; },\n registerValidator() { return Disposable.None; },\n registerExternalUriResolver() { return Disposable.None; },\n setDefaultExternalOpener() { },\n registerExternalOpener() { return Disposable.None; },\n open() {\n return __awaiter(this, void 0, void 0, function* () { return false; });\n },\n resolveExternalUri(uri) {\n return __awaiter(this, void 0, void 0, function* () { return { resolved: uri, dispose() { } }; });\n },\n});\nexport function matchesScheme(target, scheme) {\n if (URI.isUri(target)) {\n return equalsIgnoreCase(target.scheme, scheme);\n }\n else {\n return startsWithIgnoreCase(target, scheme + ':');\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport class Progress {\n constructor(callback) {\n this.callback = callback;\n }\n report(item) {\n this._value = item;\n this.callback(this._value);\n }\n}\nProgress.None = Object.freeze({ report() { } });\nexport const IEditorProgressService = createDecorator('editorProgressService');\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 *--------------------------------------------------------------------------------------------*/\nimport { Registry } from '../../registry/common/platform.js';\nimport { coalesce } from '../../../base/common/arrays.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nexport var DefaultQuickAccessFilterValue;\n(function (DefaultQuickAccessFilterValue) {\n /**\n * Keep the value as it is given to quick access.\n */\n DefaultQuickAccessFilterValue[DefaultQuickAccessFilterValue[\"PRESERVE\"] = 0] = \"PRESERVE\";\n /**\n * Use the value that was used last time something was accepted from the picker.\n */\n DefaultQuickAccessFilterValue[DefaultQuickAccessFilterValue[\"LAST\"] = 1] = \"LAST\";\n})(DefaultQuickAccessFilterValue || (DefaultQuickAccessFilterValue = {}));\nexport const Extensions = {\n Quickaccess: 'workbench.contributions.quickaccess'\n};\nexport class QuickAccessRegistry {\n constructor() {\n this.providers = [];\n this.defaultProvider = undefined;\n }\n registerQuickAccessProvider(provider) {\n // Extract the default provider when no prefix is present\n if (provider.prefix.length === 0) {\n this.defaultProvider = provider;\n }\n else {\n this.providers.push(provider);\n }\n // sort the providers by decreasing prefix length, such that longer\n // prefixes take priority: 'ext' vs 'ext install' - the latter should win\n this.providers.sort((providerA, providerB) => providerB.prefix.length - providerA.prefix.length);\n return toDisposable(() => {\n this.providers.splice(this.providers.indexOf(provider), 1);\n if (this.defaultProvider === provider) {\n this.defaultProvider = undefined;\n }\n });\n }\n getQuickAccessProviders() {\n return coalesce([this.defaultProvider, ...this.providers]);\n }\n getQuickAccessProvider(prefix) {\n const result = prefix ? (this.providers.find(provider => prefix.startsWith(provider.prefix)) || undefined) : undefined;\n return result || this.defaultProvider;\n }\n}\nRegistry.add(Extensions.Quickaccess, new QuickAccessRegistry());\n","import { createDecorator } from '../../instantiation/common/instantiation.js';\nexport * from '../../../base/parts/quickinput/common/quickInput.js';\nexport const IQuickInputService = createDecorator('quickInputService');\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 *--------------------------------------------------------------------------------------------*/\nimport * as Types from '../../../base/common/types.js';\nimport * as Assert from '../../../base/common/assert.js';\nclass RegistryImpl {\n constructor() {\n this.data = new Map();\n }\n add(id, data) {\n Assert.ok(Types.isString(id));\n Assert.ok(Types.isObject(data));\n Assert.ok(!this.data.has(id), 'There is already an extension with this id');\n this.data.set(id, data);\n }\n as(id) {\n return this.data.get(id) || null;\n }\n}\nexport const Registry = new RegistryImpl();\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { ThrottledDelayer } from '../../../common/async.js';\nimport { isUndefinedOrNull } from '../../../common/types.js';\nvar StorageState;\n(function (StorageState) {\n StorageState[StorageState[\"None\"] = 0] = \"None\";\n StorageState[StorageState[\"Initialized\"] = 1] = \"Initialized\";\n StorageState[StorageState[\"Closed\"] = 2] = \"Closed\";\n})(StorageState || (StorageState = {}));\nexport class Storage extends Disposable {\n constructor(database, options = Object.create(null)) {\n super();\n this.database = database;\n this.options = options;\n this._onDidChangeStorage = this._register(new Emitter());\n this.onDidChangeStorage = this._onDidChangeStorage.event;\n this.state = StorageState.None;\n this.cache = new Map();\n this.flushDelayer = new ThrottledDelayer(Storage.DEFAULT_FLUSH_DELAY);\n this.pendingDeletes = new Set();\n this.pendingInserts = new Map();\n this.whenFlushedCallbacks = [];\n this.registerListeners();\n }\n registerListeners() {\n this._register(this.database.onDidChangeItemsExternal(e => this.onDidChangeItemsExternal(e)));\n }\n onDidChangeItemsExternal(e) {\n var _a, _b;\n // items that change external require us to update our\n // caches with the values. we just accept the value and\n // emit an event if there is a change.\n (_a = e.changed) === null || _a === void 0 ? void 0 : _a.forEach((value, key) => this.accept(key, value));\n (_b = e.deleted) === null || _b === void 0 ? void 0 : _b.forEach(key => this.accept(key, undefined));\n }\n accept(key, value) {\n if (this.state === StorageState.Closed) {\n return; // Return early if we are already closed\n }\n let changed = false;\n // Item got removed, check for deletion\n if (isUndefinedOrNull(value)) {\n changed = this.cache.delete(key);\n }\n // Item got updated, check for change\n else {\n const currentValue = this.cache.get(key);\n if (currentValue !== value) {\n this.cache.set(key, value);\n changed = true;\n }\n }\n // Signal to outside listeners\n if (changed) {\n this._onDidChangeStorage.fire(key);\n }\n }\n get(key, fallbackValue) {\n const value = this.cache.get(key);\n if (isUndefinedOrNull(value)) {\n return fallbackValue;\n }\n return value;\n }\n getBoolean(key, fallbackValue) {\n const value = this.get(key);\n if (isUndefinedOrNull(value)) {\n return fallbackValue;\n }\n return value === 'true';\n }\n getNumber(key, fallbackValue) {\n const value = this.get(key);\n if (isUndefinedOrNull(value)) {\n return fallbackValue;\n }\n return parseInt(value, 10);\n }\n set(key, value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state === StorageState.Closed) {\n return; // Return early if we are already closed\n }\n // We remove the key for undefined/null values\n if (isUndefinedOrNull(value)) {\n return this.delete(key);\n }\n // Otherwise, convert to String and store\n const valueStr = String(value);\n // Return early if value already set\n const currentValue = this.cache.get(key);\n if (currentValue === valueStr) {\n return;\n }\n // Update in cache and pending\n this.cache.set(key, valueStr);\n this.pendingInserts.set(key, valueStr);\n this.pendingDeletes.delete(key);\n // Event\n this._onDidChangeStorage.fire(key);\n // Accumulate work by scheduling after timeout\n return this.flushDelayer.trigger(() => this.flushPending());\n });\n }\n delete(key) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state === StorageState.Closed) {\n return; // Return early if we are already closed\n }\n // Remove from cache and add to pending\n const wasDeleted = this.cache.delete(key);\n if (!wasDeleted) {\n return; // Return early if value already deleted\n }\n if (!this.pendingDeletes.has(key)) {\n this.pendingDeletes.add(key);\n }\n this.pendingInserts.delete(key);\n // Event\n this._onDidChangeStorage.fire(key);\n // Accumulate work by scheduling after timeout\n return this.flushDelayer.trigger(() => this.flushPending());\n });\n }\n get hasPending() {\n return this.pendingInserts.size > 0 || this.pendingDeletes.size > 0;\n }\n flushPending() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.hasPending) {\n return; // return early if nothing to do\n }\n // Get pending data\n const updateRequest = { insert: this.pendingInserts, delete: this.pendingDeletes };\n // Reset pending data for next run\n this.pendingDeletes = new Set();\n this.pendingInserts = new Map();\n // Update in storage and release any\n // waiters we have once done\n return this.database.updateItems(updateRequest).finally(() => {\n var _a;\n if (!this.hasPending) {\n while (this.whenFlushedCallbacks.length) {\n (_a = this.whenFlushedCallbacks.pop()) === null || _a === void 0 ? void 0 : _a();\n }\n }\n });\n });\n }\n dispose() {\n this.flushDelayer.cancel(); // workaround https://github.com/microsoft/vscode/issues/116777\n this.flushDelayer.dispose();\n super.dispose();\n }\n}\nStorage.DEFAULT_FLUSH_DELAY = 100;\nexport class InMemoryStorageDatabase {\n constructor() {\n this.onDidChangeItemsExternal = Event.None;\n this.items = new Map();\n }\n updateItems(request) {\n return __awaiter(this, void 0, void 0, function* () {\n if (request.insert) {\n request.insert.forEach((value, key) => this.items.set(key, value));\n }\n if (request.delete) {\n request.delete.forEach(key => this.items.delete(key));\n }\n });\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { Emitter, PauseableEmitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { isUndefinedOrNull } from '../../../base/common/types.js';\nimport { InMemoryStorageDatabase, Storage } from '../../../base/parts/storage/common/storage.js';\nconst TARGET_KEY = '__$__targetStorageMarker';\nexport const IStorageService = createDecorator('storageService');\nexport var WillSaveStateReason;\n(function (WillSaveStateReason) {\n /**\n * No specific reason to save state.\n */\n WillSaveStateReason[WillSaveStateReason[\"NONE\"] = 0] = \"NONE\";\n /**\n * A hint that the workbench is about to shutdown.\n */\n WillSaveStateReason[WillSaveStateReason[\"SHUTDOWN\"] = 1] = \"SHUTDOWN\";\n})(WillSaveStateReason || (WillSaveStateReason = {}));\nexport class AbstractStorageService extends Disposable {\n constructor(options = { flushInterval: AbstractStorageService.DEFAULT_FLUSH_INTERVAL }) {\n super();\n this.options = options;\n this._onDidChangeValue = this._register(new PauseableEmitter());\n this._onDidChangeTarget = this._register(new PauseableEmitter());\n this._onWillSaveState = this._register(new Emitter());\n this.onWillSaveState = this._onWillSaveState.event;\n this._workspaceKeyTargets = undefined;\n this._globalKeyTargets = undefined;\n }\n emitDidChangeValue(scope, key) {\n // Specially handle `TARGET_KEY`\n if (key === TARGET_KEY) {\n // Clear our cached version which is now out of date\n if (scope === 0 /* GLOBAL */) {\n this._globalKeyTargets = undefined;\n }\n else if (scope === 1 /* WORKSPACE */) {\n this._workspaceKeyTargets = undefined;\n }\n // Emit as `didChangeTarget` event\n this._onDidChangeTarget.fire({ scope });\n }\n // Emit any other key to outside\n else {\n this._onDidChangeValue.fire({ scope, key, target: this.getKeyTargets(scope)[key] });\n }\n }\n get(key, scope, fallbackValue) {\n var _a;\n return (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.get(key, fallbackValue);\n }\n getBoolean(key, scope, fallbackValue) {\n var _a;\n return (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.getBoolean(key, fallbackValue);\n }\n getNumber(key, scope, fallbackValue) {\n var _a;\n return (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.getNumber(key, fallbackValue);\n }\n store(key, value, scope, target) {\n // We remove the key for undefined/null values\n if (isUndefinedOrNull(value)) {\n this.remove(key, scope);\n return;\n }\n // Update our datastructures but send events only after\n this.withPausedEmitters(() => {\n var _a;\n // Update key-target map\n this.updateKeyTarget(key, scope, target);\n // Store actual value\n (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.set(key, value);\n });\n }\n remove(key, scope) {\n // Update our datastructures but send events only after\n this.withPausedEmitters(() => {\n var _a;\n // Update key-target map\n this.updateKeyTarget(key, scope, undefined);\n // Remove actual key\n (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.delete(key);\n });\n }\n withPausedEmitters(fn) {\n // Pause emitters\n this._onDidChangeValue.pause();\n this._onDidChangeTarget.pause();\n try {\n fn();\n }\n finally {\n // Resume emitters\n this._onDidChangeValue.resume();\n this._onDidChangeTarget.resume();\n }\n }\n updateKeyTarget(key, scope, target) {\n var _a, _b;\n // Add\n const keyTargets = this.getKeyTargets(scope);\n if (typeof target === 'number') {\n if (keyTargets[key] !== target) {\n keyTargets[key] = target;\n (_a = this.getStorage(scope)) === null || _a === void 0 ? void 0 : _a.set(TARGET_KEY, JSON.stringify(keyTargets));\n }\n }\n // Remove\n else {\n if (typeof keyTargets[key] === 'number') {\n delete keyTargets[key];\n (_b = this.getStorage(scope)) === null || _b === void 0 ? void 0 : _b.set(TARGET_KEY, JSON.stringify(keyTargets));\n }\n }\n }\n get workspaceKeyTargets() {\n if (!this._workspaceKeyTargets) {\n this._workspaceKeyTargets = this.loadKeyTargets(1 /* WORKSPACE */);\n }\n return this._workspaceKeyTargets;\n }\n get globalKeyTargets() {\n if (!this._globalKeyTargets) {\n this._globalKeyTargets = this.loadKeyTargets(0 /* GLOBAL */);\n }\n return this._globalKeyTargets;\n }\n getKeyTargets(scope) {\n return scope === 0 /* GLOBAL */ ? this.globalKeyTargets : this.workspaceKeyTargets;\n }\n loadKeyTargets(scope) {\n const keysRaw = this.get(TARGET_KEY, scope);\n if (keysRaw) {\n try {\n return JSON.parse(keysRaw);\n }\n catch (error) {\n // Fail gracefully\n }\n }\n return Object.create(null);\n }\n}\nAbstractStorageService.DEFAULT_FLUSH_INTERVAL = 60 * 1000; // every minute\nexport class InMemoryStorageService extends AbstractStorageService {\n constructor() {\n super();\n this.globalStorage = new Storage(new InMemoryStorageDatabase());\n this.workspaceStorage = new Storage(new InMemoryStorageDatabase());\n this._register(this.workspaceStorage.onDidChangeStorage(key => this.emitDidChangeValue(1 /* WORKSPACE */, key)));\n this._register(this.globalStorage.onDidChangeStorage(key => this.emitDidChangeValue(0 /* GLOBAL */, key)));\n }\n getStorage(scope) {\n return scope === 0 /* GLOBAL */ ? this.globalStorage : this.workspaceStorage;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const ITelemetryService = createDecorator('telemetryService');\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 *--------------------------------------------------------------------------------------------*/\nimport * as platform from '../../registry/common/platform.js';\nimport { Color, RGBA } from '../../../base/common/color.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport * as nls from '../../../nls.js';\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\n// color registry\nexport const Extensions = {\n ColorContribution: 'base.contributions.colors'\n};\nclass ColorRegistry {\n constructor() {\n this._onDidChangeSchema = new Emitter();\n this.onDidChangeSchema = this._onDidChangeSchema.event;\n this.colorSchema = { type: 'object', properties: {} };\n this.colorReferenceSchema = { type: 'string', enum: [], enumDescriptions: [] };\n this.colorsById = {};\n }\n registerColor(id, defaults, description, needsTransparency = false, deprecationMessage) {\n let colorContribution = { id, description, defaults, needsTransparency, deprecationMessage };\n this.colorsById[id] = colorContribution;\n let propertySchema = { type: 'string', description, format: 'color-hex', defaultSnippets: [{ body: '${1:#ff0000}' }] };\n if (deprecationMessage) {\n propertySchema.deprecationMessage = deprecationMessage;\n }\n this.colorSchema.properties[id] = propertySchema;\n this.colorReferenceSchema.enum.push(id);\n this.colorReferenceSchema.enumDescriptions.push(description);\n this._onDidChangeSchema.fire();\n return id;\n }\n resolveDefaultColor(id, theme) {\n const colorDesc = this.colorsById[id];\n if (colorDesc && colorDesc.defaults) {\n const colorValue = colorDesc.defaults[theme.type];\n return resolveColorValue(colorValue, theme);\n }\n return undefined;\n }\n getColorSchema() {\n return this.colorSchema;\n }\n toString() {\n let sorter = (a, b) => {\n let cat1 = a.indexOf('.') === -1 ? 0 : 1;\n let cat2 = b.indexOf('.') === -1 ? 0 : 1;\n if (cat1 !== cat2) {\n return cat1 - cat2;\n }\n return a.localeCompare(b);\n };\n return Object.keys(this.colorsById).sort(sorter).map(k => `- \\`${k}\\`: ${this.colorsById[k].description}`).join('\\n');\n }\n}\nconst colorRegistry = new ColorRegistry();\nplatform.Registry.add(Extensions.ColorContribution, colorRegistry);\nexport function registerColor(id, defaults, description, needsTransparency, deprecationMessage) {\n return colorRegistry.registerColor(id, defaults, description, needsTransparency, deprecationMessage);\n}\n// ----- base colors\nexport const foreground = registerColor('foreground', { dark: '#CCCCCC', light: '#616161', hc: '#FFFFFF' }, nls.localize('foreground', \"Overall foreground color. This color is only used if not overridden by a component.\"));\nexport const errorForeground = registerColor('errorForeground', { dark: '#F48771', light: '#A1260D', hc: '#F48771' }, nls.localize('errorForeground', \"Overall foreground color for error messages. This color is only used if not overridden by a component.\"));\nexport const iconForeground = registerColor('icon.foreground', { dark: '#C5C5C5', light: '#424242', hc: '#FFFFFF' }, nls.localize('iconForeground', \"The default color for icons in the workbench.\"));\nexport const focusBorder = registerColor('focusBorder', { dark: '#007FD4', light: '#0090F1', hc: '#F38518' }, nls.localize('focusBorder', \"Overall border color for focused elements. This color is only used if not overridden by a component.\"));\nexport const contrastBorder = registerColor('contrastBorder', { light: null, dark: null, hc: '#6FC3DF' }, nls.localize('contrastBorder', \"An extra border around elements to separate them from others for greater contrast.\"));\nexport const activeContrastBorder = registerColor('contrastActiveBorder', { light: null, dark: null, hc: focusBorder }, nls.localize('activeContrastBorder', \"An extra border around active elements to separate them from others for greater contrast.\"));\nexport const textLinkForeground = registerColor('textLink.foreground', { light: '#006AB1', dark: '#3794FF', hc: '#3794FF' }, nls.localize('textLinkForeground', \"Foreground color for links in text.\"));\nexport const textCodeBlockBackground = registerColor('textCodeBlock.background', { light: '#dcdcdc66', dark: '#0a0a0a66', hc: Color.black }, nls.localize('textCodeBlockBackground', \"Background color for code blocks in text.\"));\n// ----- widgets\nexport const widgetShadow = registerColor('widget.shadow', { dark: transparent(Color.black, .36), light: transparent(Color.black, .16), hc: null }, nls.localize('widgetShadow', 'Shadow color of widgets such as find/replace inside the editor.'));\nexport const inputBackground = registerColor('input.background', { dark: '#3C3C3C', light: Color.white, hc: Color.black }, nls.localize('inputBoxBackground', \"Input box background.\"));\nexport const inputForeground = registerColor('input.foreground', { dark: foreground, light: foreground, hc: foreground }, nls.localize('inputBoxForeground', \"Input box foreground.\"));\nexport const inputBorder = registerColor('input.border', { dark: null, light: null, hc: contrastBorder }, nls.localize('inputBoxBorder', \"Input box border.\"));\nexport const inputActiveOptionBorder = registerColor('inputOption.activeBorder', { dark: '#007ACC00', light: '#007ACC00', hc: contrastBorder }, nls.localize('inputBoxActiveOptionBorder', \"Border color of activated options in input fields.\"));\nexport const inputActiveOptionBackground = registerColor('inputOption.activeBackground', { dark: transparent(focusBorder, 0.4), light: transparent(focusBorder, 0.2), hc: Color.transparent }, nls.localize('inputOption.activeBackground', \"Background color of activated options in input fields.\"));\nexport const inputActiveOptionForeground = registerColor('inputOption.activeForeground', { dark: Color.white, light: Color.black, hc: null }, nls.localize('inputOption.activeForeground', \"Foreground color of activated options in input fields.\"));\nexport const inputValidationInfoBackground = registerColor('inputValidation.infoBackground', { dark: '#063B49', light: '#D6ECF2', hc: Color.black }, nls.localize('inputValidationInfoBackground', \"Input validation background color for information severity.\"));\nexport const inputValidationInfoForeground = registerColor('inputValidation.infoForeground', { dark: null, light: null, hc: null }, nls.localize('inputValidationInfoForeground', \"Input validation foreground color for information severity.\"));\nexport const inputValidationInfoBorder = registerColor('inputValidation.infoBorder', { dark: '#007acc', light: '#007acc', hc: contrastBorder }, nls.localize('inputValidationInfoBorder', \"Input validation border color for information severity.\"));\nexport const inputValidationWarningBackground = registerColor('inputValidation.warningBackground', { dark: '#352A05', light: '#F6F5D2', hc: Color.black }, nls.localize('inputValidationWarningBackground', \"Input validation background color for warning severity.\"));\nexport const inputValidationWarningForeground = registerColor('inputValidation.warningForeground', { dark: null, light: null, hc: null }, nls.localize('inputValidationWarningForeground', \"Input validation foreground color for warning severity.\"));\nexport const inputValidationWarningBorder = registerColor('inputValidation.warningBorder', { dark: '#B89500', light: '#B89500', hc: contrastBorder }, nls.localize('inputValidationWarningBorder', \"Input validation border color for warning severity.\"));\nexport const inputValidationErrorBackground = registerColor('inputValidation.errorBackground', { dark: '#5A1D1D', light: '#F2DEDE', hc: Color.black }, nls.localize('inputValidationErrorBackground', \"Input validation background color for error severity.\"));\nexport const inputValidationErrorForeground = registerColor('inputValidation.errorForeground', { dark: null, light: null, hc: null }, nls.localize('inputValidationErrorForeground', \"Input validation foreground color for error severity.\"));\nexport const inputValidationErrorBorder = registerColor('inputValidation.errorBorder', { dark: '#BE1100', light: '#BE1100', hc: contrastBorder }, nls.localize('inputValidationErrorBorder', \"Input validation border color for error severity.\"));\nexport const selectBackground = registerColor('dropdown.background', { dark: '#3C3C3C', light: Color.white, hc: Color.black }, nls.localize('dropdownBackground', \"Dropdown background.\"));\nexport const selectForeground = registerColor('dropdown.foreground', { dark: '#F0F0F0', light: null, hc: Color.white }, nls.localize('dropdownForeground', \"Dropdown foreground.\"));\nexport const buttonForeground = registerColor('button.foreground', { dark: Color.white, light: Color.white, hc: Color.white }, nls.localize('buttonForeground', \"Button foreground color.\"));\nexport const buttonBackground = registerColor('button.background', { dark: '#0E639C', light: '#007ACC', hc: null }, nls.localize('buttonBackground', \"Button background color.\"));\nexport const buttonHoverBackground = registerColor('button.hoverBackground', { dark: lighten(buttonBackground, 0.2), light: darken(buttonBackground, 0.2), hc: null }, nls.localize('buttonHoverBackground', \"Button background color when hovering.\"));\nexport const badgeBackground = registerColor('badge.background', { dark: '#4D4D4D', light: '#C4C4C4', hc: Color.black }, nls.localize('badgeBackground', \"Badge background color. Badges are small information labels, e.g. for search results count.\"));\nexport const badgeForeground = registerColor('badge.foreground', { dark: Color.white, light: '#333', hc: Color.white }, nls.localize('badgeForeground', \"Badge foreground color. Badges are small information labels, e.g. for search results count.\"));\nexport const scrollbarShadow = registerColor('scrollbar.shadow', { dark: '#000000', light: '#DDDDDD', hc: null }, nls.localize('scrollbarShadow', \"Scrollbar shadow to indicate that the view is scrolled.\"));\nexport const scrollbarSliderBackground = registerColor('scrollbarSlider.background', { dark: Color.fromHex('#797979').transparent(0.4), light: Color.fromHex('#646464').transparent(0.4), hc: transparent(contrastBorder, 0.6) }, nls.localize('scrollbarSliderBackground', \"Scrollbar slider background color.\"));\nexport const scrollbarSliderHoverBackground = registerColor('scrollbarSlider.hoverBackground', { dark: Color.fromHex('#646464').transparent(0.7), light: Color.fromHex('#646464').transparent(0.7), hc: transparent(contrastBorder, 0.8) }, nls.localize('scrollbarSliderHoverBackground', \"Scrollbar slider background color when hovering.\"));\nexport const scrollbarSliderActiveBackground = registerColor('scrollbarSlider.activeBackground', { dark: Color.fromHex('#BFBFBF').transparent(0.4), light: Color.fromHex('#000000').transparent(0.6), hc: contrastBorder }, nls.localize('scrollbarSliderActiveBackground', \"Scrollbar slider background color when clicked on.\"));\nexport const progressBarBackground = registerColor('progressBar.background', { dark: Color.fromHex('#0E70C0'), light: Color.fromHex('#0E70C0'), hc: contrastBorder }, nls.localize('progressBarBackground', \"Background color of the progress bar that can show for long running operations.\"));\nexport const editorErrorBackground = registerColor('editorError.background', { dark: null, light: null, hc: null }, nls.localize('editorError.background', 'Background color of error text in the editor. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorErrorForeground = registerColor('editorError.foreground', { dark: '#F48771', light: '#E51400', hc: null }, nls.localize('editorError.foreground', 'Foreground color of error squigglies in the editor.'));\nexport const editorErrorBorder = registerColor('editorError.border', { dark: null, light: null, hc: Color.fromHex('#E47777').transparent(0.8) }, nls.localize('errorBorder', 'Border color of error boxes in the editor.'));\nexport const editorWarningBackground = registerColor('editorWarning.background', { dark: null, light: null, hc: null }, nls.localize('editorWarning.background', 'Background color of warning text in the editor. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorWarningForeground = registerColor('editorWarning.foreground', { dark: '#CCA700', light: '#BF8803', hc: null }, nls.localize('editorWarning.foreground', 'Foreground color of warning squigglies in the editor.'));\nexport const editorWarningBorder = registerColor('editorWarning.border', { dark: null, light: null, hc: Color.fromHex('#FFCC00').transparent(0.8) }, nls.localize('warningBorder', 'Border color of warning boxes in the editor.'));\nexport const editorInfoBackground = registerColor('editorInfo.background', { dark: null, light: null, hc: null }, nls.localize('editorInfo.background', 'Background color of info text in the editor. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorInfoForeground = registerColor('editorInfo.foreground', { dark: '#75BEFF', light: '#75BEFF', hc: null }, nls.localize('editorInfo.foreground', 'Foreground color of info squigglies in the editor.'));\nexport const editorInfoBorder = registerColor('editorInfo.border', { dark: null, light: null, hc: Color.fromHex('#75BEFF').transparent(0.8) }, nls.localize('infoBorder', 'Border color of info boxes in the editor.'));\nexport const editorHintForeground = registerColor('editorHint.foreground', { dark: Color.fromHex('#eeeeee').transparent(0.7), light: '#6c6c6c', hc: null }, nls.localize('editorHint.foreground', 'Foreground color of hint squigglies in the editor.'));\nexport const editorHintBorder = registerColor('editorHint.border', { dark: null, light: null, hc: Color.fromHex('#eeeeee').transparent(0.8) }, nls.localize('hintBorder', 'Border color of hint boxes in the editor.'));\n/**\n * Editor background color.\n * Because of bug https://monacotools.visualstudio.com/DefaultCollection/Monaco/_workitems/edit/13254\n * we are *not* using the color white (or #ffffff, rgba(255,255,255)) but something very close to white.\n */\nexport const editorBackground = registerColor('editor.background', { light: '#fffffe', dark: '#1E1E1E', hc: Color.black }, nls.localize('editorBackground', \"Editor background color.\"));\n/**\n * Editor foreground color.\n */\nexport const editorForeground = registerColor('editor.foreground', { light: '#333333', dark: '#BBBBBB', hc: Color.white }, nls.localize('editorForeground', \"Editor default foreground color.\"));\n/**\n * Editor widgets\n */\nexport const editorWidgetBackground = registerColor('editorWidget.background', { dark: '#252526', light: '#F3F3F3', hc: '#0C141F' }, nls.localize('editorWidgetBackground', 'Background color of editor widgets, such as find/replace.'));\nexport const editorWidgetForeground = registerColor('editorWidget.foreground', { dark: foreground, light: foreground, hc: foreground }, nls.localize('editorWidgetForeground', 'Foreground color of editor widgets, such as find/replace.'));\nexport const editorWidgetBorder = registerColor('editorWidget.border', { dark: '#454545', light: '#C8C8C8', hc: contrastBorder }, nls.localize('editorWidgetBorder', 'Border color of editor widgets. The color is only used if the widget chooses to have a border and if the color is not overridden by a widget.'));\nexport const editorWidgetResizeBorder = registerColor('editorWidget.resizeBorder', { light: null, dark: null, hc: null }, nls.localize('editorWidgetResizeBorder', \"Border color of the resize bar of editor widgets. The color is only used if the widget chooses to have a resize border and if the color is not overridden by a widget.\"));\n/**\n * Quick pick widget\n */\nexport const quickInputBackground = registerColor('quickInput.background', { dark: editorWidgetBackground, light: editorWidgetBackground, hc: editorWidgetBackground }, nls.localize('pickerBackground', \"Quick picker background color. The quick picker widget is the container for pickers like the command palette.\"));\nexport const quickInputForeground = registerColor('quickInput.foreground', { dark: editorWidgetForeground, light: editorWidgetForeground, hc: editorWidgetForeground }, nls.localize('pickerForeground', \"Quick picker foreground color. The quick picker widget is the container for pickers like the command palette.\"));\nexport const quickInputTitleBackground = registerColor('quickInputTitle.background', { dark: new Color(new RGBA(255, 255, 255, 0.105)), light: new Color(new RGBA(0, 0, 0, 0.06)), hc: '#000000' }, nls.localize('pickerTitleBackground', \"Quick picker title background color. The quick picker widget is the container for pickers like the command palette.\"));\nexport const pickerGroupForeground = registerColor('pickerGroup.foreground', { dark: '#3794FF', light: '#0066BF', hc: Color.white }, nls.localize('pickerGroupForeground', \"Quick picker color for grouping labels.\"));\nexport const pickerGroupBorder = registerColor('pickerGroup.border', { dark: '#3F3F46', light: '#CCCEDB', hc: Color.white }, nls.localize('pickerGroupBorder', \"Quick picker color for grouping borders.\"));\n/**\n * Keybinding label\n */\nexport const keybindingLabelBackground = registerColor('keybindingLabel.background', { dark: new Color(new RGBA(128, 128, 128, 0.17)), light: new Color(new RGBA(221, 221, 221, 0.4)), hc: Color.transparent }, nls.localize('keybindingLabelBackground', \"Keybinding label background color. The keybinding label is used to represent a keyboard shortcut.\"));\nexport const keybindingLabelForeground = registerColor('keybindingLabel.foreground', { dark: Color.fromHex('#CCCCCC'), light: Color.fromHex('#555555'), hc: Color.white }, nls.localize('keybindingLabelForeground', \"Keybinding label foreground color. The keybinding label is used to represent a keyboard shortcut.\"));\nexport const keybindingLabelBorder = registerColor('keybindingLabel.border', { dark: new Color(new RGBA(51, 51, 51, 0.6)), light: new Color(new RGBA(204, 204, 204, 0.4)), hc: new Color(new RGBA(111, 195, 223)) }, nls.localize('keybindingLabelBorder', \"Keybinding label border color. The keybinding label is used to represent a keyboard shortcut.\"));\nexport const keybindingLabelBottomBorder = registerColor('keybindingLabel.bottomBorder', { dark: new Color(new RGBA(68, 68, 68, 0.6)), light: new Color(new RGBA(187, 187, 187, 0.4)), hc: new Color(new RGBA(111, 195, 223)) }, nls.localize('keybindingLabelBottomBorder', \"Keybinding label border bottom color. The keybinding label is used to represent a keyboard shortcut.\"));\n/**\n * Editor selection colors.\n */\nexport const editorSelectionBackground = registerColor('editor.selectionBackground', { light: '#ADD6FF', dark: '#264F78', hc: '#f3f518' }, nls.localize('editorSelectionBackground', \"Color of the editor selection.\"));\nexport const editorSelectionForeground = registerColor('editor.selectionForeground', { light: null, dark: null, hc: '#000000' }, nls.localize('editorSelectionForeground', \"Color of the selected text for high contrast.\"));\nexport const editorInactiveSelection = registerColor('editor.inactiveSelectionBackground', { light: transparent(editorSelectionBackground, 0.5), dark: transparent(editorSelectionBackground, 0.5), hc: transparent(editorSelectionBackground, 0.5) }, nls.localize('editorInactiveSelection', \"Color of the selection in an inactive editor. The color must not be opaque so as not to hide underlying decorations.\"), true);\nexport const editorSelectionHighlight = registerColor('editor.selectionHighlightBackground', { light: lessProminent(editorSelectionBackground, editorBackground, 0.3, 0.6), dark: lessProminent(editorSelectionBackground, editorBackground, 0.3, 0.6), hc: null }, nls.localize('editorSelectionHighlight', 'Color for regions with the same content as the selection. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorSelectionHighlightBorder = registerColor('editor.selectionHighlightBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('editorSelectionHighlightBorder', \"Border color for regions with the same content as the selection.\"));\n/**\n * Editor find match colors.\n */\nexport const editorFindMatch = registerColor('editor.findMatchBackground', { light: '#A8AC94', dark: '#515C6A', hc: null }, nls.localize('editorFindMatch', \"Color of the current search match.\"));\nexport const editorFindMatchHighlight = registerColor('editor.findMatchHighlightBackground', { light: '#EA5C0055', dark: '#EA5C0055', hc: null }, nls.localize('findMatchHighlight', \"Color of the other search matches. The color must not be opaque so as not to hide underlying decorations.\"), true);\nexport const editorFindRangeHighlight = registerColor('editor.findRangeHighlightBackground', { dark: '#3a3d4166', light: '#b4b4b44d', hc: null }, nls.localize('findRangeHighlight', \"Color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.\"), true);\nexport const editorFindMatchBorder = registerColor('editor.findMatchBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('editorFindMatchBorder', \"Border color of the current search match.\"));\nexport const editorFindMatchHighlightBorder = registerColor('editor.findMatchHighlightBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('findMatchHighlightBorder', \"Border color of the other search matches.\"));\nexport const editorFindRangeHighlightBorder = registerColor('editor.findRangeHighlightBorder', { dark: null, light: null, hc: transparent(activeContrastBorder, 0.4) }, nls.localize('findRangeHighlightBorder', \"Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.\"), true);\n/**\n * Editor hover\n */\nexport const editorHoverHighlight = registerColor('editor.hoverHighlightBackground', { light: '#ADD6FF26', dark: '#264f7840', hc: '#ADD6FF26' }, nls.localize('hoverHighlight', 'Highlight below the word for which a hover is shown. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const editorHoverBackground = registerColor('editorHoverWidget.background', { light: editorWidgetBackground, dark: editorWidgetBackground, hc: editorWidgetBackground }, nls.localize('hoverBackground', 'Background color of the editor hover.'));\nexport const editorHoverForeground = registerColor('editorHoverWidget.foreground', { light: editorWidgetForeground, dark: editorWidgetForeground, hc: editorWidgetForeground }, nls.localize('hoverForeground', 'Foreground color of the editor hover.'));\nexport const editorHoverBorder = registerColor('editorHoverWidget.border', { light: editorWidgetBorder, dark: editorWidgetBorder, hc: editorWidgetBorder }, nls.localize('hoverBorder', 'Border color of the editor hover.'));\nexport const editorHoverStatusBarBackground = registerColor('editorHoverWidget.statusBarBackground', { dark: lighten(editorHoverBackground, 0.2), light: darken(editorHoverBackground, 0.05), hc: editorWidgetBackground }, nls.localize('statusBarBackground', \"Background color of the editor hover status bar.\"));\n/**\n * Editor link colors\n */\nexport const editorActiveLinkForeground = registerColor('editorLink.activeForeground', { dark: '#4E94CE', light: Color.blue, hc: Color.cyan }, nls.localize('activeLinkForeground', 'Color of active links.'));\n/**\n * Inline hints\n */\nexport const editorInlineHintForeground = registerColor('editorInlineHint.foreground', { dark: editorWidgetBackground, light: editorWidgetForeground, hc: editorWidgetBackground }, nls.localize('editorInlineHintForeground', 'Foreground color of inline hints'));\nexport const editorInlineHintBackground = registerColor('editorInlineHint.background', { dark: editorWidgetForeground, light: editorWidgetBackground, hc: editorWidgetForeground }, nls.localize('editorInlineHintBackground', 'Background color of inline hints'));\n/**\n * Editor lighbulb icon colors\n */\nexport const editorLightBulbForeground = registerColor('editorLightBulb.foreground', { dark: '#FFCC00', light: '#DDB100', hc: '#FFCC00' }, nls.localize('editorLightBulbForeground', \"The color used for the lightbulb actions icon.\"));\nexport const editorLightBulbAutoFixForeground = registerColor('editorLightBulbAutoFix.foreground', { dark: '#75BEFF', light: '#007ACC', hc: '#75BEFF' }, nls.localize('editorLightBulbAutoFixForeground', \"The color used for the lightbulb auto fix actions icon.\"));\n/**\n * Diff Editor Colors\n */\nexport const defaultInsertColor = new Color(new RGBA(155, 185, 85, 0.2));\nexport const defaultRemoveColor = new Color(new RGBA(255, 0, 0, 0.2));\nexport const diffInserted = registerColor('diffEditor.insertedTextBackground', { dark: defaultInsertColor, light: defaultInsertColor, hc: null }, nls.localize('diffEditorInserted', 'Background color for text that got inserted. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const diffRemoved = registerColor('diffEditor.removedTextBackground', { dark: defaultRemoveColor, light: defaultRemoveColor, hc: null }, nls.localize('diffEditorRemoved', 'Background color for text that got removed. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const diffInsertedOutline = registerColor('diffEditor.insertedTextBorder', { dark: null, light: null, hc: '#33ff2eff' }, nls.localize('diffEditorInsertedOutline', 'Outline color for the text that got inserted.'));\nexport const diffRemovedOutline = registerColor('diffEditor.removedTextBorder', { dark: null, light: null, hc: '#FF008F' }, nls.localize('diffEditorRemovedOutline', 'Outline color for text that got removed.'));\nexport const diffBorder = registerColor('diffEditor.border', { dark: null, light: null, hc: contrastBorder }, nls.localize('diffEditorBorder', 'Border color between the two text editors.'));\nexport const diffDiagonalFill = registerColor('diffEditor.diagonalFill', { dark: '#cccccc33', light: '#22222233', hc: null }, nls.localize('diffDiagonalFill', \"Color of the diff editor's diagonal fill. The diagonal fill is used in side-by-side diff views.\"));\n/**\n * List and tree colors\n */\nexport const listFocusBackground = registerColor('list.focusBackground', { dark: null, light: null, hc: null }, nls.localize('listFocusBackground', \"List/Tree background color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listFocusForeground = registerColor('list.focusForeground', { dark: null, light: null, hc: null }, nls.localize('listFocusForeground', \"List/Tree foreground color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listFocusOutline = registerColor('list.focusOutline', { dark: focusBorder, light: focusBorder, hc: activeContrastBorder }, nls.localize('listFocusOutline', \"List/Tree outline color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listActiveSelectionBackground = registerColor('list.activeSelectionBackground', { dark: '#094771', light: '#0060C0', hc: null }, nls.localize('listActiveSelectionBackground', \"List/Tree background color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listActiveSelectionForeground = registerColor('list.activeSelectionForeground', { dark: Color.white, light: Color.white, hc: null }, nls.localize('listActiveSelectionForeground', \"List/Tree foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listInactiveSelectionBackground = registerColor('list.inactiveSelectionBackground', { dark: '#37373D', light: '#E4E6F1', hc: null }, nls.localize('listInactiveSelectionBackground', \"List/Tree background color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listInactiveSelectionForeground = registerColor('list.inactiveSelectionForeground', { dark: null, light: null, hc: null }, nls.localize('listInactiveSelectionForeground', \"List/Tree foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listInactiveFocusBackground = registerColor('list.inactiveFocusBackground', { dark: null, light: null, hc: null }, nls.localize('listInactiveFocusBackground', \"List/Tree background color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listInactiveFocusOutline = registerColor('list.inactiveFocusOutline', { dark: null, light: null, hc: null }, nls.localize('listInactiveFocusOutline', \"List/Tree outline color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listHoverBackground = registerColor('list.hoverBackground', { dark: '#2A2D2E', light: '#F0F0F0', hc: null }, nls.localize('listHoverBackground', \"List/Tree background when hovering over items using the mouse.\"));\nexport const listHoverForeground = registerColor('list.hoverForeground', { dark: null, light: null, hc: null }, nls.localize('listHoverForeground', \"List/Tree foreground when hovering over items using the mouse.\"));\nexport const listDropBackground = registerColor('list.dropBackground', { dark: '#062F4A', light: '#D6EBFF', hc: null }, nls.localize('listDropBackground', \"List/Tree drag and drop background when moving items around using the mouse.\"));\nexport const listHighlightForeground = registerColor('list.highlightForeground', { dark: '#0097fb', light: '#0066BF', hc: focusBorder }, nls.localize('highlight', 'List/Tree foreground color of the match highlights when searching inside the list/tree.'));\nexport const listFilterWidgetBackground = registerColor('listFilterWidget.background', { light: '#efc1ad', dark: '#653723', hc: Color.black }, nls.localize('listFilterWidgetBackground', 'Background color of the type filter widget in lists and trees.'));\nexport const listFilterWidgetOutline = registerColor('listFilterWidget.outline', { dark: Color.transparent, light: Color.transparent, hc: '#f38518' }, nls.localize('listFilterWidgetOutline', 'Outline color of the type filter widget in lists and trees.'));\nexport const listFilterWidgetNoMatchesOutline = registerColor('listFilterWidget.noMatchesOutline', { dark: '#BE1100', light: '#BE1100', hc: contrastBorder }, nls.localize('listFilterWidgetNoMatchesOutline', 'Outline color of the type filter widget in lists and trees, when there are no matches.'));\nexport const treeIndentGuidesStroke = registerColor('tree.indentGuidesStroke', { dark: '#585858', light: '#a9a9a9', hc: '#a9a9a9' }, nls.localize('treeIndentGuidesStroke', \"Tree stroke color for the indentation guides.\"));\nexport const tableColumnsBorder = registerColor('tree.tableColumnsBorder', { dark: '#CCCCCC20', light: '#61616120', hc: null }, nls.localize('treeIndentGuidesStroke', \"Tree stroke color for the indentation guides.\"));\n/**\n * Quick pick widget (dependent on List and tree colors)\n */\nexport const _deprecatedQuickInputListFocusBackground = registerColor('quickInput.list.focusBackground', { dark: null, light: null, hc: null }, '', undefined, nls.localize('quickInput.list.focusBackground deprecation', \"Please use quickInputList.focusBackground instead\"));\nexport const quickInputListFocusBackground = registerColor('quickInputList.focusBackground', { dark: oneOf(_deprecatedQuickInputListFocusBackground, listFocusBackground, '#062F4A'), light: oneOf(_deprecatedQuickInputListFocusBackground, listFocusBackground, '#D6EBFF'), hc: null }, nls.localize('quickInput.listFocusBackground', \"Quick picker background color for the focused item.\"));\n/**\n * Menu colors\n */\nexport const menuBorder = registerColor('menu.border', { dark: null, light: null, hc: contrastBorder }, nls.localize('menuBorder', \"Border color of menus.\"));\nexport const menuForeground = registerColor('menu.foreground', { dark: selectForeground, light: foreground, hc: selectForeground }, nls.localize('menuForeground', \"Foreground color of menu items.\"));\nexport const menuBackground = registerColor('menu.background', { dark: selectBackground, light: selectBackground, hc: selectBackground }, nls.localize('menuBackground', \"Background color of menu items.\"));\nexport const menuSelectionForeground = registerColor('menu.selectionForeground', { dark: listActiveSelectionForeground, light: listActiveSelectionForeground, hc: listActiveSelectionForeground }, nls.localize('menuSelectionForeground', \"Foreground color of the selected menu item in menus.\"));\nexport const menuSelectionBackground = registerColor('menu.selectionBackground', { dark: listActiveSelectionBackground, light: listActiveSelectionBackground, hc: listActiveSelectionBackground }, nls.localize('menuSelectionBackground', \"Background color of the selected menu item in menus.\"));\nexport const menuSelectionBorder = registerColor('menu.selectionBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('menuSelectionBorder', \"Border color of the selected menu item in menus.\"));\nexport const menuSeparatorBackground = registerColor('menu.separatorBackground', { dark: '#BBBBBB', light: '#888888', hc: contrastBorder }, nls.localize('menuSeparatorBackground', \"Color of a separator menu item in menus.\"));\n/**\n * Snippet placeholder colors\n */\nexport const snippetTabstopHighlightBackground = registerColor('editor.snippetTabstopHighlightBackground', { dark: new Color(new RGBA(124, 124, 124, 0.3)), light: new Color(new RGBA(10, 50, 100, 0.2)), hc: new Color(new RGBA(124, 124, 124, 0.3)) }, nls.localize('snippetTabstopHighlightBackground', \"Highlight background color of a snippet tabstop.\"));\nexport const snippetTabstopHighlightBorder = registerColor('editor.snippetTabstopHighlightBorder', { dark: null, light: null, hc: null }, nls.localize('snippetTabstopHighlightBorder', \"Highlight border color of a snippet tabstop.\"));\nexport const snippetFinalTabstopHighlightBackground = registerColor('editor.snippetFinalTabstopHighlightBackground', { dark: null, light: null, hc: null }, nls.localize('snippetFinalTabstopHighlightBackground', \"Highlight background color of the final tabstop of a snippet.\"));\nexport const snippetFinalTabstopHighlightBorder = registerColor('editor.snippetFinalTabstopHighlightBorder', { dark: '#525252', light: new Color(new RGBA(10, 50, 100, 0.5)), hc: '#525252' }, nls.localize('snippetFinalTabstopHighlightBorder', \"Highlight border color of the final tabstop of a snippet.\"));\nexport const overviewRulerFindMatchForeground = registerColor('editorOverviewRuler.findMatchForeground', { dark: '#d186167e', light: '#d186167e', hc: '#AB5A00' }, nls.localize('overviewRulerFindMatchForeground', 'Overview ruler marker color for find matches. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const overviewRulerSelectionHighlightForeground = registerColor('editorOverviewRuler.selectionHighlightForeground', { dark: '#A0A0A0CC', light: '#A0A0A0CC', hc: '#A0A0A0CC' }, nls.localize('overviewRulerSelectionHighlightForeground', 'Overview ruler marker color for selection highlights. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const minimapFindMatch = registerColor('minimap.findMatchHighlight', { light: '#d18616', dark: '#d18616', hc: '#AB5A00' }, nls.localize('minimapFindMatchHighlight', 'Minimap marker color for find matches.'), true);\nexport const minimapSelection = registerColor('minimap.selectionHighlight', { light: '#ADD6FF', dark: '#264F78', hc: '#ffffff' }, nls.localize('minimapSelectionHighlight', 'Minimap marker color for the editor selection.'), true);\nexport const minimapError = registerColor('minimap.errorHighlight', { dark: new Color(new RGBA(255, 18, 18, 0.7)), light: new Color(new RGBA(255, 18, 18, 0.7)), hc: new Color(new RGBA(255, 50, 50, 1)) }, nls.localize('minimapError', 'Minimap marker color for errors.'));\nexport const minimapWarning = registerColor('minimap.warningHighlight', { dark: editorWarningForeground, light: editorWarningForeground, hc: editorWarningBorder }, nls.localize('overviewRuleWarning', 'Minimap marker color for warnings.'));\nexport const minimapBackground = registerColor('minimap.background', { dark: null, light: null, hc: null }, nls.localize('minimapBackground', \"Minimap background color.\"));\nexport const minimapSliderBackground = registerColor('minimapSlider.background', { light: transparent(scrollbarSliderBackground, 0.5), dark: transparent(scrollbarSliderBackground, 0.5), hc: transparent(scrollbarSliderBackground, 0.5) }, nls.localize('minimapSliderBackground', \"Minimap slider background color.\"));\nexport const minimapSliderHoverBackground = registerColor('minimapSlider.hoverBackground', { light: transparent(scrollbarSliderHoverBackground, 0.5), dark: transparent(scrollbarSliderHoverBackground, 0.5), hc: transparent(scrollbarSliderHoverBackground, 0.5) }, nls.localize('minimapSliderHoverBackground', \"Minimap slider background color when hovering.\"));\nexport const minimapSliderActiveBackground = registerColor('minimapSlider.activeBackground', { light: transparent(scrollbarSliderActiveBackground, 0.5), dark: transparent(scrollbarSliderActiveBackground, 0.5), hc: transparent(scrollbarSliderActiveBackground, 0.5) }, nls.localize('minimapSliderActiveBackground', \"Minimap slider background color when clicked on.\"));\nexport const problemsErrorIconForeground = registerColor('problemsErrorIcon.foreground', { dark: editorErrorForeground, light: editorErrorForeground, hc: editorErrorForeground }, nls.localize('problemsErrorIconForeground', \"The color used for the problems error icon.\"));\nexport const problemsWarningIconForeground = registerColor('problemsWarningIcon.foreground', { dark: editorWarningForeground, light: editorWarningForeground, hc: editorWarningForeground }, nls.localize('problemsWarningIconForeground', \"The color used for the problems warning icon.\"));\nexport const problemsInfoIconForeground = registerColor('problemsInfoIcon.foreground', { dark: editorInfoForeground, light: editorInfoForeground, hc: editorInfoForeground }, nls.localize('problemsInfoIconForeground', \"The color used for the problems info icon.\"));\n// ----- color functions\nexport function darken(colorValue, factor) {\n return (theme) => {\n let color = resolveColorValue(colorValue, theme);\n if (color) {\n return color.darken(factor);\n }\n return undefined;\n };\n}\nexport function lighten(colorValue, factor) {\n return (theme) => {\n let color = resolveColorValue(colorValue, theme);\n if (color) {\n return color.lighten(factor);\n }\n return undefined;\n };\n}\nexport function transparent(colorValue, factor) {\n return (theme) => {\n let color = resolveColorValue(colorValue, theme);\n if (color) {\n return color.transparent(factor);\n }\n return undefined;\n };\n}\nexport function oneOf(...colorValues) {\n return (theme) => {\n for (let colorValue of colorValues) {\n let color = resolveColorValue(colorValue, theme);\n if (color) {\n return color;\n }\n }\n return undefined;\n };\n}\nfunction lessProminent(colorValue, backgroundColorValue, factor, transparency) {\n return (theme) => {\n let from = resolveColorValue(colorValue, theme);\n if (from) {\n let backgroundColor = resolveColorValue(backgroundColorValue, theme);\n if (backgroundColor) {\n if (from.isDarkerThan(backgroundColor)) {\n return Color.getLighterColor(from, backgroundColor, factor).transparent(transparency);\n }\n return Color.getDarkerColor(from, backgroundColor, factor).transparent(transparency);\n }\n return from.transparent(factor * transparency);\n }\n return undefined;\n };\n}\n// ----- implementation\n/**\n * @param colorValue Resolve a color value in the context of a theme\n */\nexport function resolveColorValue(colorValue, theme) {\n if (colorValue === null) {\n return undefined;\n }\n else if (typeof colorValue === 'string') {\n if (colorValue[0] === '#') {\n return Color.fromHex(colorValue);\n }\n return theme.getColor(colorValue);\n }\n else if (colorValue instanceof Color) {\n return colorValue;\n }\n else if (typeof colorValue === 'function') {\n return colorValue(theme);\n }\n return undefined;\n}\nexport const workbenchColorsSchemaId = 'vscode://schemas/workbench-colors';\nlet schemaRegistry = platform.Registry.as(JSONExtensions.JSONContribution);\nschemaRegistry.registerSchema(workbenchColorsSchemaId, colorRegistry.getColorSchema());\nconst delayer = new RunOnceScheduler(() => schemaRegistry.notifySchemaChanged(workbenchColorsSchemaId), 200);\ncolorRegistry.onDidChangeSchema(() => {\n if (!delayer.isScheduled()) {\n delayer.schedule();\n }\n});\n// setTimeout(_ => console.log(colorRegistry.toString()), 5000);\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 *--------------------------------------------------------------------------------------------*/\nimport * as platform from '../../registry/common/platform.js';\nimport { ThemeIcon } from './themeService.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { localize } from '../../../nls.js';\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport * as Codicons from '../../../base/common/codicons.js';\n// ------ API types\n// icon registry\nexport const Extensions = {\n IconContribution: 'base.contributions.icons'\n};\nclass IconRegistry {\n constructor() {\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this.iconSchema = {\n definitions: {\n icons: {\n type: 'object',\n properties: {\n fontId: { type: 'string', description: localize('iconDefintion.fontId', 'The id of the font to use. If not set, the font that is defined first is used.') },\n fontCharacter: { type: 'string', description: localize('iconDefintion.fontCharacter', 'The font character associated with the icon definition.') }\n },\n additionalProperties: false,\n defaultSnippets: [{ body: { fontCharacter: '\\\\\\\\e030' } }]\n }\n },\n type: 'object',\n properties: {}\n };\n this.iconReferenceSchema = { type: 'string', pattern: `^${Codicons.CSSIcon.iconNameExpression}$`, enum: [], enumDescriptions: [] };\n this.iconsById = {};\n this.iconFontsById = {};\n }\n registerIcon(id, defaults, description, deprecationMessage) {\n const existing = this.iconsById[id];\n if (existing) {\n if (description && !existing.description) {\n existing.description = description;\n this.iconSchema.properties[id].markdownDescription = `${description} $(${id})`;\n const enumIndex = this.iconReferenceSchema.enum.indexOf(id);\n if (enumIndex !== -1) {\n this.iconReferenceSchema.enumDescriptions[enumIndex] = description;\n }\n this._onDidChange.fire();\n }\n return existing;\n }\n let iconContribution = { id, description, defaults, deprecationMessage };\n this.iconsById[id] = iconContribution;\n let propertySchema = { $ref: '#/definitions/icons' };\n if (deprecationMessage) {\n propertySchema.deprecationMessage = deprecationMessage;\n }\n if (description) {\n propertySchema.markdownDescription = `${description}: $(${id})`;\n }\n this.iconSchema.properties[id] = propertySchema;\n this.iconReferenceSchema.enum.push(id);\n this.iconReferenceSchema.enumDescriptions.push(description || '');\n this._onDidChange.fire();\n return { id };\n }\n getIcons() {\n return Object.keys(this.iconsById).map(id => this.iconsById[id]);\n }\n getIcon(id) {\n return this.iconsById[id];\n }\n getIconSchema() {\n return this.iconSchema;\n }\n getIconFont(id) {\n return this.iconFontsById[id];\n }\n toString() {\n const sorter = (i1, i2) => {\n return i1.id.localeCompare(i2.id);\n };\n const classNames = (i) => {\n while (ThemeIcon.isThemeIcon(i.defaults)) {\n i = this.iconsById[i.defaults.id];\n }\n return `codicon codicon-${i ? i.id : ''}`;\n };\n let reference = [];\n reference.push(`| preview | identifier | default codicon ID | description`);\n reference.push(`| ----------- | --------------------------------- | --------------------------------- | --------------------------------- |`);\n const contributions = Object.keys(this.iconsById).map(key => this.iconsById[key]);\n for (const i of contributions.filter(i => !!i.description).sort(sorter)) {\n reference.push(`|<i class=\"${classNames(i)}\"></i>|${i.id}|${ThemeIcon.isThemeIcon(i.defaults) ? i.defaults.id : i.id}|${i.description || ''}|`);\n }\n reference.push(`| preview | identifier `);\n reference.push(`| ----------- | --------------------------------- |`);\n for (const i of contributions.filter(i => !ThemeIcon.isThemeIcon(i.defaults)).sort(sorter)) {\n reference.push(`|<i class=\"${classNames(i)}\"></i>|${i.id}|`);\n }\n return reference.join('\\n');\n }\n}\nconst iconRegistry = new IconRegistry();\nplatform.Registry.add(Extensions.IconContribution, iconRegistry);\nexport function registerIcon(id, defaults, description, deprecationMessage) {\n return iconRegistry.registerIcon(id, defaults, description, deprecationMessage);\n}\nexport function getIconRegistry() {\n return iconRegistry;\n}\nfunction initialize() {\n for (const icon of Codicons.iconRegistry.all) {\n iconRegistry.registerIcon(icon.id, icon.definition, icon.description);\n }\n Codicons.iconRegistry.onDidRegister(icon => iconRegistry.registerIcon(icon.id, icon.definition, icon.description));\n}\ninitialize();\nexport const iconsSchemaId = 'vscode://schemas/icons';\nlet schemaRegistry = platform.Registry.as(JSONExtensions.JSONContribution);\nschemaRegistry.registerSchema(iconsSchemaId, iconRegistry.getIconSchema());\nconst delayer = new RunOnceScheduler(() => schemaRegistry.notifySchemaChanged(iconsSchemaId), 200);\niconRegistry.onDidChange(() => {\n if (!delayer.isScheduled()) {\n delayer.schedule();\n }\n});\n//setTimeout(_ => console.log(iconRegistry.toString()), 5000);\n// common icons\nexport const widgetClose = registerIcon('widget-close', Codicons.Codicon.close, localize('widgetClose', 'Icon for the close action in widgets.'));\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 *--------------------------------------------------------------------------------------------*/\nimport { contrastBorder, listFocusBackground, listFocusForeground, listActiveSelectionBackground, listActiveSelectionForeground, listInactiveSelectionForeground, listInactiveSelectionBackground, listInactiveFocusBackground, listHoverBackground, listHoverForeground, listDropBackground, widgetShadow, activeContrastBorder, badgeBackground, badgeForeground, menuForeground, menuBackground, menuSelectionForeground, menuSelectionBackground, menuSelectionBorder, menuBorder, menuSeparatorBackground, listFilterWidgetOutline, listFilterWidgetNoMatchesOutline, listFilterWidgetBackground, treeIndentGuidesStroke, resolveColorValue, listFocusOutline, listInactiveFocusOutline, tableColumnsBorder } from './colorRegistry.js';\nexport function computeStyles(theme, styleMap) {\n const styles = Object.create(null);\n for (let key in styleMap) {\n const value = styleMap[key];\n if (value) {\n styles[key] = resolveColorValue(value, theme);\n }\n }\n return styles;\n}\nexport function attachStyler(themeService, styleMap, widgetOrCallback) {\n function applyStyles(theme) {\n const styles = computeStyles(themeService.getColorTheme(), styleMap);\n if (typeof widgetOrCallback === 'function') {\n widgetOrCallback(styles);\n }\n else {\n widgetOrCallback.style(styles);\n }\n }\n applyStyles(themeService.getColorTheme());\n return themeService.onDidColorThemeChange(applyStyles);\n}\nexport function attachBadgeStyler(widget, themeService, style) {\n return attachStyler(themeService, {\n badgeBackground: (style === null || style === void 0 ? void 0 : style.badgeBackground) || badgeBackground,\n badgeForeground: (style === null || style === void 0 ? void 0 : style.badgeForeground) || badgeForeground,\n badgeBorder: contrastBorder\n }, widget);\n}\nexport function attachListStyler(widget, themeService, overrides) {\n return attachStyler(themeService, Object.assign(Object.assign({}, defaultListStyles), (overrides || {})), widget);\n}\nexport const defaultListStyles = {\n listFocusBackground,\n listFocusForeground,\n listFocusOutline,\n listActiveSelectionBackground,\n listActiveSelectionForeground,\n listFocusAndSelectionBackground: listActiveSelectionBackground,\n listFocusAndSelectionForeground: listActiveSelectionForeground,\n listInactiveSelectionBackground,\n listInactiveSelectionForeground,\n listInactiveFocusBackground,\n listInactiveFocusOutline,\n listHoverBackground,\n listHoverForeground,\n listDropBackground,\n listSelectionOutline: activeContrastBorder,\n listHoverOutline: activeContrastBorder,\n listFilterWidgetBackground,\n listFilterWidgetOutline,\n listFilterWidgetNoMatchesOutline,\n listMatchesShadow: widgetShadow,\n treeIndentGuidesStroke,\n tableColumnsBorder\n};\nexport const defaultMenuStyles = {\n shadowColor: widgetShadow,\n borderColor: menuBorder,\n foregroundColor: menuForeground,\n backgroundColor: menuBackground,\n selectionForegroundColor: menuSelectionForeground,\n selectionBackgroundColor: menuSelectionBackground,\n selectionBorderColor: menuSelectionBorder,\n separatorColor: menuSeparatorBackground\n};\nexport function attachMenuStyler(widget, themeService, style) {\n return attachStyler(themeService, Object.assign(Object.assign({}, defaultMenuStyles), style), widget);\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/**\n * Color scheme used by the OS and by color themes.\n */\nexport var ColorScheme;\n(function (ColorScheme) {\n ColorScheme[\"DARK\"] = \"dark\";\n ColorScheme[\"LIGHT\"] = \"light\";\n ColorScheme[\"HIGH_CONTRAST\"] = \"hc\";\n})(ColorScheme || (ColorScheme = {}));\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { toDisposable, Disposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../registry/common/platform.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { ColorScheme } from './theme.js';\nimport { CSSIcon } from '../../../base/common/codicons.js';\nexport const IThemeService = createDecorator('themeService');\nexport var ThemeColor;\n(function (ThemeColor) {\n function isThemeColor(obj) {\n return obj && typeof obj === 'object' && typeof obj.id === 'string';\n }\n ThemeColor.isThemeColor = isThemeColor;\n})(ThemeColor || (ThemeColor = {}));\nexport function themeColorFromId(id) {\n return { id };\n}\nexport var ThemeIcon;\n(function (ThemeIcon) {\n function isThemeIcon(obj) {\n return obj && typeof obj === 'object' && typeof obj.id === 'string' && (typeof obj.color === 'undefined' || ThemeColor.isThemeColor(obj.color));\n }\n ThemeIcon.isThemeIcon = isThemeIcon;\n const _regexFromString = new RegExp(`^\\\\$\\\\((${CSSIcon.iconNameExpression}(?:${CSSIcon.iconModifierExpression})?)\\\\)$`);\n function fromString(str) {\n const match = _regexFromString.exec(str);\n if (!match) {\n return undefined;\n }\n let [, name] = match;\n return { id: name };\n }\n ThemeIcon.fromString = fromString;\n function modify(icon, modifier) {\n let id = icon.id;\n const tildeIndex = id.lastIndexOf('~');\n if (tildeIndex !== -1) {\n id = id.substring(0, tildeIndex);\n }\n if (modifier) {\n id = `${id}~${modifier}`;\n }\n return { id };\n }\n ThemeIcon.modify = modify;\n function isEqual(ti1, ti2) {\n var _a, _b;\n return ti1.id === ti2.id && ((_a = ti1.color) === null || _a === void 0 ? void 0 : _a.id) === ((_b = ti2.color) === null || _b === void 0 ? void 0 : _b.id);\n }\n ThemeIcon.isEqual = isEqual;\n ThemeIcon.asClassNameArray = CSSIcon.asClassNameArray;\n ThemeIcon.asClassName = CSSIcon.asClassName;\n ThemeIcon.asCSSSelector = CSSIcon.asCSSSelector;\n})(ThemeIcon || (ThemeIcon = {}));\nexport function getThemeTypeSelector(type) {\n switch (type) {\n case ColorScheme.DARK: return 'vs-dark';\n case ColorScheme.HIGH_CONTRAST: return 'hc-black';\n default: return 'vs';\n }\n}\n// static theming participant\nexport const Extensions = {\n ThemingContribution: 'base.contributions.theming'\n};\nclass ThemingRegistry {\n constructor() {\n this.themingParticipants = [];\n this.themingParticipants = [];\n this.onThemingParticipantAddedEmitter = new Emitter();\n }\n onColorThemeChange(participant) {\n this.themingParticipants.push(participant);\n this.onThemingParticipantAddedEmitter.fire(participant);\n return toDisposable(() => {\n const idx = this.themingParticipants.indexOf(participant);\n this.themingParticipants.splice(idx, 1);\n });\n }\n getThemingParticipants() {\n return this.themingParticipants;\n }\n}\nlet themingRegistry = new ThemingRegistry();\nplatform.Registry.add(Extensions.ThemingContribution, themingRegistry);\nexport function registerThemingParticipant(participant) {\n return themingRegistry.onColorThemeChange(participant);\n}\n/**\n * Utility base class for all themable components.\n */\nexport class Themable extends Disposable {\n constructor(themeService) {\n super();\n this.themeService = themeService;\n this.theme = themeService.getColorTheme();\n // Hook up to theme changes\n this._register(this.themeService.onDidColorThemeChange(theme => this.onThemeChange(theme)));\n }\n onThemeChange(theme) {\n this.theme = theme;\n this.updateStyles();\n }\n updateStyles() {\n // Subclasses to override\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IUndoRedoService = createDecorator('undoRedoService');\nexport class ResourceEditStackSnapshot {\n constructor(resource, elements) {\n this.resource = resource;\n this.elements = elements;\n }\n}\nexport class UndoRedoGroup {\n constructor() {\n this.id = UndoRedoGroup._ID++;\n this.order = 1;\n }\n nextOrder() {\n if (this.id === 0) {\n return 0;\n }\n return this.order++;\n }\n}\nUndoRedoGroup._ID = 0;\nUndoRedoGroup.None = new UndoRedoGroup();\nexport class UndoRedoSource {\n constructor() {\n this.id = UndoRedoSource._ID++;\n this.order = 1;\n }\n nextOrder() {\n if (this.id === 0) {\n return 0;\n }\n return this.order++;\n }\n}\nUndoRedoSource._ID = 0;\nUndoRedoSource.None = new UndoRedoSource();\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { TernarySearchTree } from '../../../base/common/map.js';\nexport const IWorkspaceContextService = createDecorator('contextService');\nexport class Workspace {\n constructor(_id, folders, _configuration, _ignorePathCasing) {\n this._id = _id;\n this._configuration = _configuration;\n this._ignorePathCasing = _ignorePathCasing;\n this._foldersMap = TernarySearchTree.forUris(this._ignorePathCasing);\n this.folders = folders;\n }\n get folders() {\n return this._folders;\n }\n set folders(folders) {\n this._folders = folders;\n this.updateFoldersMap();\n }\n get id() {\n return this._id;\n }\n get configuration() {\n return this._configuration;\n }\n set configuration(configuration) {\n this._configuration = configuration;\n }\n getFolder(resource) {\n if (!resource) {\n return null;\n }\n return this._foldersMap.findSubstr(resource.with({\n scheme: resource.scheme,\n authority: resource.authority,\n path: resource.path\n })) || null;\n }\n updateFoldersMap() {\n this._foldersMap = TernarySearchTree.forUris(this._ignorePathCasing);\n for (const folder of this.folders) {\n this._foldersMap.set(folder.uri, folder);\n }\n }\n toJSON() {\n return { id: this.id, folders: this.folders, configuration: this.configuration };\n }\n}\nexport class WorkspaceFolder {\n constructor(data, raw) {\n this.raw = raw;\n this.uri = data.uri;\n this.index = data.index;\n this.name = data.name;\n }\n toJSON() {\n return { uri: this.uri, name: this.name, index: this.index };\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { equals } from './arrays.js';\nimport { escapeIcons } from './iconLabels.js';\nimport { illegalArgument } from './errors.js';\nexport class MarkdownString {\n constructor(value = '', isTrustedOrOptions = false) {\n var _a, _b;\n this.value = value;\n if (typeof this.value !== 'string') {\n throw illegalArgument('value');\n }\n if (typeof isTrustedOrOptions === 'boolean') {\n this.isTrusted = isTrustedOrOptions;\n this.supportThemeIcons = false;\n }\n else {\n this.isTrusted = (_a = isTrustedOrOptions.isTrusted) !== null && _a !== void 0 ? _a : undefined;\n this.supportThemeIcons = (_b = isTrustedOrOptions.supportThemeIcons) !== null && _b !== void 0 ? _b : false;\n }\n }\n appendText(value, newlineStyle = 0 /* Paragraph */) {\n this.value += escapeMarkdownSyntaxTokens(this.supportThemeIcons ? escapeIcons(value) : value)\n .replace(/([ \\t]+)/g, (_match, g1) => '&nbsp;'.repeat(g1.length))\n .replace(/^>/gm, '\\\\>')\n .replace(/\\n/g, newlineStyle === 1 /* Break */ ? '\\\\\\n' : '\\n\\n');\n return this;\n }\n appendMarkdown(value) {\n this.value += value;\n return this;\n }\n appendCodeblock(langId, code) {\n this.value += '\\n```';\n this.value += langId;\n this.value += '\\n';\n this.value += code;\n this.value += '\\n```\\n';\n return this;\n }\n}\nexport function isEmptyMarkdownString(oneOrMany) {\n if (isMarkdownString(oneOrMany)) {\n return !oneOrMany.value;\n }\n else if (Array.isArray(oneOrMany)) {\n return oneOrMany.every(isEmptyMarkdownString);\n }\n else {\n return true;\n }\n}\nexport function isMarkdownString(thing) {\n if (thing instanceof MarkdownString) {\n return true;\n }\n else if (thing && typeof thing === 'object') {\n return typeof thing.value === 'string'\n && (typeof thing.isTrusted === 'boolean' || thing.isTrusted === undefined)\n && (typeof thing.supportThemeIcons === 'boolean' || thing.supportThemeIcons === undefined);\n }\n return false;\n}\nexport function markedStringsEquals(a, b) {\n if (!a && !b) {\n return true;\n }\n else if (!a || !b) {\n return false;\n }\n else if (Array.isArray(a) && Array.isArray(b)) {\n return equals(a, b, markdownStringEqual);\n }\n else if (isMarkdownString(a) && isMarkdownString(b)) {\n return markdownStringEqual(a, b);\n }\n else {\n return false;\n }\n}\nfunction markdownStringEqual(a, b) {\n if (a === b) {\n return true;\n }\n else if (!a || !b) {\n return false;\n }\n else {\n return a.value === b.value && a.isTrusted === b.isTrusted && a.supportThemeIcons === b.supportThemeIcons;\n }\n}\nexport function escapeMarkdownSyntaxTokens(text) {\n // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\n return text.replace(/[\\\\`*_{}[\\]()#+\\-.!]/g, '\\\\$&');\n}\nexport function removeMarkdownEscapes(text) {\n if (!text) {\n return text;\n }\n return text.replace(/\\\\([\\\\`*_{}[\\]()#+\\-.!])/g, '$1');\n}\nexport function parseHrefAndDimensions(href) {\n const dimensions = [];\n const splitted = href.split('|').map(s => s.trim());\n href = splitted[0];\n const parameters = splitted[1];\n if (parameters) {\n const heightFromParams = /height=(\\d+)/.exec(parameters);\n const widthFromParams = /width=(\\d+)/.exec(parameters);\n const height = heightFromParams ? heightFromParams[1] : '';\n const width = widthFromParams ? widthFromParams[1] : '';\n const widthIsFinite = isFinite(parseInt(width));\n const heightIsFinite = isFinite(parseInt(height));\n if (widthIsFinite) {\n dimensions.push(`width=\"${width}\"`);\n }\n if (heightIsFinite) {\n dimensions.push(`height=\"${height}\"`);\n }\n }\n return { href, dimensions };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport './anchorSelect.css';\nimport { EditorAction, registerEditorAction, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { localize } from '../../../nls.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { RawContextKey, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { MarkdownString } from '../../../base/common/htmlContent.js';\nimport { alert } from '../../../base/browser/ui/aria/aria.js';\nexport const SelectionAnchorSet = new RawContextKey('selectionAnchorSet', false);\nlet SelectionAnchorController = class SelectionAnchorController {\n constructor(editor, contextKeyService) {\n this.editor = editor;\n this.selectionAnchorSetContextKey = SelectionAnchorSet.bindTo(contextKeyService);\n this.modelChangeListener = editor.onDidChangeModel(() => this.selectionAnchorSetContextKey.reset());\n }\n static get(editor) {\n return editor.getContribution(SelectionAnchorController.ID);\n }\n setSelectionAnchor() {\n if (this.editor.hasModel()) {\n const position = this.editor.getPosition();\n const previousDecorations = this.decorationId ? [this.decorationId] : [];\n const newDecorationId = this.editor.deltaDecorations(previousDecorations, [{\n range: Selection.fromPositions(position, position),\n options: {\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n hoverMessage: new MarkdownString().appendText(localize('selectionAnchor', \"Selection Anchor\")),\n className: 'selection-anchor'\n }\n }]);\n this.decorationId = newDecorationId[0];\n this.selectionAnchorSetContextKey.set(!!this.decorationId);\n alert(localize('anchorSet', \"Anchor set at {0}:{1}\", position.lineNumber, position.column));\n }\n }\n goToSelectionAnchor() {\n if (this.editor.hasModel() && this.decorationId) {\n const anchorPosition = this.editor.getModel().getDecorationRange(this.decorationId);\n if (anchorPosition) {\n this.editor.setPosition(anchorPosition.getStartPosition());\n }\n }\n }\n selectFromAnchorToCursor() {\n if (this.editor.hasModel() && this.decorationId) {\n const start = this.editor.getModel().getDecorationRange(this.decorationId);\n if (start) {\n const end = this.editor.getPosition();\n this.editor.setSelection(Selection.fromPositions(start.getStartPosition(), end));\n this.cancelSelectionAnchor();\n }\n }\n }\n cancelSelectionAnchor() {\n if (this.decorationId) {\n this.editor.deltaDecorations([this.decorationId], []);\n this.decorationId = undefined;\n this.selectionAnchorSetContextKey.set(false);\n }\n }\n dispose() {\n this.cancelSelectionAnchor();\n this.modelChangeListener.dispose();\n }\n};\nSelectionAnchorController.ID = 'editor.contrib.selectionAnchorController';\nSelectionAnchorController = __decorate([\n __param(1, IContextKeyService)\n], SelectionAnchorController);\nclass SetSelectionAnchor extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.setSelectionAnchor',\n label: localize('setSelectionAnchor', \"Set Selection Anchor\"),\n alias: 'Set Selection Anchor',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 32 /* KEY_B */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n const controller = SelectionAnchorController.get(editor);\n controller.setSelectionAnchor();\n });\n }\n}\nclass GoToSelectionAnchor extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.goToSelectionAnchor',\n label: localize('goToSelectionAnchor', \"Go to Selection Anchor\"),\n alias: 'Go to Selection Anchor',\n precondition: SelectionAnchorSet,\n });\n }\n run(_accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n const controller = SelectionAnchorController.get(editor);\n controller.goToSelectionAnchor();\n });\n }\n}\nclass SelectFromAnchorToCursor extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.selectFromAnchorToCursor',\n label: localize('selectFromAnchorToCursor', \"Select from Anchor to Cursor\"),\n alias: 'Select from Anchor to Cursor',\n precondition: SelectionAnchorSet,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 41 /* KEY_K */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n const controller = SelectionAnchorController.get(editor);\n controller.selectFromAnchorToCursor();\n });\n }\n}\nclass CancelSelectionAnchor extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.cancelSelectionAnchor',\n label: localize('cancelSelectionAnchor', \"Cancel Selection Anchor\"),\n alias: 'Cancel Selection Anchor',\n precondition: SelectionAnchorSet,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 9 /* Escape */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n const controller = SelectionAnchorController.get(editor);\n controller.cancelSelectionAnchor();\n });\n }\n}\nregisterEditorContribution(SelectionAnchorController.ID, SelectionAnchorController);\nregisterEditorAction(SetSelectionAnchor);\nregisterEditorAction(GoToSelectionAnchor);\nregisterEditorAction(SelectFromAnchorToCursor);\nregisterEditorAction(CancelSelectionAnchor);\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 *--------------------------------------------------------------------------------------------*/\nimport './bracketMatching.css';\nimport * as nls from '../../../nls.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { OverviewRulerLane } from '../../common/model.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { editorBracketMatchBackground, editorBracketMatchBorder } from '../../common/view/editorColorRegistry.js';\nimport { registerColor } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant, themeColorFromId } from '../../../platform/theme/common/themeService.js';\nimport { MenuRegistry, MenuId } from '../../../platform/actions/common/actions.js';\nconst overviewRulerBracketMatchForeground = registerColor('editorOverviewRuler.bracketMatchForeground', { dark: '#A0A0A0', light: '#A0A0A0', hc: '#A0A0A0' }, nls.localize('overviewRulerBracketMatchForeground', 'Overview ruler marker color for matching brackets.'));\nclass JumpToBracketAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.jumpToBracket',\n label: nls.localize('smartSelect.jumpBracket', \"Go to Bracket\"),\n alias: 'Go to Bracket',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 88 /* US_BACKSLASH */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n let controller = BracketMatchingController.get(editor);\n if (!controller) {\n return;\n }\n controller.jumpToBracket();\n }\n}\nclass SelectToBracketAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.selectToBracket',\n label: nls.localize('smartSelect.selectToBracket', \"Select to Bracket\"),\n alias: 'Select to Bracket',\n precondition: undefined,\n description: {\n description: `Select to Bracket`,\n args: [{\n name: 'args',\n schema: {\n type: 'object',\n properties: {\n 'selectBrackets': {\n type: 'boolean',\n default: true\n }\n },\n }\n }]\n }\n });\n }\n run(accessor, editor, args) {\n const controller = BracketMatchingController.get(editor);\n if (!controller) {\n return;\n }\n let selectBrackets = true;\n if (args && args.selectBrackets === false) {\n selectBrackets = false;\n }\n controller.selectToBracket(selectBrackets);\n }\n}\nclass BracketsData {\n constructor(position, brackets, options) {\n this.position = position;\n this.brackets = brackets;\n this.options = options;\n }\n}\nexport class BracketMatchingController extends Disposable {\n constructor(editor) {\n super();\n this._editor = editor;\n this._lastBracketsData = [];\n this._lastVersionId = 0;\n this._decorations = [];\n this._updateBracketsSoon = this._register(new RunOnceScheduler(() => this._updateBrackets(), 50));\n this._matchBrackets = this._editor.getOption(60 /* matchBrackets */);\n this._updateBracketsSoon.schedule();\n this._register(editor.onDidChangeCursorPosition((e) => {\n if (this._matchBrackets === 'never') {\n // Early exit if nothing needs to be done!\n // Leave some form of early exit check here if you wish to continue being a cursor position change listener ;)\n return;\n }\n this._updateBracketsSoon.schedule();\n }));\n this._register(editor.onDidChangeModelContent((e) => {\n this._updateBracketsSoon.schedule();\n }));\n this._register(editor.onDidChangeModel((e) => {\n this._lastBracketsData = [];\n this._decorations = [];\n this._updateBracketsSoon.schedule();\n }));\n this._register(editor.onDidChangeModelLanguageConfiguration((e) => {\n this._lastBracketsData = [];\n this._updateBracketsSoon.schedule();\n }));\n this._register(editor.onDidChangeConfiguration((e) => {\n if (e.hasChanged(60 /* matchBrackets */)) {\n this._matchBrackets = this._editor.getOption(60 /* matchBrackets */);\n this._decorations = this._editor.deltaDecorations(this._decorations, []);\n this._lastBracketsData = [];\n this._lastVersionId = 0;\n this._updateBracketsSoon.schedule();\n }\n }));\n }\n static get(editor) {\n return editor.getContribution(BracketMatchingController.ID);\n }\n jumpToBracket() {\n if (!this._editor.hasModel()) {\n return;\n }\n const model = this._editor.getModel();\n const newSelections = this._editor.getSelections().map(selection => {\n const position = selection.getStartPosition();\n // find matching brackets if position is on a bracket\n const brackets = model.matchBracket(position);\n let newCursorPosition = null;\n if (brackets) {\n if (brackets[0].containsPosition(position)) {\n newCursorPosition = brackets[1].getStartPosition();\n }\n else if (brackets[1].containsPosition(position)) {\n newCursorPosition = brackets[0].getStartPosition();\n }\n }\n else {\n // find the enclosing brackets if the position isn't on a matching bracket\n const enclosingBrackets = model.findEnclosingBrackets(position);\n if (enclosingBrackets) {\n newCursorPosition = enclosingBrackets[0].getStartPosition();\n }\n else {\n // no enclosing brackets, try the very first next bracket\n const nextBracket = model.findNextBracket(position);\n if (nextBracket && nextBracket.range) {\n newCursorPosition = nextBracket.range.getStartPosition();\n }\n }\n }\n if (newCursorPosition) {\n return new Selection(newCursorPosition.lineNumber, newCursorPosition.column, newCursorPosition.lineNumber, newCursorPosition.column);\n }\n return new Selection(position.lineNumber, position.column, position.lineNumber, position.column);\n });\n this._editor.setSelections(newSelections);\n this._editor.revealRange(newSelections[0]);\n }\n selectToBracket(selectBrackets) {\n if (!this._editor.hasModel()) {\n return;\n }\n const model = this._editor.getModel();\n const newSelections = [];\n this._editor.getSelections().forEach(selection => {\n const position = selection.getStartPosition();\n let brackets = model.matchBracket(position);\n if (!brackets) {\n brackets = model.findEnclosingBrackets(position);\n if (!brackets) {\n const nextBracket = model.findNextBracket(position);\n if (nextBracket && nextBracket.range) {\n brackets = model.matchBracket(nextBracket.range.getStartPosition());\n }\n }\n }\n let selectFrom = null;\n let selectTo = null;\n if (brackets) {\n brackets.sort(Range.compareRangesUsingStarts);\n const [open, close] = brackets;\n selectFrom = selectBrackets ? open.getStartPosition() : open.getEndPosition();\n selectTo = selectBrackets ? close.getEndPosition() : close.getStartPosition();\n }\n if (selectFrom && selectTo) {\n newSelections.push(new Selection(selectFrom.lineNumber, selectFrom.column, selectTo.lineNumber, selectTo.column));\n }\n });\n if (newSelections.length > 0) {\n this._editor.setSelections(newSelections);\n this._editor.revealRange(newSelections[0]);\n }\n }\n _updateBrackets() {\n if (this._matchBrackets === 'never') {\n return;\n }\n this._recomputeBrackets();\n let newDecorations = [], newDecorationsLen = 0;\n for (const bracketData of this._lastBracketsData) {\n let brackets = bracketData.brackets;\n if (brackets) {\n newDecorations[newDecorationsLen++] = { range: brackets[0], options: bracketData.options };\n newDecorations[newDecorationsLen++] = { range: brackets[1], options: bracketData.options };\n }\n }\n this._decorations = this._editor.deltaDecorations(this._decorations, newDecorations);\n }\n _recomputeBrackets() {\n if (!this._editor.hasModel()) {\n // no model => no brackets!\n this._lastBracketsData = [];\n this._lastVersionId = 0;\n return;\n }\n const selections = this._editor.getSelections();\n if (selections.length > 100) {\n // no bracket matching for high numbers of selections\n this._lastBracketsData = [];\n this._lastVersionId = 0;\n return;\n }\n const model = this._editor.getModel();\n const versionId = model.getVersionId();\n let previousData = [];\n if (this._lastVersionId === versionId) {\n // use the previous data only if the model is at the same version id\n previousData = this._lastBracketsData;\n }\n let positions = [], positionsLen = 0;\n for (let i = 0, len = selections.length; i < len; i++) {\n let selection = selections[i];\n if (selection.isEmpty()) {\n // will bracket match a cursor only if the selection is collapsed\n positions[positionsLen++] = selection.getStartPosition();\n }\n }\n // sort positions for `previousData` cache hits\n if (positions.length > 1) {\n positions.sort(Position.compare);\n }\n let newData = [], newDataLen = 0;\n let previousIndex = 0, previousLen = previousData.length;\n for (let i = 0, len = positions.length; i < len; i++) {\n let position = positions[i];\n while (previousIndex < previousLen && previousData[previousIndex].position.isBefore(position)) {\n previousIndex++;\n }\n if (previousIndex < previousLen && previousData[previousIndex].position.equals(position)) {\n newData[newDataLen++] = previousData[previousIndex];\n }\n else {\n let brackets = model.matchBracket(position);\n let options = BracketMatchingController._DECORATION_OPTIONS_WITH_OVERVIEW_RULER;\n if (!brackets && this._matchBrackets === 'always') {\n brackets = model.findEnclosingBrackets(position, 20 /* give at most 20ms to compute */);\n options = BracketMatchingController._DECORATION_OPTIONS_WITHOUT_OVERVIEW_RULER;\n }\n newData[newDataLen++] = new BracketsData(position, brackets, options);\n }\n }\n this._lastBracketsData = newData;\n this._lastVersionId = versionId;\n }\n}\nBracketMatchingController.ID = 'editor.contrib.bracketMatchingController';\nBracketMatchingController._DECORATION_OPTIONS_WITH_OVERVIEW_RULER = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'bracket-match',\n overviewRuler: {\n color: themeColorFromId(overviewRulerBracketMatchForeground),\n position: OverviewRulerLane.Center\n }\n});\nBracketMatchingController._DECORATION_OPTIONS_WITHOUT_OVERVIEW_RULER = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'bracket-match'\n});\nregisterEditorContribution(BracketMatchingController.ID, BracketMatchingController);\nregisterEditorAction(SelectToBracketAction);\nregisterEditorAction(JumpToBracketAction);\nregisterThemingParticipant((theme, collector) => {\n const bracketMatchBackground = theme.getColor(editorBracketMatchBackground);\n if (bracketMatchBackground) {\n collector.addRule(`.monaco-editor .bracket-match { background-color: ${bracketMatchBackground}; }`);\n }\n const bracketMatchBorder = theme.getColor(editorBracketMatchBorder);\n if (bracketMatchBorder) {\n collector.addRule(`.monaco-editor .bracket-match { border: 1px solid ${bracketMatchBorder}; }`);\n }\n});\n// Go to menu\nMenuRegistry.appendMenuItem(MenuId.MenubarGoMenu, {\n group: '5_infile_nav',\n command: {\n id: 'editor.action.jumpToBracket',\n title: nls.localize({ key: 'miGoToBracket', comment: ['&& denotes a mnemonic'] }, \"Go to &&Bracket\")\n },\n order: 2\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 *--------------------------------------------------------------------------------------------*/\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nexport class MoveCaretCommand {\n constructor(selection, isMovingLeft) {\n this._selection = selection;\n this._isMovingLeft = isMovingLeft;\n }\n getEditOperations(model, builder) {\n if (this._selection.startLineNumber !== this._selection.endLineNumber || this._selection.isEmpty()) {\n return;\n }\n const lineNumber = this._selection.startLineNumber;\n const startColumn = this._selection.startColumn;\n const endColumn = this._selection.endColumn;\n if (this._isMovingLeft && startColumn === 1) {\n return;\n }\n if (!this._isMovingLeft && endColumn === model.getLineMaxColumn(lineNumber)) {\n return;\n }\n if (this._isMovingLeft) {\n const rangeBefore = new Range(lineNumber, startColumn - 1, lineNumber, startColumn);\n const charBefore = model.getValueInRange(rangeBefore);\n builder.addEditOperation(rangeBefore, null);\n builder.addEditOperation(new Range(lineNumber, endColumn, lineNumber, endColumn), charBefore);\n }\n else {\n const rangeAfter = new Range(lineNumber, endColumn, lineNumber, endColumn + 1);\n const charAfter = model.getValueInRange(rangeAfter);\n builder.addEditOperation(rangeAfter, null);\n builder.addEditOperation(new Range(lineNumber, startColumn, lineNumber, startColumn), charAfter);\n }\n }\n computeCursorState(model, helper) {\n if (this._isMovingLeft) {\n return new Selection(this._selection.startLineNumber, this._selection.startColumn - 1, this._selection.endLineNumber, this._selection.endColumn - 1);\n }\n else {\n return new Selection(this._selection.startLineNumber, this._selection.startColumn + 1, this._selection.endLineNumber, this._selection.endColumn + 1);\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { EditorAction, registerEditorAction } from '../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { MoveCaretCommand } from './moveCaretCommand.js';\nclass MoveCaretAction extends EditorAction {\n constructor(left, opts) {\n super(opts);\n this.left = left;\n }\n run(accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n let commands = [];\n let selections = editor.getSelections();\n for (const selection of selections) {\n commands.push(new MoveCaretCommand(selection, this.left));\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n}\nclass MoveCaretLeftAction extends MoveCaretAction {\n constructor() {\n super(true, {\n id: 'editor.action.moveCarretLeftAction',\n label: nls.localize('caret.moveLeft', \"Move Selected Text Left\"),\n alias: 'Move Selected Text Left',\n precondition: EditorContextKeys.writable\n });\n }\n}\nclass MoveCaretRightAction extends MoveCaretAction {\n constructor() {\n super(false, {\n id: 'editor.action.moveCarretRightAction',\n label: nls.localize('caret.moveRight', \"Move Selected Text Right\"),\n alias: 'Move Selected Text Right',\n precondition: EditorContextKeys.writable\n });\n }\n}\nregisterEditorAction(MoveCaretLeftAction);\nregisterEditorAction(MoveCaretRightAction);\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { EditorAction, registerEditorAction } from '../../browser/editorExtensions.js';\nimport { ReplaceCommand } from '../../common/commands/replaceCommand.js';\nimport { Range } from '../../common/core/range.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { MoveOperations } from '../../common/controller/cursorMoveOperations.js';\nclass TransposeLettersAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.transposeLetters',\n label: nls.localize('transposeLetters.label', \"Transpose Letters\"),\n alias: 'Transpose Letters',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: {\n primary: 256 /* WinCtrl */ | 50 /* KEY_T */\n },\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n let model = editor.getModel();\n let commands = [];\n let selections = editor.getSelections();\n for (let selection of selections) {\n if (!selection.isEmpty()) {\n continue;\n }\n let lineNumber = selection.startLineNumber;\n let column = selection.startColumn;\n let lastColumn = model.getLineMaxColumn(lineNumber);\n if (lineNumber === 1 && (column === 1 || (column === 2 && lastColumn === 2))) {\n // at beginning of file, nothing to do\n continue;\n }\n // handle special case: when at end of line, transpose left two chars\n // otherwise, transpose left and right chars\n let endPosition = (column === lastColumn) ?\n selection.getPosition() :\n MoveOperations.rightPosition(model, selection.getPosition().lineNumber, selection.getPosition().column);\n let middlePosition = MoveOperations.leftPosition(model, endPosition.lineNumber, endPosition.column);\n let beginPosition = MoveOperations.leftPosition(model, middlePosition.lineNumber, middlePosition.column);\n let leftChar = model.getValueInRange(Range.fromPositions(beginPosition, middlePosition));\n let rightChar = model.getValueInRange(Range.fromPositions(middlePosition, endPosition));\n let replaceRange = Range.fromPositions(beginPosition, endPosition);\n commands.push(new ReplaceCommand(replaceRange, rightChar + leftChar));\n }\n if (commands.length > 0) {\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n }\n}\nregisterEditorAction(TransposeLettersAction);\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../../nls.js';\nimport * as browser from '../../../base/browser/browser.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { CopyOptions, InMemoryClipboardMetadataManager } from '../../browser/controller/textAreaInput.js';\nimport { EditorAction, registerEditorAction, MultiCommand } from '../../browser/editorExtensions.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { MenuRegistry, MenuId } from '../../../platform/actions/common/actions.js';\nimport { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js';\nconst CLIPBOARD_CONTEXT_MENU_GROUP = '9_cutcopypaste';\nconst supportsCut = (platform.isNative || document.queryCommandSupported('cut'));\nconst supportsCopy = (platform.isNative || document.queryCommandSupported('copy'));\n// Firefox only supports navigator.clipboard.readText() in browser extensions.\n// See https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/readText#Browser_compatibility\n// When loading over http, navigator.clipboard can be undefined. See https://github.com/microsoft/monaco-editor/issues/2313\nconst supportsPaste = (typeof navigator.clipboard === 'undefined' || browser.isFirefox) ? document.queryCommandSupported('paste') : true;\nfunction registerCommand(command) {\n command.register();\n return command;\n}\nexport const CutAction = supportsCut ? registerCommand(new MultiCommand({\n id: 'editor.action.clipboardCutAction',\n precondition: undefined,\n kbOpts: (\n // Do not bind cut keybindings in the browser,\n // since browsers do that for us and it avoids security prompts\n platform.isNative ? {\n primary: 2048 /* CtrlCmd */ | 54 /* KEY_X */,\n win: { primary: 2048 /* CtrlCmd */ | 54 /* KEY_X */, secondary: [1024 /* Shift */ | 20 /* Delete */] },\n weight: 100 /* EditorContrib */\n } : undefined),\n menuOpts: [{\n menuId: MenuId.MenubarEditMenu,\n group: '2_ccp',\n title: nls.localize({ key: 'miCut', comment: ['&& denotes a mnemonic'] }, \"Cu&&t\"),\n order: 1\n }, {\n menuId: MenuId.EditorContext,\n group: CLIPBOARD_CONTEXT_MENU_GROUP,\n title: nls.localize('actions.clipboard.cutLabel', \"Cut\"),\n when: EditorContextKeys.writable,\n order: 1,\n }, {\n menuId: MenuId.CommandPalette,\n group: '',\n title: nls.localize('actions.clipboard.cutLabel', \"Cut\"),\n order: 1\n }]\n})) : undefined;\nexport const CopyAction = supportsCopy ? registerCommand(new MultiCommand({\n id: 'editor.action.clipboardCopyAction',\n precondition: undefined,\n kbOpts: (\n // Do not bind copy keybindings in the browser,\n // since browsers do that for us and it avoids security prompts\n platform.isNative ? {\n primary: 2048 /* CtrlCmd */ | 33 /* KEY_C */,\n win: { primary: 2048 /* CtrlCmd */ | 33 /* KEY_C */, secondary: [2048 /* CtrlCmd */ | 19 /* Insert */] },\n weight: 100 /* EditorContrib */\n } : undefined),\n menuOpts: [{\n menuId: MenuId.MenubarEditMenu,\n group: '2_ccp',\n title: nls.localize({ key: 'miCopy', comment: ['&& denotes a mnemonic'] }, \"&&Copy\"),\n order: 2\n }, {\n menuId: MenuId.EditorContext,\n group: CLIPBOARD_CONTEXT_MENU_GROUP,\n title: nls.localize('actions.clipboard.copyLabel', \"Copy\"),\n order: 2,\n }, {\n menuId: MenuId.CommandPalette,\n group: '',\n title: nls.localize('actions.clipboard.copyLabel', \"Copy\"),\n order: 1\n }]\n})) : undefined;\nMenuRegistry.appendMenuItem(MenuId.MenubarEditMenu, { submenu: MenuId.MenubarCopy, title: { value: nls.localize('copy as', \"Copy As\"), original: 'Copy As', }, group: '2_ccp', order: 3 });\nMenuRegistry.appendMenuItem(MenuId.EditorContext, { submenu: MenuId.EditorContextCopy, title: { value: nls.localize('copy as', \"Copy As\"), original: 'Copy As', }, group: CLIPBOARD_CONTEXT_MENU_GROUP, order: 3 });\nexport const PasteAction = supportsPaste ? registerCommand(new MultiCommand({\n id: 'editor.action.clipboardPasteAction',\n precondition: undefined,\n kbOpts: (\n // Do not bind paste keybindings in the browser,\n // since browsers do that for us and it avoids security prompts\n platform.isNative ? {\n primary: 2048 /* CtrlCmd */ | 52 /* KEY_V */,\n win: { primary: 2048 /* CtrlCmd */ | 52 /* KEY_V */, secondary: [1024 /* Shift */ | 19 /* Insert */] },\n linux: { primary: 2048 /* CtrlCmd */ | 52 /* KEY_V */, secondary: [1024 /* Shift */ | 19 /* Insert */] },\n weight: 100 /* EditorContrib */\n } : undefined),\n menuOpts: [{\n menuId: MenuId.MenubarEditMenu,\n group: '2_ccp',\n title: nls.localize({ key: 'miPaste', comment: ['&& denotes a mnemonic'] }, \"&&Paste\"),\n order: 4\n }, {\n menuId: MenuId.EditorContext,\n group: CLIPBOARD_CONTEXT_MENU_GROUP,\n title: nls.localize('actions.clipboard.pasteLabel', \"Paste\"),\n when: EditorContextKeys.writable,\n order: 4,\n }, {\n menuId: MenuId.CommandPalette,\n group: '',\n title: nls.localize('actions.clipboard.pasteLabel', \"Paste\"),\n order: 1\n }]\n})) : undefined;\nclass ExecCommandCopyWithSyntaxHighlightingAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.clipboardCopyWithSyntaxHighlightingAction',\n label: nls.localize('actions.clipboard.copyWithSyntaxHighlightingLabel', \"Copy With Syntax Highlighting\"),\n alias: 'Copy With Syntax Highlighting',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n const emptySelectionClipboard = editor.getOption(30 /* emptySelectionClipboard */);\n if (!emptySelectionClipboard && editor.getSelection().isEmpty()) {\n return;\n }\n CopyOptions.forceCopyWithSyntaxHighlighting = true;\n editor.focus();\n document.execCommand('copy');\n CopyOptions.forceCopyWithSyntaxHighlighting = false;\n }\n}\nfunction registerExecCommandImpl(target, browserCommand) {\n if (!target) {\n return;\n }\n // 1. handle case when focus is in editor.\n target.addImplementation(10000, 'code-editor', (accessor, args) => {\n // Only if editor text focus (i.e. not if editor has widget focus).\n const focusedEditor = accessor.get(ICodeEditorService).getFocusedCodeEditor();\n if (focusedEditor && focusedEditor.hasTextFocus()) {\n // Do not execute if there is no selection and empty selection clipboard is off\n const emptySelectionClipboard = focusedEditor.getOption(30 /* emptySelectionClipboard */);\n const selection = focusedEditor.getSelection();\n if (selection && selection.isEmpty() && !emptySelectionClipboard) {\n return true;\n }\n document.execCommand(browserCommand);\n return true;\n }\n return false;\n });\n // 2. (default) handle case when focus is somewhere else.\n target.addImplementation(0, 'generic-dom', (accessor, args) => {\n document.execCommand(browserCommand);\n return true;\n });\n}\nregisterExecCommandImpl(CutAction, 'cut');\nregisterExecCommandImpl(CopyAction, 'copy');\nif (PasteAction) {\n // 1. Paste: handle case when focus is in editor.\n PasteAction.addImplementation(10000, 'code-editor', (accessor, args) => {\n const codeEditorService = accessor.get(ICodeEditorService);\n const clipboardService = accessor.get(IClipboardService);\n // Only if editor text focus (i.e. not if editor has widget focus).\n const focusedEditor = codeEditorService.getFocusedCodeEditor();\n if (focusedEditor && focusedEditor.hasTextFocus()) {\n const result = document.execCommand('paste');\n // Use the clipboard service if document.execCommand('paste') was not successful\n if (!result && platform.isWeb) {\n (() => __awaiter(void 0, void 0, void 0, function* () {\n const clipboardText = yield clipboardService.readText();\n if (clipboardText !== '') {\n const metadata = InMemoryClipboardMetadataManager.INSTANCE.get(clipboardText);\n let pasteOnNewLine = false;\n let multicursorText = null;\n let mode = null;\n if (metadata) {\n pasteOnNewLine = (focusedEditor.getOption(30 /* emptySelectionClipboard */) && !!metadata.isFromEmptySelection);\n multicursorText = (typeof metadata.multicursorText !== 'undefined' ? metadata.multicursorText : null);\n mode = metadata.mode;\n }\n focusedEditor.trigger('keyboard', \"paste\" /* Paste */, {\n text: clipboardText,\n pasteOnNewLine,\n multicursorText,\n mode\n });\n }\n }))();\n return true;\n }\n return true;\n }\n return false;\n });\n // 2. Paste: (default) handle case when focus is somewhere else.\n PasteAction.addImplementation(0, 'generic-dom', (accessor, args) => {\n document.execCommand('paste');\n return true;\n });\n}\nif (supportsCopy) {\n registerEditorAction(ExecCommandCopyWithSyntaxHighlightingAction);\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 *--------------------------------------------------------------------------------------------*/\nexport class Lazy {\n constructor(executor) {\n this.executor = executor;\n this._didRun = false;\n }\n /**\n * Get the wrapped value.\n *\n * This will force evaluation of the lazy value if it has not been resolved yet. Lazy values are only\n * resolved once. `getValue` will re-throw exceptions that are hit while resolving the value\n */\n getValue() {\n if (!this._didRun) {\n try {\n this._value = this.executor();\n }\n catch (err) {\n this._error = err;\n }\n finally {\n this._didRun = true;\n }\n }\n if (this._error) {\n throw this._error;\n }\n return this._value;\n }\n /**\n * Get the wrapped value without forcing evaluation.\n */\n get rawValue() { return this._value; }\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 *--------------------------------------------------------------------------------------------*/\nexport class CodeActionKind {\n constructor(value) {\n this.value = value;\n }\n equals(other) {\n return this.value === other.value;\n }\n contains(other) {\n return this.equals(other) || this.value === '' || other.value.startsWith(this.value + CodeActionKind.sep);\n }\n intersects(other) {\n return this.contains(other) || other.contains(this);\n }\n append(part) {\n return new CodeActionKind(this.value + CodeActionKind.sep + part);\n }\n}\nCodeActionKind.sep = '.';\nCodeActionKind.None = new CodeActionKind('@@none@@'); // Special code action that contains nothing\nCodeActionKind.Empty = new CodeActionKind('');\nCodeActionKind.QuickFix = new CodeActionKind('quickfix');\nCodeActionKind.Refactor = new CodeActionKind('refactor');\nCodeActionKind.Source = new CodeActionKind('source');\nCodeActionKind.SourceOrganizeImports = CodeActionKind.Source.append('organizeImports');\nCodeActionKind.SourceFixAll = CodeActionKind.Source.append('fixAll');\nexport function mayIncludeActionsOfKind(filter, providedKind) {\n // A provided kind may be a subset or superset of our filtered kind.\n if (filter.include && !filter.include.intersects(providedKind)) {\n return false;\n }\n if (filter.excludes) {\n if (filter.excludes.some(exclude => excludesAction(providedKind, exclude, filter.include))) {\n return false;\n }\n }\n // Don't return source actions unless they are explicitly requested\n if (!filter.includeSourceActions && CodeActionKind.Source.contains(providedKind)) {\n return false;\n }\n return true;\n}\nexport function filtersAction(filter, action) {\n const actionKind = action.kind ? new CodeActionKind(action.kind) : undefined;\n // Filter out actions by kind\n if (filter.include) {\n if (!actionKind || !filter.include.contains(actionKind)) {\n return false;\n }\n }\n if (filter.excludes) {\n if (actionKind && filter.excludes.some(exclude => excludesAction(actionKind, exclude, filter.include))) {\n return false;\n }\n }\n // Don't return source actions unless they are explicitly requested\n if (!filter.includeSourceActions) {\n if (actionKind && CodeActionKind.Source.contains(actionKind)) {\n return false;\n }\n }\n if (filter.onlyIncludePreferredActions) {\n if (!action.isPreferred) {\n return false;\n }\n }\n return true;\n}\nfunction excludesAction(providedKind, exclude, include) {\n if (!exclude.contains(providedKind)) {\n return false;\n }\n if (include && exclude.contains(include)) {\n // The include is more specific, don't filter out\n return false;\n }\n return true;\n}\nexport class CodeActionCommandArgs {\n constructor(kind, apply, preferred) {\n this.kind = kind;\n this.apply = apply;\n this.preferred = preferred;\n }\n static fromUser(arg, defaults) {\n if (!arg || typeof arg !== 'object') {\n return new CodeActionCommandArgs(defaults.kind, defaults.apply, false);\n }\n return new CodeActionCommandArgs(CodeActionCommandArgs.getKindFromUser(arg, defaults.kind), CodeActionCommandArgs.getApplyFromUser(arg, defaults.apply), CodeActionCommandArgs.getPreferredUser(arg));\n }\n static getApplyFromUser(arg, defaultAutoApply) {\n switch (typeof arg.apply === 'string' ? arg.apply.toLowerCase() : '') {\n case 'first': return \"first\" /* First */;\n case 'never': return \"never\" /* Never */;\n case 'ifsingle': return \"ifSingle\" /* IfSingle */;\n default: return defaultAutoApply;\n }\n }\n static getKindFromUser(arg, defaultKind) {\n return typeof arg.kind === 'string'\n ? new CodeActionKind(arg.kind)\n : defaultKind;\n }\n static getPreferredUser(arg) {\n return typeof arg.preferred === 'boolean'\n ? arg.preferred\n : false;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { equals, flatten, isNonEmptyArray, coalesce } from '../../../base/common/arrays.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { illegalArgument, isPromiseCanceledError, onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { TextModelCancellationTokenSource } from '../../browser/core/editorState.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport * as modes from '../../common/modes.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { CodeActionKind, filtersAction, mayIncludeActionsOfKind } from './types.js';\nimport { Progress } from '../../../platform/progress/common/progress.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nexport const codeActionCommandId = 'editor.action.codeAction';\nexport const refactorCommandId = 'editor.action.refactor';\nexport const sourceActionCommandId = 'editor.action.sourceAction';\nexport const organizeImportsCommandId = 'editor.action.organizeImports';\nexport const fixAllCommandId = 'editor.action.fixAll';\nexport class CodeActionItem {\n constructor(action, provider) {\n this.action = action;\n this.provider = provider;\n }\n resolve(token) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n if (((_a = this.provider) === null || _a === void 0 ? void 0 : _a.resolveCodeAction) && !this.action.edit) {\n let action;\n try {\n action = yield this.provider.resolveCodeAction(this.action, token);\n }\n catch (err) {\n onUnexpectedExternalError(err);\n }\n if (action) {\n this.action.edit = action.edit;\n }\n }\n return this;\n });\n }\n}\nclass ManagedCodeActionSet extends Disposable {\n constructor(actions, documentation, disposables) {\n super();\n this.documentation = documentation;\n this._register(disposables);\n this.allActions = [...actions].sort(ManagedCodeActionSet.codeActionsComparator);\n this.validActions = this.allActions.filter(({ action }) => !action.disabled);\n }\n static codeActionsComparator({ action: a }, { action: b }) {\n if (a.isPreferred && !b.isPreferred) {\n return -1;\n }\n else if (!a.isPreferred && b.isPreferred) {\n return 1;\n }\n if (isNonEmptyArray(a.diagnostics)) {\n if (isNonEmptyArray(b.diagnostics)) {\n return a.diagnostics[0].message.localeCompare(b.diagnostics[0].message);\n }\n else {\n return -1;\n }\n }\n else if (isNonEmptyArray(b.diagnostics)) {\n return 1;\n }\n else {\n return 0; // both have no diagnostics\n }\n }\n get hasAutoFix() {\n return this.validActions.some(({ action: fix }) => !!fix.kind && CodeActionKind.QuickFix.contains(new CodeActionKind(fix.kind)) && !!fix.isPreferred);\n }\n}\nconst emptyCodeActionsResponse = { actions: [], documentation: undefined };\nexport function getCodeActions(model, rangeOrSelection, trigger, progress, token) {\n var _a;\n const filter = trigger.filter || {};\n const codeActionContext = {\n only: (_a = filter.include) === null || _a === void 0 ? void 0 : _a.value,\n trigger: trigger.type,\n };\n const cts = new TextModelCancellationTokenSource(model, token);\n const providers = getCodeActionProviders(model, filter);\n const disposables = new DisposableStore();\n const promises = providers.map((provider) => __awaiter(this, void 0, void 0, function* () {\n try {\n progress.report(provider);\n const providedCodeActions = yield provider.provideCodeActions(model, rangeOrSelection, codeActionContext, cts.token);\n if (providedCodeActions) {\n disposables.add(providedCodeActions);\n }\n if (cts.token.isCancellationRequested) {\n return emptyCodeActionsResponse;\n }\n const filteredActions = ((providedCodeActions === null || providedCodeActions === void 0 ? void 0 : providedCodeActions.actions) || []).filter(action => action && filtersAction(filter, action));\n const documentation = getDocumentation(provider, filteredActions, filter.include);\n return {\n actions: filteredActions.map(action => new CodeActionItem(action, provider)),\n documentation\n };\n }\n catch (err) {\n if (isPromiseCanceledError(err)) {\n throw err;\n }\n onUnexpectedExternalError(err);\n return emptyCodeActionsResponse;\n }\n }));\n const listener = modes.CodeActionProviderRegistry.onDidChange(() => {\n const newProviders = modes.CodeActionProviderRegistry.all(model);\n if (!equals(newProviders, providers)) {\n cts.cancel();\n }\n });\n return Promise.all(promises).then(actions => {\n const allActions = flatten(actions.map(x => x.actions));\n const allDocumentation = coalesce(actions.map(x => x.documentation));\n return new ManagedCodeActionSet(allActions, allDocumentation, disposables);\n })\n .finally(() => {\n listener.dispose();\n cts.dispose();\n });\n}\nfunction getCodeActionProviders(model, filter) {\n return modes.CodeActionProviderRegistry.all(model)\n // Don't include providers that we know will not return code actions of interest\n .filter(provider => {\n if (!provider.providedCodeActionKinds) {\n // We don't know what type of actions this provider will return.\n return true;\n }\n return provider.providedCodeActionKinds.some(kind => mayIncludeActionsOfKind(filter, new CodeActionKind(kind)));\n });\n}\nfunction getDocumentation(provider, providedCodeActions, only) {\n if (!provider.documentation) {\n return undefined;\n }\n const documentation = provider.documentation.map(entry => ({ kind: new CodeActionKind(entry.kind), command: entry.command }));\n if (only) {\n let currentBest;\n for (const entry of documentation) {\n if (entry.kind.contains(only)) {\n if (!currentBest) {\n currentBest = entry;\n }\n else {\n // Take best match\n if (currentBest.kind.contains(entry.kind)) {\n currentBest = entry;\n }\n }\n }\n }\n if (currentBest) {\n return currentBest === null || currentBest === void 0 ? void 0 : currentBest.command;\n }\n }\n // Otherwise, check to see if any of the provided actions match.\n for (const action of providedCodeActions) {\n if (!action.kind) {\n continue;\n }\n for (const entry of documentation) {\n if (entry.kind.contains(new CodeActionKind(action.kind))) {\n return entry.command;\n }\n }\n }\n return undefined;\n}\nCommandsRegistry.registerCommand('_executeCodeActionProvider', function (accessor, resource, rangeOrSelection, kind, itemResolveCount) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(resource instanceof URI)) {\n throw illegalArgument();\n }\n const model = accessor.get(IModelService).getModel(resource);\n if (!model) {\n throw illegalArgument();\n }\n const validatedRangeOrSelection = Selection.isISelection(rangeOrSelection)\n ? Selection.liftSelection(rangeOrSelection)\n : Range.isIRange(rangeOrSelection)\n ? model.validateRange(rangeOrSelection)\n : undefined;\n if (!validatedRangeOrSelection) {\n throw illegalArgument();\n }\n const include = typeof kind === 'string' ? new CodeActionKind(kind) : undefined;\n const codeActionSet = yield getCodeActions(model, validatedRangeOrSelection, { type: 1 /* Invoke */, filter: { includeSourceActions: true, include } }, Progress.None, CancellationToken.None);\n const resolving = [];\n const resolveCount = Math.min(codeActionSet.validActions.length, typeof itemResolveCount === 'number' ? itemResolveCount : 0);\n for (let i = 0; i < resolveCount; i++) {\n resolving.push(codeActionSet.validActions[i].resolve(CancellationToken.None));\n }\n try {\n yield Promise.all(resolving);\n return codeActionSet.validActions.map(item => item.action);\n }\n finally {\n setTimeout(() => codeActionSet.dispose(), 100);\n }\n });\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport './messageController.css';\nimport * as nls from '../../../nls.js';\nimport { TimeoutTimer } from '../../../base/common/async.js';\nimport { DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { alert } from '../../../base/browser/ui/aria/aria.js';\nimport { Range } from '../../common/core/range.js';\nimport { registerEditorContribution, EditorCommand, registerEditorCommand } from '../../browser/editorExtensions.js';\nimport { IContextKeyService, RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { inputValidationInfoBorder, inputValidationInfoBackground, inputValidationInfoForeground } from '../../../platform/theme/common/colorRegistry.js';\nimport { ColorScheme } from '../../../platform/theme/common/theme.js';\nlet MessageController = class MessageController {\n constructor(editor, contextKeyService) {\n this._messageWidget = new MutableDisposable();\n this._messageListeners = new DisposableStore();\n this._editor = editor;\n this._visible = MessageController.MESSAGE_VISIBLE.bindTo(contextKeyService);\n this._editorListener = this._editor.onDidAttemptReadOnlyEdit(() => this._onDidAttemptReadOnlyEdit());\n }\n static get(editor) {\n return editor.getContribution(MessageController.ID);\n }\n dispose() {\n this._editorListener.dispose();\n this._messageListeners.dispose();\n this._messageWidget.dispose();\n this._visible.reset();\n }\n showMessage(message, position) {\n alert(message);\n this._visible.set(true);\n this._messageWidget.clear();\n this._messageListeners.clear();\n this._messageWidget.value = new MessageWidget(this._editor, position, message);\n // close on blur, cursor, model change, dispose\n this._messageListeners.add(this._editor.onDidBlurEditorText(() => this.closeMessage()));\n this._messageListeners.add(this._editor.onDidChangeCursorPosition(() => this.closeMessage()));\n this._messageListeners.add(this._editor.onDidDispose(() => this.closeMessage()));\n this._messageListeners.add(this._editor.onDidChangeModel(() => this.closeMessage()));\n // 3sec\n this._messageListeners.add(new TimeoutTimer(() => this.closeMessage(), 3000));\n // close on mouse move\n let bounds;\n this._messageListeners.add(this._editor.onMouseMove(e => {\n // outside the text area\n if (!e.target.position) {\n return;\n }\n if (!bounds) {\n // define bounding box around position and first mouse occurance\n bounds = new Range(position.lineNumber - 3, 1, e.target.position.lineNumber + 3, 1);\n }\n else if (!bounds.containsPosition(e.target.position)) {\n // check if position is still in bounds\n this.closeMessage();\n }\n }));\n }\n closeMessage() {\n this._visible.reset();\n this._messageListeners.clear();\n if (this._messageWidget.value) {\n this._messageListeners.add(MessageWidget.fadeOut(this._messageWidget.value));\n }\n }\n _onDidAttemptReadOnlyEdit() {\n if (this._editor.hasModel()) {\n this.showMessage(nls.localize('editor.readonly', \"Cannot edit in read-only editor\"), this._editor.getPosition());\n }\n }\n};\nMessageController.ID = 'editor.contrib.messageController';\nMessageController.MESSAGE_VISIBLE = new RawContextKey('messageVisible', false, nls.localize('messageVisible', 'Whether the editor is currently showing an inline message'));\nMessageController = __decorate([\n __param(1, IContextKeyService)\n], MessageController);\nexport { MessageController };\nconst MessageCommand = EditorCommand.bindToContribution(MessageController.get);\nregisterEditorCommand(new MessageCommand({\n id: 'leaveEditorMessage',\n precondition: MessageController.MESSAGE_VISIBLE,\n handler: c => c.closeMessage(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 30,\n primary: 9 /* Escape */\n }\n}));\nclass MessageWidget {\n constructor(editor, { lineNumber, column }, text) {\n // Editor.IContentWidget.allowEditorOverflow\n this.allowEditorOverflow = true;\n this.suppressMouseDown = false;\n this._editor = editor;\n this._editor.revealLinesInCenterIfOutsideViewport(lineNumber, lineNumber, 0 /* Smooth */);\n this._position = { lineNumber, column: column - 1 };\n this._domNode = document.createElement('div');\n this._domNode.classList.add('monaco-editor-overlaymessage');\n const anchorTop = document.createElement('div');\n anchorTop.classList.add('anchor', 'top');\n this._domNode.appendChild(anchorTop);\n const message = document.createElement('div');\n message.classList.add('message');\n message.textContent = text;\n this._domNode.appendChild(message);\n const anchorBottom = document.createElement('div');\n anchorBottom.classList.add('anchor', 'below');\n this._domNode.appendChild(anchorBottom);\n this._editor.addContentWidget(this);\n this._domNode.classList.add('fadeIn');\n }\n static fadeOut(messageWidget) {\n let handle;\n const dispose = () => {\n messageWidget.dispose();\n clearTimeout(handle);\n messageWidget.getDomNode().removeEventListener('animationend', dispose);\n };\n handle = setTimeout(dispose, 110);\n messageWidget.getDomNode().addEventListener('animationend', dispose);\n messageWidget.getDomNode().classList.add('fadeOut');\n return { dispose };\n }\n dispose() {\n this._editor.removeContentWidget(this);\n }\n getId() {\n return 'messageoverlay';\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n return { position: this._position, preference: [1 /* ABOVE */, 2 /* BELOW */] };\n }\n afterRender(position) {\n this._domNode.classList.toggle('below', position === 2 /* BELOW */);\n }\n}\nregisterEditorContribution(MessageController.ID, MessageController);\nregisterThemingParticipant((theme, collector) => {\n const border = theme.getColor(inputValidationInfoBorder);\n if (border) {\n let borderWidth = theme.type === ColorScheme.HIGH_CONTRAST ? 2 : 1;\n collector.addRule(`.monaco-editor .monaco-editor-overlaymessage .anchor.below { border-top-color: ${border}; }`);\n collector.addRule(`.monaco-editor .monaco-editor-overlaymessage .anchor.top { border-bottom-color: ${border}; }`);\n collector.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { border: ${borderWidth}px solid ${border}; }`);\n }\n const background = theme.getColor(inputValidationInfoBackground);\n if (background) {\n collector.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { background-color: ${background}; }`);\n }\n const foreground = theme.getColor(inputValidationInfoForeground);\n if (foreground) {\n collector.addRule(`.monaco-editor .monaco-editor-overlaymessage .message { color: ${foreground}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { getDomNodePagePosition } from '../../../base/browser/dom.js';\nimport { Action, Separator } from '../../../base/common/actions.js';\nimport { canceled } from '../../../base/common/errors.js';\nimport { Lazy } from '../../../base/common/lazy.js';\nimport { Disposable, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { Position } from '../../common/core/position.js';\nimport { CodeActionProviderRegistry } from '../../common/modes.js';\nimport { codeActionCommandId, CodeActionItem, fixAllCommandId, organizeImportsCommandId, refactorCommandId, sourceActionCommandId } from './codeAction.js';\nimport { CodeActionCommandArgs, CodeActionKind } from './types.js';\nimport { IContextMenuService } from '../../../platform/contextview/browser/contextView.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nclass CodeActionAction extends Action {\n constructor(action, callback) {\n super(action.command ? action.command.id : action.title, stripNewlines(action.title), undefined, !action.disabled, callback);\n this.action = action;\n }\n}\nfunction stripNewlines(str) {\n return str.replace(/\\r\\n|\\r|\\n/g, ' ');\n}\nlet CodeActionMenu = class CodeActionMenu extends Disposable {\n constructor(_editor, _delegate, _contextMenuService, keybindingService) {\n super();\n this._editor = _editor;\n this._delegate = _delegate;\n this._contextMenuService = _contextMenuService;\n this._visible = false;\n this._showingActions = this._register(new MutableDisposable());\n this._keybindingResolver = new CodeActionKeybindingResolver({\n getKeybindings: () => keybindingService.getKeybindings()\n });\n }\n get isVisible() {\n return this._visible;\n }\n show(trigger, codeActions, at, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const actionsToShow = options.includeDisabledActions ? codeActions.allActions : codeActions.validActions;\n if (!actionsToShow.length) {\n this._visible = false;\n return;\n }\n if (!this._editor.getDomNode()) {\n // cancel when editor went off-dom\n this._visible = false;\n throw canceled();\n }\n this._visible = true;\n this._showingActions.value = codeActions;\n const menuActions = this.getMenuActions(trigger, actionsToShow, codeActions.documentation);\n const anchor = Position.isIPosition(at) ? this._toCoords(at) : at || { x: 0, y: 0 };\n const resolver = this._keybindingResolver.getResolver();\n const useShadowDOM = this._editor.getOption(111 /* useShadowDOM */);\n this._contextMenuService.showContextMenu({\n domForShadowRoot: useShadowDOM ? this._editor.getDomNode() : undefined,\n getAnchor: () => anchor,\n getActions: () => menuActions,\n onHide: () => {\n this._visible = false;\n this._editor.focus();\n },\n autoSelectFirstItem: true,\n getKeyBinding: action => action instanceof CodeActionAction ? resolver(action.action) : undefined,\n });\n });\n }\n getMenuActions(trigger, actionsToShow, documentation) {\n var _a, _b;\n const toCodeActionAction = (item) => new CodeActionAction(item.action, () => this._delegate.onSelectCodeAction(item));\n const result = actionsToShow\n .map(toCodeActionAction);\n const allDocumentation = [...documentation];\n const model = this._editor.getModel();\n if (model && result.length) {\n for (const provider of CodeActionProviderRegistry.all(model)) {\n if (provider._getAdditionalMenuItems) {\n allDocumentation.push(...provider._getAdditionalMenuItems({ trigger: trigger.type, only: (_b = (_a = trigger.filter) === null || _a === void 0 ? void 0 : _a.include) === null || _b === void 0 ? void 0 : _b.value }, actionsToShow.map(item => item.action)));\n }\n }\n }\n if (allDocumentation.length) {\n result.push(new Separator(), ...allDocumentation.map(command => toCodeActionAction(new CodeActionItem({\n title: command.title,\n command: command,\n }, undefined))));\n }\n return result;\n }\n _toCoords(position) {\n if (!this._editor.hasModel()) {\n return { x: 0, y: 0 };\n }\n this._editor.revealPosition(position, 1 /* Immediate */);\n this._editor.render();\n // Translate to absolute editor position\n const cursorCoords = this._editor.getScrolledVisiblePosition(position);\n const editorCoords = getDomNodePagePosition(this._editor.getDomNode());\n const x = editorCoords.left + cursorCoords.left;\n const y = editorCoords.top + cursorCoords.top + cursorCoords.height;\n return { x, y };\n }\n};\nCodeActionMenu = __decorate([\n __param(2, IContextMenuService),\n __param(3, IKeybindingService)\n], CodeActionMenu);\nexport { CodeActionMenu };\nexport class CodeActionKeybindingResolver {\n constructor(_keybindingProvider) {\n this._keybindingProvider = _keybindingProvider;\n }\n getResolver() {\n // Lazy since we may not actually ever read the value\n const allCodeActionBindings = new Lazy(() => this._keybindingProvider.getKeybindings()\n .filter(item => CodeActionKeybindingResolver.codeActionCommands.indexOf(item.command) >= 0)\n .filter(item => item.resolvedKeybinding)\n .map((item) => {\n // Special case these commands since they come built-in with VS Code and don't use 'commandArgs'\n let commandArgs = item.commandArgs;\n if (item.command === organizeImportsCommandId) {\n commandArgs = { kind: CodeActionKind.SourceOrganizeImports.value };\n }\n else if (item.command === fixAllCommandId) {\n commandArgs = { kind: CodeActionKind.SourceFixAll.value };\n }\n return Object.assign({ resolvedKeybinding: item.resolvedKeybinding }, CodeActionCommandArgs.fromUser(commandArgs, {\n kind: CodeActionKind.None,\n apply: \"never\" /* Never */\n }));\n }));\n return (action) => {\n if (action.kind) {\n const binding = this.bestKeybindingForCodeAction(action, allCodeActionBindings.getValue());\n return binding === null || binding === void 0 ? void 0 : binding.resolvedKeybinding;\n }\n return undefined;\n };\n }\n bestKeybindingForCodeAction(action, candidates) {\n if (!action.kind) {\n return undefined;\n }\n const kind = new CodeActionKind(action.kind);\n return candidates\n .filter(candidate => candidate.kind.contains(kind))\n .filter(candidate => {\n if (candidate.preferred) {\n // If the candidate keybinding only applies to preferred actions, the this action must also be preferred\n return action.isPreferred;\n }\n return true;\n })\n .reduceRight((currentBest, candidate) => {\n if (!currentBest) {\n return candidate;\n }\n // Select the more specific binding\n return currentBest.kind.contains(candidate.kind) ? candidate : currentBest;\n }, undefined);\n }\n}\nCodeActionKeybindingResolver.codeActionCommands = [\n refactorCommandId,\n codeActionCommandId,\n sourceActionCommandId,\n organizeImportsCommandId,\n fixAllCommandId\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as dom from '../../../base/browser/dom.js';\nimport { GlobalMouseMoveMonitor, standardMouseMoveMerger } from '../../../base/browser/globalMouseMoveMonitor.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport './lightBulbWidget.css';\nimport { TextModel } from '../../common/model/textModel.js';\nimport * as nls from '../../../nls.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { editorLightBulbForeground, editorLightBulbAutoFixForeground, editorBackground } from '../../../platform/theme/common/colorRegistry.js';\nimport { Gesture } from '../../../base/browser/touch.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nvar LightBulbState;\n(function (LightBulbState) {\n LightBulbState.Hidden = { type: 0 /* Hidden */ };\n class Showing {\n constructor(actions, trigger, editorPosition, widgetPosition) {\n this.actions = actions;\n this.trigger = trigger;\n this.editorPosition = editorPosition;\n this.widgetPosition = widgetPosition;\n this.type = 1 /* Showing */;\n }\n }\n LightBulbState.Showing = Showing;\n})(LightBulbState || (LightBulbState = {}));\nlet LightBulbWidget = class LightBulbWidget extends Disposable {\n constructor(_editor, _quickFixActionId, _preferredFixActionId, _keybindingService) {\n super();\n this._editor = _editor;\n this._quickFixActionId = _quickFixActionId;\n this._preferredFixActionId = _preferredFixActionId;\n this._keybindingService = _keybindingService;\n this._onClick = this._register(new Emitter());\n this.onClick = this._onClick.event;\n this._state = LightBulbState.Hidden;\n this._domNode = document.createElement('div');\n this._domNode.className = Codicon.lightBulb.classNames;\n this._editor.addContentWidget(this);\n this._register(this._editor.onDidChangeModelContent(_ => {\n // cancel when the line in question has been removed\n const editorModel = this._editor.getModel();\n if (this.state.type !== 1 /* Showing */ || !editorModel || this.state.editorPosition.lineNumber >= editorModel.getLineCount()) {\n this.hide();\n }\n }));\n Gesture.ignoreTarget(this._domNode);\n this._register(dom.addStandardDisposableGenericMouseDownListner(this._domNode, e => {\n if (this.state.type !== 1 /* Showing */) {\n return;\n }\n // Make sure that focus / cursor location is not lost when clicking widget icon\n this._editor.focus();\n e.preventDefault();\n // a bit of extra work to make sure the menu\n // doesn't cover the line-text\n const { top, height } = dom.getDomNodePagePosition(this._domNode);\n const lineHeight = this._editor.getOption(55 /* lineHeight */);\n let pad = Math.floor(lineHeight / 3);\n if (this.state.widgetPosition.position !== null && this.state.widgetPosition.position.lineNumber < this.state.editorPosition.lineNumber) {\n pad += lineHeight;\n }\n this._onClick.fire({\n x: e.posx,\n y: top + height + pad,\n actions: this.state.actions,\n trigger: this.state.trigger,\n });\n }));\n this._register(dom.addDisposableListener(this._domNode, 'mouseenter', (e) => {\n if ((e.buttons & 1) !== 1) {\n return;\n }\n // mouse enters lightbulb while the primary/left button\n // is being pressed -> hide the lightbulb and block future\n // showings until mouse is released\n this.hide();\n const monitor = new GlobalMouseMoveMonitor();\n monitor.startMonitoring(e.target, e.buttons, standardMouseMoveMerger, () => { }, () => {\n monitor.dispose();\n });\n }));\n this._register(this._editor.onDidChangeConfiguration(e => {\n // hide when told to do so\n if (e.hasChanged(53 /* lightbulb */) && !this._editor.getOption(53 /* lightbulb */).enabled) {\n this.hide();\n }\n }));\n this._updateLightBulbTitleAndIcon();\n this._register(this._keybindingService.onDidUpdateKeybindings(this._updateLightBulbTitleAndIcon, this));\n }\n dispose() {\n super.dispose();\n this._editor.removeContentWidget(this);\n }\n getId() {\n return 'LightBulbWidget';\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n return this._state.type === 1 /* Showing */ ? this._state.widgetPosition : null;\n }\n update(actions, trigger, atPosition) {\n if (actions.validActions.length <= 0) {\n return this.hide();\n }\n const options = this._editor.getOptions();\n if (!options.get(53 /* lightbulb */).enabled) {\n return this.hide();\n }\n const model = this._editor.getModel();\n if (!model) {\n return this.hide();\n }\n const { lineNumber, column } = model.validatePosition(atPosition);\n const tabSize = model.getOptions().tabSize;\n const fontInfo = options.get(40 /* fontInfo */);\n const lineContent = model.getLineContent(lineNumber);\n const indent = TextModel.computeIndentLevel(lineContent, tabSize);\n const lineHasSpace = fontInfo.spaceWidth * indent > 22;\n const isFolded = (lineNumber) => {\n return lineNumber > 2 && this._editor.getTopForLineNumber(lineNumber) === this._editor.getTopForLineNumber(lineNumber - 1);\n };\n let effectiveLineNumber = lineNumber;\n if (!lineHasSpace) {\n if (lineNumber > 1 && !isFolded(lineNumber - 1)) {\n effectiveLineNumber -= 1;\n }\n else if (!isFolded(lineNumber + 1)) {\n effectiveLineNumber += 1;\n }\n else if (column * fontInfo.spaceWidth < 22) {\n // cannot show lightbulb above/below and showing\n // it inline would overlay the cursor...\n return this.hide();\n }\n }\n this.state = new LightBulbState.Showing(actions, trigger, atPosition, {\n position: { lineNumber: effectiveLineNumber, column: 1 },\n preference: LightBulbWidget._posPref\n });\n this._editor.layoutContentWidget(this);\n }\n hide() {\n this.state = LightBulbState.Hidden;\n this._editor.layoutContentWidget(this);\n }\n get state() { return this._state; }\n set state(value) {\n this._state = value;\n this._updateLightBulbTitleAndIcon();\n }\n _updateLightBulbTitleAndIcon() {\n if (this.state.type === 1 /* Showing */ && this.state.actions.hasAutoFix) {\n // update icon\n this._domNode.classList.remove(...Codicon.lightBulb.classNamesArray);\n this._domNode.classList.add(...Codicon.lightbulbAutofix.classNamesArray);\n const preferredKb = this._keybindingService.lookupKeybinding(this._preferredFixActionId);\n if (preferredKb) {\n this.title = nls.localize('prefferedQuickFixWithKb', \"Show Fixes. Preferred Fix Available ({0})\", preferredKb.getLabel());\n return;\n }\n }\n // update icon\n this._domNode.classList.remove(...Codicon.lightbulbAutofix.classNamesArray);\n this._domNode.classList.add(...Codicon.lightBulb.classNamesArray);\n const kb = this._keybindingService.lookupKeybinding(this._quickFixActionId);\n if (kb) {\n this.title = nls.localize('quickFixWithKb', \"Show Fixes ({0})\", kb.getLabel());\n }\n else {\n this.title = nls.localize('quickFix', \"Show Fixes\");\n }\n }\n set title(value) {\n this._domNode.title = value;\n }\n};\nLightBulbWidget._posPref = [0 /* EXACT */];\nLightBulbWidget = __decorate([\n __param(3, IKeybindingService)\n], LightBulbWidget);\nexport { LightBulbWidget };\nregisterThemingParticipant((theme, collector) => {\n var _a;\n const editorBackgroundColor = (_a = theme.getColor(editorBackground)) === null || _a === void 0 ? void 0 : _a.transparent(0.7);\n // Lightbulb Icon\n const editorLightBulbForegroundColor = theme.getColor(editorLightBulbForeground);\n if (editorLightBulbForegroundColor) {\n collector.addRule(`\n\t\t.monaco-editor .contentWidgets ${Codicon.lightBulb.cssSelector} {\n\t\t\tcolor: ${editorLightBulbForegroundColor};\n\t\t\tbackground-color: ${editorBackgroundColor};\n\t\t}`);\n }\n // Lightbulb Auto Fix Icon\n const editorLightBulbAutoFixForegroundColor = theme.getColor(editorLightBulbAutoFixForeground);\n if (editorLightBulbAutoFixForegroundColor) {\n collector.addRule(`\n\t\t.monaco-editor .contentWidgets ${Codicon.lightbulbAutofix.cssSelector} {\n\t\t\tcolor: ${editorLightBulbAutoFixForegroundColor};\n\t\t\tbackground-color: ${editorBackgroundColor};\n\t\t}`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _CodeActionUi_disposed;\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Lazy } from '../../../base/common/lazy.js';\nimport { Disposable, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { MessageController } from '../message/messageController.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { CodeActionMenu } from './codeActionMenu.js';\nimport { LightBulbWidget } from './lightBulbWidget.js';\nlet CodeActionUi = class CodeActionUi extends Disposable {\n constructor(_editor, quickFixActionId, preferredFixActionId, delegate, instantiationService) {\n super();\n this._editor = _editor;\n this.delegate = delegate;\n this._activeCodeActions = this._register(new MutableDisposable());\n _CodeActionUi_disposed.set(this, false);\n this._codeActionWidget = new Lazy(() => {\n return this._register(instantiationService.createInstance(CodeActionMenu, this._editor, {\n onSelectCodeAction: (action) => __awaiter(this, void 0, void 0, function* () {\n this.delegate.applyCodeAction(action, /* retrigger */ true);\n })\n }));\n });\n this._lightBulbWidget = new Lazy(() => {\n const widget = this._register(instantiationService.createInstance(LightBulbWidget, this._editor, quickFixActionId, preferredFixActionId));\n this._register(widget.onClick(e => this.showCodeActionList(e.trigger, e.actions, e, { includeDisabledActions: false })));\n return widget;\n });\n }\n dispose() {\n __classPrivateFieldSet(this, _CodeActionUi_disposed, true, \"f\");\n super.dispose();\n }\n update(newState) {\n var _a, _b, _c;\n return __awaiter(this, void 0, void 0, function* () {\n if (newState.type !== 1 /* Triggered */) {\n (_a = this._lightBulbWidget.rawValue) === null || _a === void 0 ? void 0 : _a.hide();\n return;\n }\n let actions;\n try {\n actions = yield newState.actions;\n }\n catch (e) {\n onUnexpectedError(e);\n return;\n }\n if (__classPrivateFieldGet(this, _CodeActionUi_disposed, \"f\")) {\n return;\n }\n this._lightBulbWidget.getValue().update(actions, newState.trigger, newState.position);\n if (newState.trigger.type === 1 /* Invoke */) {\n if ((_b = newState.trigger.filter) === null || _b === void 0 ? void 0 : _b.include) { // Triggered for specific scope\n // Check to see if we want to auto apply.\n const validActionToApply = this.tryGetValidActionToApply(newState.trigger, actions);\n if (validActionToApply) {\n try {\n yield this.delegate.applyCodeAction(validActionToApply, false);\n }\n finally {\n actions.dispose();\n }\n return;\n }\n // Check to see if there is an action that we would have applied were it not invalid\n if (newState.trigger.context) {\n const invalidAction = this.getInvalidActionThatWouldHaveBeenApplied(newState.trigger, actions);\n if (invalidAction && invalidAction.action.disabled) {\n MessageController.get(this._editor).showMessage(invalidAction.action.disabled, newState.trigger.context.position);\n actions.dispose();\n return;\n }\n }\n }\n const includeDisabledActions = !!((_c = newState.trigger.filter) === null || _c === void 0 ? void 0 : _c.include);\n if (newState.trigger.context) {\n if (!actions.allActions.length || !includeDisabledActions && !actions.validActions.length) {\n MessageController.get(this._editor).showMessage(newState.trigger.context.notAvailableMessage, newState.trigger.context.position);\n this._activeCodeActions.value = actions;\n actions.dispose();\n return;\n }\n }\n this._activeCodeActions.value = actions;\n this._codeActionWidget.getValue().show(newState.trigger, actions, newState.position, { includeDisabledActions });\n }\n else {\n // auto magically triggered\n if (this._codeActionWidget.getValue().isVisible) {\n // TODO: Figure out if we should update the showing menu?\n actions.dispose();\n }\n else {\n this._activeCodeActions.value = actions;\n }\n }\n });\n }\n getInvalidActionThatWouldHaveBeenApplied(trigger, actions) {\n if (!actions.allActions.length) {\n return undefined;\n }\n if ((trigger.autoApply === \"first\" /* First */ && actions.validActions.length === 0)\n || (trigger.autoApply === \"ifSingle\" /* IfSingle */ && actions.allActions.length === 1)) {\n return actions.allActions.find(({ action }) => action.disabled);\n }\n return undefined;\n }\n tryGetValidActionToApply(trigger, actions) {\n if (!actions.validActions.length) {\n return undefined;\n }\n if ((trigger.autoApply === \"first\" /* First */ && actions.validActions.length > 0)\n || (trigger.autoApply === \"ifSingle\" /* IfSingle */ && actions.validActions.length === 1)) {\n return actions.validActions[0];\n }\n return undefined;\n }\n showCodeActionList(trigger, actions, at, options) {\n return __awaiter(this, void 0, void 0, function* () {\n this._codeActionWidget.getValue().show(trigger, actions, at, options);\n });\n }\n};\n_CodeActionUi_disposed = new WeakMap();\nCodeActionUi = __decorate([\n __param(4, IInstantiationService)\n], CodeActionUi);\nexport { CodeActionUi };\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 *--------------------------------------------------------------------------------------------*/\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _CodeActionModel_isDisposed;\nimport { createCancelablePromise, TimeoutTimer } from '../../../base/common/async.js';\nimport { isPromiseCanceledError } from '../../../base/common/errors.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { isEqual } from '../../../base/common/resources.js';\nimport { Range } from '../../common/core/range.js';\nimport { CodeActionProviderRegistry } from '../../common/modes.js';\nimport { RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nimport { Progress } from '../../../platform/progress/common/progress.js';\nimport { getCodeActions } from './codeAction.js';\nexport const SUPPORTED_CODE_ACTIONS = new RawContextKey('supportedCodeAction', '');\nclass CodeActionOracle extends Disposable {\n constructor(_editor, _markerService, _signalChange, _delay = 250) {\n super();\n this._editor = _editor;\n this._markerService = _markerService;\n this._signalChange = _signalChange;\n this._delay = _delay;\n this._autoTriggerTimer = this._register(new TimeoutTimer());\n this._register(this._markerService.onMarkerChanged(e => this._onMarkerChanges(e)));\n this._register(this._editor.onDidChangeCursorPosition(() => this._onCursorChange()));\n }\n trigger(trigger) {\n const selection = this._getRangeOfSelectionUnlessWhitespaceEnclosed(trigger);\n return this._createEventAndSignalChange(trigger, selection);\n }\n _onMarkerChanges(resources) {\n const model = this._editor.getModel();\n if (!model) {\n return;\n }\n if (resources.some(resource => isEqual(resource, model.uri))) {\n this._autoTriggerTimer.cancelAndSet(() => {\n this.trigger({ type: 2 /* Auto */ });\n }, this._delay);\n }\n }\n _onCursorChange() {\n this._autoTriggerTimer.cancelAndSet(() => {\n this.trigger({ type: 2 /* Auto */ });\n }, this._delay);\n }\n _getRangeOfMarker(selection) {\n const model = this._editor.getModel();\n if (!model) {\n return undefined;\n }\n for (const marker of this._markerService.read({ resource: model.uri })) {\n const markerRange = model.validateRange(marker);\n if (Range.intersectRanges(markerRange, selection)) {\n return Range.lift(markerRange);\n }\n }\n return undefined;\n }\n _getRangeOfSelectionUnlessWhitespaceEnclosed(trigger) {\n if (!this._editor.hasModel()) {\n return undefined;\n }\n const model = this._editor.getModel();\n const selection = this._editor.getSelection();\n if (selection.isEmpty() && trigger.type === 2 /* Auto */) {\n const { lineNumber, column } = selection.getPosition();\n const line = model.getLineContent(lineNumber);\n if (line.length === 0) {\n // empty line\n return undefined;\n }\n else if (column === 1) {\n // look only right\n if (/\\s/.test(line[0])) {\n return undefined;\n }\n }\n else if (column === model.getLineMaxColumn(lineNumber)) {\n // look only left\n if (/\\s/.test(line[line.length - 1])) {\n return undefined;\n }\n }\n else {\n // look left and right\n if (/\\s/.test(line[column - 2]) && /\\s/.test(line[column - 1])) {\n return undefined;\n }\n }\n }\n return selection;\n }\n _createEventAndSignalChange(trigger, selection) {\n const model = this._editor.getModel();\n if (!selection || !model) {\n // cancel\n this._signalChange(undefined);\n return undefined;\n }\n const markerRange = this._getRangeOfMarker(selection);\n const position = markerRange ? markerRange.getStartPosition() : selection.getStartPosition();\n const e = {\n trigger,\n selection,\n position\n };\n this._signalChange(e);\n return e;\n }\n}\nexport var CodeActionsState;\n(function (CodeActionsState) {\n CodeActionsState.Empty = { type: 0 /* Empty */ };\n class Triggered {\n constructor(trigger, rangeOrSelection, position, _cancellablePromise) {\n this.trigger = trigger;\n this.rangeOrSelection = rangeOrSelection;\n this.position = position;\n this._cancellablePromise = _cancellablePromise;\n this.type = 1 /* Triggered */;\n this.actions = _cancellablePromise.catch((e) => {\n if (isPromiseCanceledError(e)) {\n return emptyCodeActionSet;\n }\n throw e;\n });\n }\n cancel() {\n this._cancellablePromise.cancel();\n }\n }\n CodeActionsState.Triggered = Triggered;\n})(CodeActionsState || (CodeActionsState = {}));\nconst emptyCodeActionSet = {\n allActions: [],\n validActions: [],\n dispose: () => { },\n documentation: [],\n hasAutoFix: false\n};\nexport class CodeActionModel extends Disposable {\n constructor(_editor, _markerService, contextKeyService, _progressService) {\n super();\n this._editor = _editor;\n this._markerService = _markerService;\n this._progressService = _progressService;\n this._codeActionOracle = this._register(new MutableDisposable());\n this._state = CodeActionsState.Empty;\n this._onDidChangeState = this._register(new Emitter());\n this.onDidChangeState = this._onDidChangeState.event;\n _CodeActionModel_isDisposed.set(this, false);\n this._supportedCodeActions = SUPPORTED_CODE_ACTIONS.bindTo(contextKeyService);\n this._register(this._editor.onDidChangeModel(() => this._update()));\n this._register(this._editor.onDidChangeModelLanguage(() => this._update()));\n this._register(CodeActionProviderRegistry.onDidChange(() => this._update()));\n this._update();\n }\n dispose() {\n if (__classPrivateFieldGet(this, _CodeActionModel_isDisposed, \"f\")) {\n return;\n }\n __classPrivateFieldSet(this, _CodeActionModel_isDisposed, true, \"f\");\n super.dispose();\n this.setState(CodeActionsState.Empty, true);\n }\n _update() {\n if (__classPrivateFieldGet(this, _CodeActionModel_isDisposed, \"f\")) {\n return;\n }\n this._codeActionOracle.value = undefined;\n this.setState(CodeActionsState.Empty);\n const model = this._editor.getModel();\n if (model\n && CodeActionProviderRegistry.has(model)\n && !this._editor.getOption(77 /* readOnly */)) {\n const supportedActions = [];\n for (const provider of CodeActionProviderRegistry.all(model)) {\n if (Array.isArray(provider.providedCodeActionKinds)) {\n supportedActions.push(...provider.providedCodeActionKinds);\n }\n }\n this._supportedCodeActions.set(supportedActions.join(' '));\n this._codeActionOracle.value = new CodeActionOracle(this._editor, this._markerService, trigger => {\n var _a;\n if (!trigger) {\n this.setState(CodeActionsState.Empty);\n return;\n }\n const actions = createCancelablePromise(token => getCodeActions(model, trigger.selection, trigger.trigger, Progress.None, token));\n if (trigger.trigger.type === 1 /* Invoke */) {\n (_a = this._progressService) === null || _a === void 0 ? void 0 : _a.showWhile(actions, 250);\n }\n this.setState(new CodeActionsState.Triggered(trigger.trigger, trigger.selection, trigger.position, actions));\n }, undefined);\n this._codeActionOracle.value.trigger({ type: 2 /* Auto */ });\n }\n else {\n this._supportedCodeActions.reset();\n }\n }\n trigger(trigger) {\n if (this._codeActionOracle.value) {\n this._codeActionOracle.value.trigger(trigger);\n }\n }\n setState(newState, skipNotify) {\n if (newState === this._state) {\n return;\n }\n // Cancel old request\n if (this._state.type === 1 /* Triggered */) {\n this._state.cancel();\n }\n this._state = newState;\n if (!skipNotify && !__classPrivateFieldGet(this, _CodeActionModel_isDisposed, \"f\")) {\n this._onDidChangeState.fire(newState);\n }\n }\n}\n_CodeActionModel_isDisposed = new WeakMap();\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { Lazy } from '../../../base/common/lazy.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { escapeRegExpCharacters } from '../../../base/common/strings.js';\nimport { EditorAction, EditorCommand } from '../../browser/editorExtensions.js';\nimport { IBulkEditService, ResourceEdit } from '../../browser/services/bulkEditService.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { codeActionCommandId, fixAllCommandId, organizeImportsCommandId, refactorCommandId, sourceActionCommandId } from './codeAction.js';\nimport { CodeActionUi } from './codeActionUi.js';\nimport { MessageController } from '../message/messageController.js';\nimport * as nls from '../../../nls.js';\nimport { ICommandService } from '../../../platform/commands/common/commands.js';\nimport { ContextKeyExpr, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { IMarkerService } from '../../../platform/markers/common/markers.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\nimport { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js';\nimport { CodeActionModel, SUPPORTED_CODE_ACTIONS } from './codeActionModel.js';\nimport { CodeActionCommandArgs, CodeActionKind } from './types.js';\nfunction contextKeyForSupportedActions(kind) {\n return ContextKeyExpr.regex(SUPPORTED_CODE_ACTIONS.keys()[0], new RegExp('(\\\\s|^)' + escapeRegExpCharacters(kind.value) + '\\\\b'));\n}\nconst argsSchema = {\n type: 'object',\n defaultSnippets: [{ body: { kind: '' } }],\n properties: {\n 'kind': {\n type: 'string',\n description: nls.localize('args.schema.kind', \"Kind of the code action to run.\"),\n },\n 'apply': {\n type: 'string',\n description: nls.localize('args.schema.apply', \"Controls when the returned actions are applied.\"),\n default: \"ifSingle\" /* IfSingle */,\n enum: [\"first\" /* First */, \"ifSingle\" /* IfSingle */, \"never\" /* Never */],\n enumDescriptions: [\n nls.localize('args.schema.apply.first', \"Always apply the first returned code action.\"),\n nls.localize('args.schema.apply.ifSingle', \"Apply the first returned code action if it is the only one.\"),\n nls.localize('args.schema.apply.never', \"Do not apply the returned code actions.\"),\n ]\n },\n 'preferred': {\n type: 'boolean',\n default: false,\n description: nls.localize('args.schema.preferred', \"Controls if only preferred code actions should be returned.\"),\n }\n }\n};\nlet QuickFixController = class QuickFixController extends Disposable {\n constructor(editor, markerService, contextKeyService, progressService, _instantiationService) {\n super();\n this._instantiationService = _instantiationService;\n this._editor = editor;\n this._model = this._register(new CodeActionModel(this._editor, markerService, contextKeyService, progressService));\n this._register(this._model.onDidChangeState(newState => this.update(newState)));\n this._ui = new Lazy(() => this._register(new CodeActionUi(editor, QuickFixAction.Id, AutoFixAction.Id, {\n applyCodeAction: (action, retrigger) => __awaiter(this, void 0, void 0, function* () {\n try {\n yield this._applyCodeAction(action);\n }\n finally {\n if (retrigger) {\n this._trigger({ type: 2 /* Auto */, filter: {} });\n }\n }\n })\n }, this._instantiationService)));\n }\n static get(editor) {\n return editor.getContribution(QuickFixController.ID);\n }\n update(newState) {\n this._ui.getValue().update(newState);\n }\n showCodeActions(trigger, actions, at) {\n return this._ui.getValue().showCodeActionList(trigger, actions, at, { includeDisabledActions: false });\n }\n manualTriggerAtCurrentPosition(notAvailableMessage, filter, autoApply) {\n if (!this._editor.hasModel()) {\n return;\n }\n MessageController.get(this._editor).closeMessage();\n const triggerPosition = this._editor.getPosition();\n this._trigger({ type: 1 /* Invoke */, filter, autoApply, context: { notAvailableMessage, position: triggerPosition } });\n }\n _trigger(trigger) {\n return this._model.trigger(trigger);\n }\n _applyCodeAction(action) {\n return this._instantiationService.invokeFunction(applyCodeAction, action, this._editor);\n }\n};\nQuickFixController.ID = 'editor.contrib.quickFixController';\nQuickFixController = __decorate([\n __param(1, IMarkerService),\n __param(2, IContextKeyService),\n __param(3, IEditorProgressService),\n __param(4, IInstantiationService)\n], QuickFixController);\nexport { QuickFixController };\nexport function applyCodeAction(accessor, item, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n const bulkEditService = accessor.get(IBulkEditService);\n const commandService = accessor.get(ICommandService);\n const telemetryService = accessor.get(ITelemetryService);\n const notificationService = accessor.get(INotificationService);\n telemetryService.publicLog2('codeAction.applyCodeAction', {\n codeActionTitle: item.action.title,\n codeActionKind: item.action.kind,\n codeActionIsPreferred: !!item.action.isPreferred,\n });\n yield item.resolve(CancellationToken.None);\n if (item.action.edit) {\n yield bulkEditService.apply(ResourceEdit.convert(item.action.edit), { editor, label: item.action.title });\n }\n if (item.action.command) {\n try {\n yield commandService.executeCommand(item.action.command.id, ...(item.action.command.arguments || []));\n }\n catch (err) {\n const message = asMessage(err);\n notificationService.error(typeof message === 'string'\n ? message\n : nls.localize('applyCodeActionFailed', \"An unknown error occurred while applying the code action\"));\n }\n }\n });\n}\nfunction asMessage(err) {\n if (typeof err === 'string') {\n return err;\n }\n else if (err instanceof Error && typeof err.message === 'string') {\n return err.message;\n }\n else {\n return undefined;\n }\n}\nfunction triggerCodeActionsForEditorSelection(editor, notAvailableMessage, filter, autoApply) {\n if (editor.hasModel()) {\n const controller = QuickFixController.get(editor);\n if (controller) {\n controller.manualTriggerAtCurrentPosition(notAvailableMessage, filter, autoApply);\n }\n }\n}\nexport class QuickFixAction extends EditorAction {\n constructor() {\n super({\n id: QuickFixAction.Id,\n label: nls.localize('quickfix.trigger.label', \"Quick Fix...\"),\n alias: 'Quick Fix...',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 84 /* US_DOT */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n return triggerCodeActionsForEditorSelection(editor, nls.localize('editor.action.quickFix.noneMessage', \"No code actions available\"), undefined, undefined);\n }\n}\nQuickFixAction.Id = 'editor.action.quickFix';\nexport class CodeActionCommand extends EditorCommand {\n constructor() {\n super({\n id: codeActionCommandId,\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider),\n description: {\n description: 'Trigger a code action',\n args: [{ name: 'args', schema: argsSchema, }]\n }\n });\n }\n runEditorCommand(_accessor, editor, userArgs) {\n const args = CodeActionCommandArgs.fromUser(userArgs, {\n kind: CodeActionKind.Empty,\n apply: \"ifSingle\" /* IfSingle */,\n });\n return triggerCodeActionsForEditorSelection(editor, typeof (userArgs === null || userArgs === void 0 ? void 0 : userArgs.kind) === 'string'\n ? args.preferred\n ? nls.localize('editor.action.codeAction.noneMessage.preferred.kind', \"No preferred code actions for '{0}' available\", userArgs.kind)\n : nls.localize('editor.action.codeAction.noneMessage.kind', \"No code actions for '{0}' available\", userArgs.kind)\n : args.preferred\n ? nls.localize('editor.action.codeAction.noneMessage.preferred', \"No preferred code actions available\")\n : nls.localize('editor.action.codeAction.noneMessage', \"No code actions available\"), {\n include: args.kind,\n includeSourceActions: true,\n onlyIncludePreferredActions: args.preferred,\n }, args.apply);\n }\n}\nexport class RefactorAction extends EditorAction {\n constructor() {\n super({\n id: refactorCommandId,\n label: nls.localize('refactor.label', \"Refactor...\"),\n alias: 'Refactor...',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 48 /* KEY_R */,\n mac: {\n primary: 256 /* WinCtrl */ | 1024 /* Shift */ | 48 /* KEY_R */\n },\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n group: '1_modification',\n order: 2,\n when: ContextKeyExpr.and(EditorContextKeys.writable, contextKeyForSupportedActions(CodeActionKind.Refactor)),\n },\n description: {\n description: 'Refactor...',\n args: [{ name: 'args', schema: argsSchema }]\n }\n });\n }\n run(_accessor, editor, userArgs) {\n const args = CodeActionCommandArgs.fromUser(userArgs, {\n kind: CodeActionKind.Refactor,\n apply: \"never\" /* Never */\n });\n return triggerCodeActionsForEditorSelection(editor, typeof (userArgs === null || userArgs === void 0 ? void 0 : userArgs.kind) === 'string'\n ? args.preferred\n ? nls.localize('editor.action.refactor.noneMessage.preferred.kind', \"No preferred refactorings for '{0}' available\", userArgs.kind)\n : nls.localize('editor.action.refactor.noneMessage.kind', \"No refactorings for '{0}' available\", userArgs.kind)\n : args.preferred\n ? nls.localize('editor.action.refactor.noneMessage.preferred', \"No preferred refactorings available\")\n : nls.localize('editor.action.refactor.noneMessage', \"No refactorings available\"), {\n include: CodeActionKind.Refactor.contains(args.kind) ? args.kind : CodeActionKind.None,\n onlyIncludePreferredActions: args.preferred,\n }, args.apply);\n }\n}\nexport class SourceAction extends EditorAction {\n constructor() {\n super({\n id: sourceActionCommandId,\n label: nls.localize('source.label', \"Source Action...\"),\n alias: 'Source Action...',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCodeActionsProvider),\n contextMenuOpts: {\n group: '1_modification',\n order: 2.1,\n when: ContextKeyExpr.and(EditorContextKeys.writable, contextKeyForSupportedActions(CodeActionKind.Source)),\n },\n description: {\n description: 'Source Action...',\n args: [{ name: 'args', schema: argsSchema }]\n }\n });\n }\n run(_accessor, editor, userArgs) {\n const args = CodeActionCommandArgs.fromUser(userArgs, {\n kind: CodeActionKind.Source,\n apply: \"never\" /* Never */\n });\n return triggerCodeActionsForEditorSelection(editor, typeof (userArgs === null || userArgs === void 0 ? void 0 : userArgs.kind) === 'string'\n ? args.preferred\n ? nls.localize('editor.action.source.noneMessage.preferred.kind', \"No preferred source actions for '{0}' available\", userArgs.kind)\n : nls.localize('editor.action.source.noneMessage.kind', \"No source actions for '{0}' available\", userArgs.kind)\n : args.preferred\n ? nls.localize('editor.action.source.noneMessage.preferred', \"No preferred source actions available\")\n : nls.localize('editor.action.source.noneMessage', \"No source actions available\"), {\n include: CodeActionKind.Source.contains(args.kind) ? args.kind : CodeActionKind.None,\n includeSourceActions: true,\n onlyIncludePreferredActions: args.preferred,\n }, args.apply);\n }\n}\nexport class OrganizeImportsAction extends EditorAction {\n constructor() {\n super({\n id: organizeImportsCommandId,\n label: nls.localize('organizeImports.label', \"Organize Imports\"),\n alias: 'Organize Imports',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, contextKeyForSupportedActions(CodeActionKind.SourceOrganizeImports)),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 1024 /* Shift */ | 512 /* Alt */ | 45 /* KEY_O */,\n weight: 100 /* EditorContrib */\n },\n });\n }\n run(_accessor, editor) {\n return triggerCodeActionsForEditorSelection(editor, nls.localize('editor.action.organize.noneMessage', \"No organize imports action available\"), { include: CodeActionKind.SourceOrganizeImports, includeSourceActions: true }, \"ifSingle\" /* IfSingle */);\n }\n}\nexport class FixAllAction extends EditorAction {\n constructor() {\n super({\n id: fixAllCommandId,\n label: nls.localize('fixAll.label', \"Fix All\"),\n alias: 'Fix All',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, contextKeyForSupportedActions(CodeActionKind.SourceFixAll))\n });\n }\n run(_accessor, editor) {\n return triggerCodeActionsForEditorSelection(editor, nls.localize('fixAll.noneMessage', \"No fix all action available\"), { include: CodeActionKind.SourceFixAll, includeSourceActions: true }, \"ifSingle\" /* IfSingle */);\n }\n}\nexport class AutoFixAction extends EditorAction {\n constructor() {\n super({\n id: AutoFixAction.Id,\n label: nls.localize('autoFix.label', \"Auto Fix...\"),\n alias: 'Auto Fix...',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, contextKeyForSupportedActions(CodeActionKind.QuickFix)),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 512 /* Alt */ | 1024 /* Shift */ | 84 /* US_DOT */,\n mac: {\n primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 84 /* US_DOT */\n },\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n return triggerCodeActionsForEditorSelection(editor, nls.localize('editor.action.autoFix.noneMessage', \"No auto fixes available\"), {\n include: CodeActionKind.QuickFix,\n onlyIncludePreferredActions: true\n }, \"ifSingle\" /* IfSingle */);\n }\n}\nAutoFixAction.Id = 'editor.action.autoFix';\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 *--------------------------------------------------------------------------------------------*/\nimport { registerEditorAction, registerEditorCommand, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { CodeActionCommand, OrganizeImportsAction, QuickFixAction, QuickFixController, RefactorAction, SourceAction, AutoFixAction, FixAllAction } from './codeActionCommands.js';\nregisterEditorContribution(QuickFixController.ID, QuickFixController);\nregisterEditorAction(QuickFixAction);\nregisterEditorAction(RefactorAction);\nregisterEditorAction(SourceAction);\nregisterEditorAction(OrganizeImportsAction);\nregisterEditorAction(AutoFixAction);\nregisterEditorAction(FixAllAction);\nregisterEditorCommand(new CodeActionCommand());\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { illegalArgument, onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { CodeLensProviderRegistry } from '../../common/modes.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { assertType } from '../../../base/common/types.js';\nexport class CodeLensModel {\n constructor() {\n this.lenses = [];\n this._disposables = new DisposableStore();\n }\n dispose() {\n this._disposables.dispose();\n }\n add(list, provider) {\n this._disposables.add(list);\n for (const symbol of list.lenses) {\n this.lenses.push({ symbol, provider });\n }\n }\n}\nexport function getCodeLensModel(model, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const provider = CodeLensProviderRegistry.ordered(model);\n const providerRanks = new Map();\n const result = new CodeLensModel();\n const promises = provider.map((provider, i) => __awaiter(this, void 0, void 0, function* () {\n providerRanks.set(provider, i);\n try {\n const list = yield Promise.resolve(provider.provideCodeLenses(model, token));\n if (list) {\n result.add(list, provider);\n }\n }\n catch (err) {\n onUnexpectedExternalError(err);\n }\n }));\n yield Promise.all(promises);\n result.lenses = result.lenses.sort((a, b) => {\n // sort by lineNumber, provider-rank, and column\n if (a.symbol.range.startLineNumber < b.symbol.range.startLineNumber) {\n return -1;\n }\n else if (a.symbol.range.startLineNumber > b.symbol.range.startLineNumber) {\n return 1;\n }\n else if ((providerRanks.get(a.provider)) < (providerRanks.get(b.provider))) {\n return -1;\n }\n else if ((providerRanks.get(a.provider)) > (providerRanks.get(b.provider))) {\n return 1;\n }\n else if (a.symbol.range.startColumn < b.symbol.range.startColumn) {\n return -1;\n }\n else if (a.symbol.range.startColumn > b.symbol.range.startColumn) {\n return 1;\n }\n else {\n return 0;\n }\n });\n return result;\n });\n}\nCommandsRegistry.registerCommand('_executeCodeLensProvider', function (accessor, ...args) {\n let [uri, itemResolveCount] = args;\n assertType(URI.isUri(uri));\n assertType(typeof itemResolveCount === 'number' || !itemResolveCount);\n const model = accessor.get(IModelService).getModel(uri);\n if (!model) {\n throw illegalArgument();\n }\n const result = [];\n const disposables = new DisposableStore();\n return getCodeLensModel(model, CancellationToken.None).then(value => {\n disposables.add(value);\n let resolve = [];\n for (const item of value.lenses) {\n if (itemResolveCount === undefined || itemResolveCount === null || Boolean(item.symbol.command)) {\n result.push(item.symbol);\n }\n else if (itemResolveCount-- > 0 && item.provider.resolveCodeLens) {\n resolve.push(Promise.resolve(item.provider.resolveCodeLens(model, item.symbol, CancellationToken.None)).then(symbol => result.push(symbol || item.symbol)));\n }\n }\n return Promise.all(resolve);\n }).then(() => {\n return result;\n }).finally(() => {\n // make sure to return results, then (on next tick)\n // dispose the results\n setTimeout(() => disposables.dispose(), 100);\n });\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 *--------------------------------------------------------------------------------------------*/\nimport './codelensWidget.css';\nimport * as dom from '../../../base/browser/dom.js';\nimport { Range } from '../../common/core/range.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { editorCodeLensForeground } from '../../common/view/editorColorRegistry.js';\nimport { editorActiveLinkForeground } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { renderLabelWithIcons } from '../../../base/browser/ui/iconLabel/iconLabels.js';\nclass CodeLensViewZone {\n constructor(afterLineNumber, heightInPx, onHeight) {\n this.afterLineNumber = afterLineNumber;\n this.heightInPx = heightInPx;\n this._onHeight = onHeight;\n this.suppressMouseDown = true;\n this.domNode = document.createElement('div');\n }\n onComputedHeight(height) {\n if (this._lastHeight === undefined) {\n this._lastHeight = height;\n }\n else if (this._lastHeight !== height) {\n this._lastHeight = height;\n this._onHeight();\n }\n }\n}\nclass CodeLensContentWidget {\n constructor(editor, className, line) {\n // Editor.IContentWidget.allowEditorOverflow\n this.allowEditorOverflow = false;\n this.suppressMouseDown = true;\n this._commands = new Map();\n this._isEmpty = true;\n this._editor = editor;\n this._id = `codelens.widget-${(CodeLensContentWidget._idPool++)}`;\n this.updatePosition(line);\n this._domNode = document.createElement('span');\n this._domNode.className = `codelens-decoration ${className}`;\n }\n withCommands(lenses, animate) {\n this._commands.clear();\n let children = [];\n let hasSymbol = false;\n for (let i = 0; i < lenses.length; i++) {\n const lens = lenses[i];\n if (!lens) {\n continue;\n }\n hasSymbol = true;\n if (lens.command) {\n const title = renderLabelWithIcons(lens.command.title.trim());\n if (lens.command.id) {\n children.push(dom.$('a', { id: String(i), title: lens.command.tooltip }, ...title));\n this._commands.set(String(i), lens.command);\n }\n else {\n children.push(dom.$('span', { title: lens.command.tooltip }, ...title));\n }\n if (i + 1 < lenses.length) {\n children.push(dom.$('span', undefined, '\\u00a0|\\u00a0'));\n }\n }\n }\n if (!hasSymbol) {\n // symbols but no commands\n dom.reset(this._domNode, dom.$('span', undefined, 'no commands'));\n }\n else {\n // symbols and commands\n dom.reset(this._domNode, ...children);\n if (this._isEmpty && animate) {\n this._domNode.classList.add('fadein');\n }\n this._isEmpty = false;\n }\n }\n getCommand(link) {\n return link.parentElement === this._domNode\n ? this._commands.get(link.id)\n : undefined;\n }\n getId() {\n return this._id;\n }\n getDomNode() {\n return this._domNode;\n }\n updatePosition(line) {\n const column = this._editor.getModel().getLineFirstNonWhitespaceColumn(line);\n this._widgetPosition = {\n position: { lineNumber: line, column: column },\n preference: [1 /* ABOVE */]\n };\n }\n getPosition() {\n return this._widgetPosition || null;\n }\n}\nCodeLensContentWidget._idPool = 0;\nexport class CodeLensHelper {\n constructor() {\n this._removeDecorations = [];\n this._addDecorations = [];\n this._addDecorationsCallbacks = [];\n }\n addDecoration(decoration, callback) {\n this._addDecorations.push(decoration);\n this._addDecorationsCallbacks.push(callback);\n }\n removeDecoration(decorationId) {\n this._removeDecorations.push(decorationId);\n }\n commit(changeAccessor) {\n let resultingDecorations = changeAccessor.deltaDecorations(this._removeDecorations, this._addDecorations);\n for (let i = 0, len = resultingDecorations.length; i < len; i++) {\n this._addDecorationsCallbacks[i](resultingDecorations[i]);\n }\n }\n}\nexport class CodeLensWidget {\n constructor(data, editor, className, helper, viewZoneChangeAccessor, heightInPx, updateCallback) {\n this._isDisposed = false;\n this._editor = editor;\n this._className = className;\n this._data = data;\n // create combined range, track all ranges with decorations,\n // check if there is already something to render\n this._decorationIds = [];\n let range;\n let lenses = [];\n this._data.forEach((codeLensData, i) => {\n if (codeLensData.symbol.command) {\n lenses.push(codeLensData.symbol);\n }\n helper.addDecoration({\n range: codeLensData.symbol.range,\n options: ModelDecorationOptions.EMPTY\n }, id => this._decorationIds[i] = id);\n // the range contains all lenses on this line\n if (!range) {\n range = Range.lift(codeLensData.symbol.range);\n }\n else {\n range = Range.plusRange(range, codeLensData.symbol.range);\n }\n });\n this._viewZone = new CodeLensViewZone(range.startLineNumber - 1, heightInPx, updateCallback);\n this._viewZoneId = viewZoneChangeAccessor.addZone(this._viewZone);\n if (lenses.length > 0) {\n this._createContentWidgetIfNecessary();\n this._contentWidget.withCommands(lenses, false);\n }\n }\n _createContentWidgetIfNecessary() {\n if (!this._contentWidget) {\n this._contentWidget = new CodeLensContentWidget(this._editor, this._className, this._viewZone.afterLineNumber + 1);\n this._editor.addContentWidget(this._contentWidget);\n }\n else {\n this._editor.layoutContentWidget(this._contentWidget);\n }\n }\n dispose(helper, viewZoneChangeAccessor) {\n this._decorationIds.forEach(helper.removeDecoration, helper);\n this._decorationIds = [];\n if (viewZoneChangeAccessor) {\n viewZoneChangeAccessor.removeZone(this._viewZoneId);\n }\n if (this._contentWidget) {\n this._editor.removeContentWidget(this._contentWidget);\n this._contentWidget = undefined;\n }\n this._isDisposed = true;\n }\n isDisposed() {\n return this._isDisposed;\n }\n isValid() {\n return this._decorationIds.some((id, i) => {\n const range = this._editor.getModel().getDecorationRange(id);\n const symbol = this._data[i].symbol;\n return !!(range && Range.isEmpty(symbol.range) === range.isEmpty());\n });\n }\n updateCodeLensSymbols(data, helper) {\n this._decorationIds.forEach(helper.removeDecoration, helper);\n this._decorationIds = [];\n this._data = data;\n this._data.forEach((codeLensData, i) => {\n helper.addDecoration({\n range: codeLensData.symbol.range,\n options: ModelDecorationOptions.EMPTY\n }, id => this._decorationIds[i] = id);\n });\n }\n updateHeight(height, viewZoneChangeAccessor) {\n this._viewZone.heightInPx = height;\n viewZoneChangeAccessor.layoutZone(this._viewZoneId);\n if (this._contentWidget) {\n this._editor.layoutContentWidget(this._contentWidget);\n }\n }\n computeIfNecessary(model) {\n if (!this._viewZone.domNode.hasAttribute('monaco-visible-view-zone')) {\n return null;\n }\n // Read editor current state\n for (let i = 0; i < this._decorationIds.length; i++) {\n const range = model.getDecorationRange(this._decorationIds[i]);\n if (range) {\n this._data[i].symbol.range = range;\n }\n }\n return this._data;\n }\n updateCommands(symbols) {\n this._createContentWidgetIfNecessary();\n this._contentWidget.withCommands(symbols, true);\n for (let i = 0; i < this._data.length; i++) {\n const resolved = symbols[i];\n if (resolved) {\n const { symbol } = this._data[i];\n symbol.command = resolved.command || symbol.command;\n }\n }\n }\n getCommand(link) {\n var _a;\n return (_a = this._contentWidget) === null || _a === void 0 ? void 0 : _a.getCommand(link);\n }\n getLineNumber() {\n const range = this._editor.getModel().getDecorationRange(this._decorationIds[0]);\n if (range) {\n return range.startLineNumber;\n }\n return -1;\n }\n update(viewZoneChangeAccessor) {\n if (this.isValid()) {\n const range = this._editor.getModel().getDecorationRange(this._decorationIds[0]);\n if (range) {\n this._viewZone.afterLineNumber = range.startLineNumber - 1;\n viewZoneChangeAccessor.layoutZone(this._viewZoneId);\n if (this._contentWidget) {\n this._contentWidget.updatePosition(range.startLineNumber);\n this._editor.layoutContentWidget(this._contentWidget);\n }\n }\n }\n }\n getItems() {\n return this._data;\n }\n}\nregisterThemingParticipant((theme, collector) => {\n const codeLensForeground = theme.getColor(editorCodeLensForeground);\n if (codeLensForeground) {\n collector.addRule(`.monaco-editor .codelens-decoration { color: ${codeLensForeground}; }`);\n collector.addRule(`.monaco-editor .codelens-decoration .codicon { color: ${codeLensForeground}; }`);\n }\n const activeLinkForeground = theme.getColor(editorActiveLinkForeground);\n if (activeLinkForeground) {\n collector.addRule(`.monaco-editor .codelens-decoration > a:hover { color: ${activeLinkForeground} !important; }`);\n collector.addRule(`.monaco-editor .codelens-decoration > a:hover .codicon { color: ${activeLinkForeground} !important; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { CodeLensModel } from './codelens.js';\nimport { LRUCache } from '../../../base/common/map.js';\nimport { IStorageService, WillSaveStateReason } from '../../../platform/storage/common/storage.js';\nimport { Range } from '../../common/core/range.js';\nimport { runWhenIdle } from '../../../base/common/async.js';\nimport { once } from '../../../base/common/functional.js';\nexport const ICodeLensCache = createDecorator('ICodeLensCache');\nclass CacheItem {\n constructor(lineCount, data) {\n this.lineCount = lineCount;\n this.data = data;\n }\n}\nlet CodeLensCache = class CodeLensCache {\n constructor(storageService) {\n this._fakeProvider = new class {\n provideCodeLenses() {\n throw new Error('not supported');\n }\n };\n this._cache = new LRUCache(20, 0.75);\n // remove old data\n const oldkey = 'codelens/cache';\n runWhenIdle(() => storageService.remove(oldkey, 1 /* WORKSPACE */));\n // restore lens data on start\n const key = 'codelens/cache2';\n const raw = storageService.get(key, 1 /* WORKSPACE */, '{}');\n this._deserialize(raw);\n // store lens data on shutdown\n once(storageService.onWillSaveState)(e => {\n if (e.reason === WillSaveStateReason.SHUTDOWN) {\n storageService.store(key, this._serialize(), 1 /* WORKSPACE */, 1 /* MACHINE */);\n }\n });\n }\n put(model, data) {\n // create a copy of the model that is without command-ids\n // but with comand-labels\n const copyItems = data.lenses.map(item => {\n var _a;\n return {\n range: item.symbol.range,\n command: item.symbol.command && { id: '', title: (_a = item.symbol.command) === null || _a === void 0 ? void 0 : _a.title },\n };\n });\n const copyModel = new CodeLensModel();\n copyModel.add({ lenses: copyItems, dispose: () => { } }, this._fakeProvider);\n const item = new CacheItem(model.getLineCount(), copyModel);\n this._cache.set(model.uri.toString(), item);\n }\n get(model) {\n const item = this._cache.get(model.uri.toString());\n return item && item.lineCount === model.getLineCount() ? item.data : undefined;\n }\n delete(model) {\n this._cache.delete(model.uri.toString());\n }\n // --- persistence\n _serialize() {\n const data = Object.create(null);\n for (const [key, value] of this._cache) {\n const lines = new Set();\n for (const d of value.data.lenses) {\n lines.add(d.symbol.range.startLineNumber);\n }\n data[key] = {\n lineCount: value.lineCount,\n lines: [...lines.values()]\n };\n }\n return JSON.stringify(data);\n }\n _deserialize(raw) {\n try {\n const data = JSON.parse(raw);\n for (const key in data) {\n const element = data[key];\n const lenses = [];\n for (const line of element.lines) {\n lenses.push({ range: new Range(line, 1, line, 11) });\n }\n const model = new CodeLensModel();\n model.add({ lenses, dispose() { } }, this._fakeProvider);\n this._cache.set(key, new CacheItem(element.lineCount, model));\n }\n }\n catch (_a) {\n // ignore...\n }\n }\n};\nCodeLensCache = __decorate([\n __param(0, IStorageService)\n], CodeLensCache);\nexport { CodeLensCache };\nregisterSingleton(ICodeLensCache, CodeLensCache);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { RunOnceScheduler, createCancelablePromise, disposableTimeout } from '../../../base/common/async.js';\nimport { onUnexpectedError, onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { toDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { StableEditorScrollState } from '../../browser/core/editorState.js';\nimport { registerEditorContribution, registerEditorAction, EditorAction } from '../../browser/editorExtensions.js';\nimport { CodeLensProviderRegistry } from '../../common/modes.js';\nimport { getCodeLensModel } from './codelens.js';\nimport { CodeLensWidget, CodeLensHelper } from './codelensWidget.js';\nimport { ICommandService } from '../../../platform/commands/common/commands.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { ICodeLensCache } from './codeLensCache.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { hash } from '../../../base/common/hash.js';\nimport { IQuickInputService } from '../../../platform/quickinput/common/quickInput.js';\nimport { localize } from '../../../nls.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { LanguageFeatureRequestDelays } from '../../common/modes/languageFeatureRegistry.js';\nlet CodeLensContribution = class CodeLensContribution {\n constructor(_editor, _commandService, _notificationService, _codeLensCache) {\n this._editor = _editor;\n this._commandService = _commandService;\n this._notificationService = _notificationService;\n this._codeLensCache = _codeLensCache;\n this._disposables = new DisposableStore();\n this._localToDispose = new DisposableStore();\n this._lenses = [];\n this._getCodeLensModelDelays = new LanguageFeatureRequestDelays(CodeLensProviderRegistry, 250, 2500);\n this._oldCodeLensModels = new DisposableStore();\n this._resolveCodeLensesDelays = new LanguageFeatureRequestDelays(CodeLensProviderRegistry, 250, 2500);\n this._resolveCodeLensesScheduler = new RunOnceScheduler(() => this._resolveCodeLensesInViewport(), this._resolveCodeLensesDelays.min);\n this._disposables.add(this._editor.onDidChangeModel(() => this._onModelChange()));\n this._disposables.add(this._editor.onDidChangeModelLanguage(() => this._onModelChange()));\n this._disposables.add(this._editor.onDidChangeConfiguration((e) => {\n if (e.hasChanged(40 /* fontInfo */) || e.hasChanged(14 /* codeLensFontSize */) || e.hasChanged(13 /* codeLensFontFamily */)) {\n this._updateLensStyle();\n }\n if (e.hasChanged(12 /* codeLens */)) {\n this._onModelChange();\n }\n }));\n this._disposables.add(CodeLensProviderRegistry.onDidChange(this._onModelChange, this));\n this._onModelChange();\n this._styleClassName = '_' + hash(this._editor.getId()).toString(16);\n this._styleElement = dom.createStyleSheet(dom.isInShadowDOM(this._editor.getContainerDomNode())\n ? this._editor.getContainerDomNode()\n : undefined);\n this._updateLensStyle();\n }\n dispose() {\n var _a;\n this._localDispose();\n this._disposables.dispose();\n this._oldCodeLensModels.dispose();\n (_a = this._currentCodeLensModel) === null || _a === void 0 ? void 0 : _a.dispose();\n this._styleElement.remove();\n }\n _getLayoutInfo() {\n let fontSize = this._editor.getOption(14 /* codeLensFontSize */);\n let codeLensHeight;\n if (!fontSize || fontSize < 5) {\n fontSize = (this._editor.getOption(42 /* fontSize */) * .9) | 0;\n codeLensHeight = this._editor.getOption(55 /* lineHeight */);\n }\n else {\n codeLensHeight = (fontSize * Math.max(1.3, this._editor.getOption(55 /* lineHeight */) / this._editor.getOption(42 /* fontSize */))) | 0;\n }\n return { codeLensHeight, fontSize };\n }\n _updateLensStyle() {\n const { codeLensHeight, fontSize } = this._getLayoutInfo();\n const fontFamily = this._editor.getOption(13 /* codeLensFontFamily */);\n const editorFontInfo = this._editor.getOption(40 /* fontInfo */);\n const fontFamilyVar = `--codelens-font-family${this._styleClassName}`;\n const fontFeaturesVar = `--codelens-font-features${this._styleClassName}`;\n let newStyle = `\n\t\t.monaco-editor .codelens-decoration.${this._styleClassName} { line-height: ${codeLensHeight}px; font-size: ${fontSize}px; padding-right: ${Math.round(fontSize * 0.5)}px; font-feature-settings: var(${fontFeaturesVar}) }\n\t\t.monaco-editor .codelens-decoration.${this._styleClassName} span.codicon { line-height: ${codeLensHeight}px; font-size: ${fontSize}px; }\n\t\t`;\n if (fontFamily) {\n newStyle += `.monaco-editor .codelens-decoration.${this._styleClassName} { font-family: var(${fontFamilyVar})}`;\n }\n this._styleElement.textContent = newStyle;\n this._editor.getContainerDomNode().style.setProperty(fontFamilyVar, fontFamily !== null && fontFamily !== void 0 ? fontFamily : 'inherit');\n this._editor.getContainerDomNode().style.setProperty(fontFeaturesVar, editorFontInfo.fontFeatureSettings);\n //\n this._editor.changeViewZones(accessor => {\n for (let lens of this._lenses) {\n lens.updateHeight(codeLensHeight, accessor);\n }\n });\n }\n _localDispose() {\n var _a, _b, _c;\n (_a = this._getCodeLensModelPromise) === null || _a === void 0 ? void 0 : _a.cancel();\n this._getCodeLensModelPromise = undefined;\n (_b = this._resolveCodeLensesPromise) === null || _b === void 0 ? void 0 : _b.cancel();\n this._resolveCodeLensesPromise = undefined;\n this._localToDispose.clear();\n this._oldCodeLensModels.clear();\n (_c = this._currentCodeLensModel) === null || _c === void 0 ? void 0 : _c.dispose();\n }\n _onModelChange() {\n this._localDispose();\n const model = this._editor.getModel();\n if (!model) {\n return;\n }\n if (!this._editor.getOption(12 /* codeLens */)) {\n return;\n }\n const cachedLenses = this._codeLensCache.get(model);\n if (cachedLenses) {\n this._renderCodeLensSymbols(cachedLenses);\n }\n if (!CodeLensProviderRegistry.has(model)) {\n // no provider -> return but check with\n // cached lenses. they expire after 30 seconds\n if (cachedLenses) {\n this._localToDispose.add(disposableTimeout(() => {\n const cachedLensesNow = this._codeLensCache.get(model);\n if (cachedLenses === cachedLensesNow) {\n this._codeLensCache.delete(model);\n this._onModelChange();\n }\n }, 30 * 1000));\n }\n return;\n }\n for (const provider of CodeLensProviderRegistry.all(model)) {\n if (typeof provider.onDidChange === 'function') {\n let registration = provider.onDidChange(() => scheduler.schedule());\n this._localToDispose.add(registration);\n }\n }\n const scheduler = new RunOnceScheduler(() => {\n var _a;\n const t1 = Date.now();\n (_a = this._getCodeLensModelPromise) === null || _a === void 0 ? void 0 : _a.cancel();\n this._getCodeLensModelPromise = createCancelablePromise(token => getCodeLensModel(model, token));\n this._getCodeLensModelPromise.then(result => {\n if (this._currentCodeLensModel) {\n this._oldCodeLensModels.add(this._currentCodeLensModel);\n }\n this._currentCodeLensModel = result;\n // cache model to reduce flicker\n this._codeLensCache.put(model, result);\n // update moving average\n const newDelay = this._getCodeLensModelDelays.update(model, Date.now() - t1);\n scheduler.delay = newDelay;\n // render lenses\n this._renderCodeLensSymbols(result);\n this._resolveCodeLensesInViewport();\n }, onUnexpectedError);\n }, this._getCodeLensModelDelays.get(model));\n this._localToDispose.add(scheduler);\n this._localToDispose.add(toDisposable(() => this._resolveCodeLensesScheduler.cancel()));\n this._localToDispose.add(this._editor.onDidChangeModelContent(() => {\n this._editor.changeDecorations(decorationsAccessor => {\n this._editor.changeViewZones(viewZonesAccessor => {\n let toDispose = [];\n let lastLensLineNumber = -1;\n this._lenses.forEach((lens) => {\n if (!lens.isValid() || lastLensLineNumber === lens.getLineNumber()) {\n // invalid -> lens collapsed, attach range doesn't exist anymore\n // line_number -> lenses should never be on the same line\n toDispose.push(lens);\n }\n else {\n lens.update(viewZonesAccessor);\n lastLensLineNumber = lens.getLineNumber();\n }\n });\n let helper = new CodeLensHelper();\n toDispose.forEach((l) => {\n l.dispose(helper, viewZonesAccessor);\n this._lenses.splice(this._lenses.indexOf(l), 1);\n });\n helper.commit(decorationsAccessor);\n });\n });\n // Ask for all references again\n scheduler.schedule();\n }));\n this._localToDispose.add(this._editor.onDidFocusEditorWidget(() => {\n scheduler.schedule();\n }));\n this._localToDispose.add(this._editor.onDidScrollChange(e => {\n if (e.scrollTopChanged && this._lenses.length > 0) {\n this._resolveCodeLensesInViewportSoon();\n }\n }));\n this._localToDispose.add(this._editor.onDidLayoutChange(() => {\n this._resolveCodeLensesInViewportSoon();\n }));\n this._localToDispose.add(toDisposable(() => {\n if (this._editor.getModel()) {\n const scrollState = StableEditorScrollState.capture(this._editor);\n this._editor.changeDecorations(decorationsAccessor => {\n this._editor.changeViewZones(viewZonesAccessor => {\n this._disposeAllLenses(decorationsAccessor, viewZonesAccessor);\n });\n });\n scrollState.restore(this._editor);\n }\n else {\n // No accessors available\n this._disposeAllLenses(undefined, undefined);\n }\n }));\n this._localToDispose.add(this._editor.onMouseDown(e => {\n if (e.target.type !== 9 /* CONTENT_WIDGET */) {\n return;\n }\n let target = e.target.element;\n if ((target === null || target === void 0 ? void 0 : target.tagName) === 'SPAN') {\n target = target.parentElement;\n }\n if ((target === null || target === void 0 ? void 0 : target.tagName) === 'A') {\n for (const lens of this._lenses) {\n let command = lens.getCommand(target);\n if (command) {\n this._commandService.executeCommand(command.id, ...(command.arguments || [])).catch(err => this._notificationService.error(err));\n break;\n }\n }\n }\n }));\n scheduler.schedule();\n }\n _disposeAllLenses(decChangeAccessor, viewZoneChangeAccessor) {\n const helper = new CodeLensHelper();\n for (const lens of this._lenses) {\n lens.dispose(helper, viewZoneChangeAccessor);\n }\n if (decChangeAccessor) {\n helper.commit(decChangeAccessor);\n }\n this._lenses.length = 0;\n }\n _renderCodeLensSymbols(symbols) {\n if (!this._editor.hasModel()) {\n return;\n }\n let maxLineNumber = this._editor.getModel().getLineCount();\n let groups = [];\n let lastGroup;\n for (let symbol of symbols.lenses) {\n let line = symbol.symbol.range.startLineNumber;\n if (line < 1 || line > maxLineNumber) {\n // invalid code lens\n continue;\n }\n else if (lastGroup && lastGroup[lastGroup.length - 1].symbol.range.startLineNumber === line) {\n // on same line as previous\n lastGroup.push(symbol);\n }\n else {\n // on later line as previous\n lastGroup = [symbol];\n groups.push(lastGroup);\n }\n }\n const scrollState = StableEditorScrollState.capture(this._editor);\n const layoutInfo = this._getLayoutInfo();\n this._editor.changeDecorations(decorationsAccessor => {\n this._editor.changeViewZones(viewZoneAccessor => {\n const helper = new CodeLensHelper();\n let codeLensIndex = 0;\n let groupsIndex = 0;\n while (groupsIndex < groups.length && codeLensIndex < this._lenses.length) {\n let symbolsLineNumber = groups[groupsIndex][0].symbol.range.startLineNumber;\n let codeLensLineNumber = this._lenses[codeLensIndex].getLineNumber();\n if (codeLensLineNumber < symbolsLineNumber) {\n this._lenses[codeLensIndex].dispose(helper, viewZoneAccessor);\n this._lenses.splice(codeLensIndex, 1);\n }\n else if (codeLensLineNumber === symbolsLineNumber) {\n this._lenses[codeLensIndex].updateCodeLensSymbols(groups[groupsIndex], helper);\n groupsIndex++;\n codeLensIndex++;\n }\n else {\n this._lenses.splice(codeLensIndex, 0, new CodeLensWidget(groups[groupsIndex], this._editor, this._styleClassName, helper, viewZoneAccessor, layoutInfo.codeLensHeight, () => this._resolveCodeLensesInViewportSoon()));\n codeLensIndex++;\n groupsIndex++;\n }\n }\n // Delete extra code lenses\n while (codeLensIndex < this._lenses.length) {\n this._lenses[codeLensIndex].dispose(helper, viewZoneAccessor);\n this._lenses.splice(codeLensIndex, 1);\n }\n // Create extra symbols\n while (groupsIndex < groups.length) {\n this._lenses.push(new CodeLensWidget(groups[groupsIndex], this._editor, this._styleClassName, helper, viewZoneAccessor, layoutInfo.codeLensHeight, () => this._resolveCodeLensesInViewportSoon()));\n groupsIndex++;\n }\n helper.commit(decorationsAccessor);\n });\n });\n scrollState.restore(this._editor);\n }\n _resolveCodeLensesInViewportSoon() {\n const model = this._editor.getModel();\n if (model) {\n this._resolveCodeLensesScheduler.schedule();\n }\n }\n _resolveCodeLensesInViewport() {\n var _a;\n (_a = this._resolveCodeLensesPromise) === null || _a === void 0 ? void 0 : _a.cancel();\n this._resolveCodeLensesPromise = undefined;\n const model = this._editor.getModel();\n if (!model) {\n return;\n }\n const toResolve = [];\n const lenses = [];\n this._lenses.forEach((lens) => {\n const request = lens.computeIfNecessary(model);\n if (request) {\n toResolve.push(request);\n lenses.push(lens);\n }\n });\n if (toResolve.length === 0) {\n return;\n }\n const t1 = Date.now();\n const resolvePromise = createCancelablePromise(token => {\n const promises = toResolve.map((request, i) => {\n const resolvedSymbols = new Array(request.length);\n const promises = request.map((request, i) => {\n if (!request.symbol.command && typeof request.provider.resolveCodeLens === 'function') {\n return Promise.resolve(request.provider.resolveCodeLens(model, request.symbol, token)).then(symbol => {\n resolvedSymbols[i] = symbol;\n }, onUnexpectedExternalError);\n }\n else {\n resolvedSymbols[i] = request.symbol;\n return Promise.resolve(undefined);\n }\n });\n return Promise.all(promises).then(() => {\n if (!token.isCancellationRequested && !lenses[i].isDisposed()) {\n lenses[i].updateCommands(resolvedSymbols);\n }\n });\n });\n return Promise.all(promises);\n });\n this._resolveCodeLensesPromise = resolvePromise;\n this._resolveCodeLensesPromise.then(() => {\n // update moving average\n const newDelay = this._resolveCodeLensesDelays.update(model, Date.now() - t1);\n this._resolveCodeLensesScheduler.delay = newDelay;\n if (this._currentCodeLensModel) { // update the cached state with new resolved items\n this._codeLensCache.put(model, this._currentCodeLensModel);\n }\n this._oldCodeLensModels.clear(); // dispose old models once we have updated the UI with the current model\n if (resolvePromise === this._resolveCodeLensesPromise) {\n this._resolveCodeLensesPromise = undefined;\n }\n }, err => {\n onUnexpectedError(err); // can also be cancellation!\n if (resolvePromise === this._resolveCodeLensesPromise) {\n this._resolveCodeLensesPromise = undefined;\n }\n });\n }\n getLenses() {\n return this._lenses;\n }\n};\nCodeLensContribution.ID = 'css.editor.codeLens';\nCodeLensContribution = __decorate([\n __param(1, ICommandService),\n __param(2, INotificationService),\n __param(3, ICodeLensCache)\n], CodeLensContribution);\nexport { CodeLensContribution };\nregisterEditorContribution(CodeLensContribution.ID, CodeLensContribution);\nregisterEditorAction(class ShowLensesInCurrentLine extends EditorAction {\n constructor() {\n super({\n id: 'codelens.showLensesInCurrentLine',\n precondition: EditorContextKeys.hasCodeLensProvider,\n label: localize('showLensOnLine', \"Show CodeLens Commands For Current Line\"),\n alias: 'Show CodeLens Commands For Current Line',\n });\n }\n run(accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!editor.hasModel()) {\n return;\n }\n const quickInputService = accessor.get(IQuickInputService);\n const commandService = accessor.get(ICommandService);\n const notificationService = accessor.get(INotificationService);\n const lineNumber = editor.getSelection().positionLineNumber;\n const codelensController = editor.getContribution(CodeLensContribution.ID);\n const items = [];\n for (let lens of codelensController.getLenses()) {\n if (lens.getLineNumber() === lineNumber) {\n for (let item of lens.getItems()) {\n const { command } = item.symbol;\n if (command) {\n items.push({\n label: command.title,\n command: command\n });\n }\n }\n }\n }\n if (items.length === 0) {\n // We dont want an empty picker\n return;\n }\n const item = yield quickInputService.pick(items, { canPickMany: false });\n if (!item) {\n // Nothing picked\n return;\n }\n try {\n yield commandService.executeCommand(item.command.id, ...(item.command.arguments || []));\n }\n catch (err) {\n notificationService.error(err);\n }\n });\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { illegalArgument } from '../../../base/common/errors.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Range } from '../../common/core/range.js';\nimport { ColorProviderRegistry } from '../../common/modes.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nexport function getColors(model, token) {\n const colors = [];\n const providers = ColorProviderRegistry.ordered(model).reverse();\n const promises = providers.map(provider => Promise.resolve(provider.provideDocumentColors(model, token)).then(result => {\n if (Array.isArray(result)) {\n for (let colorInfo of result) {\n colors.push({ colorInfo, provider });\n }\n }\n }));\n return Promise.all(promises).then(() => colors);\n}\nexport function getColorPresentations(model, colorInfo, provider, token) {\n return Promise.resolve(provider.provideColorPresentations(model, colorInfo, token));\n}\nCommandsRegistry.registerCommand('_executeDocumentColorProvider', function (accessor, ...args) {\n const [resource] = args;\n if (!(resource instanceof URI)) {\n throw illegalArgument();\n }\n const model = accessor.get(IModelService).getModel(resource);\n if (!model) {\n throw illegalArgument();\n }\n const rawCIs = [];\n const providers = ColorProviderRegistry.ordered(model).reverse();\n const promises = providers.map(provider => Promise.resolve(provider.provideDocumentColors(model, CancellationToken.None)).then(result => {\n if (Array.isArray(result)) {\n for (let ci of result) {\n rawCIs.push({ range: ci.range, color: [ci.color.red, ci.color.green, ci.color.blue, ci.color.alpha] });\n }\n }\n }));\n return Promise.all(promises).then(() => rawCIs);\n});\nCommandsRegistry.registerCommand('_executeColorPresentationProvider', function (accessor, ...args) {\n const [color, context] = args;\n const { uri, range } = context;\n if (!(uri instanceof URI) || !Array.isArray(color) || color.length !== 4 || !Range.isIRange(range)) {\n throw illegalArgument();\n }\n const [red, green, blue, alpha] = color;\n const model = accessor.get(IModelService).getModel(uri);\n if (!model) {\n throw illegalArgument();\n }\n const colorInfo = {\n range,\n color: { red, green, blue, alpha }\n };\n const presentations = [];\n const providers = ColorProviderRegistry.ordered(model).reverse();\n const promises = providers.map(provider => Promise.resolve(provider.provideColorPresentations(model, colorInfo, CancellationToken.None)).then(result => {\n if (Array.isArray(result)) {\n presentations.push(...result);\n }\n }));\n return Promise.all(promises).then(() => presentations);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { TimeoutTimer, createCancelablePromise } from '../../../base/common/async.js';\nimport { RGBA } from '../../../base/common/color.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { hash } from '../../../base/common/hash.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { Range } from '../../common/core/range.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { ColorProviderRegistry } from '../../common/modes.js';\nimport { getColors } from './color.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nconst MAX_DECORATORS = 500;\nlet ColorDetector = class ColorDetector extends Disposable {\n constructor(_editor, _codeEditorService, _configurationService) {\n super();\n this._editor = _editor;\n this._codeEditorService = _codeEditorService;\n this._configurationService = _configurationService;\n this._localToDispose = this._register(new DisposableStore());\n this._decorationsIds = [];\n this._colorDatas = new Map();\n this._colorDecoratorIds = [];\n this._decorationsTypes = new Set();\n this._register(_editor.onDidChangeModel(() => {\n this._isEnabled = this.isEnabled();\n this.onModelChanged();\n }));\n this._register(_editor.onDidChangeModelLanguage(() => this.onModelChanged()));\n this._register(ColorProviderRegistry.onDidChange(() => this.onModelChanged()));\n this._register(_editor.onDidChangeConfiguration(() => {\n let prevIsEnabled = this._isEnabled;\n this._isEnabled = this.isEnabled();\n if (prevIsEnabled !== this._isEnabled) {\n if (this._isEnabled) {\n this.onModelChanged();\n }\n else {\n this.removeAllDecorations();\n }\n }\n }));\n this._timeoutTimer = null;\n this._computePromise = null;\n this._isEnabled = this.isEnabled();\n this.onModelChanged();\n }\n isEnabled() {\n const model = this._editor.getModel();\n if (!model) {\n return false;\n }\n const languageId = model.getLanguageIdentifier();\n // handle deprecated settings. [languageId].colorDecorators.enable\n const deprecatedConfig = this._configurationService.getValue(languageId.language);\n if (deprecatedConfig) {\n const colorDecorators = deprecatedConfig['colorDecorators']; // deprecatedConfig.valueOf('.colorDecorators.enable');\n if (colorDecorators && colorDecorators['enable'] !== undefined && !colorDecorators['enable']) {\n return colorDecorators['enable'];\n }\n }\n return this._editor.getOption(15 /* colorDecorators */);\n }\n static get(editor) {\n return editor.getContribution(this.ID);\n }\n dispose() {\n this.stop();\n this.removeAllDecorations();\n super.dispose();\n }\n onModelChanged() {\n this.stop();\n if (!this._isEnabled) {\n return;\n }\n const model = this._editor.getModel();\n if (!model || !ColorProviderRegistry.has(model)) {\n return;\n }\n this._localToDispose.add(this._editor.onDidChangeModelContent(() => {\n if (!this._timeoutTimer) {\n this._timeoutTimer = new TimeoutTimer();\n this._timeoutTimer.cancelAndSet(() => {\n this._timeoutTimer = null;\n this.beginCompute();\n }, ColorDetector.RECOMPUTE_TIME);\n }\n }));\n this.beginCompute();\n }\n beginCompute() {\n this._computePromise = createCancelablePromise(token => {\n const model = this._editor.getModel();\n if (!model) {\n return Promise.resolve([]);\n }\n return getColors(model, token);\n });\n this._computePromise.then((colorInfos) => {\n this.updateDecorations(colorInfos);\n this.updateColorDecorators(colorInfos);\n this._computePromise = null;\n }, onUnexpectedError);\n }\n stop() {\n if (this._timeoutTimer) {\n this._timeoutTimer.cancel();\n this._timeoutTimer = null;\n }\n if (this._computePromise) {\n this._computePromise.cancel();\n this._computePromise = null;\n }\n this._localToDispose.clear();\n }\n updateDecorations(colorDatas) {\n const decorations = colorDatas.map(c => ({\n range: {\n startLineNumber: c.colorInfo.range.startLineNumber,\n startColumn: c.colorInfo.range.startColumn,\n endLineNumber: c.colorInfo.range.endLineNumber,\n endColumn: c.colorInfo.range.endColumn\n },\n options: ModelDecorationOptions.EMPTY\n }));\n this._decorationsIds = this._editor.deltaDecorations(this._decorationsIds, decorations);\n this._colorDatas = new Map();\n this._decorationsIds.forEach((id, i) => this._colorDatas.set(id, colorDatas[i]));\n }\n updateColorDecorators(colorData) {\n let decorations = [];\n let newDecorationsTypes = {};\n for (let i = 0; i < colorData.length && decorations.length < MAX_DECORATORS; i++) {\n const { red, green, blue, alpha } = colorData[i].colorInfo.color;\n const rgba = new RGBA(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255), alpha);\n let subKey = hash(`rgba(${rgba.r},${rgba.g},${rgba.b},${rgba.a})`).toString(16);\n let color = `rgba(${rgba.r}, ${rgba.g}, ${rgba.b}, ${rgba.a})`;\n let key = 'colorBox-' + subKey;\n if (!this._decorationsTypes.has(key) && !newDecorationsTypes[key]) {\n this._codeEditorService.registerDecorationType(key, {\n before: {\n contentText: ' ',\n border: 'solid 0.1em #000',\n margin: '0.1em 0.2em 0 0.2em',\n width: '0.8em',\n height: '0.8em',\n backgroundColor: color\n },\n dark: {\n before: {\n border: 'solid 0.1em #eee'\n }\n }\n }, undefined, this._editor);\n }\n newDecorationsTypes[key] = true;\n decorations.push({\n range: {\n startLineNumber: colorData[i].colorInfo.range.startLineNumber,\n startColumn: colorData[i].colorInfo.range.startColumn,\n endLineNumber: colorData[i].colorInfo.range.endLineNumber,\n endColumn: colorData[i].colorInfo.range.endColumn\n },\n options: this._codeEditorService.resolveDecorationOptions(key, true)\n });\n }\n this._decorationsTypes.forEach(subType => {\n if (!newDecorationsTypes[subType]) {\n this._codeEditorService.removeDecorationType(subType);\n }\n });\n this._colorDecoratorIds = this._editor.deltaDecorations(this._colorDecoratorIds, decorations);\n }\n removeAllDecorations() {\n this._decorationsIds = this._editor.deltaDecorations(this._decorationsIds, []);\n this._colorDecoratorIds = this._editor.deltaDecorations(this._colorDecoratorIds, []);\n this._decorationsTypes.forEach(subType => {\n this._codeEditorService.removeDecorationType(subType);\n });\n }\n getColorData(position) {\n const model = this._editor.getModel();\n if (!model) {\n return null;\n }\n const decorations = model\n .getDecorationsInRange(Range.fromPositions(position, position))\n .filter(d => this._colorDatas.has(d.id));\n if (decorations.length === 0) {\n return null;\n }\n return this._colorDatas.get(decorations[0].id);\n }\n};\nColorDetector.ID = 'editor.contrib.colorDetector';\nColorDetector.RECOMPUTE_TIME = 1000; // ms\nColorDetector = __decorate([\n __param(1, ICodeEditorService),\n __param(2, IConfigurationService)\n], ColorDetector);\nexport { ColorDetector };\nregisterEditorContribution(ColorDetector.ID, ColorDetector);\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nexport class ColorPickerModel {\n constructor(color, availableColorPresentations, presentationIndex) {\n this.presentationIndex = presentationIndex;\n this._onColorFlushed = new Emitter();\n this.onColorFlushed = this._onColorFlushed.event;\n this._onDidChangeColor = new Emitter();\n this.onDidChangeColor = this._onDidChangeColor.event;\n this._onDidChangePresentation = new Emitter();\n this.onDidChangePresentation = this._onDidChangePresentation.event;\n this.originalColor = color;\n this._color = color;\n this._colorPresentations = availableColorPresentations;\n }\n get color() {\n return this._color;\n }\n set color(color) {\n if (this._color.equals(color)) {\n return;\n }\n this._color = color;\n this._onDidChangeColor.fire(color);\n }\n get presentation() { return this.colorPresentations[this.presentationIndex]; }\n get colorPresentations() {\n return this._colorPresentations;\n }\n set colorPresentations(colorPresentations) {\n this._colorPresentations = colorPresentations;\n if (this.presentationIndex > colorPresentations.length - 1) {\n this.presentationIndex = 0;\n }\n this._onDidChangePresentation.fire(this.presentation);\n }\n selectNextColorPresentation() {\n this.presentationIndex = (this.presentationIndex + 1) % this.colorPresentations.length;\n this.flushColor();\n this._onDidChangePresentation.fire(this.presentation);\n }\n guessColorPresentation(color, originalText) {\n for (let i = 0; i < this.colorPresentations.length; i++) {\n if (originalText.toLowerCase() === this.colorPresentations[i].label) {\n this.presentationIndex = i;\n this._onDidChangePresentation.fire(this.presentation);\n break;\n }\n }\n }\n flushColor() {\n this._onColorFlushed.fire(this._color);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './colorPicker.css';\nimport { onDidChangeZoomLevel } from '../../../base/browser/browser.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { GlobalMouseMoveMonitor, standardMouseMoveMerger } from '../../../base/browser/globalMouseMoveMonitor.js';\nimport { Widget } from '../../../base/browser/ui/widget.js';\nimport { Color, HSVA, RGBA } from '../../../base/common/color.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { editorHoverBackground } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nconst $ = dom.$;\nexport class ColorPickerHeader extends Disposable {\n constructor(container, model, themeService) {\n super();\n this.model = model;\n this.domNode = $('.colorpicker-header');\n dom.append(container, this.domNode);\n this.pickedColorNode = dom.append(this.domNode, $('.picked-color'));\n const colorBox = dom.append(this.domNode, $('.original-color'));\n colorBox.style.backgroundColor = Color.Format.CSS.format(this.model.originalColor) || '';\n this.backgroundColor = themeService.getColorTheme().getColor(editorHoverBackground) || Color.white;\n this._register(registerThemingParticipant((theme, collector) => {\n this.backgroundColor = theme.getColor(editorHoverBackground) || Color.white;\n }));\n this._register(dom.addDisposableListener(this.pickedColorNode, dom.EventType.CLICK, () => this.model.selectNextColorPresentation()));\n this._register(dom.addDisposableListener(colorBox, dom.EventType.CLICK, () => {\n this.model.color = this.model.originalColor;\n this.model.flushColor();\n }));\n this._register(model.onDidChangeColor(this.onDidChangeColor, this));\n this._register(model.onDidChangePresentation(this.onDidChangePresentation, this));\n this.pickedColorNode.style.backgroundColor = Color.Format.CSS.format(model.color) || '';\n this.pickedColorNode.classList.toggle('light', model.color.rgba.a < 0.5 ? this.backgroundColor.isLighter() : model.color.isLighter());\n }\n onDidChangeColor(color) {\n this.pickedColorNode.style.backgroundColor = Color.Format.CSS.format(color) || '';\n this.pickedColorNode.classList.toggle('light', color.rgba.a < 0.5 ? this.backgroundColor.isLighter() : color.isLighter());\n this.onDidChangePresentation();\n }\n onDidChangePresentation() {\n this.pickedColorNode.textContent = this.model.presentation ? this.model.presentation.label : '';\n }\n}\nexport class ColorPickerBody extends Disposable {\n constructor(container, model, pixelRatio) {\n super();\n this.model = model;\n this.pixelRatio = pixelRatio;\n this.domNode = $('.colorpicker-body');\n dom.append(container, this.domNode);\n this.saturationBox = new SaturationBox(this.domNode, this.model, this.pixelRatio);\n this._register(this.saturationBox);\n this._register(this.saturationBox.onDidChange(this.onDidSaturationValueChange, this));\n this._register(this.saturationBox.onColorFlushed(this.flushColor, this));\n this.opacityStrip = new OpacityStrip(this.domNode, this.model);\n this._register(this.opacityStrip);\n this._register(this.opacityStrip.onDidChange(this.onDidOpacityChange, this));\n this._register(this.opacityStrip.onColorFlushed(this.flushColor, this));\n this.hueStrip = new HueStrip(this.domNode, this.model);\n this._register(this.hueStrip);\n this._register(this.hueStrip.onDidChange(this.onDidHueChange, this));\n this._register(this.hueStrip.onColorFlushed(this.flushColor, this));\n }\n flushColor() {\n this.model.flushColor();\n }\n onDidSaturationValueChange({ s, v }) {\n const hsva = this.model.color.hsva;\n this.model.color = new Color(new HSVA(hsva.h, s, v, hsva.a));\n }\n onDidOpacityChange(a) {\n const hsva = this.model.color.hsva;\n this.model.color = new Color(new HSVA(hsva.h, hsva.s, hsva.v, a));\n }\n onDidHueChange(value) {\n const hsva = this.model.color.hsva;\n const h = (1 - value) * 360;\n this.model.color = new Color(new HSVA(h === 360 ? 0 : h, hsva.s, hsva.v, hsva.a));\n }\n layout() {\n this.saturationBox.layout();\n this.opacityStrip.layout();\n this.hueStrip.layout();\n }\n}\nclass SaturationBox extends Disposable {\n constructor(container, model, pixelRatio) {\n super();\n this.model = model;\n this.pixelRatio = pixelRatio;\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this._onColorFlushed = new Emitter();\n this.onColorFlushed = this._onColorFlushed.event;\n this.domNode = $('.saturation-wrap');\n dom.append(container, this.domNode);\n // Create canvas, draw selected color\n this.canvas = document.createElement('canvas');\n this.canvas.className = 'saturation-box';\n dom.append(this.domNode, this.canvas);\n // Add selection circle\n this.selection = $('.saturation-selection');\n dom.append(this.domNode, this.selection);\n this.layout();\n this._register(dom.addDisposableGenericMouseDownListner(this.domNode, e => this.onMouseDown(e)));\n this._register(this.model.onDidChangeColor(this.onDidChangeColor, this));\n this.monitor = null;\n }\n onMouseDown(e) {\n this.monitor = this._register(new GlobalMouseMoveMonitor());\n const origin = dom.getDomNodePagePosition(this.domNode);\n if (e.target !== this.selection) {\n this.onDidChangePosition(e.offsetX, e.offsetY);\n }\n this.monitor.startMonitoring(e.target, e.buttons, standardMouseMoveMerger, event => this.onDidChangePosition(event.posx - origin.left, event.posy - origin.top), () => null);\n const mouseUpListener = dom.addDisposableGenericMouseUpListner(document, () => {\n this._onColorFlushed.fire();\n mouseUpListener.dispose();\n if (this.monitor) {\n this.monitor.stopMonitoring(true);\n this.monitor = null;\n }\n }, true);\n }\n onDidChangePosition(left, top) {\n const s = Math.max(0, Math.min(1, left / this.width));\n const v = Math.max(0, Math.min(1, 1 - (top / this.height)));\n this.paintSelection(s, v);\n this._onDidChange.fire({ s, v });\n }\n layout() {\n this.width = this.domNode.offsetWidth;\n this.height = this.domNode.offsetHeight;\n this.canvas.width = this.width * this.pixelRatio;\n this.canvas.height = this.height * this.pixelRatio;\n this.paint();\n const hsva = this.model.color.hsva;\n this.paintSelection(hsva.s, hsva.v);\n }\n paint() {\n const hsva = this.model.color.hsva;\n const saturatedColor = new Color(new HSVA(hsva.h, 1, 1, 1));\n const ctx = this.canvas.getContext('2d');\n const whiteGradient = ctx.createLinearGradient(0, 0, this.canvas.width, 0);\n whiteGradient.addColorStop(0, 'rgba(255, 255, 255, 1)');\n whiteGradient.addColorStop(0.5, 'rgba(255, 255, 255, 0.5)');\n whiteGradient.addColorStop(1, 'rgba(255, 255, 255, 0)');\n const blackGradient = ctx.createLinearGradient(0, 0, 0, this.canvas.height);\n blackGradient.addColorStop(0, 'rgba(0, 0, 0, 0)');\n blackGradient.addColorStop(1, 'rgba(0, 0, 0, 1)');\n ctx.rect(0, 0, this.canvas.width, this.canvas.height);\n ctx.fillStyle = Color.Format.CSS.format(saturatedColor);\n ctx.fill();\n ctx.fillStyle = whiteGradient;\n ctx.fill();\n ctx.fillStyle = blackGradient;\n ctx.fill();\n }\n paintSelection(s, v) {\n this.selection.style.left = `${s * this.width}px`;\n this.selection.style.top = `${this.height - v * this.height}px`;\n }\n onDidChangeColor() {\n if (this.monitor && this.monitor.isMonitoring()) {\n return;\n }\n this.paint();\n }\n}\nclass Strip extends Disposable {\n constructor(container, model) {\n super();\n this.model = model;\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this._onColorFlushed = new Emitter();\n this.onColorFlushed = this._onColorFlushed.event;\n this.domNode = dom.append(container, $('.strip'));\n this.overlay = dom.append(this.domNode, $('.overlay'));\n this.slider = dom.append(this.domNode, $('.slider'));\n this.slider.style.top = `0px`;\n this._register(dom.addDisposableGenericMouseDownListner(this.domNode, e => this.onMouseDown(e)));\n this.layout();\n }\n layout() {\n this.height = this.domNode.offsetHeight - this.slider.offsetHeight;\n const value = this.getValue(this.model.color);\n this.updateSliderPosition(value);\n }\n onMouseDown(e) {\n const monitor = this._register(new GlobalMouseMoveMonitor());\n const origin = dom.getDomNodePagePosition(this.domNode);\n this.domNode.classList.add('grabbing');\n if (e.target !== this.slider) {\n this.onDidChangeTop(e.offsetY);\n }\n monitor.startMonitoring(e.target, e.buttons, standardMouseMoveMerger, event => this.onDidChangeTop(event.posy - origin.top), () => null);\n const mouseUpListener = dom.addDisposableGenericMouseUpListner(document, () => {\n this._onColorFlushed.fire();\n mouseUpListener.dispose();\n monitor.stopMonitoring(true);\n this.domNode.classList.remove('grabbing');\n }, true);\n }\n onDidChangeTop(top) {\n const value = Math.max(0, Math.min(1, 1 - (top / this.height)));\n this.updateSliderPosition(value);\n this._onDidChange.fire(value);\n }\n updateSliderPosition(value) {\n this.slider.style.top = `${(1 - value) * this.height}px`;\n }\n}\nclass OpacityStrip extends Strip {\n constructor(container, model) {\n super(container, model);\n this.domNode.classList.add('opacity-strip');\n this._register(model.onDidChangeColor(this.onDidChangeColor, this));\n this.onDidChangeColor(this.model.color);\n }\n onDidChangeColor(color) {\n const { r, g, b } = color.rgba;\n const opaque = new Color(new RGBA(r, g, b, 1));\n const transparent = new Color(new RGBA(r, g, b, 0));\n this.overlay.style.background = `linear-gradient(to bottom, ${opaque} 0%, ${transparent} 100%)`;\n }\n getValue(color) {\n return color.hsva.a;\n }\n}\nclass HueStrip extends Strip {\n constructor(container, model) {\n super(container, model);\n this.domNode.classList.add('hue-strip');\n }\n getValue(color) {\n return 1 - (color.hsva.h / 360);\n }\n}\nexport class ColorPickerWidget extends Widget {\n constructor(container, model, pixelRatio, themeService) {\n super();\n this.model = model;\n this.pixelRatio = pixelRatio;\n this._register(onDidChangeZoomLevel(() => this.layout()));\n const element = $('.colorpicker-widget');\n container.appendChild(element);\n const header = new ColorPickerHeader(element, this.model, themeService);\n this.body = new ColorPickerBody(element, this.model, this.pixelRatio);\n this._register(header);\n this._register(this.body);\n }\n layout() {\n this.body.layout();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { RunOnceScheduler, createCancelablePromise } from '../../../base/common/async.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nexport class HoverOperation {\n constructor(computer, success, error, progress, hoverTime) {\n this._computer = computer;\n this._state = 0 /* IDLE */;\n this._hoverTime = hoverTime;\n this._firstWaitScheduler = new RunOnceScheduler(() => this._triggerAsyncComputation(), 0);\n this._secondWaitScheduler = new RunOnceScheduler(() => this._triggerSyncComputation(), 0);\n this._loadingMessageScheduler = new RunOnceScheduler(() => this._showLoadingMessage(), 0);\n this._asyncComputationPromise = null;\n this._asyncComputationPromiseDone = false;\n this._completeCallback = success;\n this._errorCallback = error;\n this._progressCallback = progress;\n }\n setHoverTime(hoverTime) {\n this._hoverTime = hoverTime;\n }\n _firstWaitTime() {\n return this._hoverTime / 2;\n }\n _secondWaitTime() {\n return this._hoverTime / 2;\n }\n _loadingMessageTime() {\n return 3 * this._hoverTime;\n }\n _triggerAsyncComputation() {\n this._state = 2 /* SECOND_WAIT */;\n this._secondWaitScheduler.schedule(this._secondWaitTime());\n if (this._computer.computeAsync) {\n this._asyncComputationPromiseDone = false;\n this._asyncComputationPromise = createCancelablePromise(token => this._computer.computeAsync(token));\n this._asyncComputationPromise.then((asyncResult) => {\n this._asyncComputationPromiseDone = true;\n this._withAsyncResult(asyncResult);\n }, (e) => this._onError(e));\n }\n else {\n this._asyncComputationPromiseDone = true;\n }\n }\n _triggerSyncComputation() {\n if (this._computer.computeSync) {\n this._computer.onResult(this._computer.computeSync(), true);\n }\n if (this._asyncComputationPromiseDone) {\n this._state = 0 /* IDLE */;\n this._onComplete(this._computer.getResult());\n }\n else {\n this._state = 3 /* WAITING_FOR_ASYNC_COMPUTATION */;\n this._onProgress(this._computer.getResult());\n }\n }\n _showLoadingMessage() {\n if (this._state === 3 /* WAITING_FOR_ASYNC_COMPUTATION */) {\n this._onProgress(this._computer.getResultWithLoadingMessage());\n }\n }\n _withAsyncResult(asyncResult) {\n if (asyncResult) {\n this._computer.onResult(asyncResult, false);\n }\n if (this._state === 3 /* WAITING_FOR_ASYNC_COMPUTATION */) {\n this._state = 0 /* IDLE */;\n this._onComplete(this._computer.getResult());\n }\n }\n _onComplete(value) {\n this._completeCallback(value);\n }\n _onError(error) {\n if (this._errorCallback) {\n this._errorCallback(error);\n }\n else {\n onUnexpectedError(error);\n }\n }\n _onProgress(value) {\n this._progressCallback(value);\n }\n start(mode) {\n if (mode === 0 /* Delayed */) {\n if (this._state === 0 /* IDLE */) {\n this._state = 1 /* FIRST_WAIT */;\n this._firstWaitScheduler.schedule(this._firstWaitTime());\n this._loadingMessageScheduler.schedule(this._loadingMessageTime());\n }\n }\n else {\n switch (this._state) {\n case 0 /* IDLE */:\n this._triggerAsyncComputation();\n this._secondWaitScheduler.cancel();\n this._triggerSyncComputation();\n break;\n case 2 /* SECOND_WAIT */:\n this._secondWaitScheduler.cancel();\n this._triggerSyncComputation();\n break;\n }\n }\n }\n cancel() {\n this._loadingMessageScheduler.cancel();\n if (this._state === 1 /* FIRST_WAIT */) {\n this._firstWaitScheduler.cancel();\n }\n if (this._state === 2 /* SECOND_WAIT */) {\n this._secondWaitScheduler.cancel();\n if (this._asyncComputationPromise) {\n this._asyncComputationPromise.cancel();\n this._asyncComputationPromise = null;\n }\n }\n if (this._state === 3 /* WAITING_FOR_ASYNC_COMPUTATION */) {\n if (this._asyncComputationPromise) {\n this._asyncComputationPromise.cancel();\n this._asyncComputationPromise = null;\n }\n }\n this._state = 0 /* IDLE */;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './hover.css';\nimport * as dom from '../../dom.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { DomScrollableElement } from '../scrollbar/scrollableElement.js';\nconst $ = dom.$;\nexport class HoverWidget extends Disposable {\n constructor() {\n super();\n this.containerDomNode = document.createElement('div');\n this.containerDomNode.className = 'monaco-hover';\n this.containerDomNode.tabIndex = 0;\n this.containerDomNode.setAttribute('role', 'tooltip');\n this.contentsDomNode = document.createElement('div');\n this.contentsDomNode.className = 'monaco-hover-content';\n this._scrollbar = this._register(new DomScrollableElement(this.contentsDomNode, {\n consumeMouseWheelIfScrollbarIsNeeded: true\n }));\n this.containerDomNode.appendChild(this._scrollbar.getDomNode());\n }\n onContentsChanged() {\n this._scrollbar.scanDomNode();\n }\n}\nexport function renderHoverAction(parent, actionOptions, keybindingLabel) {\n const actionContainer = dom.append(parent, $('div.action-container'));\n const action = dom.append(actionContainer, $('a.action'));\n action.setAttribute('href', '#');\n action.setAttribute('role', 'button');\n if (actionOptions.iconClass) {\n dom.append(action, $(`span.icon.${actionOptions.iconClass}`));\n }\n const label = dom.append(action, $('span'));\n label.textContent = keybindingLabel ? `${actionOptions.label} (${keybindingLabel})` : actionOptions.label;\n return dom.addDisposableListener(actionContainer, dom.EventType.CLICK, e => {\n e.stopPropagation();\n e.preventDefault();\n actionOptions.run(actionContainer);\n });\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 *--------------------------------------------------------------------------------------------*/\nimport { URI } from './uri.js';\nimport { Schemas } from './network.js';\nimport { isWindows } from './platform.js';\nimport { basename } from './resources.js';\nimport { hasDriveLetter, isRootOrDriveLetter } from './extpath.js';\nexport function getBaseLabel(resource) {\n if (!resource) {\n return undefined;\n }\n if (typeof resource === 'string') {\n resource = URI.file(resource);\n }\n const base = basename(resource) || (resource.scheme === Schemas.file ? resource.fsPath : resource.path) /* can be empty string if '/' is passed in */;\n // convert c: => C:\n if (isWindows && isRootOrDriveLetter(base)) {\n return normalizeDriveLetter(base);\n }\n return base;\n}\nexport function normalizeDriveLetter(path) {\n if (hasDriveLetter(path)) {\n return path.charAt(0).toUpperCase() + path.slice(1);\n }\n return path;\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as objects from '../../../base/common/objects.js';\nimport { ICodeEditorService } from '../services/codeEditorService.js';\nimport { CodeEditorWidget } from './codeEditorWidget.js';\nimport { ICommandService } from '../../../platform/commands/common/commands.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nlet EmbeddedCodeEditorWidget = class EmbeddedCodeEditorWidget extends CodeEditorWidget {\n constructor(domElement, options, parentEditor, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService) {\n super(domElement, Object.assign(Object.assign({}, parentEditor.getRawOptions()), { overflowWidgetsDomNode: parentEditor.getOverflowWidgetsDomNode() }), {}, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService);\n this._parentEditor = parentEditor;\n this._overwriteOptions = options;\n // Overwrite parent's options\n super.updateOptions(this._overwriteOptions);\n this._register(parentEditor.onDidChangeConfiguration((e) => this._onParentConfigurationChanged(e)));\n }\n getParentEditor() {\n return this._parentEditor;\n }\n _onParentConfigurationChanged(e) {\n super.updateOptions(this._parentEditor.getRawOptions());\n super.updateOptions(this._overwriteOptions);\n }\n updateOptions(newOptions) {\n objects.mixin(this._overwriteOptions, newOptions, true);\n super.updateOptions(this._overwriteOptions);\n }\n};\nEmbeddedCodeEditorWidget = __decorate([\n __param(3, IInstantiationService),\n __param(4, ICodeEditorService),\n __param(5, ICommandService),\n __param(6, IContextKeyService),\n __param(7, IThemeService),\n __param(8, INotificationService),\n __param(9, IAccessibilityService)\n], EmbeddedCodeEditorWidget);\nexport { EmbeddedCodeEditorWidget };\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 *--------------------------------------------------------------------------------------------*/\nimport './zoneWidget.css';\nimport * as dom from '../../../base/browser/dom.js';\nimport { Sash } from '../../../base/browser/ui/sash/sash.js';\nimport { Color, RGBA } from '../../../base/common/color.js';\nimport { IdGenerator } from '../../../base/common/idGenerator.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport * as objects from '../../../base/common/objects.js';\nimport { Range } from '../../common/core/range.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nconst defaultColor = new Color(new RGBA(0, 122, 204));\nconst defaultOptions = {\n showArrow: true,\n showFrame: true,\n className: '',\n frameColor: defaultColor,\n arrowColor: defaultColor,\n keepEditorSelection: false\n};\nconst WIDGET_ID = 'vs.editor.contrib.zoneWidget';\nexport class ViewZoneDelegate {\n constructor(domNode, afterLineNumber, afterColumn, heightInLines, onDomNodeTop, onComputedHeight) {\n this.id = ''; // A valid zone id should be greater than 0\n this.domNode = domNode;\n this.afterLineNumber = afterLineNumber;\n this.afterColumn = afterColumn;\n this.heightInLines = heightInLines;\n this._onDomNodeTop = onDomNodeTop;\n this._onComputedHeight = onComputedHeight;\n }\n onDomNodeTop(top) {\n this._onDomNodeTop(top);\n }\n onComputedHeight(height) {\n this._onComputedHeight(height);\n }\n}\nexport class OverlayWidgetDelegate {\n constructor(id, domNode) {\n this._id = id;\n this._domNode = domNode;\n }\n getId() {\n return this._id;\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n return null;\n }\n}\nclass Arrow {\n constructor(_editor) {\n this._editor = _editor;\n this._ruleName = Arrow._IdGenerator.nextId();\n this._decorations = [];\n this._color = null;\n this._height = -1;\n //\n }\n dispose() {\n this.hide();\n dom.removeCSSRulesContainingSelector(this._ruleName);\n }\n set color(value) {\n if (this._color !== value) {\n this._color = value;\n this._updateStyle();\n }\n }\n set height(value) {\n if (this._height !== value) {\n this._height = value;\n this._updateStyle();\n }\n }\n _updateStyle() {\n dom.removeCSSRulesContainingSelector(this._ruleName);\n dom.createCSSRule(`.monaco-editor ${this._ruleName}`, `border-style: solid; border-color: transparent; border-bottom-color: ${this._color}; border-width: ${this._height}px; bottom: -${this._height}px; margin-left: -${this._height}px; `);\n }\n show(where) {\n this._decorations = this._editor.deltaDecorations(this._decorations, [{ range: Range.fromPositions(where), options: { className: this._ruleName, stickiness: 1 /* NeverGrowsWhenTypingAtEdges */ } }]);\n }\n hide() {\n this._editor.deltaDecorations(this._decorations, []);\n }\n}\nArrow._IdGenerator = new IdGenerator('.arrow-decoration-');\nexport class ZoneWidget {\n constructor(editor, options = {}) {\n this._arrow = null;\n this._overlayWidget = null;\n this._resizeSash = null;\n this._positionMarkerId = [];\n this._viewZone = null;\n this._disposables = new DisposableStore();\n this.container = null;\n this._isShowing = false;\n this.editor = editor;\n this.options = objects.deepClone(options);\n objects.mixin(this.options, defaultOptions, false);\n this.domNode = document.createElement('div');\n if (!this.options.isAccessible) {\n this.domNode.setAttribute('aria-hidden', 'true');\n this.domNode.setAttribute('role', 'presentation');\n }\n this._disposables.add(this.editor.onDidLayoutChange((info) => {\n const width = this._getWidth(info);\n this.domNode.style.width = width + 'px';\n this.domNode.style.left = this._getLeft(info) + 'px';\n this._onWidth(width);\n }));\n }\n dispose() {\n if (this._overlayWidget) {\n this.editor.removeOverlayWidget(this._overlayWidget);\n this._overlayWidget = null;\n }\n if (this._viewZone) {\n this.editor.changeViewZones(accessor => {\n if (this._viewZone) {\n accessor.removeZone(this._viewZone.id);\n }\n this._viewZone = null;\n });\n }\n this.editor.deltaDecorations(this._positionMarkerId, []);\n this._positionMarkerId = [];\n this._disposables.dispose();\n }\n create() {\n this.domNode.classList.add('zone-widget');\n if (this.options.className) {\n this.domNode.classList.add(this.options.className);\n }\n this.container = document.createElement('div');\n this.container.classList.add('zone-widget-container');\n this.domNode.appendChild(this.container);\n if (this.options.showArrow) {\n this._arrow = new Arrow(this.editor);\n this._disposables.add(this._arrow);\n }\n this._fillContainer(this.container);\n this._initSash();\n this._applyStyles();\n }\n style(styles) {\n if (styles.frameColor) {\n this.options.frameColor = styles.frameColor;\n }\n if (styles.arrowColor) {\n this.options.arrowColor = styles.arrowColor;\n }\n this._applyStyles();\n }\n _applyStyles() {\n if (this.container && this.options.frameColor) {\n let frameColor = this.options.frameColor.toString();\n this.container.style.borderTopColor = frameColor;\n this.container.style.borderBottomColor = frameColor;\n }\n if (this._arrow && this.options.arrowColor) {\n let arrowColor = this.options.arrowColor.toString();\n this._arrow.color = arrowColor;\n }\n }\n _getWidth(info) {\n return info.width - info.minimap.minimapWidth - info.verticalScrollbarWidth;\n }\n _getLeft(info) {\n // If minimap is to the left, we move beyond it\n if (info.minimap.minimapWidth > 0 && info.minimap.minimapLeft === 0) {\n return info.minimap.minimapWidth;\n }\n return 0;\n }\n _onViewZoneTop(top) {\n this.domNode.style.top = top + 'px';\n }\n _onViewZoneHeight(height) {\n this.domNode.style.height = `${height}px`;\n if (this.container) {\n let containerHeight = height - this._decoratingElementsHeight();\n this.container.style.height = `${containerHeight}px`;\n const layoutInfo = this.editor.getLayoutInfo();\n this._doLayout(containerHeight, this._getWidth(layoutInfo));\n }\n if (this._resizeSash) {\n this._resizeSash.layout();\n }\n }\n get position() {\n const [id] = this._positionMarkerId;\n if (!id) {\n return undefined;\n }\n const model = this.editor.getModel();\n if (!model) {\n return undefined;\n }\n const range = model.getDecorationRange(id);\n if (!range) {\n return undefined;\n }\n return range.getStartPosition();\n }\n show(rangeOrPos, heightInLines) {\n const range = Range.isIRange(rangeOrPos) ? Range.lift(rangeOrPos) : Range.fromPositions(rangeOrPos);\n this._isShowing = true;\n this._showImpl(range, heightInLines);\n this._isShowing = false;\n this._positionMarkerId = this.editor.deltaDecorations(this._positionMarkerId, [{ range, options: ModelDecorationOptions.EMPTY }]);\n }\n hide() {\n if (this._viewZone) {\n this.editor.changeViewZones(accessor => {\n if (this._viewZone) {\n accessor.removeZone(this._viewZone.id);\n }\n });\n this._viewZone = null;\n }\n if (this._overlayWidget) {\n this.editor.removeOverlayWidget(this._overlayWidget);\n this._overlayWidget = null;\n }\n if (this._arrow) {\n this._arrow.hide();\n }\n }\n _decoratingElementsHeight() {\n let lineHeight = this.editor.getOption(55 /* lineHeight */);\n let result = 0;\n if (this.options.showArrow) {\n let arrowHeight = Math.round(lineHeight / 3);\n result += 2 * arrowHeight;\n }\n if (this.options.showFrame) {\n let frameThickness = Math.round(lineHeight / 9);\n result += 2 * frameThickness;\n }\n return result;\n }\n _showImpl(where, heightInLines) {\n const position = where.getStartPosition();\n const layoutInfo = this.editor.getLayoutInfo();\n const width = this._getWidth(layoutInfo);\n this.domNode.style.width = `${width}px`;\n this.domNode.style.left = this._getLeft(layoutInfo) + 'px';\n // Render the widget as zone (rendering) and widget (lifecycle)\n const viewZoneDomNode = document.createElement('div');\n viewZoneDomNode.style.overflow = 'hidden';\n const lineHeight = this.editor.getOption(55 /* lineHeight */);\n // adjust heightInLines to viewport\n const maxHeightInLines = Math.max(12, (this.editor.getLayoutInfo().height / lineHeight) * 0.8);\n heightInLines = Math.min(heightInLines, maxHeightInLines);\n let arrowHeight = 0;\n let frameThickness = 0;\n // Render the arrow one 1/3 of an editor line height\n if (this._arrow && this.options.showArrow) {\n arrowHeight = Math.round(lineHeight / 3);\n this._arrow.height = arrowHeight;\n this._arrow.show(position);\n }\n // Render the frame as 1/9 of an editor line height\n if (this.options.showFrame) {\n frameThickness = Math.round(lineHeight / 9);\n }\n // insert zone widget\n this.editor.changeViewZones((accessor) => {\n if (this._viewZone) {\n accessor.removeZone(this._viewZone.id);\n }\n if (this._overlayWidget) {\n this.editor.removeOverlayWidget(this._overlayWidget);\n this._overlayWidget = null;\n }\n this.domNode.style.top = '-1000px';\n this._viewZone = new ViewZoneDelegate(viewZoneDomNode, position.lineNumber, position.column, heightInLines, (top) => this._onViewZoneTop(top), (height) => this._onViewZoneHeight(height));\n this._viewZone.id = accessor.addZone(this._viewZone);\n this._overlayWidget = new OverlayWidgetDelegate(WIDGET_ID + this._viewZone.id, this.domNode);\n this.editor.addOverlayWidget(this._overlayWidget);\n });\n if (this.container && this.options.showFrame) {\n const width = this.options.frameWidth ? this.options.frameWidth : frameThickness;\n this.container.style.borderTopWidth = width + 'px';\n this.container.style.borderBottomWidth = width + 'px';\n }\n let containerHeight = heightInLines * lineHeight - this._decoratingElementsHeight();\n if (this.container) {\n this.container.style.top = arrowHeight + 'px';\n this.container.style.height = containerHeight + 'px';\n this.container.style.overflow = 'hidden';\n }\n this._doLayout(containerHeight, width);\n if (!this.options.keepEditorSelection) {\n this.editor.setSelection(where);\n }\n const model = this.editor.getModel();\n if (model) {\n const revealLine = where.endLineNumber + 1;\n if (revealLine <= model.getLineCount()) {\n // reveal line below the zone widget\n this.revealLine(revealLine, false);\n }\n else {\n // reveal last line atop\n this.revealLine(model.getLineCount(), true);\n }\n }\n }\n revealLine(lineNumber, isLastLine) {\n if (isLastLine) {\n this.editor.revealLineInCenter(lineNumber, 0 /* Smooth */);\n }\n else {\n this.editor.revealLine(lineNumber, 0 /* Smooth */);\n }\n }\n setCssClass(className, classToReplace) {\n if (!this.container) {\n return;\n }\n if (classToReplace) {\n this.container.classList.remove(classToReplace);\n }\n this.container.classList.add(className);\n }\n _onWidth(widthInPixel) {\n // implement in subclass\n }\n _doLayout(heightInPixel, widthInPixel) {\n // implement in subclass\n }\n _relayout(newHeightInLines) {\n if (this._viewZone && this._viewZone.heightInLines !== newHeightInLines) {\n this.editor.changeViewZones(accessor => {\n if (this._viewZone) {\n this._viewZone.heightInLines = newHeightInLines;\n accessor.layoutZone(this._viewZone.id);\n }\n });\n }\n }\n // --- sash\n _initSash() {\n if (this._resizeSash) {\n return;\n }\n this._resizeSash = this._disposables.add(new Sash(this.domNode, this, { orientation: 1 /* HORIZONTAL */ }));\n if (!this.options.isResizeable) {\n this._resizeSash.hide();\n this._resizeSash.state = 0 /* Disabled */;\n }\n let data;\n this._disposables.add(this._resizeSash.onDidStart((e) => {\n if (this._viewZone) {\n data = {\n startY: e.startY,\n heightInLines: this._viewZone.heightInLines,\n };\n }\n }));\n this._disposables.add(this._resizeSash.onDidEnd(() => {\n data = undefined;\n }));\n this._disposables.add(this._resizeSash.onDidChange((evt) => {\n if (data) {\n let lineDelta = (evt.currentY - data.startY) / this.editor.getOption(55 /* lineHeight */);\n let roundedLineDelta = lineDelta < 0 ? Math.ceil(lineDelta) : Math.floor(lineDelta);\n let newHeightInLines = data.heightInLines + roundedLineDelta;\n if (newHeightInLines > 5 && newHeightInLines < 35) {\n this._relayout(newHeightInLines);\n }\n }\n }));\n }\n getHorizontalSashLeft() {\n return 0;\n }\n getHorizontalSashTop() {\n return (this.domNode.style.height === null ? 0 : parseInt(this.domNode.style.height)) - (this._decoratingElementsHeight() / 2);\n }\n getHorizontalSashWidth() {\n const layoutInfo = this.editor.getLayoutInfo();\n return layoutInfo.width - layoutInfo.minimap.minimapWidth;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './dropdown.css';\nimport { Gesture, EventType as GestureEventType } from '../../touch.js';\nimport { ActionRunner } from '../../../common/actions.js';\nimport { EventHelper, EventType, append, $, addDisposableListener } from '../../dom.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { Emitter } from '../../../common/event.js';\nexport class BaseDropdown extends ActionRunner {\n constructor(container, options) {\n super();\n this._onDidChangeVisibility = new Emitter();\n this.onDidChangeVisibility = this._onDidChangeVisibility.event;\n this._element = append(container, $('.monaco-dropdown'));\n this._label = append(this._element, $('.dropdown-label'));\n let labelRenderer = options.labelRenderer;\n if (!labelRenderer) {\n labelRenderer = (container) => {\n container.textContent = options.label || '';\n return null;\n };\n }\n for (const event of [EventType.CLICK, EventType.MOUSE_DOWN, GestureEventType.Tap]) {\n this._register(addDisposableListener(this.element, event, e => EventHelper.stop(e, true))); // prevent default click behaviour to trigger\n }\n for (const event of [EventType.MOUSE_DOWN, GestureEventType.Tap]) {\n this._register(addDisposableListener(this._label, event, e => {\n if (e instanceof MouseEvent && e.detail > 1) {\n return; // prevent multiple clicks to open multiple context menus (https://github.com/microsoft/vscode/issues/41363)\n }\n if (this.visible) {\n this.hide();\n }\n else {\n this.show();\n }\n }));\n }\n this._register(addDisposableListener(this._label, EventType.KEY_UP, e => {\n const event = new StandardKeyboardEvent(e);\n if (event.equals(3 /* Enter */) || event.equals(10 /* Space */)) {\n EventHelper.stop(e, true); // https://github.com/microsoft/vscode/issues/57997\n if (this.visible) {\n this.hide();\n }\n else {\n this.show();\n }\n }\n }));\n const cleanupFn = labelRenderer(this._label);\n if (cleanupFn) {\n this._register(cleanupFn);\n }\n this._register(Gesture.addTarget(this._label));\n }\n get element() {\n return this._element;\n }\n show() {\n if (!this.visible) {\n this.visible = true;\n this._onDidChangeVisibility.fire(true);\n }\n }\n hide() {\n if (this.visible) {\n this.visible = false;\n this._onDidChangeVisibility.fire(false);\n }\n }\n dispose() {\n super.dispose();\n this.hide();\n if (this.boxContainer) {\n this.boxContainer.remove();\n this.boxContainer = undefined;\n }\n if (this.contents) {\n this.contents.remove();\n this.contents = undefined;\n }\n if (this._label) {\n this._label.remove();\n this._label = undefined;\n }\n }\n}\nexport class DropdownMenu extends BaseDropdown {\n constructor(container, options) {\n super(container, options);\n this._actions = [];\n this._contextMenuProvider = options.contextMenuProvider;\n this.actions = options.actions || [];\n this.actionProvider = options.actionProvider;\n this.menuClassName = options.menuClassName || '';\n this.menuAsChild = !!options.menuAsChild;\n }\n set menuOptions(options) {\n this._menuOptions = options;\n }\n get menuOptions() {\n return this._menuOptions;\n }\n get actions() {\n if (this.actionProvider) {\n return this.actionProvider.getActions();\n }\n return this._actions;\n }\n set actions(actions) {\n this._actions = actions;\n }\n show() {\n super.show();\n this.element.classList.add('active');\n this._contextMenuProvider.showContextMenu({\n getAnchor: () => this.element,\n getActions: () => this.actions,\n getActionsContext: () => this.menuOptions ? this.menuOptions.context : null,\n getActionViewItem: action => this.menuOptions && this.menuOptions.actionViewItemProvider ? this.menuOptions.actionViewItemProvider(action) : undefined,\n getKeyBinding: action => this.menuOptions && this.menuOptions.getKeyBinding ? this.menuOptions.getKeyBinding(action) : undefined,\n getMenuClassName: () => this.menuClassName,\n onHide: () => this.onHide(),\n actionRunner: this.menuOptions ? this.menuOptions.actionRunner : undefined,\n anchorAlignment: this.menuOptions ? this.menuOptions.anchorAlignment : 0 /* LEFT */,\n domForShadowRoot: this.menuAsChild ? this.element : undefined\n });\n }\n hide() {\n super.hide();\n }\n onHide() {\n this.hide();\n this.element.classList.remove('active');\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './dropdown.css';\nimport { append, $ } from '../../dom.js';\nimport { Emitter } from '../../../common/event.js';\nimport { BaseActionViewItem } from '../actionbar/actionViewItems.js';\nimport { DropdownMenu } from './dropdown.js';\nexport class DropdownMenuActionViewItem extends BaseActionViewItem {\n constructor(action, menuActionsOrProvider, contextMenuProvider, options = Object.create(null)) {\n super(null, action, options);\n this.actionItem = null;\n this._onDidChangeVisibility = this._register(new Emitter());\n this.menuActionsOrProvider = menuActionsOrProvider;\n this.contextMenuProvider = contextMenuProvider;\n this.options = options;\n if (this.options.actionRunner) {\n this.actionRunner = this.options.actionRunner;\n }\n }\n render(container) {\n this.actionItem = container;\n const labelRenderer = (el) => {\n this.element = append(el, $('a.action-label'));\n let classNames = [];\n if (typeof this.options.classNames === 'string') {\n classNames = this.options.classNames.split(/\\s+/g).filter(s => !!s);\n }\n else if (this.options.classNames) {\n classNames = this.options.classNames;\n }\n // todo@aeschli: remove codicon, should come through `this.options.classNames`\n if (!classNames.find(c => c === 'icon')) {\n classNames.push('codicon');\n }\n this.element.classList.add(...classNames);\n this.element.setAttribute('role', 'button');\n this.element.setAttribute('aria-haspopup', 'true');\n this.element.setAttribute('aria-expanded', 'false');\n this.element.title = this._action.label || '';\n return null;\n };\n const isActionsArray = Array.isArray(this.menuActionsOrProvider);\n const options = {\n contextMenuProvider: this.contextMenuProvider,\n labelRenderer: labelRenderer,\n menuAsChild: this.options.menuAsChild,\n actions: isActionsArray ? this.menuActionsOrProvider : undefined,\n actionProvider: isActionsArray ? undefined : this.menuActionsOrProvider\n };\n this.dropdownMenu = this._register(new DropdownMenu(container, options));\n this._register(this.dropdownMenu.onDidChangeVisibility(visible => {\n var _a;\n (_a = this.element) === null || _a === void 0 ? void 0 : _a.setAttribute('aria-expanded', `${visible}`);\n this._onDidChangeVisibility.fire(visible);\n }));\n this.dropdownMenu.menuOptions = {\n actionViewItemProvider: this.options.actionViewItemProvider,\n actionRunner: this.actionRunner,\n getKeyBinding: this.options.keybindingProvider,\n context: this._context\n };\n if (this.options.anchorAlignmentProvider) {\n const that = this;\n this.dropdownMenu.menuOptions = Object.assign(Object.assign({}, this.dropdownMenu.menuOptions), { get anchorAlignment() {\n return that.options.anchorAlignmentProvider();\n } });\n }\n this.updateEnabled();\n }\n setActionContext(newContext) {\n super.setActionContext(newContext);\n if (this.dropdownMenu) {\n if (this.dropdownMenu.menuOptions) {\n this.dropdownMenu.menuOptions.context = newContext;\n }\n else {\n this.dropdownMenu.menuOptions = { context: newContext };\n }\n }\n }\n updateEnabled() {\n var _a, _b;\n const disabled = !this.getAction().enabled;\n (_a = this.actionItem) === null || _a === void 0 ? void 0 : _a.classList.toggle('disabled', disabled);\n (_b = this.element) === null || _b === void 0 ? void 0 : _b.classList.toggle('disabled', disabled);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport './menuEntryActionViewItem.css';\nimport { asCSSUrl, ModifierKeyEmitter } from '../../../base/browser/dom.js';\nimport { domEvent } from '../../../base/browser/event.js';\nimport { Separator, SubmenuAction } from '../../../base/common/actions.js';\nimport { toDisposable, MutableDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { localize } from '../../../nls.js';\nimport { MenuItemAction, SubmenuItemAction } from '../common/actions.js';\nimport { IContextMenuService } from '../../contextview/browser/contextView.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { UILabelProvider } from '../../../base/common/keybindingLabels.js';\nimport { INotificationService } from '../../notification/common/notification.js';\nimport { ThemeIcon } from '../../theme/common/themeService.js';\nimport { ActionViewItem } from '../../../base/browser/ui/actionbar/actionViewItems.js';\nimport { DropdownMenuActionViewItem } from '../../../base/browser/ui/dropdown/dropdownActionViewItem.js';\nimport { isWindows, isLinux, OS } from '../../../base/common/platform.js';\nexport function createAndFillInActionBarActions(menu, options, target, primaryGroup, primaryMaxCount, shouldInlineSubmenu) {\n const groups = menu.getActions(options);\n // Action bars handle alternative actions on their own so the alternative actions should be ignored\n fillInActions(groups, target, false, primaryGroup, primaryMaxCount, shouldInlineSubmenu);\n return asDisposable(groups);\n}\nfunction asDisposable(groups) {\n const disposables = new DisposableStore();\n for (const [, actions] of groups) {\n for (const action of actions) {\n disposables.add(action);\n }\n }\n return disposables;\n}\nfunction fillInActions(groups, target, useAlternativeActions, primaryGroup = 'navigation', primaryMaxCount = Number.MAX_SAFE_INTEGER, shouldInlineSubmenu = () => false) {\n let primaryBucket;\n let secondaryBucket;\n if (Array.isArray(target)) {\n primaryBucket = target;\n secondaryBucket = target;\n }\n else {\n primaryBucket = target.primary;\n secondaryBucket = target.secondary;\n }\n const submenuInfo = new Set();\n for (const [group, actions] of groups) {\n let target;\n if (group === primaryGroup) {\n target = primaryBucket;\n }\n else {\n target = secondaryBucket;\n if (target.length > 0) {\n target.push(new Separator());\n }\n }\n for (let action of actions) {\n if (useAlternativeActions) {\n action = action instanceof MenuItemAction && action.alt ? action.alt : action;\n }\n const newLen = target.push(action);\n // keep submenu info for later inlining\n if (action instanceof SubmenuAction) {\n submenuInfo.add({ group, action, index: newLen - 1 });\n }\n }\n }\n // ask the outside if submenu should be inlined or not. only ask when\n // there would be enough space\n for (const { group, action, index } of submenuInfo) {\n const target = group === primaryGroup ? primaryBucket : secondaryBucket;\n // inlining submenus with length 0 or 1 is easy,\n // larger submenus need to be checked with the overall limit\n const submenuActions = action.actions;\n if ((submenuActions.length <= 1 || target.length + submenuActions.length - 2 <= primaryMaxCount) && shouldInlineSubmenu(action, group, target.length)) {\n target.splice(index, 1, ...submenuActions);\n }\n }\n // overflow items from the primary group into the secondary bucket\n if (primaryBucket !== secondaryBucket && primaryBucket.length > primaryMaxCount) {\n const overflow = primaryBucket.splice(primaryMaxCount, primaryBucket.length - primaryMaxCount);\n secondaryBucket.unshift(...overflow, new Separator());\n }\n}\nlet MenuEntryActionViewItem = class MenuEntryActionViewItem extends ActionViewItem {\n constructor(_action, _keybindingService, _notificationService) {\n super(undefined, _action, { icon: !!(_action.class || _action.item.icon), label: !_action.class && !_action.item.icon });\n this._keybindingService = _keybindingService;\n this._notificationService = _notificationService;\n this._wantsAltCommand = false;\n this._itemClassDispose = this._register(new MutableDisposable());\n this._altKey = ModifierKeyEmitter.getInstance();\n }\n get _menuItemAction() {\n return this._action;\n }\n get _commandAction() {\n return this._wantsAltCommand && this._menuItemAction.alt || this._menuItemAction;\n }\n onClick(event) {\n event.preventDefault();\n event.stopPropagation();\n this.actionRunner\n .run(this._commandAction, this._context)\n .catch(err => this._notificationService.error(err));\n }\n render(container) {\n super.render(container);\n container.classList.add('menu-entry');\n this._updateItemClass(this._menuItemAction.item);\n let mouseOver = false;\n let alternativeKeyDown = this._altKey.keyStatus.altKey || ((isWindows || isLinux) && this._altKey.keyStatus.shiftKey);\n const updateAltState = () => {\n const wantsAltCommand = mouseOver && alternativeKeyDown;\n if (wantsAltCommand !== this._wantsAltCommand) {\n this._wantsAltCommand = wantsAltCommand;\n this.updateLabel();\n this.updateTooltip();\n this.updateClass();\n }\n };\n if (this._menuItemAction.alt) {\n this._register(this._altKey.event(value => {\n alternativeKeyDown = value.altKey || ((isWindows || isLinux) && value.shiftKey);\n updateAltState();\n }));\n }\n this._register(domEvent(container, 'mouseleave')(_ => {\n mouseOver = false;\n updateAltState();\n }));\n this._register(domEvent(container, 'mouseenter')(e => {\n mouseOver = true;\n updateAltState();\n }));\n }\n updateLabel() {\n if (this.options.label && this.label) {\n this.label.textContent = this._commandAction.label;\n }\n }\n updateTooltip() {\n if (this.label) {\n const keybinding = this._keybindingService.lookupKeybinding(this._commandAction.id);\n const keybindingLabel = keybinding && keybinding.getLabel();\n const tooltip = this._commandAction.tooltip || this._commandAction.label;\n let title = keybindingLabel\n ? localize('titleAndKb', \"{0} ({1})\", tooltip, keybindingLabel)\n : tooltip;\n if (!this._wantsAltCommand && this._menuItemAction.alt) {\n const altTooltip = this._menuItemAction.alt.tooltip || this._menuItemAction.alt.label;\n const altKeybinding = this._keybindingService.lookupKeybinding(this._menuItemAction.alt.id);\n const altKeybindingLabel = altKeybinding && altKeybinding.getLabel();\n const altTitleSection = altKeybindingLabel\n ? localize('titleAndKb', \"{0} ({1})\", altTooltip, altKeybindingLabel)\n : altTooltip;\n title += `\\n[${UILabelProvider.modifierLabels[OS].altKey}] ${altTitleSection}`;\n }\n this.label.title = title;\n }\n }\n updateClass() {\n if (this.options.icon) {\n if (this._commandAction !== this._menuItemAction) {\n if (this._menuItemAction.alt) {\n this._updateItemClass(this._menuItemAction.alt.item);\n }\n }\n else if (this._menuItemAction.alt) {\n this._updateItemClass(this._menuItemAction.item);\n }\n }\n }\n _updateItemClass(item) {\n var _a;\n this._itemClassDispose.value = undefined;\n const { element, label } = this;\n if (!element || !label) {\n return;\n }\n const icon = this._commandAction.checked && ((_a = item.toggled) === null || _a === void 0 ? void 0 : _a.icon) ? item.toggled.icon : item.icon;\n if (!icon) {\n return;\n }\n if (ThemeIcon.isThemeIcon(icon)) {\n // theme icons\n const iconClasses = ThemeIcon.asClassNameArray(icon);\n label.classList.add(...iconClasses);\n this._itemClassDispose.value = toDisposable(() => {\n label.classList.remove(...iconClasses);\n });\n }\n else {\n // icon path/url\n if (icon.light) {\n label.style.setProperty('--menu-entry-icon-light', asCSSUrl(icon.light));\n }\n if (icon.dark) {\n label.style.setProperty('--menu-entry-icon-dark', asCSSUrl(icon.dark));\n }\n label.classList.add('icon');\n this._itemClassDispose.value = toDisposable(() => {\n label.classList.remove('icon');\n label.style.removeProperty('--menu-entry-icon-light');\n label.style.removeProperty('--menu-entry-icon-dark');\n });\n }\n }\n};\nMenuEntryActionViewItem = __decorate([\n __param(1, IKeybindingService),\n __param(2, INotificationService)\n], MenuEntryActionViewItem);\nexport { MenuEntryActionViewItem };\nlet SubmenuEntryActionViewItem = class SubmenuEntryActionViewItem extends DropdownMenuActionViewItem {\n constructor(action, contextMenuService) {\n super(action, { getActions: () => action.actions }, contextMenuService, {\n menuAsChild: true,\n classNames: ThemeIcon.isThemeIcon(action.item.icon) ? ThemeIcon.asClassName(action.item.icon) : undefined,\n });\n }\n render(container) {\n super.render(container);\n if (this.element) {\n container.classList.add('menu-entry');\n const { icon } = this._action.item;\n if (icon && !ThemeIcon.isThemeIcon(icon)) {\n this.element.classList.add('icon');\n if (icon.light) {\n this.element.style.setProperty('--menu-entry-icon-light', asCSSUrl(icon.light));\n }\n if (icon.dark) {\n this.element.style.setProperty('--menu-entry-icon-dark', asCSSUrl(icon.dark));\n }\n }\n }\n }\n};\nSubmenuEntryActionViewItem = __decorate([\n __param(1, IContextMenuService)\n], SubmenuEntryActionViewItem);\nexport { SubmenuEntryActionViewItem };\n/**\n * Creates action view items for menu actions or submenu actions.\n */\nexport function createActionViewItem(instaService, action) {\n if (action instanceof MenuItemAction) {\n return instaService.createInstance(MenuEntryActionViewItem, action);\n }\n else if (action instanceof SubmenuItemAction) {\n return instaService.createInstance(SubmenuEntryActionViewItem, action);\n }\n else {\n return undefined;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport './media/peekViewWidget.css';\nimport * as dom from '../../../base/browser/dom.js';\nimport { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';\nimport { Action } from '../../../base/common/actions.js';\nimport { Color } from '../../../base/common/color.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport * as objects from '../../../base/common/objects.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { EmbeddedCodeEditorWidget } from '../../browser/widget/embeddedCodeEditorWidget.js';\nimport { ZoneWidget } from '../zoneWidget/zoneWidget.js';\nimport * as nls from '../../../nls.js';\nimport { RawContextKey, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { createDecorator, IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { registerColor, contrastBorder, activeContrastBorder } from '../../../platform/theme/common/colorRegistry.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { createActionViewItem } from '../../../platform/actions/browser/menuEntryActionViewItem.js';\nexport const IPeekViewService = createDecorator('IPeekViewService');\nregisterSingleton(IPeekViewService, class {\n constructor() {\n this._widgets = new Map();\n }\n addExclusiveWidget(editor, widget) {\n const existing = this._widgets.get(editor);\n if (existing) {\n existing.listener.dispose();\n existing.widget.dispose();\n }\n const remove = () => {\n const data = this._widgets.get(editor);\n if (data && data.widget === widget) {\n data.listener.dispose();\n this._widgets.delete(editor);\n }\n };\n this._widgets.set(editor, { widget, listener: widget.onDidClose(remove) });\n }\n});\nexport var PeekContext;\n(function (PeekContext) {\n PeekContext.inPeekEditor = new RawContextKey('inReferenceSearchEditor', true, nls.localize('inReferenceSearchEditor', \"Whether the current code editor is embedded inside peek\"));\n PeekContext.notInPeekEditor = PeekContext.inPeekEditor.toNegated();\n})(PeekContext || (PeekContext = {}));\nlet PeekContextController = class PeekContextController {\n constructor(editor, contextKeyService) {\n if (editor instanceof EmbeddedCodeEditorWidget) {\n PeekContext.inPeekEditor.bindTo(contextKeyService);\n }\n }\n dispose() { }\n};\nPeekContextController.ID = 'editor.contrib.referenceController';\nPeekContextController = __decorate([\n __param(1, IContextKeyService)\n], PeekContextController);\nregisterEditorContribution(PeekContextController.ID, PeekContextController);\nexport function getOuterEditor(accessor) {\n let editor = accessor.get(ICodeEditorService).getFocusedCodeEditor();\n if (editor instanceof EmbeddedCodeEditorWidget) {\n return editor.getParentEditor();\n }\n return editor;\n}\nconst defaultOptions = {\n headerBackgroundColor: Color.white,\n primaryHeadingColor: Color.fromHex('#333333'),\n secondaryHeadingColor: Color.fromHex('#6c6c6cb3')\n};\nlet PeekViewWidget = class PeekViewWidget extends ZoneWidget {\n constructor(editor, options, instantiationService) {\n super(editor, options);\n this.instantiationService = instantiationService;\n this._onDidClose = new Emitter();\n this.onDidClose = this._onDidClose.event;\n objects.mixin(this.options, defaultOptions, false);\n }\n dispose() {\n if (!this.disposed) {\n this.disposed = true; // prevent consumers who dispose on onDidClose from looping\n super.dispose();\n this._onDidClose.fire(this);\n }\n }\n style(styles) {\n let options = this.options;\n if (styles.headerBackgroundColor) {\n options.headerBackgroundColor = styles.headerBackgroundColor;\n }\n if (styles.primaryHeadingColor) {\n options.primaryHeadingColor = styles.primaryHeadingColor;\n }\n if (styles.secondaryHeadingColor) {\n options.secondaryHeadingColor = styles.secondaryHeadingColor;\n }\n super.style(styles);\n }\n _applyStyles() {\n super._applyStyles();\n let options = this.options;\n if (this._headElement && options.headerBackgroundColor) {\n this._headElement.style.backgroundColor = options.headerBackgroundColor.toString();\n }\n if (this._primaryHeading && options.primaryHeadingColor) {\n this._primaryHeading.style.color = options.primaryHeadingColor.toString();\n }\n if (this._secondaryHeading && options.secondaryHeadingColor) {\n this._secondaryHeading.style.color = options.secondaryHeadingColor.toString();\n }\n if (this._bodyElement && options.frameColor) {\n this._bodyElement.style.borderColor = options.frameColor.toString();\n }\n }\n _fillContainer(container) {\n this.setCssClass('peekview-widget');\n this._headElement = dom.$('.head');\n this._bodyElement = dom.$('.body');\n this._fillHead(this._headElement);\n this._fillBody(this._bodyElement);\n container.appendChild(this._headElement);\n container.appendChild(this._bodyElement);\n }\n _fillHead(container, noCloseAction) {\n const titleElement = dom.$('.peekview-title');\n dom.append(this._headElement, titleElement);\n dom.addStandardDisposableListener(titleElement, 'click', event => this._onTitleClick(event));\n this._fillTitleIcon(titleElement);\n this._primaryHeading = dom.$('span.filename');\n this._secondaryHeading = dom.$('span.dirname');\n this._metaHeading = dom.$('span.meta');\n dom.append(titleElement, this._primaryHeading, this._secondaryHeading, this._metaHeading);\n const actionsContainer = dom.$('.peekview-actions');\n dom.append(this._headElement, actionsContainer);\n const actionBarOptions = this._getActionBarOptions();\n this._actionbarWidget = new ActionBar(actionsContainer, actionBarOptions);\n this._disposables.add(this._actionbarWidget);\n if (!noCloseAction) {\n this._actionbarWidget.push(new Action('peekview.close', nls.localize('label.close', \"Close\"), Codicon.close.classNames, true, () => {\n this.dispose();\n return Promise.resolve();\n }), { label: false, icon: true });\n }\n }\n _fillTitleIcon(container) {\n }\n _getActionBarOptions() {\n return {\n actionViewItemProvider: createActionViewItem.bind(undefined, this.instantiationService),\n orientation: 0 /* HORIZONTAL */\n };\n }\n _onTitleClick(event) {\n // implement me\n }\n setTitle(primaryHeading, secondaryHeading) {\n if (this._primaryHeading && this._secondaryHeading) {\n this._primaryHeading.innerText = primaryHeading;\n this._primaryHeading.setAttribute('aria-label', primaryHeading);\n if (secondaryHeading) {\n this._secondaryHeading.innerText = secondaryHeading;\n }\n else {\n dom.clearNode(this._secondaryHeading);\n }\n }\n }\n setMetaTitle(value) {\n if (this._metaHeading) {\n if (value) {\n this._metaHeading.innerText = value;\n dom.show(this._metaHeading);\n }\n else {\n dom.hide(this._metaHeading);\n }\n }\n }\n _doLayout(heightInPixel, widthInPixel) {\n if (!this._isShowing && heightInPixel < 0) {\n // Looks like the view zone got folded away!\n this.dispose();\n return;\n }\n const headHeight = Math.ceil(this.editor.getOption(55 /* lineHeight */) * 1.2);\n const bodyHeight = Math.round(heightInPixel - (headHeight + 2 /* the border-top/bottom width*/));\n this._doLayoutHead(headHeight, widthInPixel);\n this._doLayoutBody(bodyHeight, widthInPixel);\n }\n _doLayoutHead(heightInPixel, widthInPixel) {\n if (this._headElement) {\n this._headElement.style.height = `${heightInPixel}px`;\n this._headElement.style.lineHeight = this._headElement.style.height;\n }\n }\n _doLayoutBody(heightInPixel, widthInPixel) {\n if (this._bodyElement) {\n this._bodyElement.style.height = `${heightInPixel}px`;\n }\n }\n};\nPeekViewWidget = __decorate([\n __param(2, IInstantiationService)\n], PeekViewWidget);\nexport { PeekViewWidget };\nexport const peekViewTitleBackground = registerColor('peekViewTitle.background', { dark: '#1E1E1E', light: '#FFFFFF', hc: '#0C141F' }, nls.localize('peekViewTitleBackground', 'Background color of the peek view title area.'));\nexport const peekViewTitleForeground = registerColor('peekViewTitleLabel.foreground', { dark: '#FFFFFF', light: '#333333', hc: '#FFFFFF' }, nls.localize('peekViewTitleForeground', 'Color of the peek view title.'));\nexport const peekViewTitleInfoForeground = registerColor('peekViewTitleDescription.foreground', { dark: '#ccccccb3', light: '#616161e6', hc: '#FFFFFF99' }, nls.localize('peekViewTitleInfoForeground', 'Color of the peek view title info.'));\nexport const peekViewBorder = registerColor('peekView.border', { dark: '#007acc', light: '#007acc', hc: contrastBorder }, nls.localize('peekViewBorder', 'Color of the peek view borders and arrow.'));\nexport const peekViewResultsBackground = registerColor('peekViewResult.background', { dark: '#252526', light: '#F3F3F3', hc: Color.black }, nls.localize('peekViewResultsBackground', 'Background color of the peek view result list.'));\nexport const peekViewResultsMatchForeground = registerColor('peekViewResult.lineForeground', { dark: '#bbbbbb', light: '#646465', hc: Color.white }, nls.localize('peekViewResultsMatchForeground', 'Foreground color for line nodes in the peek view result list.'));\nexport const peekViewResultsFileForeground = registerColor('peekViewResult.fileForeground', { dark: Color.white, light: '#1E1E1E', hc: Color.white }, nls.localize('peekViewResultsFileForeground', 'Foreground color for file nodes in the peek view result list.'));\nexport const peekViewResultsSelectionBackground = registerColor('peekViewResult.selectionBackground', { dark: '#3399ff33', light: '#3399ff33', hc: null }, nls.localize('peekViewResultsSelectionBackground', 'Background color of the selected entry in the peek view result list.'));\nexport const peekViewResultsSelectionForeground = registerColor('peekViewResult.selectionForeground', { dark: Color.white, light: '#6C6C6C', hc: Color.white }, nls.localize('peekViewResultsSelectionForeground', 'Foreground color of the selected entry in the peek view result list.'));\nexport const peekViewEditorBackground = registerColor('peekViewEditor.background', { dark: '#001F33', light: '#F2F8FC', hc: Color.black }, nls.localize('peekViewEditorBackground', 'Background color of the peek view editor.'));\nexport const peekViewEditorGutterBackground = registerColor('peekViewEditorGutter.background', { dark: peekViewEditorBackground, light: peekViewEditorBackground, hc: peekViewEditorBackground }, nls.localize('peekViewEditorGutterBackground', 'Background color of the gutter in the peek view editor.'));\nexport const peekViewResultsMatchHighlight = registerColor('peekViewResult.matchHighlightBackground', { dark: '#ea5c004d', light: '#ea5c004d', hc: null }, nls.localize('peekViewResultsMatchHighlight', 'Match highlight color in the peek view result list.'));\nexport const peekViewEditorMatchHighlight = registerColor('peekViewEditor.matchHighlightBackground', { dark: '#ff8f0099', light: '#f5d802de', hc: null }, nls.localize('peekViewEditorMatchHighlight', 'Match highlight color in the peek view editor.'));\nexport const peekViewEditorMatchHighlightBorder = registerColor('peekViewEditor.matchHighlightBorder', { dark: null, light: null, hc: activeContrastBorder }, nls.localize('peekViewEditorMatchHighlightBorder', 'Match highlight border in the peek view editor.'));\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 *--------------------------------------------------------------------------------------------*/\nimport Severity from '../../../base/common/severity.js';\nimport { registerThemingParticipant } from '../../theme/common/themeService.js';\nimport { problemsErrorIconForeground, problemsInfoIconForeground, problemsWarningIconForeground } from '../../theme/common/colorRegistry.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nexport var SeverityIcon;\n(function (SeverityIcon) {\n function className(severity) {\n switch (severity) {\n case Severity.Ignore:\n return 'severity-ignore ' + Codicon.info.classNames;\n case Severity.Info:\n return Codicon.info.classNames;\n case Severity.Warning:\n return Codicon.warning.classNames;\n case Severity.Error:\n return Codicon.error.classNames;\n default:\n return '';\n }\n }\n SeverityIcon.className = className;\n})(SeverityIcon || (SeverityIcon = {}));\nregisterThemingParticipant((theme, collector) => {\n const errorIconForeground = theme.getColor(problemsErrorIconForeground);\n if (errorIconForeground) {\n const errorCodiconSelector = Codicon.error.cssSelector;\n collector.addRule(`\n\t\t\t.monaco-editor .zone-widget ${errorCodiconSelector},\n\t\t\t.markers-panel .marker-icon${errorCodiconSelector},\n\t\t\t.extensions-viewlet > .extensions ${errorCodiconSelector} {\n\t\t\t\tcolor: ${errorIconForeground};\n\t\t\t}\n\t\t`);\n }\n const warningIconForeground = theme.getColor(problemsWarningIconForeground);\n if (warningIconForeground) {\n const warningCodiconSelector = Codicon.warning.cssSelector;\n collector.addRule(`\n\t\t\t.monaco-editor .zone-widget ${warningCodiconSelector},\n\t\t\t.markers-panel .marker-icon${warningCodiconSelector},\n\t\t\t.extensions-viewlet > .extensions ${warningCodiconSelector},\n\t\t\t.extension-editor ${warningCodiconSelector} {\n\t\t\t\tcolor: ${warningIconForeground};\n\t\t\t}\n\t\t`);\n }\n const infoIconForeground = theme.getColor(problemsInfoIconForeground);\n if (infoIconForeground) {\n const infoCodiconSelector = Codicon.info.cssSelector;\n collector.addRule(`\n\t\t\t.monaco-editor .zone-widget ${infoCodiconSelector},\n\t\t\t.markers-panel .marker-icon${infoCodiconSelector},\n\t\t\t.extensions-viewlet > .extensions ${infoCodiconSelector},\n\t\t\t.extension-editor ${infoCodiconSelector} {\n\t\t\t\tcolor: ${infoIconForeground};\n\t\t\t}\n\t\t`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport './media/gotoErrorWidget.css';\nimport * as nls from '../../../nls.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { dispose, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { MarkerSeverity } from '../../../platform/markers/common/markers.js';\nimport { Range } from '../../common/core/range.js';\nimport { registerColor, oneOf, textLinkForeground, editorErrorForeground, editorErrorBorder, editorWarningForeground, editorWarningBorder, editorInfoForeground, editorInfoBorder } from '../../../platform/theme/common/colorRegistry.js';\nimport { IThemeService, registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { Color } from '../../../base/common/color.js';\nimport { ScrollableElement } from '../../../base/browser/ui/scrollbar/scrollableElement.js';\nimport { getBaseLabel } from '../../../base/common/labels.js';\nimport { isNonEmptyArray } from '../../../base/common/arrays.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { PeekViewWidget, peekViewTitleForeground, peekViewTitleInfoForeground } from '../peekView/peekView.js';\nimport { basename } from '../../../base/common/resources.js';\nimport { SeverityIcon } from '../../../platform/severityIcon/common/severityIcon.js';\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\nimport { MenuId, IMenuService } from '../../../platform/actions/common/actions.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { createAndFillInActionBarActions } from '../../../platform/actions/browser/menuEntryActionViewItem.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { splitLines } from '../../../base/common/strings.js';\nimport { ILabelService } from '../../../platform/label/common/label.js';\nclass MessageWidget {\n constructor(parent, editor, onRelatedInformation, _openerService, _labelService) {\n this._openerService = _openerService;\n this._labelService = _labelService;\n this._lines = 0;\n this._longestLineLength = 0;\n this._relatedDiagnostics = new WeakMap();\n this._disposables = new DisposableStore();\n this._editor = editor;\n const domNode = document.createElement('div');\n domNode.className = 'descriptioncontainer';\n this._messageBlock = document.createElement('div');\n this._messageBlock.classList.add('message');\n this._messageBlock.setAttribute('aria-live', 'assertive');\n this._messageBlock.setAttribute('role', 'alert');\n domNode.appendChild(this._messageBlock);\n this._relatedBlock = document.createElement('div');\n domNode.appendChild(this._relatedBlock);\n this._disposables.add(dom.addStandardDisposableListener(this._relatedBlock, 'click', event => {\n event.preventDefault();\n const related = this._relatedDiagnostics.get(event.target);\n if (related) {\n onRelatedInformation(related);\n }\n }));\n this._scrollable = new ScrollableElement(domNode, {\n horizontal: 1 /* Auto */,\n vertical: 1 /* Auto */,\n useShadows: false,\n horizontalScrollbarSize: 3,\n verticalScrollbarSize: 3\n });\n parent.appendChild(this._scrollable.getDomNode());\n this._disposables.add(this._scrollable.onScroll(e => {\n domNode.style.left = `-${e.scrollLeft}px`;\n domNode.style.top = `-${e.scrollTop}px`;\n }));\n this._disposables.add(this._scrollable);\n }\n dispose() {\n dispose(this._disposables);\n }\n update(marker) {\n const { source, message, relatedInformation, code } = marker;\n let sourceAndCodeLength = ((source === null || source === void 0 ? void 0 : source.length) || 0) + '()'.length;\n if (code) {\n if (typeof code === 'string') {\n sourceAndCodeLength += code.length;\n }\n else {\n sourceAndCodeLength += code.value.length;\n }\n }\n const lines = splitLines(message);\n this._lines = lines.length;\n this._longestLineLength = 0;\n for (const line of lines) {\n this._longestLineLength = Math.max(line.length + sourceAndCodeLength, this._longestLineLength);\n }\n dom.clearNode(this._messageBlock);\n this._messageBlock.setAttribute('aria-label', this.getAriaLabel(marker));\n this._editor.applyFontInfo(this._messageBlock);\n let lastLineElement = this._messageBlock;\n for (const line of lines) {\n lastLineElement = document.createElement('div');\n lastLineElement.innerText = line;\n if (line === '') {\n lastLineElement.style.height = this._messageBlock.style.lineHeight;\n }\n this._messageBlock.appendChild(lastLineElement);\n }\n if (source || code) {\n const detailsElement = document.createElement('span');\n detailsElement.classList.add('details');\n lastLineElement.appendChild(detailsElement);\n if (source) {\n const sourceElement = document.createElement('span');\n sourceElement.innerText = source;\n sourceElement.classList.add('source');\n detailsElement.appendChild(sourceElement);\n }\n if (code) {\n if (typeof code === 'string') {\n const codeElement = document.createElement('span');\n codeElement.innerText = `(${code})`;\n codeElement.classList.add('code');\n detailsElement.appendChild(codeElement);\n }\n else {\n this._codeLink = dom.$('a.code-link');\n this._codeLink.setAttribute('href', `${code.target.toString()}`);\n this._codeLink.onclick = (e) => {\n this._openerService.open(code.target, { allowCommands: true });\n e.preventDefault();\n e.stopPropagation();\n };\n const codeElement = dom.append(this._codeLink, dom.$('span'));\n codeElement.innerText = code.value;\n detailsElement.appendChild(this._codeLink);\n }\n }\n }\n dom.clearNode(this._relatedBlock);\n this._editor.applyFontInfo(this._relatedBlock);\n if (isNonEmptyArray(relatedInformation)) {\n const relatedInformationNode = this._relatedBlock.appendChild(document.createElement('div'));\n relatedInformationNode.style.paddingTop = `${Math.floor(this._editor.getOption(55 /* lineHeight */) * 0.66)}px`;\n this._lines += 1;\n for (const related of relatedInformation) {\n let container = document.createElement('div');\n let relatedResource = document.createElement('a');\n relatedResource.classList.add('filename');\n relatedResource.innerText = `${getBaseLabel(related.resource)}(${related.startLineNumber}, ${related.startColumn}): `;\n relatedResource.title = this._labelService.getUriLabel(related.resource);\n this._relatedDiagnostics.set(relatedResource, related);\n let relatedMessage = document.createElement('span');\n relatedMessage.innerText = related.message;\n container.appendChild(relatedResource);\n container.appendChild(relatedMessage);\n this._lines += 1;\n relatedInformationNode.appendChild(container);\n }\n }\n const fontInfo = this._editor.getOption(40 /* fontInfo */);\n const scrollWidth = Math.ceil(fontInfo.typicalFullwidthCharacterWidth * this._longestLineLength * 0.75);\n const scrollHeight = fontInfo.lineHeight * this._lines;\n this._scrollable.setScrollDimensions({ scrollWidth, scrollHeight });\n }\n layout(height, width) {\n this._scrollable.getDomNode().style.height = `${height}px`;\n this._scrollable.getDomNode().style.width = `${width}px`;\n this._scrollable.setScrollDimensions({ width, height });\n }\n getHeightInLines() {\n return Math.min(17, this._lines);\n }\n getAriaLabel(marker) {\n let severityLabel = '';\n switch (marker.severity) {\n case MarkerSeverity.Error:\n severityLabel = nls.localize('Error', \"Error\");\n break;\n case MarkerSeverity.Warning:\n severityLabel = nls.localize('Warning', \"Warning\");\n break;\n case MarkerSeverity.Info:\n severityLabel = nls.localize('Info', \"Info\");\n break;\n case MarkerSeverity.Hint:\n severityLabel = nls.localize('Hint', \"Hint\");\n break;\n }\n let ariaLabel = nls.localize('marker aria', \"{0} at {1}. \", severityLabel, marker.startLineNumber + ':' + marker.startColumn);\n const model = this._editor.getModel();\n if (model && (marker.startLineNumber <= model.getLineCount()) && (marker.startLineNumber >= 1)) {\n const lineContent = model.getLineContent(marker.startLineNumber);\n ariaLabel = `${lineContent}, ${ariaLabel}`;\n }\n return ariaLabel;\n }\n}\nlet MarkerNavigationWidget = class MarkerNavigationWidget extends PeekViewWidget {\n constructor(editor, _themeService, _openerService, _menuService, instantiationService, _contextKeyService, _labelService) {\n super(editor, { showArrow: true, showFrame: true, isAccessible: true }, instantiationService);\n this._themeService = _themeService;\n this._openerService = _openerService;\n this._menuService = _menuService;\n this._contextKeyService = _contextKeyService;\n this._labelService = _labelService;\n this._callOnDispose = new DisposableStore();\n this._onDidSelectRelatedInformation = new Emitter();\n this.onDidSelectRelatedInformation = this._onDidSelectRelatedInformation.event;\n this._severity = MarkerSeverity.Warning;\n this._backgroundColor = Color.white;\n this._applyTheme(_themeService.getColorTheme());\n this._callOnDispose.add(_themeService.onDidColorThemeChange(this._applyTheme.bind(this)));\n this.create();\n }\n _applyTheme(theme) {\n this._backgroundColor = theme.getColor(editorMarkerNavigationBackground);\n let colorId = editorMarkerNavigationError;\n if (this._severity === MarkerSeverity.Warning) {\n colorId = editorMarkerNavigationWarning;\n }\n else if (this._severity === MarkerSeverity.Info) {\n colorId = editorMarkerNavigationInfo;\n }\n const frameColor = theme.getColor(colorId);\n this.style({\n arrowColor: frameColor,\n frameColor: frameColor,\n headerBackgroundColor: this._backgroundColor,\n primaryHeadingColor: theme.getColor(peekViewTitleForeground),\n secondaryHeadingColor: theme.getColor(peekViewTitleInfoForeground)\n }); // style() will trigger _applyStyles\n }\n _applyStyles() {\n if (this._parentContainer) {\n this._parentContainer.style.backgroundColor = this._backgroundColor ? this._backgroundColor.toString() : '';\n }\n super._applyStyles();\n }\n dispose() {\n this._callOnDispose.dispose();\n super.dispose();\n }\n _fillHead(container) {\n super._fillHead(container);\n this._disposables.add(this._actionbarWidget.actionRunner.onBeforeRun(e => this.editor.focus()));\n const actions = [];\n const menu = this._menuService.createMenu(MarkerNavigationWidget.TitleMenu, this._contextKeyService);\n createAndFillInActionBarActions(menu, undefined, actions);\n this._actionbarWidget.push(actions, { label: false, icon: true, index: 0 });\n menu.dispose();\n }\n _fillTitleIcon(container) {\n this._icon = dom.append(container, dom.$(''));\n }\n _fillBody(container) {\n this._parentContainer = container;\n container.classList.add('marker-widget');\n this._parentContainer.tabIndex = 0;\n this._parentContainer.setAttribute('role', 'tooltip');\n this._container = document.createElement('div');\n container.appendChild(this._container);\n this._message = new MessageWidget(this._container, this.editor, related => this._onDidSelectRelatedInformation.fire(related), this._openerService, this._labelService);\n this._disposables.add(this._message);\n }\n show() {\n throw new Error('call showAtMarker');\n }\n showAtMarker(marker, markerIdx, markerCount) {\n // update:\n // * title\n // * message\n this._container.classList.remove('stale');\n this._message.update(marker);\n // update frame color (only applied on 'show')\n this._severity = marker.severity;\n this._applyTheme(this._themeService.getColorTheme());\n // show\n let range = Range.lift(marker);\n const editorPosition = this.editor.getPosition();\n let position = editorPosition && range.containsPosition(editorPosition) ? editorPosition : range.getStartPosition();\n super.show(position, this.computeRequiredHeight());\n const model = this.editor.getModel();\n if (model) {\n const detail = markerCount > 1\n ? nls.localize('problems', \"{0} of {1} problems\", markerIdx, markerCount)\n : nls.localize('change', \"{0} of {1} problem\", markerIdx, markerCount);\n this.setTitle(basename(model.uri), detail);\n }\n this._icon.className = `codicon ${SeverityIcon.className(MarkerSeverity.toSeverity(this._severity))}`;\n this.editor.revealPositionNearTop(position, 0 /* Smooth */);\n this.editor.focus();\n }\n updateMarker(marker) {\n this._container.classList.remove('stale');\n this._message.update(marker);\n }\n showStale() {\n this._container.classList.add('stale');\n this._relayout();\n }\n _doLayoutBody(heightInPixel, widthInPixel) {\n super._doLayoutBody(heightInPixel, widthInPixel);\n this._heightInPixel = heightInPixel;\n this._message.layout(heightInPixel, widthInPixel);\n this._container.style.height = `${heightInPixel}px`;\n }\n _onWidth(widthInPixel) {\n this._message.layout(this._heightInPixel, widthInPixel);\n }\n _relayout() {\n super._relayout(this.computeRequiredHeight());\n }\n computeRequiredHeight() {\n return 3 + this._message.getHeightInLines();\n }\n};\nMarkerNavigationWidget.TitleMenu = new MenuId('gotoErrorTitleMenu');\nMarkerNavigationWidget = __decorate([\n __param(1, IThemeService),\n __param(2, IOpenerService),\n __param(3, IMenuService),\n __param(4, IInstantiationService),\n __param(5, IContextKeyService),\n __param(6, ILabelService)\n], MarkerNavigationWidget);\nexport { MarkerNavigationWidget };\n// theming\nlet errorDefault = oneOf(editorErrorForeground, editorErrorBorder);\nlet warningDefault = oneOf(editorWarningForeground, editorWarningBorder);\nlet infoDefault = oneOf(editorInfoForeground, editorInfoBorder);\nexport const editorMarkerNavigationError = registerColor('editorMarkerNavigationError.background', { dark: errorDefault, light: errorDefault, hc: errorDefault }, nls.localize('editorMarkerNavigationError', 'Editor marker navigation widget error color.'));\nexport const editorMarkerNavigationWarning = registerColor('editorMarkerNavigationWarning.background', { dark: warningDefault, light: warningDefault, hc: warningDefault }, nls.localize('editorMarkerNavigationWarning', 'Editor marker navigation widget warning color.'));\nexport const editorMarkerNavigationInfo = registerColor('editorMarkerNavigationInfo.background', { dark: infoDefault, light: infoDefault, hc: infoDefault }, nls.localize('editorMarkerNavigationInfo', 'Editor marker navigation widget info color.'));\nexport const editorMarkerNavigationBackground = registerColor('editorMarkerNavigation.background', { dark: '#2D2D30', light: Color.white, hc: '#0C141F' }, nls.localize('editorMarkerNavigationBackground', 'Editor marker navigation widget background.'));\nregisterThemingParticipant((theme, collector) => {\n const linkFg = theme.getColor(textLinkForeground);\n if (linkFg) {\n collector.addRule(`.monaco-editor .marker-widget a { color: ${linkFg}; }`);\n collector.addRule(`.monaco-editor .marker-widget a.code-link span:hover { color: ${linkFg}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { IMarkerService, MarkerSeverity } from '../../../platform/markers/common/markers.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { Range } from '../../common/core/range.js';\nimport { compare } from '../../../base/common/strings.js';\nimport { binarySearch } from '../../../base/common/arrays.js';\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nexport class MarkerCoordinate {\n constructor(marker, index, total) {\n this.marker = marker;\n this.index = index;\n this.total = total;\n }\n}\nlet MarkerList = class MarkerList {\n constructor(resourceFilter, _markerService) {\n this._markerService = _markerService;\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this._dispoables = new DisposableStore();\n this._markers = [];\n this._nextIdx = -1;\n if (URI.isUri(resourceFilter)) {\n this._resourceFilter = uri => uri.toString() === resourceFilter.toString();\n }\n else if (resourceFilter) {\n this._resourceFilter = resourceFilter;\n }\n const updateMarker = () => {\n this._markers = this._markerService.read({\n resource: URI.isUri(resourceFilter) ? resourceFilter : undefined,\n severities: MarkerSeverity.Error | MarkerSeverity.Warning | MarkerSeverity.Info\n });\n if (typeof resourceFilter === 'function') {\n this._markers = this._markers.filter(m => this._resourceFilter(m.resource));\n }\n this._markers.sort(MarkerList._compareMarker);\n };\n updateMarker();\n this._dispoables.add(_markerService.onMarkerChanged(uris => {\n if (!this._resourceFilter || uris.some(uri => this._resourceFilter(uri))) {\n updateMarker();\n this._nextIdx = -1;\n this._onDidChange.fire();\n }\n }));\n }\n dispose() {\n this._dispoables.dispose();\n this._onDidChange.dispose();\n }\n matches(uri) {\n if (!this._resourceFilter && !uri) {\n return true;\n }\n if (!this._resourceFilter || !uri) {\n return false;\n }\n return this._resourceFilter(uri);\n }\n get selected() {\n const marker = this._markers[this._nextIdx];\n return marker && new MarkerCoordinate(marker, this._nextIdx + 1, this._markers.length);\n }\n _initIdx(model, position, fwd) {\n let found = false;\n let idx = this._markers.findIndex(marker => marker.resource.toString() === model.uri.toString());\n if (idx < 0) {\n idx = binarySearch(this._markers, { resource: model.uri }, (a, b) => compare(a.resource.toString(), b.resource.toString()));\n if (idx < 0) {\n idx = ~idx;\n }\n }\n for (let i = idx; i < this._markers.length; i++) {\n let range = Range.lift(this._markers[i]);\n if (range.isEmpty()) {\n const word = model.getWordAtPosition(range.getStartPosition());\n if (word) {\n range = new Range(range.startLineNumber, word.startColumn, range.startLineNumber, word.endColumn);\n }\n }\n if (position && (range.containsPosition(position) || position.isBeforeOrEqual(range.getStartPosition()))) {\n this._nextIdx = i;\n found = true;\n break;\n }\n if (this._markers[i].resource.toString() !== model.uri.toString()) {\n break;\n }\n }\n if (!found) {\n // after the last change\n this._nextIdx = fwd ? 0 : this._markers.length - 1;\n }\n if (this._nextIdx < 0) {\n this._nextIdx = this._markers.length - 1;\n }\n }\n resetIndex() {\n this._nextIdx = -1;\n }\n move(fwd, model, position) {\n if (this._markers.length === 0) {\n return false;\n }\n let oldIdx = this._nextIdx;\n if (this._nextIdx === -1) {\n this._initIdx(model, position, fwd);\n }\n else if (fwd) {\n this._nextIdx = (this._nextIdx + 1) % this._markers.length;\n }\n else if (!fwd) {\n this._nextIdx = (this._nextIdx - 1 + this._markers.length) % this._markers.length;\n }\n if (oldIdx !== this._nextIdx) {\n return true;\n }\n return false;\n }\n find(uri, position) {\n let idx = this._markers.findIndex(marker => marker.resource.toString() === uri.toString());\n if (idx < 0) {\n return undefined;\n }\n for (; idx < this._markers.length; idx++) {\n if (Range.containsPosition(this._markers[idx], position)) {\n return new MarkerCoordinate(this._markers[idx], idx + 1, this._markers.length);\n }\n }\n return undefined;\n }\n static _compareMarker(a, b) {\n let res = compare(a.resource.toString(), b.resource.toString());\n if (res === 0) {\n res = MarkerSeverity.compare(a.severity, b.severity);\n }\n if (res === 0) {\n res = Range.compareRangesUsingStarts(a, b);\n }\n return res;\n }\n};\nMarkerList = __decorate([\n __param(1, IMarkerService)\n], MarkerList);\nexport { MarkerList };\nexport const IMarkerNavigationService = createDecorator('IMarkerNavigationService');\nlet MarkerNavigationService = class MarkerNavigationService {\n constructor(_markerService) {\n this._markerService = _markerService;\n this._provider = new LinkedList();\n }\n getMarkerList(resource) {\n for (let provider of this._provider) {\n const result = provider.getMarkerList(resource);\n if (result) {\n return result;\n }\n }\n // default\n return new MarkerList(resource, this._markerService);\n }\n};\nMarkerNavigationService = __decorate([\n __param(0, IMarkerService)\n], MarkerNavigationService);\nregisterSingleton(IMarkerNavigationService, MarkerNavigationService, true);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../../nls.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { RawContextKey, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { registerEditorAction, registerEditorContribution, EditorAction, EditorCommand, registerEditorCommand } from '../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { MarkerNavigationWidget } from './gotoErrorWidget.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { IMarkerNavigationService } from './markerNavigationService.js';\nimport { registerIcon } from '../../../platform/theme/common/iconRegistry.js';\nlet MarkerController = class MarkerController {\n constructor(editor, _markerNavigationService, _contextKeyService, _editorService, _instantiationService) {\n this._markerNavigationService = _markerNavigationService;\n this._contextKeyService = _contextKeyService;\n this._editorService = _editorService;\n this._instantiationService = _instantiationService;\n this._sessionDispoables = new DisposableStore();\n this._editor = editor;\n this._widgetVisible = CONTEXT_MARKERS_NAVIGATION_VISIBLE.bindTo(this._contextKeyService);\n }\n static get(editor) {\n return editor.getContribution(MarkerController.ID);\n }\n dispose() {\n this._cleanUp();\n this._sessionDispoables.dispose();\n }\n _cleanUp() {\n this._widgetVisible.reset();\n this._sessionDispoables.clear();\n this._widget = undefined;\n this._model = undefined;\n }\n _getOrCreateModel(uri) {\n if (this._model && this._model.matches(uri)) {\n return this._model;\n }\n let reusePosition = false;\n if (this._model) {\n reusePosition = true;\n this._cleanUp();\n }\n this._model = this._markerNavigationService.getMarkerList(uri);\n if (reusePosition) {\n this._model.move(true, this._editor.getModel(), this._editor.getPosition());\n }\n this._widget = this._instantiationService.createInstance(MarkerNavigationWidget, this._editor);\n this._widget.onDidClose(() => this.close(), this, this._sessionDispoables);\n this._widgetVisible.set(true);\n this._sessionDispoables.add(this._model);\n this._sessionDispoables.add(this._widget);\n // follow cursor\n this._sessionDispoables.add(this._editor.onDidChangeCursorPosition(e => {\n var _a, _b, _c;\n if (!((_a = this._model) === null || _a === void 0 ? void 0 : _a.selected) || !Range.containsPosition((_b = this._model) === null || _b === void 0 ? void 0 : _b.selected.marker, e.position)) {\n (_c = this._model) === null || _c === void 0 ? void 0 : _c.resetIndex();\n }\n }));\n // update markers\n this._sessionDispoables.add(this._model.onDidChange(() => {\n if (!this._widget || !this._widget.position || !this._model) {\n return;\n }\n const info = this._model.find(this._editor.getModel().uri, this._widget.position);\n if (info) {\n this._widget.updateMarker(info.marker);\n }\n else {\n this._widget.showStale();\n }\n }));\n // open related\n this._sessionDispoables.add(this._widget.onDidSelectRelatedInformation(related => {\n this._editorService.openCodeEditor({\n resource: related.resource,\n options: { pinned: true, revealIfOpened: true, selection: Range.lift(related).collapseToStart() }\n }, this._editor);\n this.close(false);\n }));\n this._sessionDispoables.add(this._editor.onDidChangeModel(() => this._cleanUp()));\n return this._model;\n }\n close(focusEditor = true) {\n this._cleanUp();\n if (focusEditor) {\n this._editor.focus();\n }\n }\n showAtMarker(marker) {\n if (this._editor.hasModel()) {\n const model = this._getOrCreateModel(this._editor.getModel().uri);\n model.resetIndex();\n model.move(true, this._editor.getModel(), new Position(marker.startLineNumber, marker.startColumn));\n if (model.selected) {\n this._widget.showAtMarker(model.selected.marker, model.selected.index, model.selected.total);\n }\n }\n }\n nagivate(next, multiFile) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._editor.hasModel()) {\n const model = this._getOrCreateModel(multiFile ? undefined : this._editor.getModel().uri);\n model.move(next, this._editor.getModel(), this._editor.getPosition());\n if (!model.selected) {\n return;\n }\n if (model.selected.marker.resource.toString() !== this._editor.getModel().uri.toString()) {\n // show in different editor\n this._cleanUp();\n const otherEditor = yield this._editorService.openCodeEditor({\n resource: model.selected.marker.resource,\n options: { pinned: false, revealIfOpened: true, selectionRevealType: 2 /* NearTop */, selection: model.selected.marker }\n }, this._editor);\n if (otherEditor) {\n MarkerController.get(otherEditor).close();\n MarkerController.get(otherEditor).nagivate(next, multiFile);\n }\n }\n else {\n // show in this editor\n this._widget.showAtMarker(model.selected.marker, model.selected.index, model.selected.total);\n }\n }\n });\n }\n};\nMarkerController.ID = 'editor.contrib.markerController';\nMarkerController = __decorate([\n __param(1, IMarkerNavigationService),\n __param(2, IContextKeyService),\n __param(3, ICodeEditorService),\n __param(4, IInstantiationService)\n], MarkerController);\nexport { MarkerController };\nclass MarkerNavigationAction extends EditorAction {\n constructor(_next, _multiFile, opts) {\n super(opts);\n this._next = _next;\n this._multiFile = _multiFile;\n }\n run(_accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n if (editor.hasModel()) {\n MarkerController.get(editor).nagivate(this._next, this._multiFile);\n }\n });\n }\n}\nexport class NextMarkerAction extends MarkerNavigationAction {\n constructor() {\n super(true, false, {\n id: NextMarkerAction.ID,\n label: NextMarkerAction.LABEL,\n alias: 'Go to Next Problem (Error, Warning, Info)',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 512 /* Alt */ | 66 /* F8 */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MarkerNavigationWidget.TitleMenu,\n title: NextMarkerAction.LABEL,\n icon: registerIcon('marker-navigation-next', Codicon.chevronDown, nls.localize('nextMarkerIcon', 'Icon for goto next marker.')),\n group: 'navigation',\n order: 1\n }\n });\n }\n}\nNextMarkerAction.ID = 'editor.action.marker.next';\nNextMarkerAction.LABEL = nls.localize('markerAction.next.label', \"Go to Next Problem (Error, Warning, Info)\");\nclass PrevMarkerAction extends MarkerNavigationAction {\n constructor() {\n super(false, false, {\n id: PrevMarkerAction.ID,\n label: PrevMarkerAction.LABEL,\n alias: 'Go to Previous Problem (Error, Warning, Info)',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 1024 /* Shift */ | 512 /* Alt */ | 66 /* F8 */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MarkerNavigationWidget.TitleMenu,\n title: NextMarkerAction.LABEL,\n icon: registerIcon('marker-navigation-previous', Codicon.chevronUp, nls.localize('previousMarkerIcon', 'Icon for goto previous marker.')),\n group: 'navigation',\n order: 2\n }\n });\n }\n}\nPrevMarkerAction.ID = 'editor.action.marker.prev';\nPrevMarkerAction.LABEL = nls.localize('markerAction.previous.label', \"Go to Previous Problem (Error, Warning, Info)\");\nclass NextMarkerInFilesAction extends MarkerNavigationAction {\n constructor() {\n super(true, true, {\n id: 'editor.action.marker.nextInFiles',\n label: nls.localize('markerAction.nextInFiles.label', \"Go to Next Problem in Files (Error, Warning, Info)\"),\n alias: 'Go to Next Problem in Files (Error, Warning, Info)',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 66 /* F8 */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarGoMenu,\n title: nls.localize({ key: 'miGotoNextProblem', comment: ['&& denotes a mnemonic'] }, \"Next &&Problem\"),\n group: '6_problem_nav',\n order: 1\n }\n });\n }\n}\nclass PrevMarkerInFilesAction extends MarkerNavigationAction {\n constructor() {\n super(false, true, {\n id: 'editor.action.marker.prevInFiles',\n label: nls.localize('markerAction.previousInFiles.label', \"Go to Previous Problem in Files (Error, Warning, Info)\"),\n alias: 'Go to Previous Problem in Files (Error, Warning, Info)',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 1024 /* Shift */ | 66 /* F8 */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarGoMenu,\n title: nls.localize({ key: 'miGotoPreviousProblem', comment: ['&& denotes a mnemonic'] }, \"Previous &&Problem\"),\n group: '6_problem_nav',\n order: 2\n }\n });\n }\n}\nregisterEditorContribution(MarkerController.ID, MarkerController);\nregisterEditorAction(NextMarkerAction);\nregisterEditorAction(PrevMarkerAction);\nregisterEditorAction(NextMarkerInFilesAction);\nregisterEditorAction(PrevMarkerInFilesAction);\nconst CONTEXT_MARKERS_NAVIGATION_VISIBLE = new RawContextKey('markersNavigationVisible', false);\nconst MarkerCommand = EditorCommand.bindToContribution(MarkerController.get);\nregisterEditorCommand(new MarkerCommand({\n id: 'closeMarkersNavigation',\n precondition: CONTEXT_MARKERS_NAVIGATION_VISIBLE,\n handler: x => x.close(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 50,\n kbExpr: EditorContextKeys.focus,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as nls from '../../../nls.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { toDisposable, DisposableStore, Disposable } from '../../../base/common/lifecycle.js';\nimport { Range } from '../../common/core/range.js';\nimport { isNonEmptyArray } from '../../../base/common/arrays.js';\nimport { IMarkerData, MarkerSeverity } from '../../../platform/markers/common/markers.js';\nimport { basename } from '../../../base/common/resources.js';\nimport { IMarkerDecorationsService } from '../../common/services/markersDecorationService.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\nimport { MarkerController, NextMarkerAction } from '../gotoError/gotoError.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { createCancelablePromise, disposableTimeout } from '../../../base/common/async.js';\nimport { getCodeActions } from '../codeAction/codeAction.js';\nimport { QuickFixAction, QuickFixController } from '../codeAction/codeActionCommands.js';\nimport { CodeActionKind } from '../codeAction/types.js';\nimport { Progress } from '../../../platform/progress/common/progress.js';\nimport { renderHoverAction } from '../../../base/browser/ui/hover/hoverWidget.js';\nconst $ = dom.$;\nexport class MarkerHover {\n constructor(range, marker) {\n this.range = range;\n this.marker = marker;\n }\n equals(other) {\n if (other instanceof MarkerHover) {\n return IMarkerData.makeKey(this.marker) === IMarkerData.makeKey(other.marker);\n }\n return false;\n }\n}\nconst markerCodeActionTrigger = {\n type: 1 /* Invoke */,\n filter: { include: CodeActionKind.QuickFix }\n};\nlet MarkerHoverParticipant = class MarkerHoverParticipant {\n constructor(_editor, _hover, _markerDecorationsService, _keybindingService, _openerService) {\n this._editor = _editor;\n this._hover = _hover;\n this._markerDecorationsService = _markerDecorationsService;\n this._keybindingService = _keybindingService;\n this._openerService = _openerService;\n this.recentMarkerCodeActionsInfo = undefined;\n }\n computeSync(hoverRange, lineDecorations) {\n if (!this._editor.hasModel()) {\n return [];\n }\n const model = this._editor.getModel();\n const lineNumber = hoverRange.startLineNumber;\n const maxColumn = model.getLineMaxColumn(lineNumber);\n const result = [];\n for (const d of lineDecorations) {\n const startColumn = (d.range.startLineNumber === lineNumber) ? d.range.startColumn : 1;\n const endColumn = (d.range.endLineNumber === lineNumber) ? d.range.endColumn : maxColumn;\n const marker = this._markerDecorationsService.getMarker(model.uri, d);\n if (!marker) {\n continue;\n }\n const range = new Range(hoverRange.startLineNumber, startColumn, hoverRange.startLineNumber, endColumn);\n result.push(new MarkerHover(range, marker));\n }\n return result;\n }\n renderHoverParts(hoverParts, fragment) {\n if (!hoverParts.length) {\n return Disposable.None;\n }\n const disposables = new DisposableStore();\n hoverParts.forEach(msg => fragment.appendChild(this.renderMarkerHover(msg, disposables)));\n const markerHoverForStatusbar = hoverParts.length === 1 ? hoverParts[0] : hoverParts.sort((a, b) => MarkerSeverity.compare(a.marker.severity, b.marker.severity))[0];\n fragment.appendChild(this.renderMarkerStatusbar(markerHoverForStatusbar, disposables));\n return disposables;\n }\n renderMarkerHover(markerHover, disposables) {\n const hoverElement = $('div.hover-row');\n const markerElement = dom.append(hoverElement, $('div.marker.hover-contents'));\n const { source, message, code, relatedInformation } = markerHover.marker;\n this._editor.applyFontInfo(markerElement);\n const messageElement = dom.append(markerElement, $('span'));\n messageElement.style.whiteSpace = 'pre-wrap';\n messageElement.innerText = message;\n if (source || code) {\n // Code has link\n if (code && typeof code !== 'string') {\n const sourceAndCodeElement = $('span');\n if (source) {\n const sourceElement = dom.append(sourceAndCodeElement, $('span'));\n sourceElement.innerText = source;\n }\n const codeLink = dom.append(sourceAndCodeElement, $('a.code-link'));\n codeLink.setAttribute('href', code.target.toString());\n disposables.add(dom.addDisposableListener(codeLink, 'click', (e) => {\n this._openerService.open(code.target, { allowCommands: true });\n e.preventDefault();\n e.stopPropagation();\n }));\n const codeElement = dom.append(codeLink, $('span'));\n codeElement.innerText = code.value;\n const detailsElement = dom.append(markerElement, sourceAndCodeElement);\n detailsElement.style.opacity = '0.6';\n detailsElement.style.paddingLeft = '6px';\n }\n else {\n const detailsElement = dom.append(markerElement, $('span'));\n detailsElement.style.opacity = '0.6';\n detailsElement.style.paddingLeft = '6px';\n detailsElement.innerText = source && code ? `${source}(${code})` : source ? source : `(${code})`;\n }\n }\n if (isNonEmptyArray(relatedInformation)) {\n for (const { message, resource, startLineNumber, startColumn } of relatedInformation) {\n const relatedInfoContainer = dom.append(markerElement, $('div'));\n relatedInfoContainer.style.marginTop = '8px';\n const a = dom.append(relatedInfoContainer, $('a'));\n a.innerText = `${basename(resource)}(${startLineNumber}, ${startColumn}): `;\n a.style.cursor = 'pointer';\n disposables.add(dom.addDisposableListener(a, 'click', (e) => {\n e.stopPropagation();\n e.preventDefault();\n if (this._openerService) {\n this._openerService.open(resource, {\n fromUserGesture: true,\n editorOptions: { selection: { startLineNumber, startColumn } }\n }).catch(onUnexpectedError);\n }\n }));\n const messageElement = dom.append(relatedInfoContainer, $('span'));\n messageElement.innerText = message;\n this._editor.applyFontInfo(messageElement);\n }\n }\n return hoverElement;\n }\n renderMarkerStatusbar(markerHover, disposables) {\n const hoverElement = $('div.hover-row.status-bar');\n const actionsElement = dom.append(hoverElement, $('div.actions'));\n if (markerHover.marker.severity === MarkerSeverity.Error || markerHover.marker.severity === MarkerSeverity.Warning || markerHover.marker.severity === MarkerSeverity.Info) {\n disposables.add(this.renderAction(actionsElement, {\n label: nls.localize('view problem', \"View Problem\"),\n commandId: NextMarkerAction.ID,\n run: () => {\n this._hover.hide();\n MarkerController.get(this._editor).showAtMarker(markerHover.marker);\n this._editor.focus();\n }\n }));\n }\n if (!this._editor.getOption(77 /* readOnly */)) {\n const quickfixPlaceholderElement = dom.append(actionsElement, $('div'));\n if (this.recentMarkerCodeActionsInfo) {\n if (IMarkerData.makeKey(this.recentMarkerCodeActionsInfo.marker) === IMarkerData.makeKey(markerHover.marker)) {\n if (!this.recentMarkerCodeActionsInfo.hasCodeActions) {\n quickfixPlaceholderElement.textContent = nls.localize('noQuickFixes', \"No quick fixes available\");\n }\n }\n else {\n this.recentMarkerCodeActionsInfo = undefined;\n }\n }\n const updatePlaceholderDisposable = this.recentMarkerCodeActionsInfo && !this.recentMarkerCodeActionsInfo.hasCodeActions ? Disposable.None : disposables.add(disposableTimeout(() => quickfixPlaceholderElement.textContent = nls.localize('checkingForQuickFixes', \"Checking for quick fixes...\"), 200));\n if (!quickfixPlaceholderElement.textContent) {\n // Have some content in here to avoid flickering\n quickfixPlaceholderElement.textContent = String.fromCharCode(0xA0); // &nbsp;\n }\n const codeActionsPromise = this.getCodeActions(markerHover.marker);\n disposables.add(toDisposable(() => codeActionsPromise.cancel()));\n codeActionsPromise.then(actions => {\n updatePlaceholderDisposable.dispose();\n this.recentMarkerCodeActionsInfo = { marker: markerHover.marker, hasCodeActions: actions.validActions.length > 0 };\n if (!this.recentMarkerCodeActionsInfo.hasCodeActions) {\n actions.dispose();\n quickfixPlaceholderElement.textContent = nls.localize('noQuickFixes', \"No quick fixes available\");\n return;\n }\n quickfixPlaceholderElement.style.display = 'none';\n let showing = false;\n disposables.add(toDisposable(() => {\n if (!showing) {\n actions.dispose();\n }\n }));\n disposables.add(this.renderAction(actionsElement, {\n label: nls.localize('quick fixes', \"Quick Fix...\"),\n commandId: QuickFixAction.Id,\n run: (target) => {\n showing = true;\n const controller = QuickFixController.get(this._editor);\n const elementPosition = dom.getDomNodePagePosition(target);\n // Hide the hover pre-emptively, otherwise the editor can close the code actions\n // context menu as well when using keyboard navigation\n this._hover.hide();\n controller.showCodeActions(markerCodeActionTrigger, actions, {\n x: elementPosition.left + 6,\n y: elementPosition.top + elementPosition.height + 6\n });\n }\n }));\n });\n }\n return hoverElement;\n }\n renderAction(parent, actionOptions) {\n const keybinding = this._keybindingService.lookupKeybinding(actionOptions.commandId);\n const keybindingLabel = keybinding ? keybinding.getLabel() : null;\n return renderHoverAction(parent, actionOptions, keybindingLabel);\n }\n getCodeActions(marker) {\n return createCancelablePromise(cancellationToken => {\n return getCodeActions(this._editor.getModel(), new Range(marker.startLineNumber, marker.startColumn, marker.endLineNumber, marker.endColumn), markerCodeActionTrigger, Progress.None, cancellationToken);\n });\n }\n};\nMarkerHoverParticipant = __decorate([\n __param(2, IMarkerDecorationsService),\n __param(3, IKeybindingService),\n __param(4, IOpenerService)\n], MarkerHoverParticipant);\nexport { MarkerHoverParticipant };\n","/*\nThe MIT License (MIT)\n\nCopyright © 2015 Nicolas Bevacqua\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nlet __insane_func;\n\n(function () { function r(e, n, t) { function o(i, f) { if (!n[i]) { if (!e[i]) { var c = \"function\" == typeof require && require; if (!f && c) return c(i, !0); if (u) return u(i, !0); var a = new Error(\"Cannot find module '\" + i + \"'\"); throw a.code = \"MODULE_NOT_FOUND\", a } var p = n[i] = { exports: {} }; e[i][0].call(p.exports, function (r) { var n = e[i][1][r]; return o(n || r) }, p, p.exports, r, e, n, t) } return n[i].exports } for (var u = \"function\" == typeof require && require, i = 0; i < t.length; i++)o(t[i]); return o } return r })()({\n\t1: [function (require, module, exports) {\n\t\t'use strict';\n\n\t\tvar toMap = require('./toMap');\n\t\tvar uris = ['background', 'base', 'cite', 'href', 'longdesc', 'src', 'usemap'];\n\n\t\tmodule.exports = {\n\t\t\turis: toMap(uris) // attributes that have an href and hence need to be sanitized\n\t\t};\n\n\t}, { \"./toMap\": 10 }], 2: [function (require, module, exports) {\n\t\t'use strict';\n\n\t\tvar defaults = {\n\t\t\tallowedAttributes: {\n\t\t\t\t'*': ['title', 'accesskey'],\n\t\t\t\ta: ['href', 'name', 'target', 'aria-label'],\n\t\t\t\tiframe: ['allowfullscreen', 'frameborder', 'src'],\n\t\t\t\timg: ['src', 'alt', 'title', 'aria-label']\n\t\t\t},\n\t\t\tallowedClasses: {},\n\t\t\tallowedSchemes: ['http', 'https', 'mailto'],\n\t\t\tallowedTags: [\n\t\t\t\t'a', 'abbr', 'article', 'b', 'blockquote', 'br', 'caption', 'code', 'del', 'details', 'div', 'em',\n\t\t\t\t'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'ins', 'kbd', 'li', 'main', 'mark',\n\t\t\t\t'ol', 'p', 'pre', 'section', 'span', 'strike', 'strong', 'sub', 'summary', 'sup', 'table',\n\t\t\t\t'tbody', 'td', 'th', 'thead', 'tr', 'u', 'ul'\n\t\t\t],\n\t\t\tfilter: null\n\t\t};\n\n\t\tmodule.exports = defaults;\n\n\t}, {}], 3: [function (require, module, exports) {\n\t\t'use strict';\n\n\t\tvar toMap = require('./toMap');\n\t\tvar voids = ['area', 'br', 'col', 'hr', 'img', 'wbr', 'input', 'base', 'basefont', 'link', 'meta'];\n\n\t\tmodule.exports = {\n\t\t\tvoids: toMap(voids)\n\t\t};\n\n\t}, { \"./toMap\": 10 }], 4: [function (require, module, exports) {\n\t\t'use strict';\n\n\t\tvar he = require('he');\n\t\tvar assign = require('assignment');\n\t\tvar parser = require('./parser');\n\t\tvar sanitizer = require('./sanitizer');\n\t\tvar defaults = require('./defaults');\n\n\t\tfunction insane(html, options, strict) {\n\t\t\tvar buffer = [];\n\t\t\tvar configuration = strict === true ? options : assign({}, defaults, options);\n\t\t\tvar handler = sanitizer(buffer, configuration);\n\n\t\t\tparser(html, handler);\n\n\t\t\treturn buffer.join('');\n\t\t}\n\n\t\tinsane.defaults = defaults;\n\t\tmodule.exports = insane;\n\t\t__insane_func = insane;\n\n\t}, { \"./defaults\": 2, \"./parser\": 7, \"./sanitizer\": 8, \"assignment\": 6, \"he\": 9 }], 5: [function (require, module, exports) {\n\t\t'use strict';\n\n\t\tmodule.exports = function lowercase(string) {\n\t\t\treturn typeof string === 'string' ? string.toLowerCase() : string;\n\t\t};\n\n\t}, {}], 6: [function (require, module, exports) {\n\t\t'use strict';\n\n\t\tfunction assignment(result) {\n\t\t\tvar stack = Array.prototype.slice.call(arguments, 1);\n\t\t\tvar item;\n\t\t\tvar key;\n\t\t\twhile (stack.length) {\n\t\t\t\titem = stack.shift();\n\t\t\t\tfor (key in item) {\n\t\t\t\t\tif (item.hasOwnProperty(key)) {\n\t\t\t\t\t\tif (Object.prototype.toString.call(result[key]) === '[object Object]') {\n\t\t\t\t\t\t\tresult[key] = assignment(result[key], item[key]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult[key] = item[key];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\n\t\tmodule.exports = assignment;\n\n\t}, {}], 7: [function (require, module, exports) {\n\t\t'use strict';\n\n\t\tvar he = require('he');\n\t\tvar lowercase = require('./lowercase');\n\t\tvar attributes = require('./attributes');\n\t\tvar elements = require('./elements');\n\t\tvar rstart = /^<\\s*([\\w:-]+)((?:\\s+[\\w:-]+(?:\\s*=\\s*(?:(?:\"[^\"]*\")|(?:'[^']*')|[^>\\s]+))?)*)\\s*(\\/?)\\s*>/;\n\t\tvar rend = /^<\\s*\\/\\s*([\\w:-]+)[^>]*>/;\n\t\tvar rattrs = /([\\w:-]+)(?:\\s*=\\s*(?:(?:\"((?:[^\"])*)\")|(?:'((?:[^'])*)')|([^>\\s]+)))?/g;\n\t\tvar rtag = /^</;\n\t\tvar rtagend = /^<\\s*\\//;\n\n\t\tfunction createStack() {\n\t\t\tvar stack = [];\n\t\t\tstack.lastItem = function lastItem() {\n\t\t\t\treturn stack[stack.length - 1];\n\t\t\t};\n\t\t\treturn stack;\n\t\t}\n\n\t\tfunction parser(html, handler) {\n\t\t\tvar stack = createStack();\n\t\t\tvar last = html;\n\t\t\tvar chars;\n\n\t\t\twhile (html) {\n\t\t\t\tparsePart();\n\t\t\t}\n\t\t\tparseEndTag(); // clean up any remaining tags\n\n\t\t\tfunction parsePart() {\n\t\t\t\tchars = true;\n\t\t\t\tparseTag();\n\n\t\t\t\tvar same = html === last;\n\t\t\t\tlast = html;\n\n\t\t\t\tif (same) { // discard, because it's invalid\n\t\t\t\t\thtml = '';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction parseTag() {\n\t\t\t\tif (html.substr(0, 4) === '<!--') { // comments\n\t\t\t\t\tparseComment();\n\t\t\t\t} else if (rtagend.test(html)) {\n\t\t\t\t\tparseEdge(rend, parseEndTag);\n\t\t\t\t} else if (rtag.test(html)) {\n\t\t\t\t\tparseEdge(rstart, parseStartTag);\n\t\t\t\t}\n\t\t\t\tparseTagDecode();\n\t\t\t}\n\n\t\t\tfunction parseEdge(regex, parser) {\n\t\t\t\tvar match = html.match(regex);\n\t\t\t\tif (match) {\n\t\t\t\t\thtml = html.substring(match[0].length);\n\t\t\t\t\tmatch[0].replace(regex, parser);\n\t\t\t\t\tchars = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction parseComment() {\n\t\t\t\tvar index = html.indexOf('-->');\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\tif (handler.comment) {\n\t\t\t\t\t\thandler.comment(html.substring(4, index));\n\t\t\t\t\t}\n\t\t\t\t\thtml = html.substring(index + 3);\n\t\t\t\t\tchars = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction parseTagDecode() {\n\t\t\t\tif (!chars) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar text;\n\t\t\t\tvar index = html.indexOf('<');\n\t\t\t\tif (index >= 0) {\n\t\t\t\t\ttext = html.substring(0, index);\n\t\t\t\t\thtml = html.substring(index);\n\t\t\t\t} else {\n\t\t\t\t\ttext = html;\n\t\t\t\t\thtml = '';\n\t\t\t\t}\n\t\t\t\tif (handler.chars) {\n\t\t\t\t\thandler.chars(text);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction parseStartTag(tag, tagName, rest, unary) {\n\t\t\t\tvar attrs = {};\n\t\t\t\tvar low = lowercase(tagName);\n\t\t\t\tvar u = elements.voids[low] || !!unary;\n\n\t\t\t\trest.replace(rattrs, attrReplacer);\n\n\t\t\t\tif (!u) {\n\t\t\t\t\tstack.push(low);\n\t\t\t\t}\n\t\t\t\tif (handler.start) {\n\t\t\t\t\thandler.start(low, attrs, u);\n\t\t\t\t}\n\n\t\t\t\tfunction attrReplacer(match, name, doubleQuotedValue, singleQuotedValue, unquotedValue) {\n\t\t\t\t\tif (doubleQuotedValue === void 0 && singleQuotedValue === void 0 && unquotedValue === void 0) {\n\t\t\t\t\t\tattrs[name] = void 0; // attribute is like <button disabled></button>\n\t\t\t\t\t} else {\n\t\t\t\t\t\tattrs[name] = he.decode(doubleQuotedValue || singleQuotedValue || unquotedValue || '');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction parseEndTag(tag, tagName) {\n\t\t\t\tvar i;\n\t\t\t\tvar pos = 0;\n\t\t\t\tvar low = lowercase(tagName);\n\t\t\t\tif (low) {\n\t\t\t\t\tfor (pos = stack.length - 1; pos >= 0; pos--) {\n\t\t\t\t\t\tif (stack[pos] === low) {\n\t\t\t\t\t\t\tbreak; // find the closest opened tag of the same type\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pos >= 0) {\n\t\t\t\t\tfor (i = stack.length - 1; i >= pos; i--) {\n\t\t\t\t\t\tif (handler.end) { // close all the open elements, up the stack\n\t\t\t\t\t\t\thandler.end(stack[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstack.length = pos;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tmodule.exports = parser;\n\n\t}, { \"./attributes\": 1, \"./elements\": 3, \"./lowercase\": 5, \"he\": 9 }], 8: [function (require, module, exports) {\n\t\t'use strict';\n\n\t\tvar he = require('he');\n\t\tvar lowercase = require('./lowercase');\n\t\tvar attributes = require('./attributes');\n\t\tvar elements = require('./elements');\n\n\t\tfunction sanitizer(buffer, options) {\n\t\t\tvar last;\n\t\t\tvar context;\n\t\t\tvar o = options || {};\n\n\t\t\treset();\n\n\t\t\treturn {\n\t\t\t\tstart: start,\n\t\t\t\tend: end,\n\t\t\t\tchars: chars\n\t\t\t};\n\n\t\t\tfunction out(value) {\n\t\t\t\tbuffer.push(value);\n\t\t\t}\n\n\t\t\tfunction start(tag, attrs, unary) {\n\t\t\t\tvar low = lowercase(tag);\n\n\t\t\t\tif (context.ignoring) {\n\t\t\t\t\tignore(low); return;\n\t\t\t\t}\n\t\t\t\tif ((o.allowedTags || []).indexOf(low) === -1) {\n\t\t\t\t\tignore(low); return;\n\t\t\t\t}\n\t\t\t\tif (o.filter && !o.filter({ tag: low, attrs: attrs })) {\n\t\t\t\t\tignore(low); return;\n\t\t\t\t}\n\n\t\t\t\tout('<');\n\t\t\t\tout(low);\n\t\t\t\tObject.keys(attrs).forEach(parse);\n\t\t\t\tout(unary ? '/>' : '>');\n\n\t\t\t\tfunction parse(key) {\n\t\t\t\t\tvar value = attrs[key];\n\t\t\t\t\tvar classesOk = (o.allowedClasses || {})[low] || [];\n\t\t\t\t\tvar attrsOk = (o.allowedAttributes || {})[low] || [];\n\t\t\t\t\tattrsOk = attrsOk.concat((o.allowedAttributes || {})['*'] || []);\n\t\t\t\t\tvar valid;\n\t\t\t\t\tvar lkey = lowercase(key);\n\t\t\t\t\tif (lkey === 'class' && attrsOk.indexOf(lkey) === -1) {\n\t\t\t\t\t\tvalue = value.split(' ').filter(isValidClass).join(' ').trim();\n\t\t\t\t\t\tvalid = value.length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalid = attrsOk.indexOf(lkey) !== -1 && (attributes.uris[lkey] !== true || testUrl(value));\n\t\t\t\t\t}\n\t\t\t\t\tif (valid) {\n\t\t\t\t\t\tout(' ');\n\t\t\t\t\t\tout(key);\n\t\t\t\t\t\tif (typeof value === 'string') {\n\t\t\t\t\t\t\tout('=\"');\n\t\t\t\t\t\t\tout(he.encode(value));\n\t\t\t\t\t\t\tout('\"');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfunction isValidClass(className) {\n\t\t\t\t\t\treturn classesOk && classesOk.indexOf(className) !== -1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction end(tag) {\n\t\t\t\tvar low = lowercase(tag);\n\t\t\t\tvar allowed = (o.allowedTags || []).indexOf(low) !== -1;\n\t\t\t\tif (allowed) {\n\t\t\t\t\tif (context.ignoring === false) {\n\t\t\t\t\t\tout('</');\n\t\t\t\t\t\tout(low);\n\t\t\t\t\t\tout('>');\n\t\t\t\t\t} else {\n\t\t\t\t\t\tunignore(low);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tunignore(low);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction testUrl(text) {\n\t\t\t\tvar start = text[0];\n\t\t\t\tif (start === '#' || start === '/') {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tvar colon = text.indexOf(':');\n\t\t\t\tif (colon === -1) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tvar questionmark = text.indexOf('?');\n\t\t\t\tif (questionmark !== -1 && colon > questionmark) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tvar hash = text.indexOf('#');\n\t\t\t\tif (hash !== -1 && colon > hash) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\treturn o.allowedSchemes.some(matches);\n\n\t\t\t\tfunction matches(scheme) {\n\t\t\t\t\treturn text.indexOf(scheme + ':') === 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction chars(text) {\n\t\t\t\tif (context.ignoring === false) {\n\t\t\t\t\tout(o.transformText ? o.transformText(text) : text);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction ignore(tag) {\n\t\t\t\tif (elements.voids[tag]) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (context.ignoring === false) {\n\t\t\t\t\tcontext = { ignoring: tag, depth: 1 };\n\t\t\t\t} else if (context.ignoring === tag) {\n\t\t\t\t\tcontext.depth++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction unignore(tag) {\n\t\t\t\tif (context.ignoring === tag) {\n\t\t\t\t\tif (--context.depth <= 0) {\n\t\t\t\t\t\treset();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction reset() {\n\t\t\t\tcontext = { ignoring: false, depth: 0 };\n\t\t\t}\n\t\t}\n\n\t\tmodule.exports = sanitizer;\n\n\t}, { \"./attributes\": 1, \"./elements\": 3, \"./lowercase\": 5, \"he\": 9 }], 9: [function (require, module, exports) {\n\t\t'use strict';\n\n\t\tvar escapes = {\n\t\t\t'&': '&amp;',\n\t\t\t'<': '&lt;',\n\t\t\t'>': '&gt;',\n\t\t\t'\"': '&quot;',\n\t\t\t\"'\": '&#39;'\n\t\t};\n\t\tvar unescapes = {\n\t\t\t'&amp;': '&',\n\t\t\t'&lt;': '<',\n\t\t\t'&gt;': '>',\n\t\t\t'&quot;': '\"',\n\t\t\t'&#39;': \"'\"\n\t\t};\n\t\tvar rescaped = /(&amp;|&lt;|&gt;|&quot;|&#39;)/g;\n\t\tvar runescaped = /[&<>\"']/g;\n\n\t\tfunction escapeHtmlChar(match) {\n\t\t\treturn escapes[match];\n\t\t}\n\t\tfunction unescapeHtmlChar(match) {\n\t\t\treturn unescapes[match];\n\t\t}\n\n\t\tfunction escapeHtml(text) {\n\t\t\treturn text == null ? '' : String(text).replace(runescaped, escapeHtmlChar);\n\t\t}\n\n\t\tfunction unescapeHtml(html) {\n\t\t\treturn html == null ? '' : String(html).replace(rescaped, unescapeHtmlChar);\n\t\t}\n\n\t\tescapeHtml.options = unescapeHtml.options = {};\n\n\t\tmodule.exports = {\n\t\t\tencode: escapeHtml,\n\t\t\tescape: escapeHtml,\n\t\t\tdecode: unescapeHtml,\n\t\t\tunescape: unescapeHtml,\n\t\t\tversion: '1.0.0-browser'\n\t\t};\n\n\t}, {}], 10: [function (require, module, exports) {\n\t\t'use strict';\n\n\t\tfunction toMap(list) {\n\t\t\treturn list.reduce(asKey, {});\n\t\t}\n\n\t\tfunction asKey(accumulator, item) {\n\t\t\taccumulator[item] = true;\n\t\t\treturn accumulator;\n\t\t}\n\n\t\tmodule.exports = toMap;\n\n\t}, {}]\n}, {}, [4]);\n\n// ESM-comment-begin\n// define(function() { return { insane: __insane_func }; });\n// ESM-comment-end\n\n// ESM-uncomment-begin\nexport var insane = __insane_func;\n// ESM-uncomment-end\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 *--------------------------------------------------------------------------------------------*/\nvar _a;\nimport * as DOM from './dom.js';\nimport { createElement } from './formattedTextRenderer.js';\nimport { onUnexpectedError } from '../common/errors.js';\nimport { parseHrefAndDimensions, removeMarkdownEscapes } from '../common/htmlContent.js';\nimport { defaultGenerator } from '../common/idGenerator.js';\nimport * as marked from '../common/marked/marked.js';\nimport { insane } from '../common/insane/insane.js';\nimport { parse } from '../common/marshalling.js';\nimport { cloneAndChange } from '../common/objects.js';\nimport { escape } from '../common/strings.js';\nimport { URI } from '../common/uri.js';\nimport { FileAccess, Schemas } from '../common/network.js';\nimport { markdownEscapeEscapedIcons } from '../common/iconLabels.js';\nimport { resolvePath } from '../common/resources.js';\nimport { StandardMouseEvent } from './mouseEvent.js';\nimport { renderLabelWithIcons } from './ui/iconLabel/iconLabels.js';\nimport { Event } from '../common/event.js';\nimport { domEvent } from './event.js';\nconst _ttpInsane = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy('insane', {\n createHTML(value, options) {\n return insane(value, options);\n }\n});\n/**\n * Low-level way create a html element from a markdown string.\n *\n * **Note** that for most cases you should be using [`MarkdownRenderer`](./src/vs/editor/browser/core/markdownRenderer.ts)\n * which comes with support for pretty code block rendering and which uses the default way of handling links.\n */\nexport function renderMarkdown(markdown, options = {}, markedOptions = {}) {\n var _a;\n const element = createElement(options);\n const _uriMassage = function (part) {\n let data;\n try {\n data = parse(decodeURIComponent(part));\n }\n catch (e) {\n // ignore\n }\n if (!data) {\n return part;\n }\n data = cloneAndChange(data, value => {\n if (markdown.uris && markdown.uris[value]) {\n return URI.revive(markdown.uris[value]);\n }\n else {\n return undefined;\n }\n });\n return encodeURIComponent(JSON.stringify(data));\n };\n const _href = function (href, isDomUri) {\n const data = markdown.uris && markdown.uris[href];\n if (!data) {\n return href; // no uri exists\n }\n let uri = URI.revive(data);\n if (URI.parse(href).toString() === uri.toString()) {\n return href; // no tranformation performed\n }\n if (isDomUri) {\n // this URI will end up as \"src\"-attribute of a dom node\n // and because of that special rewriting needs to be done\n // so that the URI uses a protocol that's understood by\n // browsers (like http or https)\n return FileAccess.asBrowserUri(uri).toString(true);\n }\n if (uri.query) {\n uri = uri.with({ query: _uriMassage(uri.query) });\n }\n return uri.toString();\n };\n // signal to code-block render that the\n // element has been created\n let signalInnerHTML;\n const withInnerHTML = new Promise(c => signalInnerHTML = c);\n const renderer = new marked.Renderer();\n renderer.image = (href, title, text) => {\n let dimensions = [];\n let attributes = [];\n if (href) {\n ({ href, dimensions } = parseHrefAndDimensions(href));\n href = _href(href, true);\n try {\n const hrefAsUri = URI.parse(href);\n if (options.baseUrl && hrefAsUri.scheme === Schemas.file) { // absolute or relative local path, or file: uri\n href = resolvePath(options.baseUrl, href).toString();\n }\n }\n catch (err) { }\n attributes.push(`src=\"${href}\"`);\n }\n if (text) {\n attributes.push(`alt=\"${text}\"`);\n }\n if (title) {\n attributes.push(`title=\"${title}\"`);\n }\n if (dimensions.length) {\n attributes = attributes.concat(dimensions);\n }\n return '<img ' + attributes.join(' ') + '>';\n };\n renderer.link = (href, title, text) => {\n // Remove markdown escapes. Workaround for https://github.com/chjj/marked/issues/829\n if (href === text) { // raw link case\n text = removeMarkdownEscapes(text);\n }\n href = _href(href, false);\n if (options.baseUrl) {\n const hasScheme = /^\\w[\\w\\d+.-]*:/.test(href);\n if (!hasScheme) {\n href = resolvePath(options.baseUrl, href).toString();\n }\n }\n title = removeMarkdownEscapes(title);\n href = removeMarkdownEscapes(href);\n if (!href\n || href.match(/^data:|javascript:/i)\n || (href.match(/^command:/i) && !markdown.isTrusted)\n || href.match(/^command:(\\/\\/\\/)?_workbench\\.downloadResource/i)) {\n // drop the link\n return text;\n }\n else {\n // HTML Encode href\n href = href.replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n return `<a href=\"#\" data-href=\"${href}\" title=\"${title || href}\">${text}</a>`;\n }\n };\n renderer.paragraph = (text) => {\n if (markdown.supportThemeIcons) {\n const elements = renderLabelWithIcons(text);\n text = elements.map(e => typeof e === 'string' ? e : e.outerHTML).join('');\n }\n return `<p>${text}</p>`;\n };\n if (options.codeBlockRenderer) {\n renderer.code = (code, lang) => {\n const value = options.codeBlockRenderer(lang, code);\n // when code-block rendering is async we return sync\n // but update the node with the real result later.\n const id = defaultGenerator.nextId();\n const promise = Promise.all([value, withInnerHTML]).then(values => {\n const span = element.querySelector(`div[data-code=\"${id}\"]`);\n if (span) {\n DOM.reset(span, values[0]);\n }\n }).catch(_err => {\n // ignore\n });\n if (options.asyncRenderCallback) {\n promise.then(options.asyncRenderCallback);\n }\n return `<div class=\"code\" data-code=\"${id}\">${escape(code)}</div>`;\n };\n }\n if (options.actionHandler) {\n options.actionHandler.disposeables.add(Event.any(domEvent(element, 'click'), domEvent(element, 'auxclick'))(e => {\n const mouseEvent = new StandardMouseEvent(e);\n if (!mouseEvent.leftButton && !mouseEvent.middleButton) {\n return;\n }\n let target = mouseEvent.target;\n if (target.tagName !== 'A') {\n target = target.parentElement;\n if (!target || target.tagName !== 'A') {\n return;\n }\n }\n try {\n const href = target.dataset['href'];\n if (href) {\n options.actionHandler.callback(href, mouseEvent);\n }\n }\n catch (err) {\n onUnexpectedError(err);\n }\n finally {\n mouseEvent.preventDefault();\n }\n }));\n }\n // Use our own sanitizer so that we can let through only spans.\n // Otherwise, we'd be letting all html be rendered.\n // If we want to allow markdown permitted tags, then we can delete sanitizer and sanitize.\n // We always pass the output through insane after this so that we don't rely on\n // marked for sanitization.\n markedOptions.sanitizer = (html) => {\n const match = markdown.isTrusted ? html.match(/^(<span[^>]+>)|(<\\/\\s*span>)$/) : undefined;\n return match ? html : '';\n };\n markedOptions.sanitize = true;\n markedOptions.silent = true;\n markedOptions.renderer = renderer;\n // values that are too long will freeze the UI\n let value = (_a = markdown.value) !== null && _a !== void 0 ? _a : '';\n if (value.length > 100000) {\n value = `${value.substr(0, 100000)}…`;\n }\n // escape theme icons\n if (markdown.supportThemeIcons) {\n value = markdownEscapeEscapedIcons(value);\n }\n const renderedMarkdown = marked.parse(value, markedOptions);\n // sanitize with insane\n element.innerHTML = sanitizeRenderedMarkdown(markdown, renderedMarkdown);\n // signal that async code blocks can be now be inserted\n signalInnerHTML();\n // signal size changes for image tags\n if (options.asyncRenderCallback) {\n for (const img of element.getElementsByTagName('img')) {\n const listener = DOM.addDisposableListener(img, 'load', () => {\n listener.dispose();\n options.asyncRenderCallback();\n });\n }\n }\n return element;\n}\nfunction sanitizeRenderedMarkdown(options, renderedMarkdown) {\n var _a;\n const insaneOptions = getInsaneOptions(options);\n return (_a = _ttpInsane === null || _ttpInsane === void 0 ? void 0 : _ttpInsane.createHTML(renderedMarkdown, insaneOptions)) !== null && _a !== void 0 ? _a : insane(renderedMarkdown, insaneOptions);\n}\nfunction getInsaneOptions(options) {\n const allowedSchemes = [\n Schemas.http,\n Schemas.https,\n Schemas.mailto,\n Schemas.data,\n Schemas.file,\n Schemas.vscodeRemote,\n Schemas.vscodeRemoteResource,\n ];\n if (options.isTrusted) {\n allowedSchemes.push(Schemas.command);\n }\n return {\n allowedSchemes,\n // allowedTags should included everything that markdown renders to.\n // Since we have our own sanitize function for marked, it's possible we missed some tag so let insane make sure.\n // HTML tags that can result from markdown are from reading https://spec.commonmark.org/0.29/\n // HTML table tags that can result from markdown are from https://github.github.com/gfm/#tables-extension-\n allowedTags: ['ul', 'li', 'p', 'code', 'blockquote', 'ol', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'em', 'pre', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 'div', 'del', 'a', 'strong', 'br', 'img', 'span'],\n allowedAttributes: {\n 'a': ['href', 'name', 'target', 'data-href'],\n 'img': ['src', 'title', 'alt', 'width', 'height'],\n 'div': ['class', 'data-code'],\n 'span': ['class', 'style'],\n // https://github.com/microsoft/vscode/issues/95937\n 'th': ['align'],\n 'td': ['align']\n },\n filter(token) {\n if (token.tag === 'span' && options.isTrusted) {\n if (token.attrs['style'] && (Object.keys(token.attrs).length === 1)) {\n return !!token.attrs['style'].match(/^(color\\:#[0-9a-fA-F]+;)?(background-color\\:#[0-9a-fA-F]+;)?$/);\n }\n else if (token.attrs['class']) {\n // The class should match codicon rendering in src\\vs\\base\\common\\codicons.ts\n return !!token.attrs['class'].match(/^codicon codicon-[a-z\\-]+( codicon-modifier-[a-z\\-]+)?$/);\n }\n return false;\n }\n return true;\n }\n };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar _a;\nimport { renderMarkdown } from '../../../base/browser/markdownRenderer.js';\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\nimport { IModeService } from '../../common/services/modeService.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { tokenizeToString } from '../../common/modes/textToHtmlTokenizer.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { TokenizationRegistry } from '../../common/modes.js';\n/**\n * Markdown renderer that can render codeblocks with the editor mechanics. This\n * renderer should always be preferred.\n */\nlet MarkdownRenderer = class MarkdownRenderer {\n constructor(_options, _modeService, _openerService) {\n this._options = _options;\n this._modeService = _modeService;\n this._openerService = _openerService;\n this._onDidRenderAsync = new Emitter();\n this.onDidRenderAsync = this._onDidRenderAsync.event;\n }\n dispose() {\n this._onDidRenderAsync.dispose();\n }\n render(markdown, options, markedOptions) {\n const disposeables = new DisposableStore();\n let element;\n if (!markdown) {\n element = document.createElement('span');\n }\n else {\n element = renderMarkdown(markdown, Object.assign(Object.assign({}, this._getRenderOptions(markdown, disposeables)), options), markedOptions);\n }\n return {\n element,\n dispose: () => disposeables.dispose()\n };\n }\n _getRenderOptions(markdown, disposeables) {\n return {\n baseUrl: this._options.baseUrl,\n codeBlockRenderer: (languageAlias, value) => __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d;\n // In markdown,\n // it is possible that we stumble upon language aliases (e.g.js instead of javascript)\n // it is possible no alias is given in which case we fall back to the current editor lang\n let modeId;\n if (languageAlias) {\n modeId = this._modeService.getModeIdForLanguageName(languageAlias);\n }\n else if (this._options.editor) {\n modeId = (_a = this._options.editor.getModel()) === null || _a === void 0 ? void 0 : _a.getLanguageIdentifier().language;\n }\n if (!modeId) {\n modeId = 'plaintext';\n }\n this._modeService.triggerMode(modeId);\n const tokenization = (_b = yield TokenizationRegistry.getPromise(modeId)) !== null && _b !== void 0 ? _b : undefined;\n const element = document.createElement('span');\n element.innerHTML = ((_d = (_c = MarkdownRenderer._ttpTokenizer) === null || _c === void 0 ? void 0 : _c.createHTML(value, tokenization)) !== null && _d !== void 0 ? _d : tokenizeToString(value, tokenization));\n // use \"good\" font\n let fontFamily = this._options.codeBlockFontFamily;\n if (this._options.editor) {\n fontFamily = this._options.editor.getOption(40 /* fontInfo */).fontFamily;\n }\n if (fontFamily) {\n element.style.fontFamily = fontFamily;\n }\n return element;\n }),\n asyncRenderCallback: () => this._onDidRenderAsync.fire(),\n actionHandler: {\n callback: (content) => this._openerService.open(content, { fromUserGesture: true, allowContributedOpeners: true, allowCommands: markdown.isTrusted }).catch(onUnexpectedError),\n disposeables\n }\n };\n }\n};\nMarkdownRenderer._ttpTokenizer = (_a = window.trustedTypes) === null || _a === void 0 ? void 0 : _a.createPolicy('tokenizeToString', {\n createHTML(value, tokenizer) {\n return tokenizeToString(value, tokenizer);\n }\n});\nMarkdownRenderer = __decorate([\n __param(1, IModeService),\n __param(2, IOpenerService)\n], MarkdownRenderer);\nexport { MarkdownRenderer };\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 *--------------------------------------------------------------------------------------------*/\nimport { coalesce } from '../../../base/common/arrays.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { registerModelAndPositionCommand } from '../../browser/editorExtensions.js';\nimport { HoverProviderRegistry } from '../../common/modes.js';\nexport function getHover(model, position, token) {\n const supports = HoverProviderRegistry.ordered(model);\n const promises = supports.map(support => {\n return Promise.resolve(support.provideHover(model, position, token)).then(hover => {\n return hover && isValid(hover) ? hover : undefined;\n }, err => {\n onUnexpectedExternalError(err);\n return undefined;\n });\n });\n return Promise.all(promises).then(coalesce);\n}\nregisterModelAndPositionCommand('_executeHoverProvider', (model, position) => getHover(model, position, CancellationToken.None));\nfunction isValid(result) {\n const hasRange = (typeof result.range !== 'undefined');\n const hasHtmlContent = typeof result.contents !== 'undefined' && result.contents && result.contents.length > 0;\n return hasRange && hasHtmlContent;\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../../nls.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { MarkdownString, isEmptyMarkdownString, markedStringsEquals } from '../../../base/common/htmlContent.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { Range } from '../../common/core/range.js';\nimport { MarkdownRenderer } from '../../browser/core/markdownRenderer.js';\nimport { asArray } from '../../../base/common/arrays.js';\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\nimport { IModeService } from '../../common/services/modeService.js';\nimport { HoverProviderRegistry } from '../../common/modes.js';\nimport { getHover } from './getHover.js';\nimport { Position } from '../../common/core/position.js';\nconst $ = dom.$;\nexport class MarkdownHover {\n constructor(range, contents) {\n this.range = range;\n this.contents = contents;\n }\n equals(other) {\n if (other instanceof MarkdownHover) {\n return markedStringsEquals(this.contents, other.contents);\n }\n return false;\n }\n}\nlet MarkdownHoverParticipant = class MarkdownHoverParticipant {\n constructor(_editor, _hover, _modeService, _openerService) {\n this._editor = _editor;\n this._hover = _hover;\n this._modeService = _modeService;\n this._openerService = _openerService;\n }\n createLoadingMessage(range) {\n return new MarkdownHover(range, [new MarkdownString().appendText(nls.localize('modesContentHover.loading', \"Loading...\"))]);\n }\n computeSync(hoverRange, lineDecorations) {\n if (!this._editor.hasModel()) {\n return [];\n }\n const model = this._editor.getModel();\n const lineNumber = hoverRange.startLineNumber;\n const maxColumn = model.getLineMaxColumn(lineNumber);\n const result = [];\n for (const d of lineDecorations) {\n const startColumn = (d.range.startLineNumber === lineNumber) ? d.range.startColumn : 1;\n const endColumn = (d.range.endLineNumber === lineNumber) ? d.range.endColumn : maxColumn;\n const hoverMessage = d.options.hoverMessage;\n if (!hoverMessage || isEmptyMarkdownString(hoverMessage)) {\n continue;\n }\n const range = new Range(hoverRange.startLineNumber, startColumn, hoverRange.startLineNumber, endColumn);\n result.push(new MarkdownHover(range, asArray(hoverMessage)));\n }\n return result;\n }\n computeAsync(range, token) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._editor.hasModel() || !range) {\n return Promise.resolve([]);\n }\n const model = this._editor.getModel();\n if (!HoverProviderRegistry.has(model)) {\n return Promise.resolve([]);\n }\n const hovers = yield getHover(model, new Position(range.startLineNumber, range.startColumn), token);\n const result = [];\n for (const hover of hovers) {\n if (isEmptyMarkdownString(hover.contents)) {\n continue;\n }\n const rng = hover.range ? Range.lift(hover.range) : range;\n result.push(new MarkdownHover(rng, hover.contents));\n }\n return result;\n });\n }\n renderHoverParts(hoverParts, fragment) {\n const disposables = new DisposableStore();\n for (const hoverPart of hoverParts) {\n for (const contents of hoverPart.contents) {\n if (isEmptyMarkdownString(contents)) {\n continue;\n }\n const markdownHoverElement = $('div.hover-row.markdown-hover');\n const hoverContentsElement = dom.append(markdownHoverElement, $('div.hover-contents'));\n const renderer = disposables.add(new MarkdownRenderer({ editor: this._editor }, this._modeService, this._openerService));\n disposables.add(renderer.onDidRenderAsync(() => {\n hoverContentsElement.className = 'hover-contents code-hover-contents';\n this._hover.onContentsChanged();\n }));\n const renderedContents = disposables.add(renderer.render(contents));\n hoverContentsElement.appendChild(renderedContents.element);\n fragment.appendChild(markdownHoverElement);\n }\n }\n return disposables;\n }\n};\nMarkdownHoverParticipant = __decorate([\n __param(2, IModeService),\n __param(3, IOpenerService)\n], MarkdownHoverParticipant);\nexport { MarkdownHoverParticipant };\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as dom from '../../../base/browser/dom.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { Color, RGBA } from '../../../base/common/color.js';\nimport { DisposableStore, combinedDisposable } from '../../../base/common/lifecycle.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { TokenizationRegistry } from '../../common/modes.js';\nimport { getColorPresentations } from '../colorPicker/color.js';\nimport { ColorDetector } from '../colorPicker/colorDetector.js';\nimport { ColorPickerModel } from '../colorPicker/colorPickerModel.js';\nimport { ColorPickerWidget } from '../colorPicker/colorPickerWidget.js';\nimport { HoverOperation } from './hoverOperation.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { coalesce } from '../../../base/common/arrays.js';\nimport { textLinkForeground } from '../../../platform/theme/common/colorRegistry.js';\nimport { Widget } from '../../../base/browser/ui/widget.js';\nimport { HoverWidget } from '../../../base/browser/ui/hover/hoverWidget.js';\nimport { MarkerHover, MarkerHoverParticipant } from './markerHoverParticipant.js';\nimport { MarkdownHover, MarkdownHoverParticipant } from './markdownHoverParticipant.js';\nclass ColorHover {\n constructor(range, color, provider) {\n this.range = range;\n this.color = color;\n this.provider = provider;\n }\n equals(other) {\n return false;\n }\n}\nclass HoverPartInfo {\n constructor(owner, data) {\n this.owner = owner;\n this.data = data;\n }\n}\nclass ModesContentComputer {\n constructor(editor, _markerHoverParticipant, _markdownHoverParticipant) {\n this._markerHoverParticipant = _markerHoverParticipant;\n this._markdownHoverParticipant = _markdownHoverParticipant;\n this._editor = editor;\n this._result = [];\n this._range = null;\n }\n setRange(range) {\n this._range = range;\n this._result = [];\n }\n clearResult() {\n this._result = [];\n }\n computeAsync(token) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._editor.hasModel() || !this._range) {\n return Promise.resolve([]);\n }\n const markdownHovers = yield this._markdownHoverParticipant.computeAsync(this._range, token);\n return markdownHovers.map(h => new HoverPartInfo(this._markdownHoverParticipant, h));\n });\n }\n computeSync() {\n if (!this._editor.hasModel() || !this._range) {\n return [];\n }\n const model = this._editor.getModel();\n const hoverRange = this._range;\n const lineNumber = hoverRange.startLineNumber;\n if (lineNumber > this._editor.getModel().getLineCount()) {\n // Illegal line number => no results\n return [];\n }\n const maxColumn = model.getLineMaxColumn(lineNumber);\n const lineDecorations = this._editor.getLineDecorations(lineNumber).filter((d) => {\n if (d.options.isWholeLine) {\n return true;\n }\n const startColumn = (d.range.startLineNumber === lineNumber) ? d.range.startColumn : 1;\n const endColumn = (d.range.endLineNumber === lineNumber) ? d.range.endColumn : maxColumn;\n if (startColumn > hoverRange.startColumn || hoverRange.endColumn > endColumn) {\n return false;\n }\n return true;\n });\n let result = [];\n const colorDetector = ColorDetector.get(this._editor);\n for (const d of lineDecorations) {\n const colorData = colorDetector.getColorData(d.range.getStartPosition());\n if (colorData) {\n const { color, range } = colorData.colorInfo;\n result.push(new HoverPartInfo(null, new ColorHover(Range.lift(range), color, colorData.provider)));\n break;\n }\n }\n const markdownHovers = this._markdownHoverParticipant.computeSync(this._range, lineDecorations);\n result = result.concat(markdownHovers.map(h => new HoverPartInfo(this._markdownHoverParticipant, h)));\n const markerHovers = this._markerHoverParticipant.computeSync(this._range, lineDecorations);\n result = result.concat(markerHovers.map(h => new HoverPartInfo(this._markerHoverParticipant, h)));\n return coalesce(result);\n }\n onResult(result, isFromSynchronousComputation) {\n // Always put synchronous messages before asynchronous ones\n if (isFromSynchronousComputation) {\n this._result = result.concat(this._result);\n }\n else {\n this._result = this._result.concat(result);\n }\n }\n getResult() {\n return this._result.slice(0);\n }\n getResultWithLoadingMessage() {\n if (this._range) {\n const loadingMessage = new HoverPartInfo(this._markdownHoverParticipant, this._markdownHoverParticipant.createLoadingMessage(this._range));\n return this._result.slice(0).concat([loadingMessage]);\n }\n return this._result.slice(0);\n }\n}\nexport class ModesContentHoverWidget extends Widget {\n constructor(editor, _hoverVisibleKey, instantiationService, _themeService) {\n super();\n this._hoverVisibleKey = _hoverVisibleKey;\n this._themeService = _themeService;\n // IContentWidget.allowEditorOverflow\n this.allowEditorOverflow = true;\n this._markerHoverParticipant = instantiationService.createInstance(MarkerHoverParticipant, editor, this);\n this._markdownHoverParticipant = instantiationService.createInstance(MarkdownHoverParticipant, editor, this);\n this._hover = this._register(new HoverWidget());\n this._id = ModesContentHoverWidget.ID;\n this._editor = editor;\n this._isVisible = false;\n this._stoleFocus = false;\n this._renderDisposable = null;\n this.onkeydown(this._hover.containerDomNode, (e) => {\n if (e.equals(9 /* Escape */)) {\n this.hide();\n }\n });\n this._register(this._editor.onDidChangeConfiguration((e) => {\n if (e.hasChanged(40 /* fontInfo */)) {\n this._updateFont();\n }\n }));\n this._editor.onDidLayoutChange(() => this.layout());\n this.layout();\n this._editor.addContentWidget(this);\n this._showAtPosition = null;\n this._showAtRange = null;\n this._stoleFocus = false;\n this._messages = [];\n this._lastRange = null;\n this._computer = new ModesContentComputer(this._editor, this._markerHoverParticipant, this._markdownHoverParticipant);\n this._highlightDecorations = [];\n this._isChangingDecorations = false;\n this._shouldFocus = false;\n this._colorPicker = null;\n this._hoverOperation = new HoverOperation(this._computer, result => this._withResult(result, true), null, result => this._withResult(result, false), this._editor.getOption(50 /* hover */).delay);\n this._register(dom.addStandardDisposableListener(this.getDomNode(), dom.EventType.FOCUS, () => {\n if (this._colorPicker) {\n this.getDomNode().classList.add('colorpicker-hover');\n }\n }));\n this._register(dom.addStandardDisposableListener(this.getDomNode(), dom.EventType.BLUR, () => {\n this.getDomNode().classList.remove('colorpicker-hover');\n }));\n this._register(editor.onDidChangeConfiguration(() => {\n this._hoverOperation.setHoverTime(this._editor.getOption(50 /* hover */).delay);\n }));\n this._register(TokenizationRegistry.onDidChange(() => {\n if (this._isVisible && this._lastRange && this._messages.length > 0) {\n this._messages = this._messages.map(msg => {\n var _a, _b;\n // If a color hover is visible, we need to update the message that\n // created it so that the color matches the last chosen color\n if (msg.data instanceof ColorHover && !!((_a = this._lastRange) === null || _a === void 0 ? void 0 : _a.intersectRanges(msg.data.range)) && ((_b = this._colorPicker) === null || _b === void 0 ? void 0 : _b.model.color)) {\n const color = this._colorPicker.model.color;\n const newColor = {\n red: color.rgba.r / 255,\n green: color.rgba.g / 255,\n blue: color.rgba.b / 255,\n alpha: color.rgba.a\n };\n return new HoverPartInfo(msg.owner, new ColorHover(msg.data.range, newColor, msg.data.provider));\n }\n else {\n return msg;\n }\n });\n this._hover.contentsDomNode.textContent = '';\n this._renderMessages(this._lastRange, this._messages);\n }\n }));\n }\n dispose() {\n this._hoverOperation.cancel();\n this._editor.removeContentWidget(this);\n super.dispose();\n }\n getId() {\n return this._id;\n }\n getDomNode() {\n return this._hover.containerDomNode;\n }\n showAt(position, range, focus) {\n // Position has changed\n this._showAtPosition = position;\n this._showAtRange = range;\n this._hoverVisibleKey.set(true);\n this._isVisible = true;\n this._hover.containerDomNode.classList.toggle('hidden', !this._isVisible);\n this._editor.layoutContentWidget(this);\n // Simply force a synchronous render on the editor\n // such that the widget does not really render with left = '0px'\n this._editor.render();\n this._stoleFocus = focus;\n if (focus) {\n this._hover.containerDomNode.focus();\n }\n }\n getPosition() {\n if (this._isVisible) {\n return {\n position: this._showAtPosition,\n range: this._showAtRange,\n preference: [\n 1 /* ABOVE */,\n 2 /* BELOW */\n ]\n };\n }\n return null;\n }\n _updateFont() {\n const codeClasses = Array.prototype.slice.call(this._hover.contentsDomNode.getElementsByClassName('code'));\n codeClasses.forEach(node => this._editor.applyFontInfo(node));\n }\n _updateContents(node) {\n this._hover.contentsDomNode.textContent = '';\n this._hover.contentsDomNode.appendChild(node);\n this._updateFont();\n this._editor.layoutContentWidget(this);\n this._hover.onContentsChanged();\n }\n layout() {\n const height = Math.max(this._editor.getLayoutInfo().height / 4, 250);\n const { fontSize, lineHeight } = this._editor.getOption(40 /* fontInfo */);\n this._hover.contentsDomNode.style.fontSize = `${fontSize}px`;\n this._hover.contentsDomNode.style.lineHeight = `${lineHeight}px`;\n this._hover.contentsDomNode.style.maxHeight = `${height}px`;\n this._hover.contentsDomNode.style.maxWidth = `${Math.max(this._editor.getLayoutInfo().width * 0.66, 500)}px`;\n }\n onModelDecorationsChanged() {\n if (this._isChangingDecorations) {\n return;\n }\n if (this._isVisible) {\n // The decorations have changed and the hover is visible,\n // we need to recompute the displayed text\n this._hoverOperation.cancel();\n this._computer.clearResult();\n if (!this._colorPicker) { // TODO@Michel ensure that displayed text for other decorations is computed even if color picker is in place\n this._hoverOperation.start(0 /* Delayed */);\n }\n }\n }\n startShowingAt(range, mode, focus) {\n if (this._lastRange && this._lastRange.equalsRange(range)) {\n // We have to show the widget at the exact same range as before, so no work is needed\n return;\n }\n this._hoverOperation.cancel();\n if (this._isVisible) {\n // The range might have changed, but the hover is visible\n // Instead of hiding it completely, filter out messages that are still in the new range and\n // kick off a new computation\n if (!this._showAtPosition || this._showAtPosition.lineNumber !== range.startLineNumber) {\n this.hide();\n }\n else {\n let filteredMessages = [];\n for (let i = 0, len = this._messages.length; i < len; i++) {\n const msg = this._messages[i];\n const rng = msg.data.range;\n if (rng && rng.startColumn <= range.startColumn && rng.endColumn >= range.endColumn) {\n filteredMessages.push(msg);\n }\n }\n if (filteredMessages.length > 0) {\n if (hoverContentsEquals(filteredMessages, this._messages)) {\n return;\n }\n this._renderMessages(range, filteredMessages);\n }\n else {\n this.hide();\n }\n }\n }\n this._lastRange = range;\n this._computer.setRange(range);\n this._shouldFocus = focus;\n this._hoverOperation.start(mode);\n }\n hide() {\n this._lastRange = null;\n this._hoverOperation.cancel();\n if (this._isVisible) {\n setTimeout(() => {\n // Give commands a chance to see the key\n if (!this._isVisible) {\n this._hoverVisibleKey.set(false);\n }\n }, 0);\n this._isVisible = false;\n this._hover.containerDomNode.classList.toggle('hidden', !this._isVisible);\n this._editor.layoutContentWidget(this);\n if (this._stoleFocus) {\n this._editor.focus();\n }\n }\n this._isChangingDecorations = true;\n this._highlightDecorations = this._editor.deltaDecorations(this._highlightDecorations, []);\n this._isChangingDecorations = false;\n if (this._renderDisposable) {\n this._renderDisposable.dispose();\n this._renderDisposable = null;\n }\n this._colorPicker = null;\n }\n isColorPickerVisible() {\n return !!this._colorPicker;\n }\n onContentsChanged() {\n this._hover.onContentsChanged();\n }\n _withResult(result, complete) {\n this._messages = result;\n if (this._lastRange && this._messages.length > 0) {\n this._renderMessages(this._lastRange, this._messages);\n }\n else if (complete) {\n this.hide();\n }\n }\n _renderMessages(renderRange, messages) {\n if (this._renderDisposable) {\n this._renderDisposable.dispose();\n this._renderDisposable = null;\n }\n this._colorPicker = null;\n // update column from which to show\n let renderColumn = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n let highlightRange = messages[0].data.range ? Range.lift(messages[0].data.range) : null;\n let fragment = document.createDocumentFragment();\n let containColorPicker = false;\n const disposables = new DisposableStore();\n const markerMessages = [];\n const markdownParts = [];\n messages.forEach((_msg) => {\n const msg = _msg.data;\n if (!msg.range) {\n return;\n }\n renderColumn = Math.min(renderColumn, msg.range.startColumn);\n highlightRange = highlightRange ? Range.plusRange(highlightRange, msg.range) : Range.lift(msg.range);\n if (msg instanceof ColorHover) {\n containColorPicker = true;\n const { red, green, blue, alpha } = msg.color;\n const rgba = new RGBA(Math.round(red * 255), Math.round(green * 255), Math.round(blue * 255), alpha);\n const color = new Color(rgba);\n if (!this._editor.hasModel()) {\n return;\n }\n const editorModel = this._editor.getModel();\n let range = new Range(msg.range.startLineNumber, msg.range.startColumn, msg.range.endLineNumber, msg.range.endColumn);\n let colorInfo = { range: msg.range, color: msg.color };\n // create blank olor picker model and widget first to ensure it's positioned correctly.\n const model = new ColorPickerModel(color, [], 0);\n const widget = new ColorPickerWidget(fragment, model, this._editor.getOption(125 /* pixelRatio */), this._themeService);\n getColorPresentations(editorModel, colorInfo, msg.provider, CancellationToken.None).then(colorPresentations => {\n model.colorPresentations = colorPresentations || [];\n if (!this._editor.hasModel()) {\n // gone...\n return;\n }\n const originalText = this._editor.getModel().getValueInRange(msg.range);\n model.guessColorPresentation(color, originalText);\n const updateEditorModel = () => {\n let textEdits;\n let newRange;\n if (model.presentation.textEdit) {\n textEdits = [model.presentation.textEdit];\n newRange = new Range(model.presentation.textEdit.range.startLineNumber, model.presentation.textEdit.range.startColumn, model.presentation.textEdit.range.endLineNumber, model.presentation.textEdit.range.endColumn);\n const trackedRange = this._editor.getModel()._setTrackedRange(null, newRange, 3 /* GrowsOnlyWhenTypingAfter */);\n this._editor.pushUndoStop();\n this._editor.executeEdits('colorpicker', textEdits);\n newRange = this._editor.getModel()._getTrackedRange(trackedRange) || newRange;\n }\n else {\n textEdits = [{ identifier: null, range, text: model.presentation.label, forceMoveMarkers: false }];\n newRange = range.setEndPosition(range.endLineNumber, range.startColumn + model.presentation.label.length);\n this._editor.pushUndoStop();\n this._editor.executeEdits('colorpicker', textEdits);\n }\n if (model.presentation.additionalTextEdits) {\n textEdits = [...model.presentation.additionalTextEdits];\n this._editor.executeEdits('colorpicker', textEdits);\n this.hide();\n }\n this._editor.pushUndoStop();\n range = newRange;\n };\n const updateColorPresentations = (color) => {\n return getColorPresentations(editorModel, {\n range: range,\n color: {\n red: color.rgba.r / 255,\n green: color.rgba.g / 255,\n blue: color.rgba.b / 255,\n alpha: color.rgba.a\n }\n }, msg.provider, CancellationToken.None).then((colorPresentations) => {\n model.colorPresentations = colorPresentations || [];\n });\n };\n const colorListener = model.onColorFlushed((color) => {\n updateColorPresentations(color).then(updateEditorModel);\n });\n const colorChangeListener = model.onDidChangeColor(updateColorPresentations);\n this._colorPicker = widget;\n this.showAt(range.getStartPosition(), range, this._shouldFocus);\n this._updateContents(fragment);\n this._colorPicker.layout();\n this._renderDisposable = combinedDisposable(colorListener, colorChangeListener, widget, disposables);\n });\n }\n else {\n if (msg instanceof MarkerHover) {\n markerMessages.push(msg);\n }\n else {\n if (msg instanceof MarkdownHover) {\n markdownParts.push(msg);\n }\n }\n }\n });\n if (markdownParts.length > 0) {\n disposables.add(this._markdownHoverParticipant.renderHoverParts(markdownParts, fragment));\n }\n if (markerMessages.length) {\n disposables.add(this._markerHoverParticipant.renderHoverParts(markerMessages, fragment));\n }\n this._renderDisposable = disposables;\n // show\n if (!containColorPicker && fragment.hasChildNodes()) {\n this.showAt(new Position(renderRange.startLineNumber, renderColumn), highlightRange, this._shouldFocus);\n this._updateContents(fragment);\n }\n this._isChangingDecorations = true;\n this._highlightDecorations = this._editor.deltaDecorations(this._highlightDecorations, highlightRange ? [{\n range: highlightRange,\n options: ModesContentHoverWidget._DECORATION_OPTIONS\n }] : []);\n this._isChangingDecorations = false;\n }\n}\nModesContentHoverWidget.ID = 'editor.contrib.modesContentHoverWidget';\nModesContentHoverWidget._DECORATION_OPTIONS = ModelDecorationOptions.register({\n className: 'hoverHighlight'\n});\nfunction hoverContentsEquals(first, second) {\n if (first.length !== second.length) {\n return false;\n }\n for (let i = 0; i < first.length; i++) {\n if (!first[i].data.equals(second[i].data)) {\n return false;\n }\n }\n return true;\n}\nregisterThemingParticipant((theme, collector) => {\n const linkFg = theme.getColor(textLinkForeground);\n if (linkFg) {\n collector.addRule(`.monaco-hover .hover-contents a.code-link span:hover { color: ${linkFg}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Widget } from '../../../base/browser/ui/widget.js';\nexport class GlyphHoverWidget extends Widget {\n constructor(id, editor) {\n super();\n this._id = id;\n this._editor = editor;\n this._isVisible = false;\n this._domNode = document.createElement('div');\n this._domNode.className = 'monaco-hover hidden';\n this._domNode.setAttribute('aria-hidden', 'true');\n this._domNode.setAttribute('role', 'tooltip');\n this._showAtLineNumber = -1;\n this._register(this._editor.onDidChangeConfiguration((e) => {\n if (e.hasChanged(40 /* fontInfo */)) {\n this.updateFont();\n }\n }));\n this._editor.addOverlayWidget(this);\n }\n get isVisible() {\n return this._isVisible;\n }\n set isVisible(value) {\n this._isVisible = value;\n this._domNode.classList.toggle('hidden', !this._isVisible);\n }\n getId() {\n return this._id;\n }\n getDomNode() {\n return this._domNode;\n }\n showAt(lineNumber) {\n this._showAtLineNumber = lineNumber;\n if (!this.isVisible) {\n this.isVisible = true;\n }\n const editorLayout = this._editor.getLayoutInfo();\n const topForLineNumber = this._editor.getTopForLineNumber(this._showAtLineNumber);\n const editorScrollTop = this._editor.getScrollTop();\n const lineHeight = this._editor.getOption(55 /* lineHeight */);\n const nodeHeight = this._domNode.clientHeight;\n const top = topForLineNumber - editorScrollTop - ((nodeHeight - lineHeight) / 2);\n this._domNode.style.left = `${editorLayout.glyphMarginLeft + editorLayout.glyphMarginWidth}px`;\n this._domNode.style.top = `${Math.max(Math.round(top), 0)}px`;\n }\n hide() {\n if (!this.isVisible) {\n return;\n }\n this.isVisible = false;\n }\n getPosition() {\n return null;\n }\n dispose() {\n this._editor.removeOverlayWidget(this);\n super.dispose();\n }\n updateFont() {\n const codeTags = Array.prototype.slice.call(this._domNode.getElementsByTagName('code'));\n const codeClasses = Array.prototype.slice.call(this._domNode.getElementsByClassName('code'));\n [...codeTags, ...codeClasses].forEach(node => this._editor.applyFontInfo(node));\n }\n updateContents(node) {\n this._domNode.textContent = '';\n this._domNode.appendChild(node);\n this.updateFont();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { $ } from '../../../base/browser/dom.js';\nimport { isEmptyMarkdownString } from '../../../base/common/htmlContent.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { HoverOperation } from './hoverOperation.js';\nimport { GlyphHoverWidget } from './hoverWidgets.js';\nimport { MarkdownRenderer } from '../../browser/core/markdownRenderer.js';\nimport { NullOpenerService } from '../../../platform/opener/common/opener.js';\nimport { asArray } from '../../../base/common/arrays.js';\nclass MarginComputer {\n constructor(editor) {\n this._editor = editor;\n this._lineNumber = -1;\n this._result = [];\n }\n setLineNumber(lineNumber) {\n this._lineNumber = lineNumber;\n this._result = [];\n }\n clearResult() {\n this._result = [];\n }\n computeSync() {\n const toHoverMessage = (contents) => {\n return {\n value: contents\n };\n };\n const lineDecorations = this._editor.getLineDecorations(this._lineNumber);\n const result = [];\n if (!lineDecorations) {\n return result;\n }\n for (const d of lineDecorations) {\n if (!d.options.glyphMarginClassName) {\n continue;\n }\n const hoverMessage = d.options.glyphMarginHoverMessage;\n if (!hoverMessage || isEmptyMarkdownString(hoverMessage)) {\n continue;\n }\n result.push(...asArray(hoverMessage).map(toHoverMessage));\n }\n return result;\n }\n onResult(result, isFromSynchronousComputation) {\n this._result = this._result.concat(result);\n }\n getResult() {\n return this._result;\n }\n getResultWithLoadingMessage() {\n return this.getResult();\n }\n}\nexport class ModesGlyphHoverWidget extends GlyphHoverWidget {\n constructor(editor, modeService, openerService = NullOpenerService) {\n super(ModesGlyphHoverWidget.ID, editor);\n this._renderDisposeables = this._register(new DisposableStore());\n this._messages = [];\n this._lastLineNumber = -1;\n this._markdownRenderer = this._register(new MarkdownRenderer({ editor: this._editor }, modeService, openerService));\n this._computer = new MarginComputer(this._editor);\n this._hoverOperation = new HoverOperation(this._computer, (result) => this._withResult(result), undefined, (result) => this._withResult(result), 300);\n }\n dispose() {\n this._hoverOperation.cancel();\n super.dispose();\n }\n onModelDecorationsChanged() {\n if (this.isVisible) {\n // The decorations have changed and the hover is visible,\n // we need to recompute the displayed text\n this._hoverOperation.cancel();\n this._computer.clearResult();\n this._hoverOperation.start(0 /* Delayed */);\n }\n }\n startShowingAt(lineNumber) {\n if (this._lastLineNumber === lineNumber) {\n // We have to show the widget at the exact same line number as before, so no work is needed\n return;\n }\n this._hoverOperation.cancel();\n this.hide();\n this._lastLineNumber = lineNumber;\n this._computer.setLineNumber(lineNumber);\n this._hoverOperation.start(0 /* Delayed */);\n }\n hide() {\n this._lastLineNumber = -1;\n this._hoverOperation.cancel();\n super.hide();\n }\n _withResult(result) {\n this._messages = result;\n if (this._messages.length > 0) {\n this._renderMessages(this._lastLineNumber, this._messages);\n }\n else {\n this.hide();\n }\n }\n _renderMessages(lineNumber, messages) {\n this._renderDisposeables.clear();\n const fragment = document.createDocumentFragment();\n for (const msg of messages) {\n const renderedContents = this._markdownRenderer.render(msg.value);\n this._renderDisposeables.add(renderedContents);\n fragment.appendChild($('div.hover-row', undefined, renderedContents.element));\n }\n this.updateContents(fragment);\n this.showAt(lineNumber);\n }\n}\nModesGlyphHoverWidget.ID = 'editor.contrib.modesGlyphHoverWidget';\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { localize } from '../../../nls.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { basename, extUri } from '../../../base/common/resources.js';\nimport { dispose } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { defaultGenerator } from '../../../base/common/idGenerator.js';\nimport { Range } from '../../common/core/range.js';\nimport { ResourceMap } from '../../../base/common/map.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nexport class OneReference {\n constructor(isProviderFirst, parent, link, _rangeCallback) {\n this.isProviderFirst = isProviderFirst;\n this.parent = parent;\n this.link = link;\n this._rangeCallback = _rangeCallback;\n this.id = defaultGenerator.nextId();\n }\n get uri() {\n return this.link.uri;\n }\n get range() {\n var _a, _b;\n return (_b = (_a = this._range) !== null && _a !== void 0 ? _a : this.link.targetSelectionRange) !== null && _b !== void 0 ? _b : this.link.range;\n }\n set range(value) {\n this._range = value;\n this._rangeCallback(this);\n }\n get ariaMessage() {\n var _a;\n const preview = (_a = this.parent.getPreview(this)) === null || _a === void 0 ? void 0 : _a.preview(this.range);\n if (!preview) {\n return localize('aria.oneReference', \"symbol in {0} on line {1} at column {2}\", basename(this.uri), this.range.startLineNumber, this.range.startColumn);\n }\n else {\n return localize({ key: 'aria.oneReference.preview', comment: ['Placeholders are: 0: filename, 1:line number, 2: column number, 3: preview snippet of source code'] }, \"symbol in {0} on line {1} at column {2}, {3}\", basename(this.uri), this.range.startLineNumber, this.range.startColumn, preview.value);\n }\n }\n}\nexport class FilePreview {\n constructor(_modelReference) {\n this._modelReference = _modelReference;\n }\n dispose() {\n this._modelReference.dispose();\n }\n preview(range, n = 8) {\n const model = this._modelReference.object.textEditorModel;\n if (!model) {\n return undefined;\n }\n const { startLineNumber, startColumn, endLineNumber, endColumn } = range;\n const word = model.getWordUntilPosition({ lineNumber: startLineNumber, column: startColumn - n });\n const beforeRange = new Range(startLineNumber, word.startColumn, startLineNumber, startColumn);\n const afterRange = new Range(endLineNumber, endColumn, endLineNumber, 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\n const before = model.getValueInRange(beforeRange).replace(/^\\s+/, '');\n const inside = model.getValueInRange(range);\n const after = model.getValueInRange(afterRange).replace(/\\s+$/, '');\n return {\n value: before + inside + after,\n highlight: { start: before.length, end: before.length + inside.length }\n };\n }\n}\nexport class FileReferences {\n constructor(parent, uri) {\n this.parent = parent;\n this.uri = uri;\n this.children = [];\n this._previews = new ResourceMap();\n }\n dispose() {\n dispose(this._previews.values());\n this._previews.clear();\n }\n getPreview(child) {\n return this._previews.get(child.uri);\n }\n get ariaMessage() {\n const len = this.children.length;\n if (len === 1) {\n return localize('aria.fileReferences.1', \"1 symbol in {0}, full path {1}\", basename(this.uri), this.uri.fsPath);\n }\n else {\n return localize('aria.fileReferences.N', \"{0} symbols in {1}, full path {2}\", len, basename(this.uri), this.uri.fsPath);\n }\n }\n resolve(textModelResolverService) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._previews.size !== 0) {\n return this;\n }\n for (let child of this.children) {\n if (this._previews.has(child.uri)) {\n continue;\n }\n try {\n const ref = yield textModelResolverService.createModelReference(child.uri);\n this._previews.set(child.uri, new FilePreview(ref));\n }\n catch (err) {\n onUnexpectedError(err);\n }\n }\n return this;\n });\n }\n}\nexport class ReferencesModel {\n constructor(links, title) {\n this.groups = [];\n this.references = [];\n this._onDidChangeReferenceRange = new Emitter();\n this.onDidChangeReferenceRange = this._onDidChangeReferenceRange.event;\n this._links = links;\n this._title = title;\n // grouping and sorting\n const [providersFirst] = links;\n links.sort(ReferencesModel._compareReferences);\n let current;\n for (let link of links) {\n if (!current || !extUri.isEqual(current.uri, link.uri, true)) {\n // new group\n current = new FileReferences(this, link.uri);\n this.groups.push(current);\n }\n // append, check for equality first!\n if (current.children.length === 0 || ReferencesModel._compareReferences(link, current.children[current.children.length - 1]) !== 0) {\n const oneRef = new OneReference(providersFirst === link, current, link, ref => this._onDidChangeReferenceRange.fire(ref));\n this.references.push(oneRef);\n current.children.push(oneRef);\n }\n }\n }\n dispose() {\n dispose(this.groups);\n this._onDidChangeReferenceRange.dispose();\n this.groups.length = 0;\n }\n clone() {\n return new ReferencesModel(this._links, this._title);\n }\n get title() {\n return this._title;\n }\n get isEmpty() {\n return this.groups.length === 0;\n }\n get ariaMessage() {\n if (this.isEmpty) {\n return localize('aria.result.0', \"No results found\");\n }\n else if (this.references.length === 1) {\n return localize('aria.result.1', \"Found 1 symbol in {0}\", this.references[0].uri.fsPath);\n }\n else if (this.groups.length === 1) {\n return localize('aria.result.n1', \"Found {0} symbols in {1}\", this.references.length, this.groups[0].uri.fsPath);\n }\n else {\n return localize('aria.result.nm', \"Found {0} symbols in {1} files\", this.references.length, this.groups.length);\n }\n }\n nextOrPreviousReference(reference, next) {\n let { parent } = reference;\n let idx = parent.children.indexOf(reference);\n let childCount = parent.children.length;\n let groupCount = parent.parent.groups.length;\n if (groupCount === 1 || next && idx + 1 < childCount || !next && idx > 0) {\n // cycling within one file\n if (next) {\n idx = (idx + 1) % childCount;\n }\n else {\n idx = (idx + childCount - 1) % childCount;\n }\n return parent.children[idx];\n }\n idx = parent.parent.groups.indexOf(parent);\n if (next) {\n idx = (idx + 1) % groupCount;\n return parent.parent.groups[idx].children[0];\n }\n else {\n idx = (idx + groupCount - 1) % groupCount;\n return parent.parent.groups[idx].children[parent.parent.groups[idx].children.length - 1];\n }\n }\n nearestReference(resource, position) {\n const nearest = this.references.map((ref, idx) => {\n return {\n idx,\n prefixLen: strings.commonPrefixLength(ref.uri.toString(), resource.toString()),\n offsetDist: Math.abs(ref.range.startLineNumber - position.lineNumber) * 100 + Math.abs(ref.range.startColumn - position.column)\n };\n }).sort((a, b) => {\n if (a.prefixLen > b.prefixLen) {\n return -1;\n }\n else if (a.prefixLen < b.prefixLen) {\n return 1;\n }\n else if (a.offsetDist < b.offsetDist) {\n return -1;\n }\n else if (a.offsetDist > b.offsetDist) {\n return 1;\n }\n else {\n return 0;\n }\n })[0];\n if (nearest) {\n return this.references[nearest.idx];\n }\n return undefined;\n }\n referenceAt(resource, position) {\n for (const ref of this.references) {\n if (ref.uri.toString() === resource.toString()) {\n if (Range.containsPosition(ref.range, position)) {\n return ref;\n }\n }\n }\n return undefined;\n }\n firstReference() {\n for (const ref of this.references) {\n if (ref.isProviderFirst) {\n return ref;\n }\n }\n return this.references[0];\n }\n static _compareReferences(a, b) {\n return extUri.compare(a.uri, b.uri) || Range.compareRangesUsingStarts(a.range, b.range);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { registerModelAndPositionCommand } from '../../browser/editorExtensions.js';\nimport { DefinitionProviderRegistry, ImplementationProviderRegistry, TypeDefinitionProviderRegistry, DeclarationProviderRegistry, ReferenceProviderRegistry } from '../../common/modes.js';\nimport { ReferencesModel } from './referencesModel.js';\nfunction getLocationLinks(model, position, registry, provide) {\n const provider = registry.ordered(model);\n // get results\n const promises = provider.map((provider) => {\n return Promise.resolve(provide(provider, model, position)).then(undefined, err => {\n onUnexpectedExternalError(err);\n return undefined;\n });\n });\n return Promise.all(promises).then(values => {\n const result = [];\n for (let value of values) {\n if (Array.isArray(value)) {\n result.push(...value);\n }\n else if (value) {\n result.push(value);\n }\n }\n return result;\n });\n}\nexport function getDefinitionsAtPosition(model, position, token) {\n return getLocationLinks(model, position, DefinitionProviderRegistry, (provider, model, position) => {\n return provider.provideDefinition(model, position, token);\n });\n}\nexport function getDeclarationsAtPosition(model, position, token) {\n return getLocationLinks(model, position, DeclarationProviderRegistry, (provider, model, position) => {\n return provider.provideDeclaration(model, position, token);\n });\n}\nexport function getImplementationsAtPosition(model, position, token) {\n return getLocationLinks(model, position, ImplementationProviderRegistry, (provider, model, position) => {\n return provider.provideImplementation(model, position, token);\n });\n}\nexport function getTypeDefinitionsAtPosition(model, position, token) {\n return getLocationLinks(model, position, TypeDefinitionProviderRegistry, (provider, model, position) => {\n return provider.provideTypeDefinition(model, position, token);\n });\n}\nexport function getReferencesAtPosition(model, position, compact, token) {\n return getLocationLinks(model, position, ReferenceProviderRegistry, (provider, model, position) => __awaiter(this, void 0, void 0, function* () {\n const result = yield provider.provideReferences(model, position, { includeDeclaration: true }, token);\n if (!compact || !result || result.length !== 2) {\n return result;\n }\n const resultWithoutDeclaration = yield provider.provideReferences(model, position, { includeDeclaration: false }, token);\n if (resultWithoutDeclaration && resultWithoutDeclaration.length === 1) {\n return resultWithoutDeclaration;\n }\n return result;\n }));\n}\n// -- API commands ----\nfunction _sortedAndDeduped(callback) {\n return __awaiter(this, void 0, void 0, function* () {\n const rawLinks = yield callback();\n const model = new ReferencesModel(rawLinks, '');\n const modelLinks = model.references.map(ref => ref.link);\n model.dispose();\n return modelLinks;\n });\n}\nregisterModelAndPositionCommand('_executeDefinitionProvider', (model, position) => _sortedAndDeduped(() => getDefinitionsAtPosition(model, position, CancellationToken.None)));\nregisterModelAndPositionCommand('_executeDeclarationProvider', (model, position) => _sortedAndDeduped(() => getDeclarationsAtPosition(model, position, CancellationToken.None)));\nregisterModelAndPositionCommand('_executeImplementationProvider', (model, position) => _sortedAndDeduped(() => getImplementationsAtPosition(model, position, CancellationToken.None)));\nregisterModelAndPositionCommand('_executeTypeDefinitionProvider', (model, position) => _sortedAndDeduped(() => getTypeDefinitionsAtPosition(model, position, CancellationToken.None)));\nregisterModelAndPositionCommand('_executeReferenceProvider', (model, position) => _sortedAndDeduped(() => getReferencesAtPosition(model, position, false, CancellationToken.None)));\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { ReferencesModel, FileReferences, OneReference } from '../referencesModel.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { IconLabel } from '../../../../base/browser/ui/iconLabel/iconLabel.js';\nimport { CountBadge } from '../../../../base/browser/ui/countBadge/countBadge.js';\nimport { ILabelService } from '../../../../platform/label/common/label.js';\nimport { IThemeService } from '../../../../platform/theme/common/themeService.js';\nimport { attachBadgeStyler } from '../../../../platform/theme/common/styler.js';\nimport * as dom from '../../../../base/browser/dom.js';\nimport { localize } from '../../../../nls.js';\nimport { getBaseLabel } from '../../../../base/common/labels.js';\nimport { dirname, basename } from '../../../../base/common/resources.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js';\nimport { FuzzyScore, createMatches } from '../../../../base/common/filters.js';\nimport { HighlightedLabel } from '../../../../base/browser/ui/highlightedlabel/highlightedLabel.js';\nlet DataSource = class DataSource {\n constructor(_resolverService) {\n this._resolverService = _resolverService;\n }\n hasChildren(element) {\n if (element instanceof ReferencesModel) {\n return true;\n }\n if (element instanceof FileReferences) {\n return true;\n }\n return false;\n }\n getChildren(element) {\n if (element instanceof ReferencesModel) {\n return element.groups;\n }\n if (element instanceof FileReferences) {\n return element.resolve(this._resolverService).then(val => {\n // if (element.failure) {\n // \t// refresh the element on failure so that\n // \t// we can update its rendering\n // \treturn tree.refresh(element).then(() => val.children);\n // }\n return val.children;\n });\n }\n throw new Error('bad tree');\n }\n};\nDataSource = __decorate([\n __param(0, ITextModelService)\n], DataSource);\nexport { DataSource };\n//#endregion\nexport class Delegate {\n getHeight() {\n return 23;\n }\n getTemplateId(element) {\n if (element instanceof FileReferences) {\n return FileReferencesRenderer.id;\n }\n else {\n return OneReferenceRenderer.id;\n }\n }\n}\nlet StringRepresentationProvider = class StringRepresentationProvider {\n constructor(_keybindingService) {\n this._keybindingService = _keybindingService;\n }\n getKeyboardNavigationLabel(element) {\n var _a;\n if (element instanceof OneReference) {\n const parts = (_a = element.parent.getPreview(element)) === null || _a === void 0 ? void 0 : _a.preview(element.range);\n if (parts) {\n return parts.value;\n }\n }\n // FileReferences or unresolved OneReference\n return basename(element.uri);\n }\n};\nStringRepresentationProvider = __decorate([\n __param(0, IKeybindingService)\n], StringRepresentationProvider);\nexport { StringRepresentationProvider };\nexport class IdentityProvider {\n getId(element) {\n return element instanceof OneReference ? element.id : element.uri;\n }\n}\n//#region render: File\nlet FileReferencesTemplate = class FileReferencesTemplate extends Disposable {\n constructor(container, _uriLabel, themeService) {\n super();\n this._uriLabel = _uriLabel;\n const parent = document.createElement('div');\n parent.classList.add('reference-file');\n this.file = this._register(new IconLabel(parent, { supportHighlights: true }));\n this.badge = new CountBadge(dom.append(parent, dom.$('.count')));\n this._register(attachBadgeStyler(this.badge, themeService));\n container.appendChild(parent);\n }\n set(element, matches) {\n let parent = dirname(element.uri);\n this.file.setLabel(getBaseLabel(element.uri), this._uriLabel.getUriLabel(parent, { relative: true }), { title: this._uriLabel.getUriLabel(element.uri), matches });\n const len = element.children.length;\n this.badge.setCount(len);\n if (len > 1) {\n this.badge.setTitleFormat(localize('referencesCount', \"{0} references\", len));\n }\n else {\n this.badge.setTitleFormat(localize('referenceCount', \"{0} reference\", len));\n }\n }\n};\nFileReferencesTemplate = __decorate([\n __param(1, ILabelService),\n __param(2, IThemeService)\n], FileReferencesTemplate);\nlet FileReferencesRenderer = class FileReferencesRenderer {\n constructor(_instantiationService) {\n this._instantiationService = _instantiationService;\n this.templateId = FileReferencesRenderer.id;\n }\n renderTemplate(container) {\n return this._instantiationService.createInstance(FileReferencesTemplate, container);\n }\n renderElement(node, index, template) {\n template.set(node.element, createMatches(node.filterData));\n }\n disposeTemplate(templateData) {\n templateData.dispose();\n }\n};\nFileReferencesRenderer.id = 'FileReferencesRenderer';\nFileReferencesRenderer = __decorate([\n __param(0, IInstantiationService)\n], FileReferencesRenderer);\nexport { FileReferencesRenderer };\n//#endregion\n//#region render: Reference\nclass OneReferenceTemplate {\n constructor(container) {\n this.label = new HighlightedLabel(container, false);\n }\n set(element, score) {\n var _a;\n const preview = (_a = element.parent.getPreview(element)) === null || _a === void 0 ? void 0 : _a.preview(element.range);\n if (!preview || !preview.value) {\n // this means we FAILED to resolve the document or the value is the empty string\n this.label.set(`${basename(element.uri)}:${element.range.startLineNumber + 1}:${element.range.startColumn + 1}`);\n }\n else {\n // render search match as highlight unless\n // we have score, then render the score\n const { value, highlight } = preview;\n if (score && !FuzzyScore.isDefault(score)) {\n this.label.element.classList.toggle('referenceMatch', false);\n this.label.set(value, createMatches(score));\n }\n else {\n this.label.element.classList.toggle('referenceMatch', true);\n this.label.set(value, [highlight]);\n }\n }\n }\n}\nexport class OneReferenceRenderer {\n constructor() {\n this.templateId = OneReferenceRenderer.id;\n }\n renderTemplate(container) {\n return new OneReferenceTemplate(container);\n }\n renderElement(node, index, templateData) {\n templateData.set(node.element, node.filterData);\n }\n disposeTemplate() {\n }\n}\nOneReferenceRenderer.id = 'OneReferenceRenderer';\n//#endregion\nexport class AccessibilityProvider {\n getWidgetAriaLabel() {\n return localize('treeAriaLabel', \"References\");\n }\n getAriaLabel(element) {\n return element.ariaMessage;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport './referencesWidget.css';\nimport * as dom from '../../../../base/browser/dom.js';\nimport { Color } from '../../../../base/common/color.js';\nimport { Emitter, Event } from '../../../../base/common/event.js';\nimport { dispose, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { Schemas } from '../../../../base/common/network.js';\nimport { basenameOrAuthority, dirname } from '../../../../base/common/resources.js';\nimport { EmbeddedCodeEditorWidget } from '../../../browser/widget/embeddedCodeEditorWidget.js';\nimport { Range } from '../../../common/core/range.js';\nimport { ModelDecorationOptions, TextModel } from '../../../common/model/textModel.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { AccessibilityProvider, DataSource, Delegate, FileReferencesRenderer, OneReferenceRenderer, StringRepresentationProvider, IdentityProvider } from './referencesTree.js';\nimport * as nls from '../../../../nls.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { ILabelService } from '../../../../platform/label/common/label.js';\nimport { WorkbenchAsyncDataTree } from '../../../../platform/list/browser/listService.js';\nimport { activeContrastBorder } from '../../../../platform/theme/common/colorRegistry.js';\nimport { IThemeService, registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport * as peekView from '../../peekView/peekView.js';\nimport { FileReferences, OneReference } from '../referencesModel.js';\nimport { SplitView, Sizing } from '../../../../base/browser/ui/splitview/splitview.js';\nimport { IUndoRedoService } from '../../../../platform/undoRedo/common/undoRedo.js';\nimport { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js';\nclass DecorationsManager {\n constructor(_editor, _model) {\n this._editor = _editor;\n this._model = _model;\n this._decorations = new Map();\n this._decorationIgnoreSet = new Set();\n this._callOnDispose = new DisposableStore();\n this._callOnModelChange = new DisposableStore();\n this._callOnDispose.add(this._editor.onDidChangeModel(() => this._onModelChanged()));\n this._onModelChanged();\n }\n dispose() {\n this._callOnModelChange.dispose();\n this._callOnDispose.dispose();\n this.removeDecorations();\n }\n _onModelChanged() {\n this._callOnModelChange.clear();\n const model = this._editor.getModel();\n if (!model) {\n return;\n }\n for (let ref of this._model.references) {\n if (ref.uri.toString() === model.uri.toString()) {\n this._addDecorations(ref.parent);\n return;\n }\n }\n }\n _addDecorations(reference) {\n if (!this._editor.hasModel()) {\n return;\n }\n this._callOnModelChange.add(this._editor.getModel().onDidChangeDecorations(() => this._onDecorationChanged()));\n const newDecorations = [];\n const newDecorationsActualIndex = [];\n for (let i = 0, len = reference.children.length; i < len; i++) {\n let oneReference = reference.children[i];\n if (this._decorationIgnoreSet.has(oneReference.id)) {\n continue;\n }\n if (oneReference.uri.toString() !== this._editor.getModel().uri.toString()) {\n continue;\n }\n newDecorations.push({\n range: oneReference.range,\n options: DecorationsManager.DecorationOptions\n });\n newDecorationsActualIndex.push(i);\n }\n const decorations = this._editor.deltaDecorations([], newDecorations);\n for (let i = 0; i < decorations.length; i++) {\n this._decorations.set(decorations[i], reference.children[newDecorationsActualIndex[i]]);\n }\n }\n _onDecorationChanged() {\n const toRemove = [];\n const model = this._editor.getModel();\n if (!model) {\n return;\n }\n for (let [decorationId, reference] of this._decorations) {\n const newRange = model.getDecorationRange(decorationId);\n if (!newRange) {\n continue;\n }\n let ignore = false;\n if (Range.equalsRange(newRange, reference.range)) {\n continue;\n }\n if (Range.spansMultipleLines(newRange)) {\n ignore = true;\n }\n else {\n const lineLength = reference.range.endColumn - reference.range.startColumn;\n const newLineLength = newRange.endColumn - newRange.startColumn;\n if (lineLength !== newLineLength) {\n ignore = true;\n }\n }\n if (ignore) {\n this._decorationIgnoreSet.add(reference.id);\n toRemove.push(decorationId);\n }\n else {\n reference.range = newRange;\n }\n }\n for (let i = 0, len = toRemove.length; i < len; i++) {\n this._decorations.delete(toRemove[i]);\n }\n this._editor.deltaDecorations(toRemove, []);\n }\n removeDecorations() {\n this._editor.deltaDecorations([...this._decorations.keys()], []);\n this._decorations.clear();\n }\n}\nDecorationsManager.DecorationOptions = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'reference-decoration'\n});\nexport class LayoutData {\n constructor() {\n this.ratio = 0.7;\n this.heightInLines = 18;\n }\n static fromJSON(raw) {\n let ratio;\n let heightInLines;\n try {\n const data = JSON.parse(raw);\n ratio = data.ratio;\n heightInLines = data.heightInLines;\n }\n catch (_a) {\n //\n }\n return {\n ratio: ratio || 0.7,\n heightInLines: heightInLines || 18\n };\n }\n}\nclass ReferencesTree extends WorkbenchAsyncDataTree {\n}\n/**\n * ZoneWidget that is shown inside the editor\n */\nlet ReferenceWidget = class ReferenceWidget extends peekView.PeekViewWidget {\n constructor(editor, _defaultTreeKeyboardSupport, layoutData, themeService, _textModelResolverService, _instantiationService, _peekViewService, _uriLabel, _undoRedoService, _keybindingService) {\n super(editor, { showFrame: false, showArrow: true, isResizeable: true, isAccessible: true }, _instantiationService);\n this._defaultTreeKeyboardSupport = _defaultTreeKeyboardSupport;\n this.layoutData = layoutData;\n this._textModelResolverService = _textModelResolverService;\n this._instantiationService = _instantiationService;\n this._peekViewService = _peekViewService;\n this._uriLabel = _uriLabel;\n this._undoRedoService = _undoRedoService;\n this._keybindingService = _keybindingService;\n this._disposeOnNewModel = new DisposableStore();\n this._callOnDispose = new DisposableStore();\n this._onDidSelectReference = new Emitter();\n this.onDidSelectReference = this._onDidSelectReference.event;\n this._dim = new dom.Dimension(0, 0);\n this._applyTheme(themeService.getColorTheme());\n this._callOnDispose.add(themeService.onDidColorThemeChange(this._applyTheme.bind(this)));\n this._peekViewService.addExclusiveWidget(editor, this);\n this.create();\n }\n dispose() {\n this.setModel(undefined);\n this._callOnDispose.dispose();\n this._disposeOnNewModel.dispose();\n dispose(this._preview);\n dispose(this._previewNotAvailableMessage);\n dispose(this._tree);\n dispose(this._previewModelReference);\n this._splitView.dispose();\n super.dispose();\n }\n _applyTheme(theme) {\n const borderColor = theme.getColor(peekView.peekViewBorder) || Color.transparent;\n this.style({\n arrowColor: borderColor,\n frameColor: borderColor,\n headerBackgroundColor: theme.getColor(peekView.peekViewTitleBackground) || Color.transparent,\n primaryHeadingColor: theme.getColor(peekView.peekViewTitleForeground),\n secondaryHeadingColor: theme.getColor(peekView.peekViewTitleInfoForeground)\n });\n }\n show(where) {\n this.editor.revealRangeInCenterIfOutsideViewport(where, 0 /* Smooth */);\n super.show(where, this.layoutData.heightInLines || 18);\n }\n focusOnReferenceTree() {\n this._tree.domFocus();\n }\n focusOnPreviewEditor() {\n this._preview.focus();\n }\n isPreviewEditorFocused() {\n return this._preview.hasTextFocus();\n }\n _onTitleClick(e) {\n if (this._preview && this._preview.getModel()) {\n this._onDidSelectReference.fire({\n element: this._getFocusedReference(),\n kind: e.ctrlKey || e.metaKey || e.altKey ? 'side' : 'open',\n source: 'title'\n });\n }\n }\n _fillBody(containerElement) {\n this.setCssClass('reference-zone-widget');\n // message pane\n this._messageContainer = dom.append(containerElement, dom.$('div.messages'));\n dom.hide(this._messageContainer);\n this._splitView = new SplitView(containerElement, { orientation: 1 /* HORIZONTAL */ });\n // editor\n this._previewContainer = dom.append(containerElement, dom.$('div.preview.inline'));\n let options = {\n scrollBeyondLastLine: false,\n scrollbar: {\n verticalScrollbarSize: 14,\n horizontal: 'auto',\n useShadows: true,\n verticalHasArrows: false,\n horizontalHasArrows: false,\n alwaysConsumeMouseWheel: false\n },\n overviewRulerLanes: 2,\n fixedOverflowWidgets: true,\n minimap: {\n enabled: false\n }\n };\n this._preview = this._instantiationService.createInstance(EmbeddedCodeEditorWidget, this._previewContainer, options, this.editor);\n dom.hide(this._previewContainer);\n this._previewNotAvailableMessage = new TextModel(nls.localize('missingPreviewMessage', \"no preview available\"), TextModel.DEFAULT_CREATION_OPTIONS, null, null, this._undoRedoService);\n // tree\n this._treeContainer = dom.append(containerElement, dom.$('div.ref-tree.inline'));\n const treeOptions = {\n keyboardSupport: this._defaultTreeKeyboardSupport,\n accessibilityProvider: new AccessibilityProvider(),\n keyboardNavigationLabelProvider: this._instantiationService.createInstance(StringRepresentationProvider),\n identityProvider: new IdentityProvider(),\n openOnSingleClick: true,\n selectionNavigation: true,\n overrideStyles: {\n listBackground: peekView.peekViewResultsBackground\n }\n };\n if (this._defaultTreeKeyboardSupport) {\n // the tree will consume `Escape` and prevent the widget from closing\n this._callOnDispose.add(dom.addStandardDisposableListener(this._treeContainer, 'keydown', (e) => {\n if (e.equals(9 /* Escape */)) {\n this._keybindingService.dispatchEvent(e, e.target);\n e.stopPropagation();\n }\n }, true));\n }\n this._tree = this._instantiationService.createInstance(ReferencesTree, 'ReferencesWidget', this._treeContainer, new Delegate(), [\n this._instantiationService.createInstance(FileReferencesRenderer),\n this._instantiationService.createInstance(OneReferenceRenderer),\n ], this._instantiationService.createInstance(DataSource), treeOptions);\n // split stuff\n this._splitView.addView({\n onDidChange: Event.None,\n element: this._previewContainer,\n minimumSize: 200,\n maximumSize: Number.MAX_VALUE,\n layout: (width) => {\n this._preview.layout({ height: this._dim.height, width });\n }\n }, Sizing.Distribute);\n this._splitView.addView({\n onDidChange: Event.None,\n element: this._treeContainer,\n minimumSize: 100,\n maximumSize: Number.MAX_VALUE,\n layout: (width) => {\n this._treeContainer.style.height = `${this._dim.height}px`;\n this._treeContainer.style.width = `${width}px`;\n this._tree.layout(this._dim.height, width);\n }\n }, Sizing.Distribute);\n this._disposables.add(this._splitView.onDidSashChange(() => {\n if (this._dim.width) {\n this.layoutData.ratio = this._splitView.getViewSize(0) / this._dim.width;\n }\n }, undefined));\n // listen on selection and focus\n let onEvent = (element, kind) => {\n if (element instanceof OneReference) {\n if (kind === 'show') {\n this._revealReference(element, false);\n }\n this._onDidSelectReference.fire({ element, kind, source: 'tree' });\n }\n };\n this._tree.onDidOpen(e => {\n if (e.sideBySide) {\n onEvent(e.element, 'side');\n }\n else if (e.editorOptions.pinned) {\n onEvent(e.element, 'goto');\n }\n else {\n onEvent(e.element, 'show');\n }\n });\n dom.hide(this._treeContainer);\n }\n _onWidth(width) {\n if (this._dim) {\n this._doLayoutBody(this._dim.height, width);\n }\n }\n _doLayoutBody(heightInPixel, widthInPixel) {\n super._doLayoutBody(heightInPixel, widthInPixel);\n this._dim = new dom.Dimension(widthInPixel, heightInPixel);\n this.layoutData.heightInLines = this._viewZone ? this._viewZone.heightInLines : this.layoutData.heightInLines;\n this._splitView.layout(widthInPixel);\n this._splitView.resizeView(0, widthInPixel * this.layoutData.ratio);\n }\n setSelection(selection) {\n return this._revealReference(selection, true).then(() => {\n if (!this._model) {\n // disposed\n return;\n }\n // show in tree\n this._tree.setSelection([selection]);\n this._tree.setFocus([selection]);\n });\n }\n setModel(newModel) {\n // clean up\n this._disposeOnNewModel.clear();\n this._model = newModel;\n if (this._model) {\n return this._onNewModel();\n }\n return Promise.resolve();\n }\n _onNewModel() {\n if (!this._model) {\n return Promise.resolve(undefined);\n }\n if (this._model.isEmpty) {\n this.setTitle('');\n this._messageContainer.innerText = nls.localize('noResults', \"No results\");\n dom.show(this._messageContainer);\n return Promise.resolve(undefined);\n }\n dom.hide(this._messageContainer);\n this._decorationsManager = new DecorationsManager(this._preview, this._model);\n this._disposeOnNewModel.add(this._decorationsManager);\n // listen on model changes\n this._disposeOnNewModel.add(this._model.onDidChangeReferenceRange(reference => this._tree.rerender(reference)));\n // listen on editor\n this._disposeOnNewModel.add(this._preview.onMouseDown(e => {\n const { event, target } = e;\n if (event.detail !== 2) {\n return;\n }\n const element = this._getFocusedReference();\n if (!element) {\n return;\n }\n this._onDidSelectReference.fire({\n element: { uri: element.uri, range: target.range },\n kind: (event.ctrlKey || event.metaKey || event.altKey) ? 'side' : 'open',\n source: 'editor'\n });\n }));\n // make sure things are rendered\n this.container.classList.add('results-loaded');\n dom.show(this._treeContainer);\n dom.show(this._previewContainer);\n this._splitView.layout(this._dim.width);\n this.focusOnReferenceTree();\n // pick input and a reference to begin with\n return this._tree.setInput(this._model.groups.length === 1 ? this._model.groups[0] : this._model);\n }\n _getFocusedReference() {\n const [element] = this._tree.getFocus();\n if (element instanceof OneReference) {\n return element;\n }\n else if (element instanceof FileReferences) {\n if (element.children.length > 0) {\n return element.children[0];\n }\n }\n return undefined;\n }\n revealReference(reference) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this._revealReference(reference, false);\n this._onDidSelectReference.fire({ element: reference, kind: 'goto', source: 'tree' });\n });\n }\n _revealReference(reference, revealParent) {\n return __awaiter(this, void 0, void 0, function* () {\n // check if there is anything to do...\n if (this._revealedReference === reference) {\n return;\n }\n this._revealedReference = reference;\n // Update widget header\n if (reference.uri.scheme !== Schemas.inMemory) {\n this.setTitle(basenameOrAuthority(reference.uri), this._uriLabel.getUriLabel(dirname(reference.uri)));\n }\n else {\n this.setTitle(nls.localize('peekView.alternateTitle', \"References\"));\n }\n const promise = this._textModelResolverService.createModelReference(reference.uri);\n if (this._tree.getInput() === reference.parent) {\n this._tree.reveal(reference);\n }\n else {\n if (revealParent) {\n this._tree.reveal(reference.parent);\n }\n yield this._tree.expand(reference.parent);\n this._tree.reveal(reference);\n }\n const ref = yield promise;\n if (!this._model) {\n // disposed\n ref.dispose();\n return;\n }\n dispose(this._previewModelReference);\n // show in editor\n const model = ref.object;\n if (model) {\n const scrollType = this._preview.getModel() === model.textEditorModel ? 0 /* Smooth */ : 1 /* Immediate */;\n const sel = Range.lift(reference.range).collapseToStart();\n this._previewModelReference = ref;\n this._preview.setModel(model.textEditorModel);\n this._preview.setSelection(sel);\n this._preview.revealRangeInCenter(sel, scrollType);\n }\n else {\n this._preview.setModel(this._previewNotAvailableMessage);\n ref.dispose();\n }\n });\n }\n};\nReferenceWidget = __decorate([\n __param(3, IThemeService),\n __param(4, ITextModelService),\n __param(5, IInstantiationService),\n __param(6, peekView.IPeekViewService),\n __param(7, ILabelService),\n __param(8, IUndoRedoService),\n __param(9, IKeybindingService)\n], ReferenceWidget);\nexport { ReferenceWidget };\n// theming\nregisterThemingParticipant((theme, collector) => {\n const findMatchHighlightColor = theme.getColor(peekView.peekViewResultsMatchHighlight);\n if (findMatchHighlightColor) {\n collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { background-color: ${findMatchHighlightColor}; }`);\n }\n const referenceHighlightColor = theme.getColor(peekView.peekViewEditorMatchHighlight);\n if (referenceHighlightColor) {\n collector.addRule(`.monaco-editor .reference-zone-widget .preview .reference-decoration { background-color: ${referenceHighlightColor}; }`);\n }\n const referenceHighlightBorder = theme.getColor(peekView.peekViewEditorMatchHighlightBorder);\n if (referenceHighlightBorder) {\n collector.addRule(`.monaco-editor .reference-zone-widget .preview .reference-decoration { border: 2px solid ${referenceHighlightBorder}; box-sizing: border-box; }`);\n }\n const hcOutline = theme.getColor(activeContrastBorder);\n if (hcOutline) {\n collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .referenceMatch .highlight { border: 1px dotted ${hcOutline}; box-sizing: border-box; }`);\n }\n const resultsBackground = theme.getColor(peekView.peekViewResultsBackground);\n if (resultsBackground) {\n collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree { background-color: ${resultsBackground}; }`);\n }\n const resultsMatchForeground = theme.getColor(peekView.peekViewResultsMatchForeground);\n if (resultsMatchForeground) {\n collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree { color: ${resultsMatchForeground}; }`);\n }\n const resultsFileForeground = theme.getColor(peekView.peekViewResultsFileForeground);\n if (resultsFileForeground) {\n collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .reference-file { color: ${resultsFileForeground}; }`);\n }\n const resultsSelectedBackground = theme.getColor(peekView.peekViewResultsSelectionBackground);\n if (resultsSelectedBackground) {\n collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows > .monaco-list-row.selected:not(.highlighted) { background-color: ${resultsSelectedBackground}; }`);\n }\n const resultsSelectedForeground = theme.getColor(peekView.peekViewResultsSelectionForeground);\n if (resultsSelectedForeground) {\n collector.addRule(`.monaco-editor .reference-zone-widget .ref-tree .monaco-list:focus .monaco-list-rows > .monaco-list-row.selected:not(.highlighted) { color: ${resultsSelectedForeground} !important; }`);\n }\n const editorBackground = theme.getColor(peekView.peekViewEditorBackground);\n if (editorBackground) {\n collector.addRule(`.monaco-editor .reference-zone-widget .preview .monaco-editor .monaco-editor-background,` +\n `.monaco-editor .reference-zone-widget .preview .monaco-editor .inputarea.ime-input {` +\n `\tbackground-color: ${editorBackground};` +\n `}`);\n }\n const editorGutterBackground = theme.getColor(peekView.peekViewEditorGutterBackground);\n if (editorGutterBackground) {\n collector.addRule(`.monaco-editor .reference-zone-widget .preview .monaco-editor .margin {` +\n `\tbackground-color: ${editorGutterBackground};` +\n `}`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../../../nls.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IContextKeyService, RawContextKey, ContextKeyExpr } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { IStorageService } from '../../../../platform/storage/common/storage.js';\nimport { OneReference } from '../referencesModel.js';\nimport { ReferenceWidget, LayoutData } from './referencesWidget.js';\nimport { Range } from '../../../common/core/range.js';\nimport { Position } from '../../../common/core/position.js';\nimport { INotificationService } from '../../../../platform/notification/common/notification.js';\nimport { createCancelablePromise } from '../../../../base/common/async.js';\nimport { getOuterEditor, PeekContext } from '../../peekView/peekView.js';\nimport { IListService, WorkbenchListFocusContextKey } from '../../../../platform/list/browser/listService.js';\nimport { KeybindingsRegistry } from '../../../../platform/keybinding/common/keybindingsRegistry.js';\nimport { KeyChord } from '../../../../base/common/keyCodes.js';\nimport { CommandsRegistry } from '../../../../platform/commands/common/commands.js';\nexport const ctxReferenceSearchVisible = new RawContextKey('referenceSearchVisible', false, nls.localize('referenceSearchVisible', \"Whether reference peek is visible, like 'Peek References' or 'Peek Definition'\"));\nlet ReferencesController = class ReferencesController {\n constructor(_defaultTreeKeyboardSupport, _editor, contextKeyService, _editorService, _notificationService, _instantiationService, _storageService, _configurationService) {\n this._defaultTreeKeyboardSupport = _defaultTreeKeyboardSupport;\n this._editor = _editor;\n this._editorService = _editorService;\n this._notificationService = _notificationService;\n this._instantiationService = _instantiationService;\n this._storageService = _storageService;\n this._configurationService = _configurationService;\n this._disposables = new DisposableStore();\n this._requestIdPool = 0;\n this._ignoreModelChangeEvent = false;\n this._referenceSearchVisible = ctxReferenceSearchVisible.bindTo(contextKeyService);\n }\n static get(editor) {\n return editor.getContribution(ReferencesController.ID);\n }\n dispose() {\n var _a, _b;\n this._referenceSearchVisible.reset();\n this._disposables.dispose();\n (_a = this._widget) === null || _a === void 0 ? void 0 : _a.dispose();\n (_b = this._model) === null || _b === void 0 ? void 0 : _b.dispose();\n this._widget = undefined;\n this._model = undefined;\n }\n toggleWidget(range, modelPromise, peekMode) {\n // close current widget and return early is position didn't change\n let widgetPosition;\n if (this._widget) {\n widgetPosition = this._widget.position;\n }\n this.closeWidget();\n if (!!widgetPosition && range.containsPosition(widgetPosition)) {\n return;\n }\n this._peekMode = peekMode;\n this._referenceSearchVisible.set(true);\n // close the widget on model/mode changes\n this._disposables.add(this._editor.onDidChangeModelLanguage(() => { this.closeWidget(); }));\n this._disposables.add(this._editor.onDidChangeModel(() => {\n if (!this._ignoreModelChangeEvent) {\n this.closeWidget();\n }\n }));\n const storageKey = 'peekViewLayout';\n const data = LayoutData.fromJSON(this._storageService.get(storageKey, 0 /* GLOBAL */, '{}'));\n this._widget = this._instantiationService.createInstance(ReferenceWidget, this._editor, this._defaultTreeKeyboardSupport, data);\n this._widget.setTitle(nls.localize('labelLoading', \"Loading...\"));\n this._widget.show(range);\n this._disposables.add(this._widget.onDidClose(() => {\n modelPromise.cancel();\n if (this._widget) {\n this._storageService.store(storageKey, JSON.stringify(this._widget.layoutData), 0 /* GLOBAL */, 1 /* MACHINE */);\n this._widget = undefined;\n }\n this.closeWidget();\n }));\n this._disposables.add(this._widget.onDidSelectReference(event => {\n let { element, kind } = event;\n if (!element) {\n return;\n }\n switch (kind) {\n case 'open':\n if (event.source !== 'editor' || !this._configurationService.getValue('editor.stablePeek')) {\n // when stable peek is configured we don't close\n // the peek window on selecting the editor\n this.openReference(element, false, false);\n }\n break;\n case 'side':\n this.openReference(element, true, false);\n break;\n case 'goto':\n if (peekMode) {\n this._gotoReference(element);\n }\n else {\n this.openReference(element, false, true);\n }\n break;\n }\n }));\n const requestId = ++this._requestIdPool;\n modelPromise.then(model => {\n var _a;\n // still current request? widget still open?\n if (requestId !== this._requestIdPool || !this._widget) {\n model.dispose();\n return undefined;\n }\n (_a = this._model) === null || _a === void 0 ? void 0 : _a.dispose();\n this._model = model;\n // show widget\n return this._widget.setModel(this._model).then(() => {\n if (this._widget && this._model && this._editor.hasModel()) { // might have been closed\n // set title\n if (!this._model.isEmpty) {\n this._widget.setMetaTitle(nls.localize('metaTitle.N', \"{0} ({1})\", this._model.title, this._model.references.length));\n }\n else {\n this._widget.setMetaTitle('');\n }\n // set 'best' selection\n let uri = this._editor.getModel().uri;\n let pos = new Position(range.startLineNumber, range.startColumn);\n let selection = this._model.nearestReference(uri, pos);\n if (selection) {\n return this._widget.setSelection(selection).then(() => {\n if (this._widget && this._editor.getOption(73 /* peekWidgetDefaultFocus */) === 'editor') {\n this._widget.focusOnPreviewEditor();\n }\n });\n }\n }\n return undefined;\n });\n }, error => {\n this._notificationService.error(error);\n });\n }\n changeFocusBetweenPreviewAndReferences() {\n if (!this._widget) {\n // can be called while still resolving...\n return;\n }\n if (this._widget.isPreviewEditorFocused()) {\n this._widget.focusOnReferenceTree();\n }\n else {\n this._widget.focusOnPreviewEditor();\n }\n }\n goToNextOrPreviousReference(fwd) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._editor.hasModel() || !this._model || !this._widget) {\n // can be called while still resolving...\n return;\n }\n const currentPosition = this._widget.position;\n if (!currentPosition) {\n return;\n }\n const source = this._model.nearestReference(this._editor.getModel().uri, currentPosition);\n if (!source) {\n return;\n }\n const target = this._model.nextOrPreviousReference(source, fwd);\n const editorFocus = this._editor.hasTextFocus();\n const previewEditorFocus = this._widget.isPreviewEditorFocused();\n yield this._widget.setSelection(target);\n yield this._gotoReference(target);\n if (editorFocus) {\n this._editor.focus();\n }\n else if (this._widget && previewEditorFocus) {\n this._widget.focusOnPreviewEditor();\n }\n });\n }\n revealReference(reference) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._editor.hasModel() || !this._model || !this._widget) {\n // can be called while still resolving...\n return;\n }\n yield this._widget.revealReference(reference);\n });\n }\n closeWidget(focusEditor = true) {\n var _a, _b;\n (_a = this._widget) === null || _a === void 0 ? void 0 : _a.dispose();\n (_b = this._model) === null || _b === void 0 ? void 0 : _b.dispose();\n this._referenceSearchVisible.reset();\n this._disposables.clear();\n this._widget = undefined;\n this._model = undefined;\n if (focusEditor) {\n this._editor.focus();\n }\n this._requestIdPool += 1; // Cancel pending requests\n }\n _gotoReference(ref) {\n if (this._widget) {\n this._widget.hide();\n }\n this._ignoreModelChangeEvent = true;\n const range = Range.lift(ref.range).collapseToStart();\n return this._editorService.openCodeEditor({\n resource: ref.uri,\n options: { selection: range }\n }, this._editor).then(openedEditor => {\n var _a;\n this._ignoreModelChangeEvent = false;\n if (!openedEditor || !this._widget) {\n // something went wrong...\n this.closeWidget();\n return;\n }\n if (this._editor === openedEditor) {\n //\n this._widget.show(range);\n this._widget.focusOnReferenceTree();\n }\n else {\n // we opened a different editor instance which means a different controller instance.\n // therefore we stop with this controller and continue with the other\n const other = ReferencesController.get(openedEditor);\n const model = this._model.clone();\n this.closeWidget();\n openedEditor.focus();\n other.toggleWidget(range, createCancelablePromise(_ => Promise.resolve(model)), (_a = this._peekMode) !== null && _a !== void 0 ? _a : false);\n }\n }, (err) => {\n this._ignoreModelChangeEvent = false;\n onUnexpectedError(err);\n });\n }\n openReference(ref, sideBySide, pinned) {\n // clear stage\n if (!sideBySide) {\n this.closeWidget();\n }\n const { uri, range } = ref;\n this._editorService.openCodeEditor({\n resource: uri,\n options: { selection: range, pinned }\n }, this._editor, sideBySide);\n }\n};\nReferencesController.ID = 'editor.contrib.referencesController';\nReferencesController = __decorate([\n __param(2, IContextKeyService),\n __param(3, ICodeEditorService),\n __param(4, INotificationService),\n __param(5, IInstantiationService),\n __param(6, IStorageService),\n __param(7, IConfigurationService)\n], ReferencesController);\nexport { ReferencesController };\nfunction withController(accessor, fn) {\n const outerEditor = getOuterEditor(accessor);\n if (!outerEditor) {\n return;\n }\n let controller = ReferencesController.get(outerEditor);\n if (controller) {\n fn(controller);\n }\n}\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n id: 'togglePeekWidgetFocus',\n weight: 100 /* EditorContrib */,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 60 /* F2 */),\n when: ContextKeyExpr.or(ctxReferenceSearchVisible, PeekContext.inPeekEditor),\n handler(accessor) {\n withController(accessor, controller => {\n controller.changeFocusBetweenPreviewAndReferences();\n });\n }\n});\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n id: 'goToNextReference',\n weight: 100 /* EditorContrib */ - 10,\n primary: 62 /* F4 */,\n secondary: [70 /* F12 */],\n when: ContextKeyExpr.or(ctxReferenceSearchVisible, PeekContext.inPeekEditor),\n handler(accessor) {\n withController(accessor, controller => {\n controller.goToNextOrPreviousReference(true);\n });\n }\n});\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n id: 'goToPreviousReference',\n weight: 100 /* EditorContrib */ - 10,\n primary: 1024 /* Shift */ | 62 /* F4 */,\n secondary: [1024 /* Shift */ | 70 /* F12 */],\n when: ContextKeyExpr.or(ctxReferenceSearchVisible, PeekContext.inPeekEditor),\n handler(accessor) {\n withController(accessor, controller => {\n controller.goToNextOrPreviousReference(false);\n });\n }\n});\n// commands that aren't needed anymore because there is now ContextKeyExpr.OR\nCommandsRegistry.registerCommandAlias('goToNextReferenceFromEmbeddedEditor', 'goToNextReference');\nCommandsRegistry.registerCommandAlias('goToPreviousReferenceFromEmbeddedEditor', 'goToPreviousReference');\n// close\nCommandsRegistry.registerCommandAlias('closeReferenceSearchEditor', 'closeReferenceSearch');\nCommandsRegistry.registerCommand('closeReferenceSearch', accessor => withController(accessor, controller => controller.closeWidget()));\nKeybindingsRegistry.registerKeybindingRule({\n id: 'closeReferenceSearch',\n weight: 100 /* EditorContrib */ - 101,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */],\n when: ContextKeyExpr.and(PeekContext.inPeekEditor, ContextKeyExpr.not('config.editor.stablePeek'))\n});\nKeybindingsRegistry.registerKeybindingRule({\n id: 'closeReferenceSearch',\n weight: 200 /* WorkbenchContrib */ + 50,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */],\n when: ContextKeyExpr.and(ctxReferenceSearchVisible, ContextKeyExpr.not('config.editor.stablePeek'))\n});\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n id: 'revealReference',\n weight: 200 /* WorkbenchContrib */,\n primary: 3 /* Enter */,\n mac: {\n primary: 3 /* Enter */,\n secondary: [2048 /* CtrlCmd */ | 18 /* DownArrow */]\n },\n when: ContextKeyExpr.and(ctxReferenceSearchVisible, WorkbenchListFocusContextKey),\n handler(accessor) {\n var _a;\n const listService = accessor.get(IListService);\n const focus = (_a = listService.lastFocusedList) === null || _a === void 0 ? void 0 : _a.getFocus();\n if (Array.isArray(focus) && focus[0] instanceof OneReference) {\n withController(accessor, controller => controller.revealReference(focus[0]));\n }\n }\n});\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n id: 'openReferenceToSide',\n weight: 100 /* EditorContrib */,\n primary: 2048 /* CtrlCmd */ | 3 /* Enter */,\n mac: {\n primary: 256 /* WinCtrl */ | 3 /* Enter */\n },\n when: ContextKeyExpr.and(ctxReferenceSearchVisible, WorkbenchListFocusContextKey),\n handler(accessor) {\n var _a;\n const listService = accessor.get(IListService);\n const focus = (_a = listService.lastFocusedList) === null || _a === void 0 ? void 0 : _a.getFocus();\n if (Array.isArray(focus) && focus[0] instanceof OneReference) {\n withController(accessor, controller => controller.openReference(focus[0], true, true));\n }\n }\n});\nCommandsRegistry.registerCommand('openReference', (accessor) => {\n var _a;\n const listService = accessor.get(IListService);\n const focus = (_a = listService.lastFocusedList) === null || _a === void 0 ? void 0 : _a.getFocus();\n if (Array.isArray(focus) && focus[0] instanceof OneReference) {\n withController(accessor, controller => controller.openReference(focus[0], false, true));\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { RawContextKey, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { KeybindingsRegistry } from '../../../platform/keybinding/common/keybindingsRegistry.js';\nimport { registerEditorCommand, EditorCommand } from '../../browser/editorExtensions.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { Range } from '../../common/core/range.js';\nimport { dispose, combinedDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { localize } from '../../../nls.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { isEqual } from '../../../base/common/resources.js';\nexport const ctxHasSymbols = new RawContextKey('hasSymbols', false, localize('hasSymbols', \"Whether there are symbol locations that can be navigated via keyboard-only.\"));\nexport const ISymbolNavigationService = createDecorator('ISymbolNavigationService');\nlet SymbolNavigationService = class SymbolNavigationService {\n constructor(contextKeyService, _editorService, _notificationService, _keybindingService) {\n this._editorService = _editorService;\n this._notificationService = _notificationService;\n this._keybindingService = _keybindingService;\n this._currentModel = undefined;\n this._currentIdx = -1;\n this._ignoreEditorChange = false;\n this._ctxHasSymbols = ctxHasSymbols.bindTo(contextKeyService);\n }\n reset() {\n var _a, _b;\n this._ctxHasSymbols.reset();\n (_a = this._currentState) === null || _a === void 0 ? void 0 : _a.dispose();\n (_b = this._currentMessage) === null || _b === void 0 ? void 0 : _b.dispose();\n this._currentModel = undefined;\n this._currentIdx = -1;\n }\n put(anchor) {\n const refModel = anchor.parent.parent;\n if (refModel.references.length <= 1) {\n this.reset();\n return;\n }\n this._currentModel = refModel;\n this._currentIdx = refModel.references.indexOf(anchor);\n this._ctxHasSymbols.set(true);\n this._showMessage();\n const editorState = new EditorState(this._editorService);\n const listener = editorState.onDidChange(_ => {\n if (this._ignoreEditorChange) {\n return;\n }\n const editor = this._editorService.getActiveCodeEditor();\n if (!editor) {\n return;\n }\n const model = editor.getModel();\n const position = editor.getPosition();\n if (!model || !position) {\n return;\n }\n let seenUri = false;\n let seenPosition = false;\n for (const reference of refModel.references) {\n if (isEqual(reference.uri, model.uri)) {\n seenUri = true;\n seenPosition = seenPosition || Range.containsPosition(reference.range, position);\n }\n else if (seenUri) {\n break;\n }\n }\n if (!seenUri || !seenPosition) {\n this.reset();\n }\n });\n this._currentState = combinedDisposable(editorState, listener);\n }\n revealNext(source) {\n if (!this._currentModel) {\n return Promise.resolve();\n }\n // get next result and advance\n this._currentIdx += 1;\n this._currentIdx %= this._currentModel.references.length;\n const reference = this._currentModel.references[this._currentIdx];\n // status\n this._showMessage();\n // open editor, ignore events while that happens\n this._ignoreEditorChange = true;\n return this._editorService.openCodeEditor({\n resource: reference.uri,\n options: {\n selection: Range.collapseToStart(reference.range),\n selectionRevealType: 3 /* NearTopIfOutsideViewport */\n }\n }, source).finally(() => {\n this._ignoreEditorChange = false;\n });\n }\n _showMessage() {\n var _a;\n (_a = this._currentMessage) === null || _a === void 0 ? void 0 : _a.dispose();\n const kb = this._keybindingService.lookupKeybinding('editor.gotoNextSymbolFromResult');\n const message = kb\n ? localize('location.kb', \"Symbol {0} of {1}, {2} for next\", this._currentIdx + 1, this._currentModel.references.length, kb.getLabel())\n : localize('location', \"Symbol {0} of {1}\", this._currentIdx + 1, this._currentModel.references.length);\n this._currentMessage = this._notificationService.status(message);\n }\n};\nSymbolNavigationService = __decorate([\n __param(0, IContextKeyService),\n __param(1, ICodeEditorService),\n __param(2, INotificationService),\n __param(3, IKeybindingService)\n], SymbolNavigationService);\nregisterSingleton(ISymbolNavigationService, SymbolNavigationService, true);\nregisterEditorCommand(new class extends EditorCommand {\n constructor() {\n super({\n id: 'editor.gotoNextSymbolFromResult',\n precondition: ctxHasSymbols,\n kbOpts: {\n weight: 100 /* EditorContrib */,\n primary: 70 /* F12 */\n }\n });\n }\n runEditorCommand(accessor, editor) {\n return accessor.get(ISymbolNavigationService).revealNext(editor);\n }\n});\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n id: 'editor.gotoNextSymbolFromResult.cancel',\n weight: 100 /* EditorContrib */,\n when: ctxHasSymbols,\n primary: 9 /* Escape */,\n handler(accessor) {\n accessor.get(ISymbolNavigationService).reset();\n }\n});\n//\nlet EditorState = class EditorState {\n constructor(editorService) {\n this._listener = new Map();\n this._disposables = new DisposableStore();\n this._onDidChange = new Emitter();\n this.onDidChange = this._onDidChange.event;\n this._disposables.add(editorService.onCodeEditorRemove(this._onDidRemoveEditor, this));\n this._disposables.add(editorService.onCodeEditorAdd(this._onDidAddEditor, this));\n editorService.listCodeEditors().forEach(this._onDidAddEditor, this);\n }\n dispose() {\n this._disposables.dispose();\n this._onDidChange.dispose();\n dispose(this._listener.values());\n }\n _onDidAddEditor(editor) {\n this._listener.set(editor, combinedDisposable(editor.onDidChangeCursorPosition(_ => this._onDidChange.fire({ editor })), editor.onDidChangeModelContent(_ => this._onDidChange.fire({ editor }))));\n }\n _onDidRemoveEditor(editor) {\n var _a;\n (_a = this._listener.get(editor)) === null || _a === void 0 ? void 0 : _a.dispose();\n this._listener.delete(editor);\n }\n};\nEditorState = __decorate([\n __param(0, ICodeEditorService)\n], EditorState);\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar _a, _b, _c, _d, _e, _f, _g, _h;\nimport { alert } from '../../../base/browser/ui/aria/aria.js';\nimport { createCancelablePromise, raceCancellation } from '../../../base/common/async.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { isWeb } from '../../../base/common/platform.js';\nimport { isCodeEditor } from '../../browser/editorBrowser.js';\nimport { EditorAction, registerInstantiatedEditorAction } from '../../browser/editorExtensions.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport * as corePosition from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { isLocationLink } from '../../common/modes.js';\nimport { MessageController } from '../message/messageController.js';\nimport { PeekContext } from '../peekView/peekView.js';\nimport { ReferencesController } from './peek/referencesController.js';\nimport { ReferencesModel } from './referencesModel.js';\nimport * as nls from '../../../nls.js';\nimport { MenuId, MenuRegistry } from '../../../platform/actions/common/actions.js';\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\nimport { getDefinitionsAtPosition, getImplementationsAtPosition, getTypeDefinitionsAtPosition, getDeclarationsAtPosition, getReferencesAtPosition } from './goToSymbol.js';\nimport { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js';\nimport { EditorStateCancellationTokenSource } from '../../browser/core/editorState.js';\nimport { ISymbolNavigationService } from './symbolNavigation.js';\nimport { isStandalone } from '../../../base/browser/browser.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { assertType } from '../../../base/common/types.js';\nimport { EmbeddedCodeEditorWidget } from '../../browser/widget/embeddedCodeEditorWidget.js';\nMenuRegistry.appendMenuItem(MenuId.EditorContext, {\n submenu: MenuId.EditorContextPeek,\n title: nls.localize('peek.submenu', \"Peek\"),\n group: 'navigation',\n order: 100\n});\nconst _goToActionIds = new Set();\nfunction registerGoToAction(ctor) {\n const result = new ctor();\n registerInstantiatedEditorAction(result);\n _goToActionIds.add(result.id);\n return result;\n}\nclass SymbolNavigationAction extends EditorAction {\n constructor(configuration, opts) {\n super(opts);\n this._configuration = configuration;\n }\n run(accessor, editor) {\n if (!editor.hasModel()) {\n return Promise.resolve(undefined);\n }\n const notificationService = accessor.get(INotificationService);\n const editorService = accessor.get(ICodeEditorService);\n const progressService = accessor.get(IEditorProgressService);\n const symbolNavService = accessor.get(ISymbolNavigationService);\n const model = editor.getModel();\n const pos = editor.getPosition();\n const cts = new EditorStateCancellationTokenSource(editor, 1 /* Value */ | 4 /* Position */);\n const promise = raceCancellation(this._getLocationModel(model, pos, cts.token), cts.token).then((references) => __awaiter(this, void 0, void 0, function* () {\n if (!references || cts.token.isCancellationRequested) {\n return;\n }\n alert(references.ariaMessage);\n let altAction;\n if (references.referenceAt(model.uri, pos)) {\n const altActionId = this._getAlternativeCommand(editor);\n if (altActionId !== this.id && _goToActionIds.has(altActionId)) {\n altAction = editor.getAction(altActionId);\n }\n }\n const referenceCount = references.references.length;\n if (referenceCount === 0) {\n // no result -> show message\n if (!this._configuration.muteMessage) {\n const info = model.getWordAtPosition(pos);\n MessageController.get(editor).showMessage(this._getNoResultFoundMessage(info), pos);\n }\n }\n else if (referenceCount === 1 && altAction) {\n // already at the only result, run alternative\n altAction.run();\n }\n else {\n // normal results handling\n return this._onResult(editorService, symbolNavService, editor, references);\n }\n }), (err) => {\n // report an error\n notificationService.error(err);\n }).finally(() => {\n cts.dispose();\n });\n progressService.showWhile(promise, 250);\n return promise;\n }\n _onResult(editorService, symbolNavService, editor, model) {\n return __awaiter(this, void 0, void 0, function* () {\n const gotoLocation = this._getGoToPreference(editor);\n if (!(editor instanceof EmbeddedCodeEditorWidget) && (this._configuration.openInPeek || (gotoLocation === 'peek' && model.references.length > 1))) {\n this._openInPeek(editor, model);\n }\n else {\n const next = model.firstReference();\n const peek = model.references.length > 1 && gotoLocation === 'gotoAndPeek';\n const targetEditor = yield this._openReference(editor, editorService, next, this._configuration.openToSide, !peek);\n if (peek && targetEditor) {\n this._openInPeek(targetEditor, model);\n }\n else {\n model.dispose();\n }\n // keep remaining locations around when using\n // 'goto'-mode\n if (gotoLocation === 'goto') {\n symbolNavService.put(next);\n }\n }\n });\n }\n _openReference(editor, editorService, reference, sideBySide, highlight) {\n return __awaiter(this, void 0, void 0, function* () {\n // range is the target-selection-range when we have one\n // and the fallback is the 'full' range\n let range = undefined;\n if (isLocationLink(reference)) {\n range = reference.targetSelectionRange;\n }\n if (!range) {\n range = reference.range;\n }\n if (!range) {\n return undefined;\n }\n const targetEditor = yield editorService.openCodeEditor({\n resource: reference.uri,\n options: {\n selection: Range.collapseToStart(range),\n selectionRevealType: 3 /* NearTopIfOutsideViewport */\n }\n }, editor, sideBySide);\n if (!targetEditor) {\n return undefined;\n }\n if (highlight) {\n const modelNow = targetEditor.getModel();\n const ids = targetEditor.deltaDecorations([], [{ range, options: { className: 'symbolHighlight' } }]);\n setTimeout(() => {\n if (targetEditor.getModel() === modelNow) {\n targetEditor.deltaDecorations(ids, []);\n }\n }, 350);\n }\n return targetEditor;\n });\n }\n _openInPeek(target, model) {\n let controller = ReferencesController.get(target);\n if (controller && target.hasModel()) {\n controller.toggleWidget(target.getSelection(), createCancelablePromise(_ => Promise.resolve(model)), this._configuration.openInPeek);\n }\n else {\n model.dispose();\n }\n }\n}\n//#region --- DEFINITION\nexport class DefinitionAction extends SymbolNavigationAction {\n _getLocationModel(model, position, token) {\n return __awaiter(this, void 0, void 0, function* () {\n return new ReferencesModel(yield getDefinitionsAtPosition(model, position, token), nls.localize('def.title', 'Definitions'));\n });\n }\n _getNoResultFoundMessage(info) {\n return info && info.word\n ? nls.localize('noResultWord', \"No definition found for '{0}'\", info.word)\n : nls.localize('generic.noResults', \"No definition found\");\n }\n _getAlternativeCommand(editor) {\n return editor.getOption(47 /* gotoLocation */).alternativeDefinitionCommand;\n }\n _getGoToPreference(editor) {\n return editor.getOption(47 /* gotoLocation */).multipleDefinitions;\n }\n}\nconst goToDefinitionKb = isWeb && !isStandalone\n ? 2048 /* CtrlCmd */ | 70 /* F12 */\n : 70 /* F12 */;\nregisterGoToAction((_a = class GoToDefinitionAction extends DefinitionAction {\n constructor() {\n super({\n openToSide: false,\n openInPeek: false,\n muteMessage: false\n }, {\n id: GoToDefinitionAction.id,\n label: nls.localize('actions.goToDecl.label', \"Go to Definition\"),\n alias: 'Go to Definition',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasDefinitionProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: goToDefinitionKb,\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n group: 'navigation',\n order: 1.1\n },\n menuOpts: {\n menuId: MenuId.MenubarGoMenu,\n group: '4_symbol_nav',\n order: 2,\n title: nls.localize({ key: 'miGotoDefinition', comment: ['&& denotes a mnemonic'] }, \"Go to &&Definition\")\n }\n });\n CommandsRegistry.registerCommandAlias('editor.action.goToDeclaration', GoToDefinitionAction.id);\n }\n },\n _a.id = 'editor.action.revealDefinition',\n _a));\nregisterGoToAction((_b = class OpenDefinitionToSideAction extends DefinitionAction {\n constructor() {\n super({\n openToSide: true,\n openInPeek: false,\n muteMessage: false\n }, {\n id: OpenDefinitionToSideAction.id,\n label: nls.localize('actions.goToDeclToSide.label', \"Open Definition to the Side\"),\n alias: 'Open Definition to the Side',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasDefinitionProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, goToDefinitionKb),\n weight: 100 /* EditorContrib */\n }\n });\n CommandsRegistry.registerCommandAlias('editor.action.openDeclarationToTheSide', OpenDefinitionToSideAction.id);\n }\n },\n _b.id = 'editor.action.revealDefinitionAside',\n _b));\nregisterGoToAction((_c = class PeekDefinitionAction extends DefinitionAction {\n constructor() {\n super({\n openToSide: false,\n openInPeek: true,\n muteMessage: false\n }, {\n id: PeekDefinitionAction.id,\n label: nls.localize('actions.previewDecl.label', \"Peek Definition\"),\n alias: 'Peek Definition',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasDefinitionProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 512 /* Alt */ | 70 /* F12 */,\n linux: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 68 /* F10 */ },\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n menuId: MenuId.EditorContextPeek,\n group: 'peek',\n order: 2\n }\n });\n CommandsRegistry.registerCommandAlias('editor.action.previewDeclaration', PeekDefinitionAction.id);\n }\n },\n _c.id = 'editor.action.peekDefinition',\n _c));\n//#endregion\n//#region --- DECLARATION\nclass DeclarationAction extends SymbolNavigationAction {\n _getLocationModel(model, position, token) {\n return __awaiter(this, void 0, void 0, function* () {\n return new ReferencesModel(yield getDeclarationsAtPosition(model, position, token), nls.localize('decl.title', 'Declarations'));\n });\n }\n _getNoResultFoundMessage(info) {\n return info && info.word\n ? nls.localize('decl.noResultWord', \"No declaration found for '{0}'\", info.word)\n : nls.localize('decl.generic.noResults', \"No declaration found\");\n }\n _getAlternativeCommand(editor) {\n return editor.getOption(47 /* gotoLocation */).alternativeDeclarationCommand;\n }\n _getGoToPreference(editor) {\n return editor.getOption(47 /* gotoLocation */).multipleDeclarations;\n }\n}\nregisterGoToAction((_d = class GoToDeclarationAction extends DeclarationAction {\n constructor() {\n super({\n openToSide: false,\n openInPeek: false,\n muteMessage: false\n }, {\n id: GoToDeclarationAction.id,\n label: nls.localize('actions.goToDeclaration.label', \"Go to Declaration\"),\n alias: 'Go to Declaration',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasDeclarationProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n contextMenuOpts: {\n group: 'navigation',\n order: 1.3\n },\n menuOpts: {\n menuId: MenuId.MenubarGoMenu,\n group: '4_symbol_nav',\n order: 3,\n title: nls.localize({ key: 'miGotoDeclaration', comment: ['&& denotes a mnemonic'] }, \"Go to &&Declaration\")\n },\n });\n }\n _getNoResultFoundMessage(info) {\n return info && info.word\n ? nls.localize('decl.noResultWord', \"No declaration found for '{0}'\", info.word)\n : nls.localize('decl.generic.noResults', \"No declaration found\");\n }\n },\n _d.id = 'editor.action.revealDeclaration',\n _d));\nregisterGoToAction(class PeekDeclarationAction extends DeclarationAction {\n constructor() {\n super({\n openToSide: false,\n openInPeek: true,\n muteMessage: false\n }, {\n id: 'editor.action.peekDeclaration',\n label: nls.localize('actions.peekDecl.label', \"Peek Declaration\"),\n alias: 'Peek Declaration',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasDeclarationProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n contextMenuOpts: {\n menuId: MenuId.EditorContextPeek,\n group: 'peek',\n order: 3\n }\n });\n }\n});\n//#endregion\n//#region --- TYPE DEFINITION\nclass TypeDefinitionAction extends SymbolNavigationAction {\n _getLocationModel(model, position, token) {\n return __awaiter(this, void 0, void 0, function* () {\n return new ReferencesModel(yield getTypeDefinitionsAtPosition(model, position, token), nls.localize('typedef.title', 'Type Definitions'));\n });\n }\n _getNoResultFoundMessage(info) {\n return info && info.word\n ? nls.localize('goToTypeDefinition.noResultWord', \"No type definition found for '{0}'\", info.word)\n : nls.localize('goToTypeDefinition.generic.noResults', \"No type definition found\");\n }\n _getAlternativeCommand(editor) {\n return editor.getOption(47 /* gotoLocation */).alternativeTypeDefinitionCommand;\n }\n _getGoToPreference(editor) {\n return editor.getOption(47 /* gotoLocation */).multipleTypeDefinitions;\n }\n}\nregisterGoToAction((_e = class GoToTypeDefinitionAction extends TypeDefinitionAction {\n constructor() {\n super({\n openToSide: false,\n openInPeek: false,\n muteMessage: false\n }, {\n id: GoToTypeDefinitionAction.ID,\n label: nls.localize('actions.goToTypeDefinition.label', \"Go to Type Definition\"),\n alias: 'Go to Type Definition',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasTypeDefinitionProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 0,\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n group: 'navigation',\n order: 1.4\n },\n menuOpts: {\n menuId: MenuId.MenubarGoMenu,\n group: '4_symbol_nav',\n order: 3,\n title: nls.localize({ key: 'miGotoTypeDefinition', comment: ['&& denotes a mnemonic'] }, \"Go to &&Type Definition\")\n }\n });\n }\n },\n _e.ID = 'editor.action.goToTypeDefinition',\n _e));\nregisterGoToAction((_f = class PeekTypeDefinitionAction extends TypeDefinitionAction {\n constructor() {\n super({\n openToSide: false,\n openInPeek: true,\n muteMessage: false\n }, {\n id: PeekTypeDefinitionAction.ID,\n label: nls.localize('actions.peekTypeDefinition.label', \"Peek Type Definition\"),\n alias: 'Peek Type Definition',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasTypeDefinitionProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n contextMenuOpts: {\n menuId: MenuId.EditorContextPeek,\n group: 'peek',\n order: 4\n }\n });\n }\n },\n _f.ID = 'editor.action.peekTypeDefinition',\n _f));\n//#endregion\n//#region --- IMPLEMENTATION\nclass ImplementationAction extends SymbolNavigationAction {\n _getLocationModel(model, position, token) {\n return __awaiter(this, void 0, void 0, function* () {\n return new ReferencesModel(yield getImplementationsAtPosition(model, position, token), nls.localize('impl.title', 'Implementations'));\n });\n }\n _getNoResultFoundMessage(info) {\n return info && info.word\n ? nls.localize('goToImplementation.noResultWord', \"No implementation found for '{0}'\", info.word)\n : nls.localize('goToImplementation.generic.noResults', \"No implementation found\");\n }\n _getAlternativeCommand(editor) {\n return editor.getOption(47 /* gotoLocation */).alternativeImplementationCommand;\n }\n _getGoToPreference(editor) {\n return editor.getOption(47 /* gotoLocation */).multipleImplementations;\n }\n}\nregisterGoToAction((_g = class GoToImplementationAction extends ImplementationAction {\n constructor() {\n super({\n openToSide: false,\n openInPeek: false,\n muteMessage: false\n }, {\n id: GoToImplementationAction.ID,\n label: nls.localize('actions.goToImplementation.label', \"Go to Implementations\"),\n alias: 'Go to Implementations',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasImplementationProvider, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 70 /* F12 */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarGoMenu,\n group: '4_symbol_nav',\n order: 4,\n title: nls.localize({ key: 'miGotoImplementation', comment: ['&& denotes a mnemonic'] }, \"Go to &&Implementations\")\n },\n contextMenuOpts: {\n group: 'navigation',\n order: 1.45\n }\n });\n }\n },\n _g.ID = 'editor.action.goToImplementation',\n _g));\nregisterGoToAction((_h = class PeekImplementationAction extends ImplementationAction {\n constructor() {\n super({\n openToSide: false,\n openInPeek: true,\n muteMessage: false\n }, {\n id: PeekImplementationAction.ID,\n label: nls.localize('actions.peekImplementation.label', \"Peek Implementations\"),\n alias: 'Peek Implementations',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasImplementationProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 70 /* F12 */,\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n menuId: MenuId.EditorContextPeek,\n group: 'peek',\n order: 5\n }\n });\n }\n },\n _h.ID = 'editor.action.peekImplementation',\n _h));\n//#endregion\n//#region --- REFERENCES\nclass ReferencesAction extends SymbolNavigationAction {\n _getNoResultFoundMessage(info) {\n return info\n ? nls.localize('references.no', \"No references found for '{0}'\", info.word)\n : nls.localize('references.noGeneric', \"No references found\");\n }\n _getAlternativeCommand(editor) {\n return editor.getOption(47 /* gotoLocation */).alternativeReferenceCommand;\n }\n _getGoToPreference(editor) {\n return editor.getOption(47 /* gotoLocation */).multipleReferences;\n }\n}\nregisterGoToAction(class GoToReferencesAction extends ReferencesAction {\n constructor() {\n super({\n openToSide: false,\n openInPeek: false,\n muteMessage: false\n }, {\n id: 'editor.action.goToReferences',\n label: nls.localize('goToReferences.label', \"Go to References\"),\n alias: 'Go to References',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasReferenceProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 1024 /* Shift */ | 70 /* F12 */,\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n group: 'navigation',\n order: 1.45\n },\n menuOpts: {\n menuId: MenuId.MenubarGoMenu,\n group: '4_symbol_nav',\n order: 5,\n title: nls.localize({ key: 'miGotoReference', comment: ['&& denotes a mnemonic'] }, \"Go to &&References\")\n },\n });\n }\n _getLocationModel(model, position, token) {\n return __awaiter(this, void 0, void 0, function* () {\n return new ReferencesModel(yield getReferencesAtPosition(model, position, true, token), nls.localize('ref.title', 'References'));\n });\n }\n});\nregisterGoToAction(class PeekReferencesAction extends ReferencesAction {\n constructor() {\n super({\n openToSide: false,\n openInPeek: true,\n muteMessage: false\n }, {\n id: 'editor.action.referenceSearch.trigger',\n label: nls.localize('references.action.label', \"Peek References\"),\n alias: 'Peek References',\n precondition: ContextKeyExpr.and(EditorContextKeys.hasReferenceProvider, PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n contextMenuOpts: {\n menuId: MenuId.EditorContextPeek,\n group: 'peek',\n order: 6\n }\n });\n }\n _getLocationModel(model, position, token) {\n return __awaiter(this, void 0, void 0, function* () {\n return new ReferencesModel(yield getReferencesAtPosition(model, position, false, token), nls.localize('ref.title', 'References'));\n });\n }\n});\n//#endregion\n//#region --- GENERIC goto symbols command\nclass GenericGoToLocationAction extends SymbolNavigationAction {\n constructor(config, _references, _gotoMultipleBehaviour) {\n super(config, {\n id: 'editor.action.goToLocation',\n label: nls.localize('label.generic', \"Go To Any Symbol\"),\n alias: 'Go To Any Symbol',\n precondition: ContextKeyExpr.and(PeekContext.notInPeekEditor, EditorContextKeys.isInWalkThroughSnippet.toNegated()),\n });\n this._references = _references;\n this._gotoMultipleBehaviour = _gotoMultipleBehaviour;\n }\n _getLocationModel(_model, _position, _token) {\n return __awaiter(this, void 0, void 0, function* () {\n return new ReferencesModel(this._references, nls.localize('generic.title', 'Locations'));\n });\n }\n _getNoResultFoundMessage(info) {\n return info && nls.localize('generic.noResult', \"No results for '{0}'\", info.word) || '';\n }\n _getGoToPreference(editor) {\n var _a;\n return (_a = this._gotoMultipleBehaviour) !== null && _a !== void 0 ? _a : editor.getOption(47 /* gotoLocation */).multipleReferences;\n }\n _getAlternativeCommand() { return ''; }\n}\nCommandsRegistry.registerCommand({\n id: 'editor.action.goToLocations',\n description: {\n description: 'Go to locations from a position in a file',\n args: [\n { name: 'uri', description: 'The text document in which to start', constraint: URI },\n { name: 'position', description: 'The position at which to start', constraint: corePosition.Position.isIPosition },\n { name: 'locations', description: 'An array of locations.', constraint: Array },\n { name: 'multiple', description: 'Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto' },\n { name: 'noResultsMessage', description: 'Human readable message that shows when locations is empty.' },\n ]\n },\n handler: (accessor, resource, position, references, multiple, noResultsMessage, openInPeek) => __awaiter(void 0, void 0, void 0, function* () {\n assertType(URI.isUri(resource));\n assertType(corePosition.Position.isIPosition(position));\n assertType(Array.isArray(references));\n assertType(typeof multiple === 'undefined' || typeof multiple === 'string');\n assertType(typeof openInPeek === 'undefined' || typeof openInPeek === 'boolean');\n const editorService = accessor.get(ICodeEditorService);\n const editor = yield editorService.openCodeEditor({ resource }, editorService.getFocusedCodeEditor());\n if (isCodeEditor(editor)) {\n editor.setPosition(position);\n editor.revealPositionInCenterIfOutsideViewport(position, 0 /* Smooth */);\n return editor.invokeWithinContext(accessor => {\n const command = new class extends GenericGoToLocationAction {\n _getNoResultFoundMessage(info) {\n return noResultsMessage || super._getNoResultFoundMessage(info);\n }\n }({\n muteMessage: !Boolean(noResultsMessage),\n openInPeek: Boolean(openInPeek),\n openToSide: false\n }, references, multiple);\n accessor.get(IInstantiationService).invokeFunction(command.run.bind(command), editor);\n });\n }\n })\n});\nCommandsRegistry.registerCommand({\n id: 'editor.action.peekLocations',\n description: {\n description: 'Peek locations from a position in a file',\n args: [\n { name: 'uri', description: 'The text document in which to start', constraint: URI },\n { name: 'position', description: 'The position at which to start', constraint: corePosition.Position.isIPosition },\n { name: 'locations', description: 'An array of locations.', constraint: Array },\n { name: 'multiple', description: 'Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto' },\n ]\n },\n handler: (accessor, resource, position, references, multiple) => __awaiter(void 0, void 0, void 0, function* () {\n accessor.get(ICommandService).executeCommand('editor.action.goToLocations', resource, position, references, multiple, undefined, true);\n })\n});\n//#endregion\n//#region --- REFERENCE search special commands\nCommandsRegistry.registerCommand({\n id: 'editor.action.findReferences',\n handler: (accessor, resource, position) => {\n assertType(URI.isUri(resource));\n assertType(corePosition.Position.isIPosition(position));\n const codeEditorService = accessor.get(ICodeEditorService);\n return codeEditorService.openCodeEditor({ resource }, codeEditorService.getFocusedCodeEditor()).then(control => {\n if (!isCodeEditor(control) || !control.hasModel()) {\n return undefined;\n }\n const controller = ReferencesController.get(control);\n if (!controller) {\n return undefined;\n }\n const references = createCancelablePromise(token => getReferencesAtPosition(control.getModel(), corePosition.Position.lift(position), false, token).then(references => new ReferencesModel(references, nls.localize('ref.title', 'References'))));\n const range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);\n return Promise.resolve(controller.toggleWidget(range, references, false));\n });\n }\n});\n// use NEW command\nCommandsRegistry.registerCommandAlias('editor.action.showReferences', 'editor.action.peekLocations');\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport * as platform from '../../../../base/common/platform.js';\nfunction hasModifier(e, modifier) {\n return !!e[modifier];\n}\n/**\n * An event that encapsulates the various trigger modifiers logic needed for go to definition.\n */\nexport class ClickLinkMouseEvent {\n constructor(source, opts) {\n this.target = source.target;\n this.hasTriggerModifier = hasModifier(source.event, opts.triggerModifier);\n this.hasSideBySideModifier = hasModifier(source.event, opts.triggerSideBySideModifier);\n this.isNoneOrSingleMouseDown = (source.event.detail <= 1);\n }\n}\n/**\n * An event that encapsulates the various trigger modifiers logic needed for go to definition.\n */\nexport class ClickLinkKeyboardEvent {\n constructor(source, opts) {\n this.keyCodeIsTriggerKey = (source.keyCode === opts.triggerKey);\n this.keyCodeIsSideBySideKey = (source.keyCode === opts.triggerSideBySideKey);\n this.hasTriggerModifier = hasModifier(source, opts.triggerModifier);\n }\n}\nexport class ClickLinkOptions {\n constructor(triggerKey, triggerModifier, triggerSideBySideKey, triggerSideBySideModifier) {\n this.triggerKey = triggerKey;\n this.triggerModifier = triggerModifier;\n this.triggerSideBySideKey = triggerSideBySideKey;\n this.triggerSideBySideModifier = triggerSideBySideModifier;\n }\n equals(other) {\n return (this.triggerKey === other.triggerKey\n && this.triggerModifier === other.triggerModifier\n && this.triggerSideBySideKey === other.triggerSideBySideKey\n && this.triggerSideBySideModifier === other.triggerSideBySideModifier);\n }\n}\nfunction createOptions(multiCursorModifier) {\n if (multiCursorModifier === 'altKey') {\n if (platform.isMacintosh) {\n return new ClickLinkOptions(57 /* Meta */, 'metaKey', 6 /* Alt */, 'altKey');\n }\n return new ClickLinkOptions(5 /* Ctrl */, 'ctrlKey', 6 /* Alt */, 'altKey');\n }\n if (platform.isMacintosh) {\n return new ClickLinkOptions(6 /* Alt */, 'altKey', 57 /* Meta */, 'metaKey');\n }\n return new ClickLinkOptions(6 /* Alt */, 'altKey', 5 /* Ctrl */, 'ctrlKey');\n}\nexport class ClickLinkGesture extends Disposable {\n constructor(editor) {\n super();\n this._onMouseMoveOrRelevantKeyDown = this._register(new Emitter());\n this.onMouseMoveOrRelevantKeyDown = this._onMouseMoveOrRelevantKeyDown.event;\n this._onExecute = this._register(new Emitter());\n this.onExecute = this._onExecute.event;\n this._onCancel = this._register(new Emitter());\n this.onCancel = this._onCancel.event;\n this._editor = editor;\n this._opts = createOptions(this._editor.getOption(66 /* multiCursorModifier */));\n this._lastMouseMoveEvent = null;\n this._hasTriggerKeyOnMouseDown = false;\n this._lineNumberOnMouseDown = 0;\n this._register(this._editor.onDidChangeConfiguration((e) => {\n if (e.hasChanged(66 /* multiCursorModifier */)) {\n const newOpts = createOptions(this._editor.getOption(66 /* multiCursorModifier */));\n if (this._opts.equals(newOpts)) {\n return;\n }\n this._opts = newOpts;\n this._lastMouseMoveEvent = null;\n this._hasTriggerKeyOnMouseDown = false;\n this._lineNumberOnMouseDown = 0;\n this._onCancel.fire();\n }\n }));\n this._register(this._editor.onMouseMove((e) => this._onEditorMouseMove(new ClickLinkMouseEvent(e, this._opts))));\n this._register(this._editor.onMouseDown((e) => this._onEditorMouseDown(new ClickLinkMouseEvent(e, this._opts))));\n this._register(this._editor.onMouseUp((e) => this._onEditorMouseUp(new ClickLinkMouseEvent(e, this._opts))));\n this._register(this._editor.onKeyDown((e) => this._onEditorKeyDown(new ClickLinkKeyboardEvent(e, this._opts))));\n this._register(this._editor.onKeyUp((e) => this._onEditorKeyUp(new ClickLinkKeyboardEvent(e, this._opts))));\n this._register(this._editor.onMouseDrag(() => this._resetHandler()));\n this._register(this._editor.onDidChangeCursorSelection((e) => this._onDidChangeCursorSelection(e)));\n this._register(this._editor.onDidChangeModel((e) => this._resetHandler()));\n this._register(this._editor.onDidChangeModelContent(() => this._resetHandler()));\n this._register(this._editor.onDidScrollChange((e) => {\n if (e.scrollTopChanged || e.scrollLeftChanged) {\n this._resetHandler();\n }\n }));\n }\n _onDidChangeCursorSelection(e) {\n if (e.selection && e.selection.startColumn !== e.selection.endColumn) {\n this._resetHandler(); // immediately stop this feature if the user starts to select (https://github.com/microsoft/vscode/issues/7827)\n }\n }\n _onEditorMouseMove(mouseEvent) {\n this._lastMouseMoveEvent = mouseEvent;\n this._onMouseMoveOrRelevantKeyDown.fire([mouseEvent, null]);\n }\n _onEditorMouseDown(mouseEvent) {\n // We need to record if we had the trigger key on mouse down because someone might select something in the editor\n // holding the mouse down and then while mouse is down start to press Ctrl/Cmd to start a copy operation and then\n // release the mouse button without wanting to do the navigation.\n // With this flag we prevent goto definition if the mouse was down before the trigger key was pressed.\n this._hasTriggerKeyOnMouseDown = mouseEvent.hasTriggerModifier;\n this._lineNumberOnMouseDown = mouseEvent.target.position ? mouseEvent.target.position.lineNumber : 0;\n }\n _onEditorMouseUp(mouseEvent) {\n const currentLineNumber = mouseEvent.target.position ? mouseEvent.target.position.lineNumber : 0;\n if (this._hasTriggerKeyOnMouseDown && this._lineNumberOnMouseDown && this._lineNumberOnMouseDown === currentLineNumber) {\n this._onExecute.fire(mouseEvent);\n }\n }\n _onEditorKeyDown(e) {\n if (this._lastMouseMoveEvent\n && (e.keyCodeIsTriggerKey // User just pressed Ctrl/Cmd (normal goto definition)\n || (e.keyCodeIsSideBySideKey && e.hasTriggerModifier) // User pressed Ctrl/Cmd+Alt (goto definition to the side)\n )) {\n this._onMouseMoveOrRelevantKeyDown.fire([this._lastMouseMoveEvent, e]);\n }\n else if (e.hasTriggerModifier) {\n this._onCancel.fire(); // remove decorations if user holds another key with ctrl/cmd to prevent accident goto declaration\n }\n }\n _onEditorKeyUp(e) {\n if (e.keyCodeIsTriggerKey) {\n this._onCancel.fire();\n }\n }\n _resetHandler() {\n this._lastMouseMoveEvent = null;\n this._hasTriggerKeyOnMouseDown = false;\n this._onCancel.fire();\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport './goToDefinitionAtPosition.css';\nimport * as nls from '../../../../nls.js';\nimport { createCancelablePromise } from '../../../../base/common/async.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { MarkdownString } from '../../../../base/common/htmlContent.js';\nimport { IModeService } from '../../../common/services/modeService.js';\nimport { Range } from '../../../common/core/range.js';\nimport { DefinitionProviderRegistry } from '../../../common/modes.js';\nimport { registerEditorContribution } from '../../../browser/editorExtensions.js';\nimport { getDefinitionsAtPosition } from '../goToSymbol.js';\nimport { DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { editorActiveLinkForeground } from '../../../../platform/theme/common/colorRegistry.js';\nimport { EditorState } from '../../../browser/core/editorState.js';\nimport { DefinitionAction } from '../goToCommands.js';\nimport { ClickLinkGesture } from './clickLinkGesture.js';\nimport { Position } from '../../../common/core/position.js';\nimport { withNullAsUndefined } from '../../../../base/common/types.js';\nimport { PeekContext } from '../../peekView/peekView.js';\nimport { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nlet GotoDefinitionAtPositionEditorContribution = class GotoDefinitionAtPositionEditorContribution {\n constructor(editor, textModelResolverService, modeService) {\n this.textModelResolverService = textModelResolverService;\n this.modeService = modeService;\n this.toUnhook = new DisposableStore();\n this.toUnhookForKeyboard = new DisposableStore();\n this.linkDecorations = [];\n this.currentWordAtPosition = null;\n this.previousPromise = null;\n this.editor = editor;\n let linkGesture = new ClickLinkGesture(editor);\n this.toUnhook.add(linkGesture);\n this.toUnhook.add(linkGesture.onMouseMoveOrRelevantKeyDown(([mouseEvent, keyboardEvent]) => {\n this.startFindDefinitionFromMouse(mouseEvent, withNullAsUndefined(keyboardEvent));\n }));\n this.toUnhook.add(linkGesture.onExecute((mouseEvent) => {\n if (this.isEnabled(mouseEvent)) {\n this.gotoDefinition(mouseEvent.target.position, mouseEvent.hasSideBySideModifier).then(() => {\n this.removeLinkDecorations();\n }, (error) => {\n this.removeLinkDecorations();\n onUnexpectedError(error);\n });\n }\n }));\n this.toUnhook.add(linkGesture.onCancel(() => {\n this.removeLinkDecorations();\n this.currentWordAtPosition = null;\n }));\n }\n static get(editor) {\n return editor.getContribution(GotoDefinitionAtPositionEditorContribution.ID);\n }\n startFindDefinitionFromCursor(position) {\n // For issue: https://github.com/microsoft/vscode/issues/46257\n // equivalent to mouse move with meta/ctrl key\n // First find the definition and add decorations\n // to the editor to be shown with the content hover widget\n return this.startFindDefinition(position).then(() => {\n // Add listeners for editor cursor move and key down events\n // Dismiss the \"extended\" editor decorations when the user hides\n // the hover widget. There is no event for the widget itself so these\n // serve as a best effort. After removing the link decorations, the hover\n // widget is clean and will only show declarations per next request.\n this.toUnhookForKeyboard.add(this.editor.onDidChangeCursorPosition(() => {\n this.currentWordAtPosition = null;\n this.removeLinkDecorations();\n this.toUnhookForKeyboard.clear();\n }));\n this.toUnhookForKeyboard.add(this.editor.onKeyDown((e) => {\n if (e) {\n this.currentWordAtPosition = null;\n this.removeLinkDecorations();\n this.toUnhookForKeyboard.clear();\n }\n }));\n });\n }\n startFindDefinitionFromMouse(mouseEvent, withKey) {\n // check if we are active and on a content widget\n if (mouseEvent.target.type === 9 /* CONTENT_WIDGET */ && this.linkDecorations.length > 0) {\n return;\n }\n if (!this.editor.hasModel() || !this.isEnabled(mouseEvent, withKey)) {\n this.currentWordAtPosition = null;\n this.removeLinkDecorations();\n return;\n }\n const position = mouseEvent.target.position;\n this.startFindDefinition(position);\n }\n startFindDefinition(position) {\n var _a;\n // Dispose listeners for updating decorations when using keyboard to show definition hover\n this.toUnhookForKeyboard.clear();\n // Find word at mouse position\n const word = position ? (_a = this.editor.getModel()) === null || _a === void 0 ? void 0 : _a.getWordAtPosition(position) : null;\n if (!word) {\n this.currentWordAtPosition = null;\n this.removeLinkDecorations();\n return Promise.resolve(0);\n }\n // Return early if word at position is still the same\n if (this.currentWordAtPosition && this.currentWordAtPosition.startColumn === word.startColumn && this.currentWordAtPosition.endColumn === word.endColumn && this.currentWordAtPosition.word === word.word) {\n return Promise.resolve(0);\n }\n this.currentWordAtPosition = word;\n // Find definition and decorate word if found\n let state = new EditorState(this.editor, 4 /* Position */ | 1 /* Value */ | 2 /* Selection */ | 8 /* Scroll */);\n if (this.previousPromise) {\n this.previousPromise.cancel();\n this.previousPromise = null;\n }\n this.previousPromise = createCancelablePromise(token => this.findDefinition(position, token));\n return this.previousPromise.then(results => {\n if (!results || !results.length || !state.validate(this.editor)) {\n this.removeLinkDecorations();\n return;\n }\n // Multiple results\n if (results.length > 1) {\n this.addDecoration(new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn), new MarkdownString().appendText(nls.localize('multipleResults', \"Click to show {0} definitions.\", results.length)));\n }\n // Single result\n else {\n let result = results[0];\n if (!result.uri) {\n return;\n }\n this.textModelResolverService.createModelReference(result.uri).then(ref => {\n if (!ref.object || !ref.object.textEditorModel) {\n ref.dispose();\n return;\n }\n const { object: { textEditorModel } } = ref;\n const { startLineNumber } = result.range;\n if (startLineNumber < 1 || startLineNumber > textEditorModel.getLineCount()) {\n // invalid range\n ref.dispose();\n return;\n }\n const previewValue = this.getPreviewValue(textEditorModel, startLineNumber, result);\n let wordRange;\n if (result.originSelectionRange) {\n wordRange = Range.lift(result.originSelectionRange);\n }\n else {\n wordRange = new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn);\n }\n const modeId = this.modeService.getModeIdByFilepathOrFirstLine(textEditorModel.uri);\n this.addDecoration(wordRange, new MarkdownString().appendCodeblock(modeId ? modeId : '', previewValue));\n ref.dispose();\n });\n }\n }).then(undefined, onUnexpectedError);\n }\n getPreviewValue(textEditorModel, startLineNumber, result) {\n let rangeToUse = result.targetSelectionRange ? result.range : this.getPreviewRangeBasedOnBrackets(textEditorModel, startLineNumber);\n const numberOfLinesInRange = rangeToUse.endLineNumber - rangeToUse.startLineNumber;\n if (numberOfLinesInRange >= GotoDefinitionAtPositionEditorContribution.MAX_SOURCE_PREVIEW_LINES) {\n rangeToUse = this.getPreviewRangeBasedOnIndentation(textEditorModel, startLineNumber);\n }\n const previewValue = this.stripIndentationFromPreviewRange(textEditorModel, startLineNumber, rangeToUse);\n return previewValue;\n }\n stripIndentationFromPreviewRange(textEditorModel, startLineNumber, previewRange) {\n const startIndent = textEditorModel.getLineFirstNonWhitespaceColumn(startLineNumber);\n let minIndent = startIndent;\n for (let endLineNumber = startLineNumber + 1; endLineNumber < previewRange.endLineNumber; endLineNumber++) {\n const endIndent = textEditorModel.getLineFirstNonWhitespaceColumn(endLineNumber);\n minIndent = Math.min(minIndent, endIndent);\n }\n const previewValue = textEditorModel.getValueInRange(previewRange).replace(new RegExp(`^\\\\s{${minIndent - 1}}`, 'gm'), '').trim();\n return previewValue;\n }\n getPreviewRangeBasedOnIndentation(textEditorModel, startLineNumber) {\n const startIndent = textEditorModel.getLineFirstNonWhitespaceColumn(startLineNumber);\n const maxLineNumber = Math.min(textEditorModel.getLineCount(), startLineNumber + GotoDefinitionAtPositionEditorContribution.MAX_SOURCE_PREVIEW_LINES);\n let endLineNumber = startLineNumber + 1;\n for (; endLineNumber < maxLineNumber; endLineNumber++) {\n let endIndent = textEditorModel.getLineFirstNonWhitespaceColumn(endLineNumber);\n if (startIndent === endIndent) {\n break;\n }\n }\n return new Range(startLineNumber, 1, endLineNumber + 1, 1);\n }\n getPreviewRangeBasedOnBrackets(textEditorModel, startLineNumber) {\n const maxLineNumber = Math.min(textEditorModel.getLineCount(), startLineNumber + GotoDefinitionAtPositionEditorContribution.MAX_SOURCE_PREVIEW_LINES);\n const brackets = [];\n let ignoreFirstEmpty = true;\n let currentBracket = textEditorModel.findNextBracket(new Position(startLineNumber, 1));\n while (currentBracket !== null) {\n if (brackets.length === 0) {\n brackets.push(currentBracket);\n }\n else {\n const lastBracket = brackets[brackets.length - 1];\n if (lastBracket.open[0] === currentBracket.open[0] && lastBracket.isOpen && !currentBracket.isOpen) {\n brackets.pop();\n }\n else {\n brackets.push(currentBracket);\n }\n if (brackets.length === 0) {\n if (ignoreFirstEmpty) {\n ignoreFirstEmpty = false;\n }\n else {\n return new Range(startLineNumber, 1, currentBracket.range.endLineNumber + 1, 1);\n }\n }\n }\n const maxColumn = textEditorModel.getLineMaxColumn(startLineNumber);\n let nextLineNumber = currentBracket.range.endLineNumber;\n let nextColumn = currentBracket.range.endColumn;\n if (maxColumn === currentBracket.range.endColumn) {\n nextLineNumber++;\n nextColumn = 1;\n }\n if (nextLineNumber > maxLineNumber) {\n return new Range(startLineNumber, 1, maxLineNumber + 1, 1);\n }\n currentBracket = textEditorModel.findNextBracket(new Position(nextLineNumber, nextColumn));\n }\n return new Range(startLineNumber, 1, maxLineNumber + 1, 1);\n }\n addDecoration(range, hoverMessage) {\n const newDecorations = {\n range: range,\n options: {\n inlineClassName: 'goto-definition-link',\n hoverMessage\n }\n };\n this.linkDecorations = this.editor.deltaDecorations(this.linkDecorations, [newDecorations]);\n }\n removeLinkDecorations() {\n if (this.linkDecorations.length > 0) {\n this.linkDecorations = this.editor.deltaDecorations(this.linkDecorations, []);\n }\n }\n isEnabled(mouseEvent, withKey) {\n return this.editor.hasModel() &&\n mouseEvent.isNoneOrSingleMouseDown &&\n (mouseEvent.target.type === 6 /* CONTENT_TEXT */) &&\n (mouseEvent.hasTriggerModifier || (withKey ? withKey.keyCodeIsTriggerKey : false)) &&\n DefinitionProviderRegistry.has(this.editor.getModel());\n }\n findDefinition(position, token) {\n const model = this.editor.getModel();\n if (!model) {\n return Promise.resolve(null);\n }\n return getDefinitionsAtPosition(model, position, token);\n }\n gotoDefinition(position, openToSide) {\n this.editor.setPosition(position);\n return this.editor.invokeWithinContext((accessor) => {\n const canPeek = !openToSide && this.editor.getOption(74 /* definitionLinkOpensInPeek */) && !this.isInPeekEditor(accessor);\n const action = new DefinitionAction({ openToSide, openInPeek: canPeek, muteMessage: true }, { alias: '', label: '', id: '', precondition: undefined });\n return action.run(accessor, this.editor);\n });\n }\n isInPeekEditor(accessor) {\n const contextKeyService = accessor.get(IContextKeyService);\n return PeekContext.inPeekEditor.getValue(contextKeyService);\n }\n dispose() {\n this.toUnhook.dispose();\n }\n};\nGotoDefinitionAtPositionEditorContribution.ID = 'editor.contrib.gotodefinitionatposition';\nGotoDefinitionAtPositionEditorContribution.MAX_SOURCE_PREVIEW_LINES = 8;\nGotoDefinitionAtPositionEditorContribution = __decorate([\n __param(1, ITextModelService),\n __param(2, IModeService)\n], GotoDefinitionAtPositionEditorContribution);\nexport { GotoDefinitionAtPositionEditorContribution };\nregisterEditorContribution(GotoDefinitionAtPositionEditorContribution.ID, GotoDefinitionAtPositionEditorContribution);\nregisterThemingParticipant((theme, collector) => {\n const activeLinkForeground = theme.getColor(editorActiveLinkForeground);\n if (activeLinkForeground) {\n collector.addRule(`.monaco-editor .goto-definition-link { color: ${activeLinkForeground} !important; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as nls from '../../../nls.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { Range } from '../../common/core/range.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { IModeService } from '../../common/services/modeService.js';\nimport { ModesContentHoverWidget } from './modesContentHover.js';\nimport { ModesGlyphHoverWidget } from './modesGlyphHover.js';\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\nimport { editorHoverBackground, editorHoverBorder, editorHoverHighlight, textCodeBlockBackground, textLinkForeground, editorHoverStatusBarBackground, editorHoverForeground } from '../../../platform/theme/common/colorRegistry.js';\nimport { IThemeService, registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { GotoDefinitionAtPositionEditorContribution } from '../gotoSymbol/link/goToDefinitionAtPosition.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nlet ModesHoverController = class ModesHoverController {\n constructor(_editor, _instantiationService, _openerService, _modeService, _themeService, _contextKeyService) {\n this._editor = _editor;\n this._instantiationService = _instantiationService;\n this._openerService = _openerService;\n this._modeService = _modeService;\n this._themeService = _themeService;\n this._toUnhook = new DisposableStore();\n this._isMouseDown = false;\n this._hoverClicked = false;\n this._contentWidget = null;\n this._glyphWidget = null;\n this._hookEvents();\n this._didChangeConfigurationHandler = this._editor.onDidChangeConfiguration((e) => {\n if (e.hasChanged(50 /* hover */)) {\n this._unhookEvents();\n this._hookEvents();\n }\n });\n this._hoverVisibleKey = EditorContextKeys.hoverVisible.bindTo(_contextKeyService);\n }\n static get(editor) {\n return editor.getContribution(ModesHoverController.ID);\n }\n _hookEvents() {\n const hideWidgetsEventHandler = () => this._hideWidgets();\n const hoverOpts = this._editor.getOption(50 /* hover */);\n this._isHoverEnabled = hoverOpts.enabled;\n this._isHoverSticky = hoverOpts.sticky;\n if (this._isHoverEnabled) {\n this._toUnhook.add(this._editor.onMouseDown((e) => this._onEditorMouseDown(e)));\n this._toUnhook.add(this._editor.onMouseUp((e) => this._onEditorMouseUp(e)));\n this._toUnhook.add(this._editor.onMouseMove((e) => this._onEditorMouseMove(e)));\n this._toUnhook.add(this._editor.onKeyDown((e) => this._onKeyDown(e)));\n this._toUnhook.add(this._editor.onDidChangeModelDecorations(() => this._onModelDecorationsChanged()));\n }\n else {\n this._toUnhook.add(this._editor.onMouseMove((e) => this._onEditorMouseMove(e)));\n this._toUnhook.add(this._editor.onKeyDown((e) => this._onKeyDown(e)));\n }\n this._toUnhook.add(this._editor.onMouseLeave(hideWidgetsEventHandler));\n this._toUnhook.add(this._editor.onDidChangeModel(hideWidgetsEventHandler));\n this._toUnhook.add(this._editor.onDidScrollChange((e) => this._onEditorScrollChanged(e)));\n }\n _unhookEvents() {\n this._toUnhook.clear();\n }\n _onModelDecorationsChanged() {\n var _a, _b;\n (_a = this._contentWidget) === null || _a === void 0 ? void 0 : _a.onModelDecorationsChanged();\n (_b = this._glyphWidget) === null || _b === void 0 ? void 0 : _b.onModelDecorationsChanged();\n }\n _onEditorScrollChanged(e) {\n if (e.scrollTopChanged || e.scrollLeftChanged) {\n this._hideWidgets();\n }\n }\n _onEditorMouseDown(mouseEvent) {\n this._isMouseDown = true;\n const targetType = mouseEvent.target.type;\n if (targetType === 9 /* CONTENT_WIDGET */ && mouseEvent.target.detail === ModesContentHoverWidget.ID) {\n this._hoverClicked = true;\n // mouse down on top of content hover widget\n return;\n }\n if (targetType === 12 /* OVERLAY_WIDGET */ && mouseEvent.target.detail === ModesGlyphHoverWidget.ID) {\n // mouse down on top of overlay hover widget\n return;\n }\n if (targetType !== 12 /* OVERLAY_WIDGET */ && mouseEvent.target.detail !== ModesGlyphHoverWidget.ID) {\n this._hoverClicked = false;\n }\n this._hideWidgets();\n }\n _onEditorMouseUp(mouseEvent) {\n this._isMouseDown = false;\n }\n _onEditorMouseMove(mouseEvent) {\n var _a, _b, _c, _d, _e, _f;\n let targetType = mouseEvent.target.type;\n if (this._isMouseDown && this._hoverClicked) {\n return;\n }\n if (this._isHoverSticky && targetType === 9 /* CONTENT_WIDGET */ && mouseEvent.target.detail === ModesContentHoverWidget.ID) {\n // mouse moved on top of content hover widget\n return;\n }\n if (this._isHoverSticky && !((_b = (_a = mouseEvent.event.browserEvent.view) === null || _a === void 0 ? void 0 : _a.getSelection()) === null || _b === void 0 ? void 0 : _b.isCollapsed)) {\n // selected text within content hover widget\n return;\n }\n if (!this._isHoverSticky && targetType === 9 /* CONTENT_WIDGET */ && mouseEvent.target.detail === ModesContentHoverWidget.ID\n && ((_c = this._contentWidget) === null || _c === void 0 ? void 0 : _c.isColorPickerVisible())) {\n // though the hover is not sticky, the color picker needs to.\n return;\n }\n if (this._isHoverSticky && targetType === 12 /* OVERLAY_WIDGET */ && mouseEvent.target.detail === ModesGlyphHoverWidget.ID) {\n // mouse moved on top of overlay hover widget\n return;\n }\n if (targetType === 7 /* CONTENT_EMPTY */) {\n const epsilon = this._editor.getOption(40 /* fontInfo */).typicalHalfwidthCharacterWidth / 2;\n const data = mouseEvent.target.detail;\n if (data && !data.isAfterLines && typeof data.horizontalDistanceToText === 'number' && data.horizontalDistanceToText < epsilon) {\n // Let hover kick in even when the mouse is technically in the empty area after a line, given the distance is small enough\n targetType = 6 /* CONTENT_TEXT */;\n }\n }\n if (targetType === 6 /* CONTENT_TEXT */) {\n (_d = this._glyphWidget) === null || _d === void 0 ? void 0 : _d.hide();\n if (this._isHoverEnabled && mouseEvent.target.range) {\n // TODO@rebornix. This should be removed if we move Color Picker out of Hover component.\n // Check if mouse is hovering on color decorator\n const hoverOnColorDecorator = [...((_e = mouseEvent.target.element) === null || _e === void 0 ? void 0 : _e.classList.values()) || []].find(className => className.startsWith('ced-colorBox'))\n && mouseEvent.target.range.endColumn - mouseEvent.target.range.startColumn === 1;\n const showAtRange = (hoverOnColorDecorator // shift the mouse focus by one as color decorator is a `before` decoration of next character.\n ? new Range(mouseEvent.target.range.startLineNumber, mouseEvent.target.range.startColumn + 1, mouseEvent.target.range.endLineNumber, mouseEvent.target.range.endColumn + 1)\n : mouseEvent.target.range);\n if (!this._contentWidget) {\n this._contentWidget = new ModesContentHoverWidget(this._editor, this._hoverVisibleKey, this._instantiationService, this._themeService);\n }\n this._contentWidget.startShowingAt(showAtRange, 0 /* Delayed */, false);\n }\n }\n else if (targetType === 2 /* GUTTER_GLYPH_MARGIN */) {\n (_f = this._contentWidget) === null || _f === void 0 ? void 0 : _f.hide();\n if (this._isHoverEnabled && mouseEvent.target.position) {\n if (!this._glyphWidget) {\n this._glyphWidget = new ModesGlyphHoverWidget(this._editor, this._modeService, this._openerService);\n }\n this._glyphWidget.startShowingAt(mouseEvent.target.position.lineNumber);\n }\n }\n else {\n this._hideWidgets();\n }\n }\n _onKeyDown(e) {\n if (e.keyCode !== 5 /* Ctrl */ && e.keyCode !== 6 /* Alt */ && e.keyCode !== 57 /* Meta */ && e.keyCode !== 4 /* Shift */) {\n // Do not hide hover when a modifier key is pressed\n this._hideWidgets();\n }\n }\n _hideWidgets() {\n var _a, _b, _c;\n if ((this._isMouseDown && this._hoverClicked && ((_a = this._contentWidget) === null || _a === void 0 ? void 0 : _a.isColorPickerVisible()))) {\n return;\n }\n this._hoverClicked = false;\n (_b = this._glyphWidget) === null || _b === void 0 ? void 0 : _b.hide();\n (_c = this._contentWidget) === null || _c === void 0 ? void 0 : _c.hide();\n }\n isColorPickerVisible() {\n var _a;\n return ((_a = this._contentWidget) === null || _a === void 0 ? void 0 : _a.isColorPickerVisible()) || false;\n }\n showContentHover(range, mode, focus) {\n if (!this._contentWidget) {\n this._contentWidget = new ModesContentHoverWidget(this._editor, this._hoverVisibleKey, this._instantiationService, this._themeService);\n }\n this._contentWidget.startShowingAt(range, mode, focus);\n }\n dispose() {\n var _a, _b;\n this._unhookEvents();\n this._toUnhook.dispose();\n this._didChangeConfigurationHandler.dispose();\n (_a = this._glyphWidget) === null || _a === void 0 ? void 0 : _a.dispose();\n (_b = this._contentWidget) === null || _b === void 0 ? void 0 : _b.dispose();\n }\n};\nModesHoverController.ID = 'editor.contrib.hover';\nModesHoverController = __decorate([\n __param(1, IInstantiationService),\n __param(2, IOpenerService),\n __param(3, IModeService),\n __param(4, IThemeService),\n __param(5, IContextKeyService)\n], ModesHoverController);\nexport { ModesHoverController };\nclass ShowHoverAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.showHover',\n label: nls.localize({\n key: 'showHover',\n comment: [\n 'Label for action that will trigger the showing of a hover in the editor.',\n 'This allows for users to show the hover without using the mouse.'\n ]\n }, \"Show Hover\"),\n alias: 'Show Hover',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 39 /* KEY_I */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n let controller = ModesHoverController.get(editor);\n if (!controller) {\n return;\n }\n const position = editor.getPosition();\n const range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);\n const focus = editor.getOption(2 /* accessibilitySupport */) === 2 /* Enabled */;\n controller.showContentHover(range, 1 /* Immediate */, focus);\n }\n}\nclass ShowDefinitionPreviewHoverAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.showDefinitionPreviewHover',\n label: nls.localize({\n key: 'showDefinitionPreviewHover',\n comment: [\n 'Label for action that will trigger the showing of definition preview hover in the editor.',\n 'This allows for users to show the definition preview hover without using the mouse.'\n ]\n }, \"Show Definition Preview Hover\"),\n alias: 'Show Definition Preview Hover',\n precondition: undefined\n });\n }\n run(accessor, editor) {\n let controller = ModesHoverController.get(editor);\n if (!controller) {\n return;\n }\n const position = editor.getPosition();\n if (!position) {\n return;\n }\n const range = new Range(position.lineNumber, position.column, position.lineNumber, position.column);\n const goto = GotoDefinitionAtPositionEditorContribution.get(editor);\n const promise = goto.startFindDefinitionFromCursor(position);\n promise.then(() => {\n controller.showContentHover(range, 1 /* Immediate */, true);\n });\n }\n}\nregisterEditorContribution(ModesHoverController.ID, ModesHoverController);\nregisterEditorAction(ShowHoverAction);\nregisterEditorAction(ShowDefinitionPreviewHoverAction);\n// theming\nregisterThemingParticipant((theme, collector) => {\n const editorHoverHighlightColor = theme.getColor(editorHoverHighlight);\n if (editorHoverHighlightColor) {\n collector.addRule(`.monaco-editor .hoverHighlight { background-color: ${editorHoverHighlightColor}; }`);\n }\n const hoverBackground = theme.getColor(editorHoverBackground);\n if (hoverBackground) {\n collector.addRule(`.monaco-editor .monaco-hover { background-color: ${hoverBackground}; }`);\n }\n const hoverBorder = theme.getColor(editorHoverBorder);\n if (hoverBorder) {\n collector.addRule(`.monaco-editor .monaco-hover { border: 1px solid ${hoverBorder}; }`);\n collector.addRule(`.monaco-editor .monaco-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${hoverBorder.transparent(0.5)}; }`);\n collector.addRule(`.monaco-editor .monaco-hover hr { border-top: 1px solid ${hoverBorder.transparent(0.5)}; }`);\n collector.addRule(`.monaco-editor .monaco-hover hr { border-bottom: 0px solid ${hoverBorder.transparent(0.5)}; }`);\n }\n const link = theme.getColor(textLinkForeground);\n if (link) {\n collector.addRule(`.monaco-editor .monaco-hover a { color: ${link}; }`);\n }\n const hoverForeground = theme.getColor(editorHoverForeground);\n if (hoverForeground) {\n collector.addRule(`.monaco-editor .monaco-hover { color: ${hoverForeground}; }`);\n }\n const actionsBackground = theme.getColor(editorHoverStatusBarBackground);\n if (actionsBackground) {\n collector.addRule(`.monaco-editor .monaco-hover .hover-row .actions { background-color: ${actionsBackground}; }`);\n }\n const codeBackground = theme.getColor(textCodeBlockBackground);\n if (codeBackground) {\n collector.addRule(`.monaco-editor .monaco-hover code { background-color: ${codeBackground}; }`);\n }\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// import color detector contribution\nimport './colorDetector.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { ModesHoverController } from '../hover/hover.js';\nimport { Range } from '../../common/core/range.js';\nexport class ColorContribution extends Disposable {\n constructor(_editor) {\n super();\n this._editor = _editor;\n this._register(_editor.onMouseDown((e) => this.onMouseDown(e)));\n }\n dispose() {\n super.dispose();\n }\n onMouseDown(mouseEvent) {\n var _a;\n const targetType = mouseEvent.target.type;\n if (targetType !== 6 /* CONTENT_TEXT */) {\n return;\n }\n const hoverOnColorDecorator = [...((_a = mouseEvent.target.element) === null || _a === void 0 ? void 0 : _a.classList.values()) || []].find(className => className.startsWith('ced-colorBox'));\n if (!hoverOnColorDecorator) {\n return;\n }\n if (!mouseEvent.target.range) {\n return;\n }\n const hoverController = this._editor.getContribution(ModesHoverController.ID);\n if (!hoverController.isColorPickerVisible()) {\n const range = new Range(mouseEvent.target.range.startLineNumber, mouseEvent.target.range.startColumn + 1, mouseEvent.target.range.endLineNumber, mouseEvent.target.range.endColumn + 1);\n hoverController.showContentHover(range, 0 /* Delayed */, false);\n }\n }\n}\nColorContribution.ID = 'editor.contrib.colorContribution'; // ms\nregisterEditorContribution(ColorContribution.ID, ColorContribution);\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 *--------------------------------------------------------------------------------------------*/\nimport { EditOperation } from '../../common/core/editOperation.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\nexport class BlockCommentCommand {\n constructor(selection, insertSpace) {\n this._selection = selection;\n this._insertSpace = insertSpace;\n this._usedEndToken = null;\n }\n static _haystackHasNeedleAtOffset(haystack, needle, offset) {\n if (offset < 0) {\n return false;\n }\n const needleLength = needle.length;\n const haystackLength = haystack.length;\n if (offset + needleLength > haystackLength) {\n return false;\n }\n for (let i = 0; i < needleLength; i++) {\n const codeA = haystack.charCodeAt(offset + i);\n const codeB = needle.charCodeAt(i);\n if (codeA === codeB) {\n continue;\n }\n if (codeA >= 65 /* A */ && codeA <= 90 /* Z */ && codeA + 32 === codeB) {\n // codeA is upper-case variant of codeB\n continue;\n }\n if (codeB >= 65 /* A */ && codeB <= 90 /* Z */ && codeB + 32 === codeA) {\n // codeB is upper-case variant of codeA\n continue;\n }\n return false;\n }\n return true;\n }\n _createOperationsForBlockComment(selection, startToken, endToken, insertSpace, model, builder) {\n const startLineNumber = selection.startLineNumber;\n const startColumn = selection.startColumn;\n const endLineNumber = selection.endLineNumber;\n const endColumn = selection.endColumn;\n const startLineText = model.getLineContent(startLineNumber);\n const endLineText = model.getLineContent(endLineNumber);\n let startTokenIndex = startLineText.lastIndexOf(startToken, startColumn - 1 + startToken.length);\n let endTokenIndex = endLineText.indexOf(endToken, endColumn - 1 - endToken.length);\n if (startTokenIndex !== -1 && endTokenIndex !== -1) {\n if (startLineNumber === endLineNumber) {\n const lineBetweenTokens = startLineText.substring(startTokenIndex + startToken.length, endTokenIndex);\n if (lineBetweenTokens.indexOf(endToken) >= 0) {\n // force to add a block comment\n startTokenIndex = -1;\n endTokenIndex = -1;\n }\n }\n else {\n const startLineAfterStartToken = startLineText.substring(startTokenIndex + startToken.length);\n const endLineBeforeEndToken = endLineText.substring(0, endTokenIndex);\n if (startLineAfterStartToken.indexOf(endToken) >= 0 || endLineBeforeEndToken.indexOf(endToken) >= 0) {\n // force to add a block comment\n startTokenIndex = -1;\n endTokenIndex = -1;\n }\n }\n }\n let ops;\n if (startTokenIndex !== -1 && endTokenIndex !== -1) {\n // Consider spaces as part of the comment tokens\n if (insertSpace && startTokenIndex + startToken.length < startLineText.length && startLineText.charCodeAt(startTokenIndex + startToken.length) === 32 /* Space */) {\n // Pretend the start token contains a trailing space\n startToken = startToken + ' ';\n }\n if (insertSpace && endTokenIndex > 0 && endLineText.charCodeAt(endTokenIndex - 1) === 32 /* Space */) {\n // Pretend the end token contains a leading space\n endToken = ' ' + endToken;\n endTokenIndex -= 1;\n }\n ops = BlockCommentCommand._createRemoveBlockCommentOperations(new Range(startLineNumber, startTokenIndex + startToken.length + 1, endLineNumber, endTokenIndex + 1), startToken, endToken);\n }\n else {\n ops = BlockCommentCommand._createAddBlockCommentOperations(selection, startToken, endToken, this._insertSpace);\n this._usedEndToken = ops.length === 1 ? endToken : null;\n }\n for (const op of ops) {\n builder.addTrackedEditOperation(op.range, op.text);\n }\n }\n static _createRemoveBlockCommentOperations(r, startToken, endToken) {\n let res = [];\n if (!Range.isEmpty(r)) {\n // Remove block comment start\n res.push(EditOperation.delete(new Range(r.startLineNumber, r.startColumn - startToken.length, r.startLineNumber, r.startColumn)));\n // Remove block comment end\n res.push(EditOperation.delete(new Range(r.endLineNumber, r.endColumn, r.endLineNumber, r.endColumn + endToken.length)));\n }\n else {\n // Remove both continuously\n res.push(EditOperation.delete(new Range(r.startLineNumber, r.startColumn - startToken.length, r.endLineNumber, r.endColumn + endToken.length)));\n }\n return res;\n }\n static _createAddBlockCommentOperations(r, startToken, endToken, insertSpace) {\n let res = [];\n if (!Range.isEmpty(r)) {\n // Insert block comment start\n res.push(EditOperation.insert(new Position(r.startLineNumber, r.startColumn), startToken + (insertSpace ? ' ' : '')));\n // Insert block comment end\n res.push(EditOperation.insert(new Position(r.endLineNumber, r.endColumn), (insertSpace ? ' ' : '') + endToken));\n }\n else {\n // Insert both continuously\n res.push(EditOperation.replace(new Range(r.startLineNumber, r.startColumn, r.endLineNumber, r.endColumn), startToken + ' ' + endToken));\n }\n return res;\n }\n getEditOperations(model, builder) {\n const startLineNumber = this._selection.startLineNumber;\n const startColumn = this._selection.startColumn;\n model.tokenizeIfCheap(startLineNumber);\n const languageId = model.getLanguageIdAtPosition(startLineNumber, startColumn);\n const config = LanguageConfigurationRegistry.getComments(languageId);\n if (!config || !config.blockCommentStartToken || !config.blockCommentEndToken) {\n // Mode does not support block comments\n return;\n }\n this._createOperationsForBlockComment(this._selection, config.blockCommentStartToken, config.blockCommentEndToken, this._insertSpace, model, builder);\n }\n computeCursorState(model, helper) {\n const inverseEditOperations = helper.getInverseEditOperations();\n if (inverseEditOperations.length === 2) {\n const startTokenEditOperation = inverseEditOperations[0];\n const endTokenEditOperation = inverseEditOperations[1];\n return new Selection(startTokenEditOperation.range.endLineNumber, startTokenEditOperation.range.endColumn, endTokenEditOperation.range.startLineNumber, endTokenEditOperation.range.startColumn);\n }\n else {\n const srcRange = inverseEditOperations[0].range;\n const deltaColumn = this._usedEndToken ? -this._usedEndToken.length - 1 : 0; // minus 1 space before endToken\n return new Selection(srcRange.endLineNumber, srcRange.endColumn + deltaColumn, srcRange.endLineNumber, srcRange.endColumn + deltaColumn);\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { EditOperation } from '../../common/core/editOperation.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\nimport { BlockCommentCommand } from './blockCommentCommand.js';\nexport class LineCommentCommand {\n constructor(selection, tabSize, type, insertSpace, ignoreEmptyLines, ignoreFirstLine) {\n this._selection = selection;\n this._tabSize = tabSize;\n this._type = type;\n this._insertSpace = insertSpace;\n this._selectionId = null;\n this._deltaColumn = 0;\n this._moveEndPositionDown = false;\n this._ignoreEmptyLines = ignoreEmptyLines;\n this._ignoreFirstLine = ignoreFirstLine || false;\n }\n /**\n * Do an initial pass over the lines and gather info about the line comment string.\n * Returns null if any of the lines doesn't support a line comment string.\n */\n static _gatherPreflightCommentStrings(model, startLineNumber, endLineNumber) {\n model.tokenizeIfCheap(startLineNumber);\n const languageId = model.getLanguageIdAtPosition(startLineNumber, 1);\n const config = LanguageConfigurationRegistry.getComments(languageId);\n const commentStr = (config ? config.lineCommentToken : null);\n if (!commentStr) {\n // Mode does not support line comments\n return null;\n }\n let lines = [];\n for (let i = 0, lineCount = endLineNumber - startLineNumber + 1; i < lineCount; i++) {\n lines[i] = {\n ignore: false,\n commentStr: commentStr,\n commentStrOffset: 0,\n commentStrLength: commentStr.length\n };\n }\n return lines;\n }\n /**\n * Analyze lines and decide which lines are relevant and what the toggle should do.\n * Also, build up several offsets and lengths useful in the generation of editor operations.\n */\n static _analyzeLines(type, insertSpace, model, lines, startLineNumber, ignoreEmptyLines, ignoreFirstLine) {\n let onlyWhitespaceLines = true;\n let shouldRemoveComments;\n if (type === 0 /* Toggle */) {\n shouldRemoveComments = true;\n }\n else if (type === 1 /* ForceAdd */) {\n shouldRemoveComments = false;\n }\n else {\n shouldRemoveComments = true;\n }\n for (let i = 0, lineCount = lines.length; i < lineCount; i++) {\n const lineData = lines[i];\n const lineNumber = startLineNumber + i;\n if (lineNumber === startLineNumber && ignoreFirstLine) {\n // first line ignored\n lineData.ignore = true;\n continue;\n }\n const lineContent = model.getLineContent(lineNumber);\n const lineContentStartOffset = strings.firstNonWhitespaceIndex(lineContent);\n if (lineContentStartOffset === -1) {\n // Empty or whitespace only line\n lineData.ignore = ignoreEmptyLines;\n lineData.commentStrOffset = lineContent.length;\n continue;\n }\n onlyWhitespaceLines = false;\n lineData.ignore = false;\n lineData.commentStrOffset = lineContentStartOffset;\n if (shouldRemoveComments && !BlockCommentCommand._haystackHasNeedleAtOffset(lineContent, lineData.commentStr, lineContentStartOffset)) {\n if (type === 0 /* Toggle */) {\n // Every line so far has been a line comment, but this one is not\n shouldRemoveComments = false;\n }\n else if (type === 1 /* ForceAdd */) {\n // Will not happen\n }\n else {\n lineData.ignore = true;\n }\n }\n if (shouldRemoveComments && insertSpace) {\n // Remove a following space if present\n const commentStrEndOffset = lineContentStartOffset + lineData.commentStrLength;\n if (commentStrEndOffset < lineContent.length && lineContent.charCodeAt(commentStrEndOffset) === 32 /* Space */) {\n lineData.commentStrLength += 1;\n }\n }\n }\n if (type === 0 /* Toggle */ && onlyWhitespaceLines) {\n // For only whitespace lines, we insert comments\n shouldRemoveComments = false;\n // Also, no longer ignore them\n for (let i = 0, lineCount = lines.length; i < lineCount; i++) {\n lines[i].ignore = false;\n }\n }\n return {\n supported: true,\n shouldRemoveComments: shouldRemoveComments,\n lines: lines\n };\n }\n /**\n * Analyze all lines and decide exactly what to do => not supported | insert line comments | remove line comments\n */\n static _gatherPreflightData(type, insertSpace, model, startLineNumber, endLineNumber, ignoreEmptyLines, ignoreFirstLine) {\n const lines = LineCommentCommand._gatherPreflightCommentStrings(model, startLineNumber, endLineNumber);\n if (lines === null) {\n return {\n supported: false\n };\n }\n return LineCommentCommand._analyzeLines(type, insertSpace, model, lines, startLineNumber, ignoreEmptyLines, ignoreFirstLine);\n }\n /**\n * Given a successful analysis, execute either insert line comments, either remove line comments\n */\n _executeLineComments(model, builder, data, s) {\n let ops;\n if (data.shouldRemoveComments) {\n ops = LineCommentCommand._createRemoveLineCommentsOperations(data.lines, s.startLineNumber);\n }\n else {\n LineCommentCommand._normalizeInsertionPoint(model, data.lines, s.startLineNumber, this._tabSize);\n ops = this._createAddLineCommentsOperations(data.lines, s.startLineNumber);\n }\n const cursorPosition = new Position(s.positionLineNumber, s.positionColumn);\n for (let i = 0, len = ops.length; i < len; i++) {\n builder.addEditOperation(ops[i].range, ops[i].text);\n if (Range.isEmpty(ops[i].range) && Range.getStartPosition(ops[i].range).equals(cursorPosition)) {\n const lineContent = model.getLineContent(cursorPosition.lineNumber);\n if (lineContent.length + 1 === cursorPosition.column) {\n this._deltaColumn = (ops[i].text || '').length;\n }\n }\n }\n this._selectionId = builder.trackSelection(s);\n }\n _attemptRemoveBlockComment(model, s, startToken, endToken) {\n let startLineNumber = s.startLineNumber;\n let endLineNumber = s.endLineNumber;\n let startTokenAllowedBeforeColumn = endToken.length + Math.max(model.getLineFirstNonWhitespaceColumn(s.startLineNumber), s.startColumn);\n let startTokenIndex = model.getLineContent(startLineNumber).lastIndexOf(startToken, startTokenAllowedBeforeColumn - 1);\n let endTokenIndex = model.getLineContent(endLineNumber).indexOf(endToken, s.endColumn - 1 - startToken.length);\n if (startTokenIndex !== -1 && endTokenIndex === -1) {\n endTokenIndex = model.getLineContent(startLineNumber).indexOf(endToken, startTokenIndex + startToken.length);\n endLineNumber = startLineNumber;\n }\n if (startTokenIndex === -1 && endTokenIndex !== -1) {\n startTokenIndex = model.getLineContent(endLineNumber).lastIndexOf(startToken, endTokenIndex);\n startLineNumber = endLineNumber;\n }\n if (s.isEmpty() && (startTokenIndex === -1 || endTokenIndex === -1)) {\n startTokenIndex = model.getLineContent(startLineNumber).indexOf(startToken);\n if (startTokenIndex !== -1) {\n endTokenIndex = model.getLineContent(startLineNumber).indexOf(endToken, startTokenIndex + startToken.length);\n }\n }\n // We have to adjust to possible inner white space.\n // For Space after startToken, add Space to startToken - range math will work out.\n if (startTokenIndex !== -1 && model.getLineContent(startLineNumber).charCodeAt(startTokenIndex + startToken.length) === 32 /* Space */) {\n startToken += ' ';\n }\n // For Space before endToken, add Space before endToken and shift index one left.\n if (endTokenIndex !== -1 && model.getLineContent(endLineNumber).charCodeAt(endTokenIndex - 1) === 32 /* Space */) {\n endToken = ' ' + endToken;\n endTokenIndex -= 1;\n }\n if (startTokenIndex !== -1 && endTokenIndex !== -1) {\n return BlockCommentCommand._createRemoveBlockCommentOperations(new Range(startLineNumber, startTokenIndex + startToken.length + 1, endLineNumber, endTokenIndex + 1), startToken, endToken);\n }\n return null;\n }\n /**\n * Given an unsuccessful analysis, delegate to the block comment command\n */\n _executeBlockComment(model, builder, s) {\n model.tokenizeIfCheap(s.startLineNumber);\n let languageId = model.getLanguageIdAtPosition(s.startLineNumber, 1);\n let config = LanguageConfigurationRegistry.getComments(languageId);\n if (!config || !config.blockCommentStartToken || !config.blockCommentEndToken) {\n // Mode does not support block comments\n return;\n }\n const startToken = config.blockCommentStartToken;\n const endToken = config.blockCommentEndToken;\n let ops = this._attemptRemoveBlockComment(model, s, startToken, endToken);\n if (!ops) {\n if (s.isEmpty()) {\n const lineContent = model.getLineContent(s.startLineNumber);\n let firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n if (firstNonWhitespaceIndex === -1) {\n // Line is empty or contains only whitespace\n firstNonWhitespaceIndex = lineContent.length;\n }\n ops = BlockCommentCommand._createAddBlockCommentOperations(new Range(s.startLineNumber, firstNonWhitespaceIndex + 1, s.startLineNumber, lineContent.length + 1), startToken, endToken, this._insertSpace);\n }\n else {\n ops = BlockCommentCommand._createAddBlockCommentOperations(new Range(s.startLineNumber, model.getLineFirstNonWhitespaceColumn(s.startLineNumber), s.endLineNumber, model.getLineMaxColumn(s.endLineNumber)), startToken, endToken, this._insertSpace);\n }\n if (ops.length === 1) {\n // Leave cursor after token and Space\n this._deltaColumn = startToken.length + 1;\n }\n }\n this._selectionId = builder.trackSelection(s);\n for (const op of ops) {\n builder.addEditOperation(op.range, op.text);\n }\n }\n getEditOperations(model, builder) {\n let s = this._selection;\n this._moveEndPositionDown = false;\n if (s.startLineNumber === s.endLineNumber && this._ignoreFirstLine) {\n builder.addEditOperation(new Range(s.startLineNumber, model.getLineMaxColumn(s.startLineNumber), s.startLineNumber + 1, 1), s.startLineNumber === model.getLineCount() ? '' : '\\n');\n this._selectionId = builder.trackSelection(s);\n return;\n }\n if (s.startLineNumber < s.endLineNumber && s.endColumn === 1) {\n this._moveEndPositionDown = true;\n s = s.setEndPosition(s.endLineNumber - 1, model.getLineMaxColumn(s.endLineNumber - 1));\n }\n const data = LineCommentCommand._gatherPreflightData(this._type, this._insertSpace, model, s.startLineNumber, s.endLineNumber, this._ignoreEmptyLines, this._ignoreFirstLine);\n if (data.supported) {\n return this._executeLineComments(model, builder, data, s);\n }\n return this._executeBlockComment(model, builder, s);\n }\n computeCursorState(model, helper) {\n let result = helper.getTrackedSelection(this._selectionId);\n if (this._moveEndPositionDown) {\n result = result.setEndPosition(result.endLineNumber + 1, 1);\n }\n return new Selection(result.selectionStartLineNumber, result.selectionStartColumn + this._deltaColumn, result.positionLineNumber, result.positionColumn + this._deltaColumn);\n }\n /**\n * Generate edit operations in the remove line comment case\n */\n static _createRemoveLineCommentsOperations(lines, startLineNumber) {\n let res = [];\n for (let i = 0, len = lines.length; i < len; i++) {\n const lineData = lines[i];\n if (lineData.ignore) {\n continue;\n }\n res.push(EditOperation.delete(new Range(startLineNumber + i, lineData.commentStrOffset + 1, startLineNumber + i, lineData.commentStrOffset + lineData.commentStrLength + 1)));\n }\n return res;\n }\n /**\n * Generate edit operations in the add line comment case\n */\n _createAddLineCommentsOperations(lines, startLineNumber) {\n let res = [];\n const afterCommentStr = this._insertSpace ? ' ' : '';\n for (let i = 0, len = lines.length; i < len; i++) {\n const lineData = lines[i];\n if (lineData.ignore) {\n continue;\n }\n res.push(EditOperation.insert(new Position(startLineNumber + i, lineData.commentStrOffset + 1), lineData.commentStr + afterCommentStr));\n }\n return res;\n }\n static nextVisibleColumn(currentVisibleColumn, tabSize, isTab, columnSize) {\n if (isTab) {\n return currentVisibleColumn + (tabSize - (currentVisibleColumn % tabSize));\n }\n return currentVisibleColumn + columnSize;\n }\n /**\n * Adjust insertion points to have them vertically aligned in the add line comment case\n */\n static _normalizeInsertionPoint(model, lines, startLineNumber, tabSize) {\n let minVisibleColumn = 1073741824 /* MAX_SAFE_SMALL_INTEGER */;\n let j;\n let lenJ;\n for (let i = 0, len = lines.length; i < len; i++) {\n if (lines[i].ignore) {\n continue;\n }\n const lineContent = model.getLineContent(startLineNumber + i);\n let currentVisibleColumn = 0;\n for (let j = 0, lenJ = lines[i].commentStrOffset; currentVisibleColumn < minVisibleColumn && j < lenJ; j++) {\n currentVisibleColumn = LineCommentCommand.nextVisibleColumn(currentVisibleColumn, tabSize, lineContent.charCodeAt(j) === 9 /* Tab */, 1);\n }\n if (currentVisibleColumn < minVisibleColumn) {\n minVisibleColumn = currentVisibleColumn;\n }\n }\n minVisibleColumn = Math.floor(minVisibleColumn / tabSize) * tabSize;\n for (let i = 0, len = lines.length; i < len; i++) {\n if (lines[i].ignore) {\n continue;\n }\n const lineContent = model.getLineContent(startLineNumber + i);\n let currentVisibleColumn = 0;\n for (j = 0, lenJ = lines[i].commentStrOffset; currentVisibleColumn < minVisibleColumn && j < lenJ; j++) {\n currentVisibleColumn = LineCommentCommand.nextVisibleColumn(currentVisibleColumn, tabSize, lineContent.charCodeAt(j) === 9 /* Tab */, 1);\n }\n if (currentVisibleColumn > minVisibleColumn) {\n lines[i].commentStrOffset = j - 1;\n }\n else {\n lines[i].commentStrOffset = j;\n }\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { EditorAction, registerEditorAction } from '../../browser/editorExtensions.js';\nimport { Range } from '../../common/core/range.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { BlockCommentCommand } from './blockCommentCommand.js';\nimport { LineCommentCommand } from './lineCommentCommand.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nclass CommentLineAction extends EditorAction {\n constructor(type, opts) {\n super(opts);\n this._type = type;\n }\n run(accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n const model = editor.getModel();\n const commands = [];\n const modelOptions = model.getOptions();\n const commentsOptions = editor.getOption(17 /* comments */);\n const selections = editor.getSelections().map((selection, index) => ({ selection, index, ignoreFirstLine: false }));\n selections.sort((a, b) => Range.compareRangesUsingStarts(a.selection, b.selection));\n // Remove selections that would result in copying the same line\n let prev = selections[0];\n for (let i = 1; i < selections.length; i++) {\n const curr = selections[i];\n if (prev.selection.endLineNumber === curr.selection.startLineNumber) {\n // these two selections would copy the same line\n if (prev.index < curr.index) {\n // prev wins\n curr.ignoreFirstLine = true;\n }\n else {\n // curr wins\n prev.ignoreFirstLine = true;\n prev = curr;\n }\n }\n }\n for (const selection of selections) {\n commands.push(new LineCommentCommand(selection.selection, modelOptions.tabSize, this._type, commentsOptions.insertSpace, commentsOptions.ignoreEmptyLines, selection.ignoreFirstLine));\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n}\nclass ToggleCommentLineAction extends CommentLineAction {\n constructor() {\n super(0 /* Toggle */, {\n id: 'editor.action.commentLine',\n label: nls.localize('comment.line', \"Toggle Line Comment\"),\n alias: 'Toggle Line Comment',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 85 /* US_SLASH */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarEditMenu,\n group: '5_insert',\n title: nls.localize({ key: 'miToggleLineComment', comment: ['&& denotes a mnemonic'] }, \"&&Toggle Line Comment\"),\n order: 1\n }\n });\n }\n}\nclass AddLineCommentAction extends CommentLineAction {\n constructor() {\n super(1 /* ForceAdd */, {\n id: 'editor.action.addCommentLine',\n label: nls.localize('comment.line.add', \"Add Line Comment\"),\n alias: 'Add Line Comment',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 33 /* KEY_C */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nclass RemoveLineCommentAction extends CommentLineAction {\n constructor() {\n super(2 /* ForceRemove */, {\n id: 'editor.action.removeCommentLine',\n label: nls.localize('comment.line.remove', \"Remove Line Comment\"),\n alias: 'Remove Line Comment',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 51 /* KEY_U */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nclass BlockCommentAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.blockComment',\n label: nls.localize('comment.block', \"Toggle Block Comment\"),\n alias: 'Toggle Block Comment',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 1024 /* Shift */ | 512 /* Alt */ | 31 /* KEY_A */,\n linux: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 31 /* KEY_A */ },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarEditMenu,\n group: '5_insert',\n title: nls.localize({ key: 'miToggleBlockComment', comment: ['&& denotes a mnemonic'] }, \"Toggle &&Block Comment\"),\n order: 2\n }\n });\n }\n run(accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n const commentsOptions = editor.getOption(17 /* comments */);\n const commands = [];\n const selections = editor.getSelections();\n for (const selection of selections) {\n commands.push(new BlockCommentCommand(selection, commentsOptions.insertSpace));\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n}\nregisterEditorAction(ToggleCommentLineAction);\nregisterEditorAction(AddLineCommentAction);\nregisterEditorAction(RemoveLineCommentAction);\nregisterEditorAction(BlockCommentAction);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as nls from '../../../nls.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { Separator, SubmenuAction } from '../../../base/common/actions.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { IMenuService, MenuId, SubmenuItemAction } from '../../../platform/actions/common/actions.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IContextMenuService, IContextViewService } from '../../../platform/contextview/browser/contextView.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { ActionViewItem } from '../../../base/browser/ui/actionbar/actionViewItems.js';\nlet ContextMenuController = class ContextMenuController {\n constructor(editor, _contextMenuService, _contextViewService, _contextKeyService, _keybindingService, _menuService) {\n this._contextMenuService = _contextMenuService;\n this._contextViewService = _contextViewService;\n this._contextKeyService = _contextKeyService;\n this._keybindingService = _keybindingService;\n this._menuService = _menuService;\n this._toDispose = new DisposableStore();\n this._contextMenuIsBeingShownCount = 0;\n this._editor = editor;\n this._toDispose.add(this._editor.onContextMenu((e) => this._onContextMenu(e)));\n this._toDispose.add(this._editor.onMouseWheel((e) => {\n if (this._contextMenuIsBeingShownCount > 0) {\n const view = this._contextViewService.getContextViewElement();\n const target = e.srcElement;\n // Event triggers on shadow root host first\n // Check if the context view is under this host before hiding it #103169\n if (!(target.shadowRoot && dom.getShadowRoot(view) === target.shadowRoot)) {\n this._contextViewService.hideContextView();\n }\n }\n }));\n this._toDispose.add(this._editor.onKeyDown((e) => {\n if (e.keyCode === 58 /* ContextMenu */) {\n // Chrome is funny like that\n e.preventDefault();\n e.stopPropagation();\n this.showContextMenu();\n }\n }));\n }\n static get(editor) {\n return editor.getContribution(ContextMenuController.ID);\n }\n _onContextMenu(e) {\n if (!this._editor.hasModel()) {\n return;\n }\n if (!this._editor.getOption(18 /* contextmenu */)) {\n this._editor.focus();\n // Ensure the cursor is at the position of the mouse click\n if (e.target.position && !this._editor.getSelection().containsPosition(e.target.position)) {\n this._editor.setPosition(e.target.position);\n }\n return; // Context menu is turned off through configuration\n }\n if (e.target.type === 12 /* OVERLAY_WIDGET */) {\n return; // allow native menu on widgets to support right click on input field for example in find\n }\n e.event.preventDefault();\n if (e.target.type !== 6 /* CONTENT_TEXT */ && e.target.type !== 7 /* CONTENT_EMPTY */ && e.target.type !== 1 /* TEXTAREA */) {\n return; // only support mouse click into text or native context menu key for now\n }\n // Ensure the editor gets focus if it hasn't, so the right events are being sent to other contributions\n this._editor.focus();\n // Ensure the cursor is at the position of the mouse click\n if (e.target.position) {\n let hasSelectionAtPosition = false;\n for (const selection of this._editor.getSelections()) {\n if (selection.containsPosition(e.target.position)) {\n hasSelectionAtPosition = true;\n break;\n }\n }\n if (!hasSelectionAtPosition) {\n this._editor.setPosition(e.target.position);\n }\n }\n // Unless the user triggerd the context menu through Shift+F10, use the mouse position as menu position\n let anchor = null;\n if (e.target.type !== 1 /* TEXTAREA */) {\n anchor = { x: e.event.posx - 1, width: 2, y: e.event.posy - 1, height: 2 };\n }\n // Show the context menu\n this.showContextMenu(anchor);\n }\n showContextMenu(anchor) {\n if (!this._editor.getOption(18 /* contextmenu */)) {\n return; // Context menu is turned off through configuration\n }\n if (!this._editor.hasModel()) {\n return;\n }\n if (!this._contextMenuService) {\n this._editor.focus();\n return; // We need the context menu service to function\n }\n // Find actions available for menu\n const menuActions = this._getMenuActions(this._editor.getModel(), MenuId.EditorContext);\n // Show menu if we have actions to show\n if (menuActions.length > 0) {\n this._doShowContextMenu(menuActions, anchor);\n }\n }\n _getMenuActions(model, menuId) {\n const result = [];\n // get menu groups\n const menu = this._menuService.createMenu(menuId, this._contextKeyService);\n const groups = menu.getActions({ arg: model.uri });\n menu.dispose();\n // translate them into other actions\n for (let group of groups) {\n const [, actions] = group;\n let addedItems = 0;\n for (const action of actions) {\n if (action instanceof SubmenuItemAction) {\n const subActions = this._getMenuActions(model, action.item.submenu);\n if (subActions.length > 0) {\n result.push(new SubmenuAction(action.id, action.label, subActions));\n addedItems++;\n }\n }\n else {\n result.push(action);\n addedItems++;\n }\n }\n if (addedItems) {\n result.push(new Separator());\n }\n }\n if (result.length) {\n result.pop(); // remove last separator\n }\n return result;\n }\n _doShowContextMenu(actions, anchor = null) {\n if (!this._editor.hasModel()) {\n return;\n }\n // Disable hover\n const oldHoverSetting = this._editor.getOption(50 /* hover */);\n this._editor.updateOptions({\n hover: {\n enabled: false\n }\n });\n if (!anchor) {\n // Ensure selection is visible\n this._editor.revealPosition(this._editor.getPosition(), 1 /* Immediate */);\n this._editor.render();\n const cursorCoords = this._editor.getScrolledVisiblePosition(this._editor.getPosition());\n // Translate to absolute editor position\n const editorCoords = dom.getDomNodePagePosition(this._editor.getDomNode());\n const posx = editorCoords.left + cursorCoords.left;\n const posy = editorCoords.top + cursorCoords.top + cursorCoords.height;\n anchor = { x: posx, y: posy };\n }\n const useShadowDOM = this._editor.getOption(111 /* useShadowDOM */);\n // Show menu\n this._contextMenuIsBeingShownCount++;\n this._contextMenuService.showContextMenu({\n domForShadowRoot: useShadowDOM ? this._editor.getDomNode() : undefined,\n getAnchor: () => anchor,\n getActions: () => actions,\n getActionViewItem: (action) => {\n const keybinding = this._keybindingFor(action);\n if (keybinding) {\n return new ActionViewItem(action, action, { label: true, keybinding: keybinding.getLabel(), isMenu: true });\n }\n const customActionViewItem = action;\n if (typeof customActionViewItem.getActionViewItem === 'function') {\n return customActionViewItem.getActionViewItem();\n }\n return new ActionViewItem(action, action, { icon: true, label: true, isMenu: true });\n },\n getKeyBinding: (action) => {\n return this._keybindingFor(action);\n },\n onHide: (wasCancelled) => {\n this._contextMenuIsBeingShownCount--;\n this._editor.focus();\n this._editor.updateOptions({\n hover: oldHoverSetting\n });\n }\n });\n }\n _keybindingFor(action) {\n return this._keybindingService.lookupKeybinding(action.id);\n }\n dispose() {\n if (this._contextMenuIsBeingShownCount > 0) {\n this._contextViewService.hideContextView();\n }\n this._toDispose.dispose();\n }\n};\nContextMenuController.ID = 'editor.contrib.contextmenu';\nContextMenuController = __decorate([\n __param(1, IContextMenuService),\n __param(2, IContextViewService),\n __param(3, IContextKeyService),\n __param(4, IKeybindingService),\n __param(5, IMenuService)\n], ContextMenuController);\nexport { ContextMenuController };\nclass ShowContextMenu extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.showContextMenu',\n label: nls.localize('action.showContextMenu.label', \"Show Editor Context Menu\"),\n alias: 'Show Editor Context Menu',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 68 /* F10 */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n let contribution = ContextMenuController.get(editor);\n contribution.showContextMenu();\n }\n}\nregisterEditorContribution(ContextMenuController.ID, ContextMenuController);\nregisterEditorAction(ShowContextMenu);\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nclass CursorState {\n constructor(selections) {\n this.selections = selections;\n }\n equals(other) {\n const thisLen = this.selections.length;\n const otherLen = other.selections.length;\n if (thisLen !== otherLen) {\n return false;\n }\n for (let i = 0; i < thisLen; i++) {\n if (!this.selections[i].equalsSelection(other.selections[i])) {\n return false;\n }\n }\n return true;\n }\n}\nclass StackElement {\n constructor(cursorState, scrollTop, scrollLeft) {\n this.cursorState = cursorState;\n this.scrollTop = scrollTop;\n this.scrollLeft = scrollLeft;\n }\n}\nexport class CursorUndoRedoController extends Disposable {\n constructor(editor) {\n super();\n this._editor = editor;\n this._isCursorUndoRedo = false;\n this._undoStack = [];\n this._redoStack = [];\n this._register(editor.onDidChangeModel((e) => {\n this._undoStack = [];\n this._redoStack = [];\n }));\n this._register(editor.onDidChangeModelContent((e) => {\n this._undoStack = [];\n this._redoStack = [];\n }));\n this._register(editor.onDidChangeCursorSelection((e) => {\n if (this._isCursorUndoRedo) {\n return;\n }\n if (!e.oldSelections) {\n return;\n }\n if (e.oldModelVersionId !== e.modelVersionId) {\n return;\n }\n const prevState = new CursorState(e.oldSelections);\n const isEqualToLastUndoStack = (this._undoStack.length > 0 && this._undoStack[this._undoStack.length - 1].cursorState.equals(prevState));\n if (!isEqualToLastUndoStack) {\n this._undoStack.push(new StackElement(prevState, editor.getScrollTop(), editor.getScrollLeft()));\n this._redoStack = [];\n if (this._undoStack.length > 50) {\n // keep the cursor undo stack bounded\n this._undoStack.shift();\n }\n }\n }));\n }\n static get(editor) {\n return editor.getContribution(CursorUndoRedoController.ID);\n }\n cursorUndo() {\n if (!this._editor.hasModel() || this._undoStack.length === 0) {\n return;\n }\n this._redoStack.push(new StackElement(new CursorState(this._editor.getSelections()), this._editor.getScrollTop(), this._editor.getScrollLeft()));\n this._applyState(this._undoStack.pop());\n }\n cursorRedo() {\n if (!this._editor.hasModel() || this._redoStack.length === 0) {\n return;\n }\n this._undoStack.push(new StackElement(new CursorState(this._editor.getSelections()), this._editor.getScrollTop(), this._editor.getScrollLeft()));\n this._applyState(this._redoStack.pop());\n }\n _applyState(stackElement) {\n this._isCursorUndoRedo = true;\n this._editor.setSelections(stackElement.cursorState.selections);\n this._editor.setScrollPosition({\n scrollTop: stackElement.scrollTop,\n scrollLeft: stackElement.scrollLeft\n });\n this._isCursorUndoRedo = false;\n }\n}\nCursorUndoRedoController.ID = 'editor.contrib.cursorUndoRedoController';\nexport class CursorUndo extends EditorAction {\n constructor() {\n super({\n id: 'cursorUndo',\n label: nls.localize('cursor.undo', \"Cursor Undo\"),\n alias: 'Cursor Undo',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 51 /* KEY_U */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor, args) {\n CursorUndoRedoController.get(editor).cursorUndo();\n }\n}\nexport class CursorRedo extends EditorAction {\n constructor() {\n super({\n id: 'cursorRedo',\n label: nls.localize('cursor.redo', \"Cursor Redo\"),\n alias: 'Cursor Redo',\n precondition: undefined\n });\n }\n run(accessor, editor, args) {\n CursorUndoRedoController.get(editor).cursorRedo();\n }\n}\nregisterEditorContribution(CursorUndoRedoController.ID, CursorUndoRedoController);\nregisterEditorAction(CursorUndo);\nregisterEditorAction(CursorRedo);\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 *--------------------------------------------------------------------------------------------*/\nimport { Selection } from '../../common/core/selection.js';\nimport { Range } from '../../common/core/range.js';\nexport class DragAndDropCommand {\n constructor(selection, targetPosition, copy) {\n this.selection = selection;\n this.targetPosition = targetPosition;\n this.copy = copy;\n this.targetSelection = null;\n }\n getEditOperations(model, builder) {\n let text = model.getValueInRange(this.selection);\n if (!this.copy) {\n builder.addEditOperation(this.selection, null);\n }\n builder.addEditOperation(new Range(this.targetPosition.lineNumber, this.targetPosition.column, this.targetPosition.lineNumber, this.targetPosition.column), text);\n if (this.selection.containsPosition(this.targetPosition) && !(this.copy && (this.selection.getEndPosition().equals(this.targetPosition) || this.selection.getStartPosition().equals(this.targetPosition)) // we allow users to paste content beside the selection\n )) {\n this.targetSelection = this.selection;\n return;\n }\n if (this.copy) {\n this.targetSelection = new Selection(this.targetPosition.lineNumber, this.targetPosition.column, this.selection.endLineNumber - this.selection.startLineNumber + this.targetPosition.lineNumber, this.selection.startLineNumber === this.selection.endLineNumber ?\n this.targetPosition.column + this.selection.endColumn - this.selection.startColumn :\n this.selection.endColumn);\n return;\n }\n if (this.targetPosition.lineNumber > this.selection.endLineNumber) {\n // Drag the selection downwards\n this.targetSelection = new Selection(this.targetPosition.lineNumber - this.selection.endLineNumber + this.selection.startLineNumber, this.targetPosition.column, this.targetPosition.lineNumber, this.selection.startLineNumber === this.selection.endLineNumber ?\n this.targetPosition.column + this.selection.endColumn - this.selection.startColumn :\n this.selection.endColumn);\n return;\n }\n if (this.targetPosition.lineNumber < this.selection.endLineNumber) {\n // Drag the selection upwards\n this.targetSelection = new Selection(this.targetPosition.lineNumber, this.targetPosition.column, this.targetPosition.lineNumber + this.selection.endLineNumber - this.selection.startLineNumber, this.selection.startLineNumber === this.selection.endLineNumber ?\n this.targetPosition.column + this.selection.endColumn - this.selection.startColumn :\n this.selection.endColumn);\n return;\n }\n // The target position is at the same line as the selection's end position.\n if (this.selection.endColumn <= this.targetPosition.column) {\n // The target position is after the selection's end position\n this.targetSelection = new Selection(this.targetPosition.lineNumber - this.selection.endLineNumber + this.selection.startLineNumber, this.selection.startLineNumber === this.selection.endLineNumber ?\n this.targetPosition.column - this.selection.endColumn + this.selection.startColumn :\n this.targetPosition.column - this.selection.endColumn + this.selection.startColumn, this.targetPosition.lineNumber, this.selection.startLineNumber === this.selection.endLineNumber ?\n this.targetPosition.column :\n this.selection.endColumn);\n }\n else {\n // The target position is before the selection's end position. Since the selection doesn't contain the target position, the selection is one-line and target position is before this selection.\n this.targetSelection = new Selection(this.targetPosition.lineNumber - this.selection.endLineNumber + this.selection.startLineNumber, this.targetPosition.column, this.targetPosition.lineNumber, this.targetPosition.column + this.selection.endColumn - this.selection.startColumn);\n }\n }\n computeCursorState(model, helper) {\n return this.targetSelection;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './dnd.css';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { isMacintosh } from '../../../base/common/platform.js';\nimport { registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { DragAndDropCommand } from './dragAndDropCommand.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nfunction hasTriggerModifier(e) {\n if (isMacintosh) {\n return e.altKey;\n }\n else {\n return e.ctrlKey;\n }\n}\nexport class DragAndDropController extends Disposable {\n constructor(editor) {\n super();\n this._editor = editor;\n this._register(this._editor.onMouseDown((e) => this._onEditorMouseDown(e)));\n this._register(this._editor.onMouseUp((e) => this._onEditorMouseUp(e)));\n this._register(this._editor.onMouseDrag((e) => this._onEditorMouseDrag(e)));\n this._register(this._editor.onMouseDrop((e) => this._onEditorMouseDrop(e)));\n this._register(this._editor.onMouseDropCanceled(() => this._onEditorMouseDropCanceled()));\n this._register(this._editor.onKeyDown((e) => this.onEditorKeyDown(e)));\n this._register(this._editor.onKeyUp((e) => this.onEditorKeyUp(e)));\n this._register(this._editor.onDidBlurEditorWidget(() => this.onEditorBlur()));\n this._register(this._editor.onDidBlurEditorText(() => this.onEditorBlur()));\n this._dndDecorationIds = [];\n this._mouseDown = false;\n this._modifierPressed = false;\n this._dragSelection = null;\n }\n onEditorBlur() {\n this._removeDecoration();\n this._dragSelection = null;\n this._mouseDown = false;\n this._modifierPressed = false;\n }\n onEditorKeyDown(e) {\n if (!this._editor.getOption(29 /* dragAndDrop */) || this._editor.getOption(16 /* columnSelection */)) {\n return;\n }\n if (hasTriggerModifier(e)) {\n this._modifierPressed = true;\n }\n if (this._mouseDown && hasTriggerModifier(e)) {\n this._editor.updateOptions({\n mouseStyle: 'copy'\n });\n }\n }\n onEditorKeyUp(e) {\n if (!this._editor.getOption(29 /* dragAndDrop */) || this._editor.getOption(16 /* columnSelection */)) {\n return;\n }\n if (hasTriggerModifier(e)) {\n this._modifierPressed = false;\n }\n if (this._mouseDown && e.keyCode === DragAndDropController.TRIGGER_KEY_VALUE) {\n this._editor.updateOptions({\n mouseStyle: 'default'\n });\n }\n }\n _onEditorMouseDown(mouseEvent) {\n this._mouseDown = true;\n }\n _onEditorMouseUp(mouseEvent) {\n this._mouseDown = false;\n // Whenever users release the mouse, the drag and drop operation should finish and the cursor should revert to text.\n this._editor.updateOptions({\n mouseStyle: 'text'\n });\n }\n _onEditorMouseDrag(mouseEvent) {\n let target = mouseEvent.target;\n if (this._dragSelection === null) {\n const selections = this._editor.getSelections() || [];\n let possibleSelections = selections.filter(selection => target.position && selection.containsPosition(target.position));\n if (possibleSelections.length === 1) {\n this._dragSelection = possibleSelections[0];\n }\n else {\n return;\n }\n }\n if (hasTriggerModifier(mouseEvent.event)) {\n this._editor.updateOptions({\n mouseStyle: 'copy'\n });\n }\n else {\n this._editor.updateOptions({\n mouseStyle: 'default'\n });\n }\n if (target.position) {\n if (this._dragSelection.containsPosition(target.position)) {\n this._removeDecoration();\n }\n else {\n this.showAt(target.position);\n }\n }\n }\n _onEditorMouseDropCanceled() {\n this._editor.updateOptions({\n mouseStyle: 'text'\n });\n this._removeDecoration();\n this._dragSelection = null;\n this._mouseDown = false;\n }\n _onEditorMouseDrop(mouseEvent) {\n if (mouseEvent.target && (this._hitContent(mouseEvent.target) || this._hitMargin(mouseEvent.target)) && mouseEvent.target.position) {\n let newCursorPosition = new Position(mouseEvent.target.position.lineNumber, mouseEvent.target.position.column);\n if (this._dragSelection === null) {\n let newSelections = null;\n if (mouseEvent.event.shiftKey) {\n let primarySelection = this._editor.getSelection();\n if (primarySelection) {\n const { selectionStartLineNumber, selectionStartColumn } = primarySelection;\n newSelections = [new Selection(selectionStartLineNumber, selectionStartColumn, newCursorPosition.lineNumber, newCursorPosition.column)];\n }\n }\n else {\n newSelections = (this._editor.getSelections() || []).map(selection => {\n if (selection.containsPosition(newCursorPosition)) {\n return new Selection(newCursorPosition.lineNumber, newCursorPosition.column, newCursorPosition.lineNumber, newCursorPosition.column);\n }\n else {\n return selection;\n }\n });\n }\n // Use `mouse` as the source instead of `api` and setting the reason to explicit (to behave like any other mouse operation).\n this._editor.setSelections(newSelections || [], 'mouse', 3 /* Explicit */);\n }\n else if (!this._dragSelection.containsPosition(newCursorPosition) ||\n ((hasTriggerModifier(mouseEvent.event) ||\n this._modifierPressed) && (this._dragSelection.getEndPosition().equals(newCursorPosition) || this._dragSelection.getStartPosition().equals(newCursorPosition)) // we allow users to paste content beside the selection\n )) {\n this._editor.pushUndoStop();\n this._editor.executeCommand(DragAndDropController.ID, new DragAndDropCommand(this._dragSelection, newCursorPosition, hasTriggerModifier(mouseEvent.event) || this._modifierPressed));\n this._editor.pushUndoStop();\n }\n }\n this._editor.updateOptions({\n mouseStyle: 'text'\n });\n this._removeDecoration();\n this._dragSelection = null;\n this._mouseDown = false;\n }\n showAt(position) {\n let newDecorations = [{\n range: new Range(position.lineNumber, position.column, position.lineNumber, position.column),\n options: DragAndDropController._DECORATION_OPTIONS\n }];\n this._dndDecorationIds = this._editor.deltaDecorations(this._dndDecorationIds, newDecorations);\n this._editor.revealPosition(position, 1 /* Immediate */);\n }\n _removeDecoration() {\n this._dndDecorationIds = this._editor.deltaDecorations(this._dndDecorationIds, []);\n }\n _hitContent(target) {\n return target.type === 6 /* CONTENT_TEXT */ ||\n target.type === 7 /* CONTENT_EMPTY */;\n }\n _hitMargin(target) {\n return target.type === 2 /* GUTTER_GLYPH_MARGIN */ ||\n target.type === 3 /* GUTTER_LINE_NUMBERS */ ||\n target.type === 4 /* GUTTER_LINE_DECORATIONS */;\n }\n dispose() {\n this._removeDecoration();\n this._dragSelection = null;\n this._mouseDown = false;\n this._modifierPressed = false;\n super.dispose();\n }\n}\nDragAndDropController.ID = 'editor.contrib.dragAndDrop';\nDragAndDropController.TRIGGER_KEY_VALUE = isMacintosh ? 6 /* Alt */ : 5 /* Ctrl */;\nDragAndDropController._DECORATION_OPTIONS = ModelDecorationOptions.register({\n className: 'dnd-target'\n});\nregisterEditorContribution(DragAndDropController.ID, DragAndDropController);\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 *--------------------------------------------------------------------------------------------*/\nimport { equals } from '../../../base/common/arrays.js';\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { LRUCache } from '../../../base/common/map.js';\nimport { Range } from '../../common/core/range.js';\nimport { DocumentSymbolProviderRegistry } from '../../common/modes.js';\nimport { Iterable } from '../../../base/common/iterator.js';\nimport { LanguageFeatureRequestDelays } from '../../common/modes/languageFeatureRegistry.js';\nexport class TreeElement {\n remove() {\n if (this.parent) {\n this.parent.children.delete(this.id);\n }\n }\n static findId(candidate, container) {\n // complex id-computation which contains the origin/extension,\n // the parent path, and some dedupe logic when names collide\n let candidateId;\n if (typeof candidate === 'string') {\n candidateId = `${container.id}/${candidate}`;\n }\n else {\n candidateId = `${container.id}/${candidate.name}`;\n if (container.children.get(candidateId) !== undefined) {\n candidateId = `${container.id}/${candidate.name}_${candidate.range.startLineNumber}_${candidate.range.startColumn}`;\n }\n }\n let id = candidateId;\n for (let i = 0; container.children.get(id) !== undefined; i++) {\n id = `${candidateId}_${i}`;\n }\n return id;\n }\n static empty(element) {\n return element.children.size === 0;\n }\n}\nexport class OutlineElement extends TreeElement {\n constructor(id, parent, symbol) {\n super();\n this.id = id;\n this.parent = parent;\n this.symbol = symbol;\n this.children = new Map();\n }\n}\nexport class OutlineGroup extends TreeElement {\n constructor(id, parent, label, order) {\n super();\n this.id = id;\n this.parent = parent;\n this.label = label;\n this.order = order;\n this.children = new Map();\n }\n}\nexport class OutlineModel extends TreeElement {\n constructor(uri) {\n super();\n this.uri = uri;\n this.id = 'root';\n this.parent = undefined;\n this._groups = new Map();\n this.children = new Map();\n this.id = 'root';\n this.parent = undefined;\n }\n static create(textModel, token) {\n let key = this._keys.for(textModel, true);\n let data = OutlineModel._requests.get(key);\n if (!data) {\n let source = new CancellationTokenSource();\n data = {\n promiseCnt: 0,\n source,\n promise: OutlineModel._create(textModel, source.token),\n model: undefined,\n };\n OutlineModel._requests.set(key, data);\n // keep moving average of request durations\n const now = Date.now();\n data.promise.then(() => {\n this._requestDurations.update(textModel, Date.now() - now);\n });\n }\n if (data.model) {\n // resolved -> return data\n return Promise.resolve(data.model);\n }\n // increase usage counter\n data.promiseCnt += 1;\n token.onCancellationRequested(() => {\n // last -> cancel provider request, remove cached promise\n if (--data.promiseCnt === 0) {\n data.source.cancel();\n OutlineModel._requests.delete(key);\n }\n });\n return new Promise((resolve, reject) => {\n data.promise.then(model => {\n data.model = model;\n resolve(model);\n }, err => {\n OutlineModel._requests.delete(key);\n reject(err);\n });\n });\n }\n static _create(textModel, token) {\n const cts = new CancellationTokenSource(token);\n const result = new OutlineModel(textModel.uri);\n const provider = DocumentSymbolProviderRegistry.ordered(textModel);\n const promises = provider.map((provider, index) => {\n var _a;\n let id = TreeElement.findId(`provider_${index}`, result);\n let group = new OutlineGroup(id, result, (_a = provider.displayName) !== null && _a !== void 0 ? _a : 'Unknown Outline Provider', index);\n return Promise.resolve(provider.provideDocumentSymbols(textModel, cts.token)).then(result => {\n for (const info of result || []) {\n OutlineModel._makeOutlineElement(info, group);\n }\n return group;\n }, err => {\n onUnexpectedExternalError(err);\n return group;\n }).then(group => {\n if (!TreeElement.empty(group)) {\n result._groups.set(id, group);\n }\n else {\n group.remove();\n }\n });\n });\n const listener = DocumentSymbolProviderRegistry.onDidChange(() => {\n const newProvider = DocumentSymbolProviderRegistry.ordered(textModel);\n if (!equals(newProvider, provider)) {\n cts.cancel();\n }\n });\n return Promise.all(promises).then(() => {\n if (cts.token.isCancellationRequested && !token.isCancellationRequested) {\n return OutlineModel._create(textModel, token);\n }\n else {\n return result._compact();\n }\n }).finally(() => {\n listener.dispose();\n });\n }\n static _makeOutlineElement(info, container) {\n let id = TreeElement.findId(info, container);\n let res = new OutlineElement(id, container, info);\n if (info.children) {\n for (const childInfo of info.children) {\n OutlineModel._makeOutlineElement(childInfo, res);\n }\n }\n container.children.set(res.id, res);\n }\n _compact() {\n let count = 0;\n for (const [key, group] of this._groups) {\n if (group.children.size === 0) { // empty\n this._groups.delete(key);\n }\n else {\n count += 1;\n }\n }\n if (count !== 1) {\n //\n this.children = this._groups;\n }\n else {\n // adopt all elements of the first group\n let group = Iterable.first(this._groups.values());\n for (let [, child] of group.children) {\n child.parent = this;\n this.children.set(child.id, child);\n }\n }\n return this;\n }\n getTopLevelSymbols() {\n const roots = [];\n for (const child of this.children.values()) {\n if (child instanceof OutlineElement) {\n roots.push(child.symbol);\n }\n else {\n roots.push(...Iterable.map(child.children.values(), child => child.symbol));\n }\n }\n return roots.sort((a, b) => Range.compareRangesUsingStarts(a.range, b.range));\n }\n asListOfDocumentSymbols() {\n const roots = this.getTopLevelSymbols();\n const bucket = [];\n OutlineModel._flattenDocumentSymbols(bucket, roots, '');\n return bucket.sort((a, b) => Range.compareRangesUsingStarts(a.range, b.range));\n }\n static _flattenDocumentSymbols(bucket, entries, overrideContainerLabel) {\n for (const entry of entries) {\n bucket.push({\n kind: entry.kind,\n tags: entry.tags,\n name: entry.name,\n detail: entry.detail,\n containerName: entry.containerName || overrideContainerLabel,\n range: entry.range,\n selectionRange: entry.selectionRange,\n children: undefined, // we flatten it...\n });\n // Recurse over children\n if (entry.children) {\n OutlineModel._flattenDocumentSymbols(bucket, entry.children, entry.name);\n }\n }\n }\n}\nOutlineModel._requestDurations = new LanguageFeatureRequestDelays(DocumentSymbolProviderRegistry, 350);\nOutlineModel._requests = new LRUCache(9, 0.75);\nOutlineModel._keys = new class {\n constructor() {\n this._counter = 1;\n this._data = new WeakMap();\n }\n for(textModel, version) {\n return `${textModel.id}/${version ? textModel.getVersionId() : ''}/${this._hash(DocumentSymbolProviderRegistry.all(textModel))}`;\n }\n _hash(providers) {\n let result = '';\n for (const provider of providers) {\n let n = this._data.get(provider);\n if (typeof n === 'undefined') {\n n = this._counter++;\n this._data.set(provider, n);\n }\n result += n;\n }\n return result;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { URI } from '../../../base/common/uri.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { ITextModelService } from '../../common/services/resolverService.js';\nimport { OutlineModel } from './outlineModel.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { assertType } from '../../../base/common/types.js';\nexport function getDocumentSymbols(document, flat, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const model = yield OutlineModel.create(document, token);\n return flat\n ? model.asListOfDocumentSymbols()\n : model.getTopLevelSymbols();\n });\n}\nCommandsRegistry.registerCommand('_executeDocumentSymbolProvider', function (accessor, ...args) {\n return __awaiter(this, void 0, void 0, function* () {\n const [resource] = args;\n assertType(URI.isUri(resource));\n const model = accessor.get(IModelService).getModel(resource);\n if (model) {\n return getDocumentSymbols(model, false, CancellationToken.None);\n }\n const reference = yield accessor.get(ITextModelService).createModelReference(resource);\n try {\n return yield getDocumentSymbols(reference.object.textEditorModel, false, CancellationToken.None);\n }\n finally {\n reference.dispose();\n }\n });\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 *--------------------------------------------------------------------------------------------*/\nimport { Range } from '../../common/core/range.js';\nimport { OverviewRulerLane, MinimapPosition } from '../../common/model.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { overviewRulerFindMatchForeground, minimapFindMatch } from '../../../platform/theme/common/colorRegistry.js';\nimport { themeColorFromId } from '../../../platform/theme/common/themeService.js';\nexport class FindDecorations {\n constructor(editor) {\n this._editor = editor;\n this._decorations = [];\n this._overviewRulerApproximateDecorations = [];\n this._findScopeDecorationIds = [];\n this._rangeHighlightDecorationId = null;\n this._highlightedDecorationId = null;\n this._startPosition = this._editor.getPosition();\n }\n dispose() {\n this._editor.deltaDecorations(this._allDecorations(), []);\n this._decorations = [];\n this._overviewRulerApproximateDecorations = [];\n this._findScopeDecorationIds = [];\n this._rangeHighlightDecorationId = null;\n this._highlightedDecorationId = null;\n }\n reset() {\n this._decorations = [];\n this._overviewRulerApproximateDecorations = [];\n this._findScopeDecorationIds = [];\n this._rangeHighlightDecorationId = null;\n this._highlightedDecorationId = null;\n }\n getCount() {\n return this._decorations.length;\n }\n /** @deprecated use getFindScopes to support multiple selections */\n getFindScope() {\n if (this._findScopeDecorationIds[0]) {\n return this._editor.getModel().getDecorationRange(this._findScopeDecorationIds[0]);\n }\n return null;\n }\n getFindScopes() {\n if (this._findScopeDecorationIds.length) {\n const scopes = this._findScopeDecorationIds.map(findScopeDecorationId => this._editor.getModel().getDecorationRange(findScopeDecorationId)).filter(element => !!element);\n if (scopes.length) {\n return scopes;\n }\n }\n return null;\n }\n getStartPosition() {\n return this._startPosition;\n }\n setStartPosition(newStartPosition) {\n this._startPosition = newStartPosition;\n this.setCurrentFindMatch(null);\n }\n _getDecorationIndex(decorationId) {\n const index = this._decorations.indexOf(decorationId);\n if (index >= 0) {\n return index + 1;\n }\n return 1;\n }\n getCurrentMatchesPosition(desiredRange) {\n let candidates = this._editor.getModel().getDecorationsInRange(desiredRange);\n for (const candidate of candidates) {\n const candidateOpts = candidate.options;\n if (candidateOpts === FindDecorations._FIND_MATCH_DECORATION || candidateOpts === FindDecorations._CURRENT_FIND_MATCH_DECORATION) {\n return this._getDecorationIndex(candidate.id);\n }\n }\n // We don't know the current match position, so returns zero to show '?' in find widget\n return 0;\n }\n setCurrentFindMatch(nextMatch) {\n let newCurrentDecorationId = null;\n let matchPosition = 0;\n if (nextMatch) {\n for (let i = 0, len = this._decorations.length; i < len; i++) {\n let range = this._editor.getModel().getDecorationRange(this._decorations[i]);\n if (nextMatch.equalsRange(range)) {\n newCurrentDecorationId = this._decorations[i];\n matchPosition = (i + 1);\n break;\n }\n }\n }\n if (this._highlightedDecorationId !== null || newCurrentDecorationId !== null) {\n this._editor.changeDecorations((changeAccessor) => {\n if (this._highlightedDecorationId !== null) {\n changeAccessor.changeDecorationOptions(this._highlightedDecorationId, FindDecorations._FIND_MATCH_DECORATION);\n this._highlightedDecorationId = null;\n }\n if (newCurrentDecorationId !== null) {\n this._highlightedDecorationId = newCurrentDecorationId;\n changeAccessor.changeDecorationOptions(this._highlightedDecorationId, FindDecorations._CURRENT_FIND_MATCH_DECORATION);\n }\n if (this._rangeHighlightDecorationId !== null) {\n changeAccessor.removeDecoration(this._rangeHighlightDecorationId);\n this._rangeHighlightDecorationId = null;\n }\n if (newCurrentDecorationId !== null) {\n let rng = this._editor.getModel().getDecorationRange(newCurrentDecorationId);\n if (rng.startLineNumber !== rng.endLineNumber && rng.endColumn === 1) {\n let lineBeforeEnd = rng.endLineNumber - 1;\n let lineBeforeEndMaxColumn = this._editor.getModel().getLineMaxColumn(lineBeforeEnd);\n rng = new Range(rng.startLineNumber, rng.startColumn, lineBeforeEnd, lineBeforeEndMaxColumn);\n }\n this._rangeHighlightDecorationId = changeAccessor.addDecoration(rng, FindDecorations._RANGE_HIGHLIGHT_DECORATION);\n }\n });\n }\n return matchPosition;\n }\n set(findMatches, findScopes) {\n this._editor.changeDecorations((accessor) => {\n let findMatchesOptions = FindDecorations._FIND_MATCH_DECORATION;\n let newOverviewRulerApproximateDecorations = [];\n if (findMatches.length > 1000) {\n // we go into a mode where the overview ruler gets \"approximate\" decorations\n // the reason is that the overview ruler paints all the decorations in the file and we don't want to cause freezes\n findMatchesOptions = FindDecorations._FIND_MATCH_NO_OVERVIEW_DECORATION;\n // approximate a distance in lines where matches should be merged\n const lineCount = this._editor.getModel().getLineCount();\n const height = this._editor.getLayoutInfo().height;\n const approxPixelsPerLine = height / lineCount;\n const mergeLinesDelta = Math.max(2, Math.ceil(3 / approxPixelsPerLine));\n // merge decorations as much as possible\n let prevStartLineNumber = findMatches[0].range.startLineNumber;\n let prevEndLineNumber = findMatches[0].range.endLineNumber;\n for (let i = 1, len = findMatches.length; i < len; i++) {\n const range = findMatches[i].range;\n if (prevEndLineNumber + mergeLinesDelta >= range.startLineNumber) {\n if (range.endLineNumber > prevEndLineNumber) {\n prevEndLineNumber = range.endLineNumber;\n }\n }\n else {\n newOverviewRulerApproximateDecorations.push({\n range: new Range(prevStartLineNumber, 1, prevEndLineNumber, 1),\n options: FindDecorations._FIND_MATCH_ONLY_OVERVIEW_DECORATION\n });\n prevStartLineNumber = range.startLineNumber;\n prevEndLineNumber = range.endLineNumber;\n }\n }\n newOverviewRulerApproximateDecorations.push({\n range: new Range(prevStartLineNumber, 1, prevEndLineNumber, 1),\n options: FindDecorations._FIND_MATCH_ONLY_OVERVIEW_DECORATION\n });\n }\n // Find matches\n let newFindMatchesDecorations = new Array(findMatches.length);\n for (let i = 0, len = findMatches.length; i < len; i++) {\n newFindMatchesDecorations[i] = {\n range: findMatches[i].range,\n options: findMatchesOptions\n };\n }\n this._decorations = accessor.deltaDecorations(this._decorations, newFindMatchesDecorations);\n // Overview ruler approximate decorations\n this._overviewRulerApproximateDecorations = accessor.deltaDecorations(this._overviewRulerApproximateDecorations, newOverviewRulerApproximateDecorations);\n // Range highlight\n if (this._rangeHighlightDecorationId) {\n accessor.removeDecoration(this._rangeHighlightDecorationId);\n this._rangeHighlightDecorationId = null;\n }\n // Find scope\n if (this._findScopeDecorationIds.length) {\n this._findScopeDecorationIds.forEach(findScopeDecorationId => accessor.removeDecoration(findScopeDecorationId));\n this._findScopeDecorationIds = [];\n }\n if (findScopes === null || findScopes === void 0 ? void 0 : findScopes.length) {\n this._findScopeDecorationIds = findScopes.map(findScope => accessor.addDecoration(findScope, FindDecorations._FIND_SCOPE_DECORATION));\n }\n });\n }\n matchBeforePosition(position) {\n if (this._decorations.length === 0) {\n return null;\n }\n for (let i = this._decorations.length - 1; i >= 0; i--) {\n let decorationId = this._decorations[i];\n let r = this._editor.getModel().getDecorationRange(decorationId);\n if (!r || r.endLineNumber > position.lineNumber) {\n continue;\n }\n if (r.endLineNumber < position.lineNumber) {\n return r;\n }\n if (r.endColumn > position.column) {\n continue;\n }\n return r;\n }\n return this._editor.getModel().getDecorationRange(this._decorations[this._decorations.length - 1]);\n }\n matchAfterPosition(position) {\n if (this._decorations.length === 0) {\n return null;\n }\n for (let i = 0, len = this._decorations.length; i < len; i++) {\n let decorationId = this._decorations[i];\n let r = this._editor.getModel().getDecorationRange(decorationId);\n if (!r || r.startLineNumber < position.lineNumber) {\n continue;\n }\n if (r.startLineNumber > position.lineNumber) {\n return r;\n }\n if (r.startColumn < position.column) {\n continue;\n }\n return r;\n }\n return this._editor.getModel().getDecorationRange(this._decorations[0]);\n }\n _allDecorations() {\n let result = [];\n result = result.concat(this._decorations);\n result = result.concat(this._overviewRulerApproximateDecorations);\n if (this._findScopeDecorationIds.length) {\n result.push(...this._findScopeDecorationIds);\n }\n if (this._rangeHighlightDecorationId) {\n result.push(this._rangeHighlightDecorationId);\n }\n return result;\n }\n}\nFindDecorations._CURRENT_FIND_MATCH_DECORATION = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n zIndex: 13,\n className: 'currentFindMatch',\n showIfCollapsed: true,\n overviewRuler: {\n color: themeColorFromId(overviewRulerFindMatchForeground),\n position: OverviewRulerLane.Center\n },\n minimap: {\n color: themeColorFromId(minimapFindMatch),\n position: MinimapPosition.Inline\n }\n});\nFindDecorations._FIND_MATCH_DECORATION = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'findMatch',\n showIfCollapsed: true,\n overviewRuler: {\n color: themeColorFromId(overviewRulerFindMatchForeground),\n position: OverviewRulerLane.Center\n },\n minimap: {\n color: themeColorFromId(minimapFindMatch),\n position: MinimapPosition.Inline\n }\n});\nFindDecorations._FIND_MATCH_NO_OVERVIEW_DECORATION = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'findMatch',\n showIfCollapsed: true\n});\nFindDecorations._FIND_MATCH_ONLY_OVERVIEW_DECORATION = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n overviewRuler: {\n color: themeColorFromId(overviewRulerFindMatchForeground),\n position: OverviewRulerLane.Center\n }\n});\nFindDecorations._RANGE_HIGHLIGHT_DECORATION = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'rangeHighlight',\n isWholeLine: true\n});\nFindDecorations._FIND_SCOPE_DECORATION = ModelDecorationOptions.register({\n className: 'findScope',\n isWholeLine: true\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 *--------------------------------------------------------------------------------------------*/\nimport { Range } from '../../common/core/range.js';\nexport class ReplaceAllCommand {\n constructor(editorSelection, ranges, replaceStrings) {\n this._editorSelection = editorSelection;\n this._ranges = ranges;\n this._replaceStrings = replaceStrings;\n this._trackedEditorSelectionId = null;\n }\n getEditOperations(model, builder) {\n if (this._ranges.length > 0) {\n // Collect all edit operations\n let ops = [];\n for (let i = 0; i < this._ranges.length; i++) {\n ops.push({\n range: this._ranges[i],\n text: this._replaceStrings[i]\n });\n }\n // Sort them in ascending order by range starts\n ops.sort((o1, o2) => {\n return Range.compareRangesUsingStarts(o1.range, o2.range);\n });\n // Merge operations that touch each other\n let resultOps = [];\n let previousOp = ops[0];\n for (let i = 1; i < ops.length; i++) {\n if (previousOp.range.endLineNumber === ops[i].range.startLineNumber && previousOp.range.endColumn === ops[i].range.startColumn) {\n // These operations are one after another and can be merged\n previousOp.range = previousOp.range.plusRange(ops[i].range);\n previousOp.text = previousOp.text + ops[i].text;\n }\n else {\n resultOps.push(previousOp);\n previousOp = ops[i];\n }\n }\n resultOps.push(previousOp);\n for (const op of resultOps) {\n builder.addEditOperation(op.range, op.text);\n }\n }\n this._trackedEditorSelectionId = builder.trackSelection(this._editorSelection);\n }\n computeCursorState(model, helper) {\n return helper.getTrackedSelection(this._trackedEditorSelectionId);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from './strings.js';\nexport function buildReplaceStringWithCasePreserved(matches, pattern) {\n if (matches && (matches[0] !== '')) {\n const containsHyphens = validateSpecificSpecialCharacter(matches, pattern, '-');\n const containsUnderscores = validateSpecificSpecialCharacter(matches, pattern, '_');\n if (containsHyphens && !containsUnderscores) {\n return buildReplaceStringForSpecificSpecialCharacter(matches, pattern, '-');\n }\n else if (!containsHyphens && containsUnderscores) {\n return buildReplaceStringForSpecificSpecialCharacter(matches, pattern, '_');\n }\n if (matches[0].toUpperCase() === matches[0]) {\n return pattern.toUpperCase();\n }\n else if (matches[0].toLowerCase() === matches[0]) {\n return pattern.toLowerCase();\n }\n else if (strings.containsUppercaseCharacter(matches[0][0]) && pattern.length > 0) {\n return pattern[0].toUpperCase() + pattern.substr(1);\n }\n else if (matches[0][0].toUpperCase() !== matches[0][0] && pattern.length > 0) {\n return pattern[0].toLowerCase() + pattern.substr(1);\n }\n else {\n // we don't understand its pattern yet.\n return pattern;\n }\n }\n else {\n return pattern;\n }\n}\nfunction validateSpecificSpecialCharacter(matches, pattern, specialCharacter) {\n const doesContainSpecialCharacter = matches[0].indexOf(specialCharacter) !== -1 && pattern.indexOf(specialCharacter) !== -1;\n return doesContainSpecialCharacter && matches[0].split(specialCharacter).length === pattern.split(specialCharacter).length;\n}\nfunction buildReplaceStringForSpecificSpecialCharacter(matches, pattern, specialCharacter) {\n const splitPatternAtSpecialCharacter = pattern.split(specialCharacter);\n const splitMatchAtSpecialCharacter = matches[0].split(specialCharacter);\n let replaceString = '';\n splitPatternAtSpecialCharacter.forEach((splitValue, index) => {\n replaceString += buildReplaceStringWithCasePreserved([splitMatchAtSpecialCharacter[index]], splitValue) + specialCharacter;\n });\n return replaceString.slice(0, -1);\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 *--------------------------------------------------------------------------------------------*/\nimport { buildReplaceStringWithCasePreserved } from '../../../base/common/search.js';\n/**\n * Assigned when the replace pattern is entirely static.\n */\nclass StaticValueReplacePattern {\n constructor(staticValue) {\n this.staticValue = staticValue;\n this.kind = 0 /* StaticValue */;\n }\n}\n/**\n * Assigned when the replace pattern has replacement patterns.\n */\nclass DynamicPiecesReplacePattern {\n constructor(pieces) {\n this.pieces = pieces;\n this.kind = 1 /* DynamicPieces */;\n }\n}\nexport class ReplacePattern {\n constructor(pieces) {\n if (!pieces || pieces.length === 0) {\n this._state = new StaticValueReplacePattern('');\n }\n else if (pieces.length === 1 && pieces[0].staticValue !== null) {\n this._state = new StaticValueReplacePattern(pieces[0].staticValue);\n }\n else {\n this._state = new DynamicPiecesReplacePattern(pieces);\n }\n }\n static fromStaticValue(value) {\n return new ReplacePattern([ReplacePiece.staticValue(value)]);\n }\n get hasReplacementPatterns() {\n return (this._state.kind === 1 /* DynamicPieces */);\n }\n buildReplaceString(matches, preserveCase) {\n if (this._state.kind === 0 /* StaticValue */) {\n if (preserveCase) {\n return buildReplaceStringWithCasePreserved(matches, this._state.staticValue);\n }\n else {\n return this._state.staticValue;\n }\n }\n let result = '';\n for (let i = 0, len = this._state.pieces.length; i < len; i++) {\n let piece = this._state.pieces[i];\n if (piece.staticValue !== null) {\n // static value ReplacePiece\n result += piece.staticValue;\n continue;\n }\n // match index ReplacePiece\n let match = ReplacePattern._substitute(piece.matchIndex, matches);\n if (piece.caseOps !== null && piece.caseOps.length > 0) {\n let repl = [];\n let lenOps = piece.caseOps.length;\n let opIdx = 0;\n for (let idx = 0, len = match.length; idx < len; idx++) {\n if (opIdx >= lenOps) {\n repl.push(match.slice(idx));\n break;\n }\n switch (piece.caseOps[opIdx]) {\n case 'U':\n repl.push(match[idx].toUpperCase());\n break;\n case 'u':\n repl.push(match[idx].toUpperCase());\n opIdx++;\n break;\n case 'L':\n repl.push(match[idx].toLowerCase());\n break;\n case 'l':\n repl.push(match[idx].toLowerCase());\n opIdx++;\n break;\n default:\n repl.push(match[idx]);\n }\n }\n match = repl.join('');\n }\n result += match;\n }\n return result;\n }\n static _substitute(matchIndex, matches) {\n if (matches === null) {\n return '';\n }\n if (matchIndex === 0) {\n return matches[0];\n }\n let remainder = '';\n while (matchIndex > 0) {\n if (matchIndex < matches.length) {\n // A match can be undefined\n let match = (matches[matchIndex] || '');\n return match + remainder;\n }\n remainder = String(matchIndex % 10) + remainder;\n matchIndex = Math.floor(matchIndex / 10);\n }\n return '$' + remainder;\n }\n}\n/**\n * A replace piece can either be a static string or an index to a specific match.\n */\nexport class ReplacePiece {\n constructor(staticValue, matchIndex, caseOps) {\n this.staticValue = staticValue;\n this.matchIndex = matchIndex;\n if (!caseOps || caseOps.length === 0) {\n this.caseOps = null;\n }\n else {\n this.caseOps = caseOps.slice(0);\n }\n }\n static staticValue(value) {\n return new ReplacePiece(value, -1, null);\n }\n static caseOps(index, caseOps) {\n return new ReplacePiece(null, index, caseOps);\n }\n}\nclass ReplacePieceBuilder {\n constructor(source) {\n this._source = source;\n this._lastCharIndex = 0;\n this._result = [];\n this._resultLen = 0;\n this._currentStaticPiece = '';\n }\n emitUnchanged(toCharIndex) {\n this._emitStatic(this._source.substring(this._lastCharIndex, toCharIndex));\n this._lastCharIndex = toCharIndex;\n }\n emitStatic(value, toCharIndex) {\n this._emitStatic(value);\n this._lastCharIndex = toCharIndex;\n }\n _emitStatic(value) {\n if (value.length === 0) {\n return;\n }\n this._currentStaticPiece += value;\n }\n emitMatchIndex(index, toCharIndex, caseOps) {\n if (this._currentStaticPiece.length !== 0) {\n this._result[this._resultLen++] = ReplacePiece.staticValue(this._currentStaticPiece);\n this._currentStaticPiece = '';\n }\n this._result[this._resultLen++] = ReplacePiece.caseOps(index, caseOps);\n this._lastCharIndex = toCharIndex;\n }\n finalize() {\n this.emitUnchanged(this._source.length);\n if (this._currentStaticPiece.length !== 0) {\n this._result[this._resultLen++] = ReplacePiece.staticValue(this._currentStaticPiece);\n this._currentStaticPiece = '';\n }\n return new ReplacePattern(this._result);\n }\n}\n/**\n * \\n\t\t\t=> inserts a LF\n * \\t\t\t\t=> inserts a TAB\n * \\\\\t\t\t=> inserts a \"\\\".\n * \\u\t\t\t=> upper-cases one character in a match.\n * \\U\t\t\t=> upper-cases ALL remaining characters in a match.\n * \\l\t\t\t=> lower-cases one character in a match.\n * \\L\t\t\t=> lower-cases ALL remaining characters in a match.\n * $$\t\t\t=> inserts a \"$\".\n * $& and $0\t=> inserts the matched substring.\n * $n\t\t\t=> Where n is a non-negative integer lesser than 100, inserts the nth parenthesized submatch string\n * everything else stays untouched\n *\n * Also see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_string_as_a_parameter\n */\nexport function parseReplaceString(replaceString) {\n if (!replaceString || replaceString.length === 0) {\n return new ReplacePattern(null);\n }\n let caseOps = [];\n let result = new ReplacePieceBuilder(replaceString);\n for (let i = 0, len = replaceString.length; i < len; i++) {\n let chCode = replaceString.charCodeAt(i);\n if (chCode === 92 /* Backslash */) {\n // move to next char\n i++;\n if (i >= len) {\n // string ends with a \\\n break;\n }\n let nextChCode = replaceString.charCodeAt(i);\n // let replaceWithCharacter: string | null = null;\n switch (nextChCode) {\n case 92 /* Backslash */:\n // \\\\ => inserts a \"\\\"\n result.emitUnchanged(i - 1);\n result.emitStatic('\\\\', i + 1);\n break;\n case 110 /* n */:\n // \\n => inserts a LF\n result.emitUnchanged(i - 1);\n result.emitStatic('\\n', i + 1);\n break;\n case 116 /* t */:\n // \\t => inserts a TAB\n result.emitUnchanged(i - 1);\n result.emitStatic('\\t', i + 1);\n break;\n // Case modification of string replacements, patterned after Boost, but only applied\n // to the replacement text, not subsequent content.\n case 117 /* u */:\n // \\u => upper-cases one character.\n case 85 /* U */:\n // \\U => upper-cases ALL following characters.\n case 108 /* l */:\n // \\l => lower-cases one character.\n case 76 /* L */:\n // \\L => lower-cases ALL following characters.\n result.emitUnchanged(i - 1);\n result.emitStatic('', i + 1);\n caseOps.push(String.fromCharCode(nextChCode));\n break;\n }\n continue;\n }\n if (chCode === 36 /* DollarSign */) {\n // move to next char\n i++;\n if (i >= len) {\n // string ends with a $\n break;\n }\n let nextChCode = replaceString.charCodeAt(i);\n if (nextChCode === 36 /* DollarSign */) {\n // $$ => inserts a \"$\"\n result.emitUnchanged(i - 1);\n result.emitStatic('$', i + 1);\n continue;\n }\n if (nextChCode === 48 /* Digit0 */ || nextChCode === 38 /* Ampersand */) {\n // $& and $0 => inserts the matched substring.\n result.emitUnchanged(i - 1);\n result.emitMatchIndex(0, i + 1, caseOps);\n caseOps.length = 0;\n continue;\n }\n if (49 /* Digit1 */ <= nextChCode && nextChCode <= 57 /* Digit9 */) {\n // $n\n let matchIndex = nextChCode - 48 /* Digit0 */;\n // peek next char to probe for $nn\n if (i + 1 < len) {\n let nextNextChCode = replaceString.charCodeAt(i + 1);\n if (48 /* Digit0 */ <= nextNextChCode && nextNextChCode <= 57 /* Digit9 */) {\n // $nn\n // move to next char\n i++;\n matchIndex = matchIndex * 10 + (nextNextChCode - 48 /* Digit0 */);\n result.emitUnchanged(i - 2);\n result.emitMatchIndex(matchIndex, i + 1, caseOps);\n caseOps.length = 0;\n continue;\n }\n }\n result.emitUnchanged(i - 1);\n result.emitMatchIndex(matchIndex, i + 1, caseOps);\n caseOps.length = 0;\n continue;\n }\n }\n }\n return result.finalize();\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 *--------------------------------------------------------------------------------------------*/\nimport { RunOnceScheduler, TimeoutTimer } from '../../../base/common/async.js';\nimport { dispose, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { ReplaceCommand, ReplaceCommandThatPreservesSelection } from '../../common/commands/replaceCommand.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { SearchParams } from '../../common/model/textModelSearch.js';\nimport { FindDecorations } from './findDecorations.js';\nimport { ReplaceAllCommand } from './replaceAllCommand.js';\nimport { ReplacePattern, parseReplaceString } from './replacePattern.js';\nimport { RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nimport { findFirstInSorted } from '../../../base/common/arrays.js';\nexport const CONTEXT_FIND_WIDGET_VISIBLE = new RawContextKey('findWidgetVisible', false);\n// Keep ContextKey use of 'Focussed' to not break when clauses\nexport const CONTEXT_FIND_INPUT_FOCUSED = new RawContextKey('findInputFocussed', false);\nexport const CONTEXT_REPLACE_INPUT_FOCUSED = new RawContextKey('replaceInputFocussed', false);\nexport const ToggleCaseSensitiveKeybinding = {\n primary: 512 /* Alt */ | 33 /* KEY_C */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 33 /* KEY_C */ }\n};\nexport const ToggleWholeWordKeybinding = {\n primary: 512 /* Alt */ | 53 /* KEY_W */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 53 /* KEY_W */ }\n};\nexport const ToggleRegexKeybinding = {\n primary: 512 /* Alt */ | 48 /* KEY_R */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 48 /* KEY_R */ }\n};\nexport const ToggleSearchScopeKeybinding = {\n primary: 512 /* Alt */ | 42 /* KEY_L */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 42 /* KEY_L */ }\n};\nexport const TogglePreserveCaseKeybinding = {\n primary: 512 /* Alt */ | 46 /* KEY_P */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 46 /* KEY_P */ }\n};\nexport const FIND_IDS = {\n StartFindAction: 'actions.find',\n StartFindWithSelection: 'actions.findWithSelection',\n NextMatchFindAction: 'editor.action.nextMatchFindAction',\n PreviousMatchFindAction: 'editor.action.previousMatchFindAction',\n NextSelectionMatchFindAction: 'editor.action.nextSelectionMatchFindAction',\n PreviousSelectionMatchFindAction: 'editor.action.previousSelectionMatchFindAction',\n StartFindReplaceAction: 'editor.action.startFindReplaceAction',\n CloseFindWidgetCommand: 'closeFindWidget',\n ToggleCaseSensitiveCommand: 'toggleFindCaseSensitive',\n ToggleWholeWordCommand: 'toggleFindWholeWord',\n ToggleRegexCommand: 'toggleFindRegex',\n ToggleSearchScopeCommand: 'toggleFindInSelection',\n TogglePreserveCaseCommand: 'togglePreserveCase',\n ReplaceOneAction: 'editor.action.replaceOne',\n ReplaceAllAction: 'editor.action.replaceAll',\n SelectAllMatchesAction: 'editor.action.selectAllMatches'\n};\nexport const MATCHES_LIMIT = 19999;\nconst RESEARCH_DELAY = 240;\nexport class FindModelBoundToEditorModel {\n constructor(editor, state) {\n this._toDispose = new DisposableStore();\n this._editor = editor;\n this._state = state;\n this._isDisposed = false;\n this._startSearchingTimer = new TimeoutTimer();\n this._decorations = new FindDecorations(editor);\n this._toDispose.add(this._decorations);\n this._updateDecorationsScheduler = new RunOnceScheduler(() => this.research(false), 100);\n this._toDispose.add(this._updateDecorationsScheduler);\n this._toDispose.add(this._editor.onDidChangeCursorPosition((e) => {\n if (e.reason === 3 /* Explicit */\n || e.reason === 5 /* Undo */\n || e.reason === 6 /* Redo */) {\n this._decorations.setStartPosition(this._editor.getPosition());\n }\n }));\n this._ignoreModelContentChanged = false;\n this._toDispose.add(this._editor.onDidChangeModelContent((e) => {\n if (this._ignoreModelContentChanged) {\n return;\n }\n if (e.isFlush) {\n // a model.setValue() was called\n this._decorations.reset();\n }\n this._decorations.setStartPosition(this._editor.getPosition());\n this._updateDecorationsScheduler.schedule();\n }));\n this._toDispose.add(this._state.onFindReplaceStateChange((e) => this._onStateChanged(e)));\n this.research(false, this._state.searchScope);\n }\n dispose() {\n this._isDisposed = true;\n dispose(this._startSearchingTimer);\n this._toDispose.dispose();\n }\n _onStateChanged(e) {\n if (this._isDisposed) {\n // The find model is disposed during a find state changed event\n return;\n }\n if (!this._editor.hasModel()) {\n // The find model will be disposed momentarily\n return;\n }\n if (e.searchString || e.isReplaceRevealed || e.isRegex || e.wholeWord || e.matchCase || e.searchScope) {\n let model = this._editor.getModel();\n if (model.isTooLargeForSyncing()) {\n this._startSearchingTimer.cancel();\n this._startSearchingTimer.setIfNotSet(() => {\n if (e.searchScope) {\n this.research(e.moveCursor, this._state.searchScope);\n }\n else {\n this.research(e.moveCursor);\n }\n }, RESEARCH_DELAY);\n }\n else {\n if (e.searchScope) {\n this.research(e.moveCursor, this._state.searchScope);\n }\n else {\n this.research(e.moveCursor);\n }\n }\n }\n }\n static _getSearchRange(model, findScope) {\n // If we have set now or before a find scope, use it for computing the search range\n if (findScope) {\n return findScope;\n }\n return model.getFullModelRange();\n }\n research(moveCursor, newFindScope) {\n let findScopes = null;\n if (typeof newFindScope !== 'undefined') {\n if (newFindScope !== null) {\n if (!Array.isArray(newFindScope)) {\n findScopes = [newFindScope];\n }\n else {\n findScopes = newFindScope;\n }\n }\n }\n else {\n findScopes = this._decorations.getFindScopes();\n }\n if (findScopes !== null) {\n findScopes = findScopes.map(findScope => {\n if (findScope.startLineNumber !== findScope.endLineNumber) {\n let endLineNumber = findScope.endLineNumber;\n if (findScope.endColumn === 1) {\n endLineNumber = endLineNumber - 1;\n }\n return new Range(findScope.startLineNumber, 1, endLineNumber, this._editor.getModel().getLineMaxColumn(endLineNumber));\n }\n return findScope;\n });\n }\n let findMatches = this._findMatches(findScopes, false, MATCHES_LIMIT);\n this._decorations.set(findMatches, findScopes);\n const editorSelection = this._editor.getSelection();\n let currentMatchesPosition = this._decorations.getCurrentMatchesPosition(editorSelection);\n if (currentMatchesPosition === 0 && findMatches.length > 0) {\n // current selection is not on top of a match\n // try to find its nearest result from the top of the document\n const matchAfterSelection = findFirstInSorted(findMatches.map(match => match.range), range => Range.compareRangesUsingStarts(range, editorSelection) >= 0);\n currentMatchesPosition = matchAfterSelection > 0 ? matchAfterSelection - 1 + 1 /** match position is one based */ : currentMatchesPosition;\n }\n this._state.changeMatchInfo(currentMatchesPosition, this._decorations.getCount(), undefined);\n if (moveCursor && this._editor.getOption(33 /* find */).cursorMoveOnType) {\n this._moveToNextMatch(this._decorations.getStartPosition());\n }\n }\n _hasMatches() {\n return (this._state.matchesCount > 0);\n }\n _cannotFind() {\n if (!this._hasMatches()) {\n let findScope = this._decorations.getFindScope();\n if (findScope) {\n // Reveal the selection so user is reminded that 'selection find' is on.\n this._editor.revealRangeInCenterIfOutsideViewport(findScope, 0 /* Smooth */);\n }\n return true;\n }\n return false;\n }\n _setCurrentFindMatch(match) {\n let matchesPosition = this._decorations.setCurrentFindMatch(match);\n this._state.changeMatchInfo(matchesPosition, this._decorations.getCount(), match);\n this._editor.setSelection(match);\n this._editor.revealRangeInCenterIfOutsideViewport(match, 0 /* Smooth */);\n }\n _prevSearchPosition(before) {\n let isUsingLineStops = this._state.isRegex && (this._state.searchString.indexOf('^') >= 0\n || this._state.searchString.indexOf('$') >= 0);\n let { lineNumber, column } = before;\n let model = this._editor.getModel();\n if (isUsingLineStops || column === 1) {\n if (lineNumber === 1) {\n lineNumber = model.getLineCount();\n }\n else {\n lineNumber--;\n }\n column = model.getLineMaxColumn(lineNumber);\n }\n else {\n column--;\n }\n return new Position(lineNumber, column);\n }\n _moveToPrevMatch(before, isRecursed = false) {\n if (!this._state.canNavigateBack()) {\n // we are beyond the first matched find result\n // instead of doing nothing, we should refocus the first item\n const nextMatchRange = this._decorations.matchAfterPosition(before);\n if (nextMatchRange) {\n this._setCurrentFindMatch(nextMatchRange);\n }\n return;\n }\n if (this._decorations.getCount() < MATCHES_LIMIT) {\n let prevMatchRange = this._decorations.matchBeforePosition(before);\n if (prevMatchRange && prevMatchRange.isEmpty() && prevMatchRange.getStartPosition().equals(before)) {\n before = this._prevSearchPosition(before);\n prevMatchRange = this._decorations.matchBeforePosition(before);\n }\n if (prevMatchRange) {\n this._setCurrentFindMatch(prevMatchRange);\n }\n return;\n }\n if (this._cannotFind()) {\n return;\n }\n let findScope = this._decorations.getFindScope();\n let searchRange = FindModelBoundToEditorModel._getSearchRange(this._editor.getModel(), findScope);\n // ...(----)...|...\n if (searchRange.getEndPosition().isBefore(before)) {\n before = searchRange.getEndPosition();\n }\n // ...|...(----)...\n if (before.isBefore(searchRange.getStartPosition())) {\n before = searchRange.getEndPosition();\n }\n let { lineNumber, column } = before;\n let model = this._editor.getModel();\n let position = new Position(lineNumber, column);\n let prevMatch = model.findPreviousMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(113 /* wordSeparators */) : null, false);\n if (prevMatch && prevMatch.range.isEmpty() && prevMatch.range.getStartPosition().equals(position)) {\n // Looks like we're stuck at this position, unacceptable!\n position = this._prevSearchPosition(position);\n prevMatch = model.findPreviousMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(113 /* wordSeparators */) : null, false);\n }\n if (!prevMatch) {\n // there is precisely one match and selection is on top of it\n return;\n }\n if (!isRecursed && !searchRange.containsRange(prevMatch.range)) {\n return this._moveToPrevMatch(prevMatch.range.getStartPosition(), true);\n }\n this._setCurrentFindMatch(prevMatch.range);\n }\n moveToPrevMatch() {\n this._moveToPrevMatch(this._editor.getSelection().getStartPosition());\n }\n _nextSearchPosition(after) {\n let isUsingLineStops = this._state.isRegex && (this._state.searchString.indexOf('^') >= 0\n || this._state.searchString.indexOf('$') >= 0);\n let { lineNumber, column } = after;\n let model = this._editor.getModel();\n if (isUsingLineStops || column === model.getLineMaxColumn(lineNumber)) {\n if (lineNumber === model.getLineCount()) {\n lineNumber = 1;\n }\n else {\n lineNumber++;\n }\n column = 1;\n }\n else {\n column++;\n }\n return new Position(lineNumber, column);\n }\n _moveToNextMatch(after) {\n if (!this._state.canNavigateForward()) {\n // we are beyond the last matched find result\n // instead of doing nothing, we should refocus the last item\n const prevMatchRange = this._decorations.matchBeforePosition(after);\n if (prevMatchRange) {\n this._setCurrentFindMatch(prevMatchRange);\n }\n return;\n }\n if (this._decorations.getCount() < MATCHES_LIMIT) {\n let nextMatchRange = this._decorations.matchAfterPosition(after);\n if (nextMatchRange && nextMatchRange.isEmpty() && nextMatchRange.getStartPosition().equals(after)) {\n // Looks like we're stuck at this position, unacceptable!\n after = this._nextSearchPosition(after);\n nextMatchRange = this._decorations.matchAfterPosition(after);\n }\n if (nextMatchRange) {\n this._setCurrentFindMatch(nextMatchRange);\n }\n return;\n }\n let nextMatch = this._getNextMatch(after, false, true);\n if (nextMatch) {\n this._setCurrentFindMatch(nextMatch.range);\n }\n }\n _getNextMatch(after, captureMatches, forceMove, isRecursed = false) {\n if (this._cannotFind()) {\n return null;\n }\n let findScope = this._decorations.getFindScope();\n let searchRange = FindModelBoundToEditorModel._getSearchRange(this._editor.getModel(), findScope);\n // ...(----)...|...\n if (searchRange.getEndPosition().isBefore(after)) {\n after = searchRange.getStartPosition();\n }\n // ...|...(----)...\n if (after.isBefore(searchRange.getStartPosition())) {\n after = searchRange.getStartPosition();\n }\n let { lineNumber, column } = after;\n let model = this._editor.getModel();\n let position = new Position(lineNumber, column);\n let nextMatch = model.findNextMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(113 /* wordSeparators */) : null, captureMatches);\n if (forceMove && nextMatch && nextMatch.range.isEmpty() && nextMatch.range.getStartPosition().equals(position)) {\n // Looks like we're stuck at this position, unacceptable!\n position = this._nextSearchPosition(position);\n nextMatch = model.findNextMatch(this._state.searchString, position, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(113 /* wordSeparators */) : null, captureMatches);\n }\n if (!nextMatch) {\n // there is precisely one match and selection is on top of it\n return null;\n }\n if (!isRecursed && !searchRange.containsRange(nextMatch.range)) {\n return this._getNextMatch(nextMatch.range.getEndPosition(), captureMatches, forceMove, true);\n }\n return nextMatch;\n }\n moveToNextMatch() {\n this._moveToNextMatch(this._editor.getSelection().getEndPosition());\n }\n _getReplacePattern() {\n if (this._state.isRegex) {\n return parseReplaceString(this._state.replaceString);\n }\n return ReplacePattern.fromStaticValue(this._state.replaceString);\n }\n replace() {\n if (!this._hasMatches()) {\n return;\n }\n let replacePattern = this._getReplacePattern();\n let selection = this._editor.getSelection();\n let nextMatch = this._getNextMatch(selection.getStartPosition(), true, false);\n if (nextMatch) {\n if (selection.equalsRange(nextMatch.range)) {\n // selection sits on a find match => replace it!\n let replaceString = replacePattern.buildReplaceString(nextMatch.matches, this._state.preserveCase);\n let command = new ReplaceCommand(selection, replaceString);\n this._executeEditorCommand('replace', command);\n this._decorations.setStartPosition(new Position(selection.startLineNumber, selection.startColumn + replaceString.length));\n this.research(true);\n }\n else {\n this._decorations.setStartPosition(this._editor.getPosition());\n this._setCurrentFindMatch(nextMatch.range);\n }\n }\n }\n _findMatches(findScopes, captureMatches, limitResultCount) {\n const searchRanges = (findScopes || [null]).map((scope) => FindModelBoundToEditorModel._getSearchRange(this._editor.getModel(), scope));\n return this._editor.getModel().findMatches(this._state.searchString, searchRanges, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(113 /* wordSeparators */) : null, captureMatches, limitResultCount);\n }\n replaceAll() {\n if (!this._hasMatches()) {\n return;\n }\n const findScopes = this._decorations.getFindScopes();\n if (findScopes === null && this._state.matchesCount >= MATCHES_LIMIT) {\n // Doing a replace on the entire file that is over ${MATCHES_LIMIT} matches\n this._largeReplaceAll();\n }\n else {\n this._regularReplaceAll(findScopes);\n }\n this.research(false);\n }\n _largeReplaceAll() {\n const searchParams = new SearchParams(this._state.searchString, this._state.isRegex, this._state.matchCase, this._state.wholeWord ? this._editor.getOption(113 /* wordSeparators */) : null);\n const searchData = searchParams.parseSearchRequest();\n if (!searchData) {\n return;\n }\n let searchRegex = searchData.regex;\n if (!searchRegex.multiline) {\n let mod = 'mu';\n if (searchRegex.ignoreCase) {\n mod += 'i';\n }\n if (searchRegex.global) {\n mod += 'g';\n }\n searchRegex = new RegExp(searchRegex.source, mod);\n }\n const model = this._editor.getModel();\n const modelText = model.getValue(1 /* LF */);\n const fullModelRange = model.getFullModelRange();\n const replacePattern = this._getReplacePattern();\n let resultText;\n const preserveCase = this._state.preserveCase;\n if (replacePattern.hasReplacementPatterns || preserveCase) {\n resultText = modelText.replace(searchRegex, function () {\n return replacePattern.buildReplaceString(arguments, preserveCase);\n });\n }\n else {\n resultText = modelText.replace(searchRegex, replacePattern.buildReplaceString(null, preserveCase));\n }\n let command = new ReplaceCommandThatPreservesSelection(fullModelRange, resultText, this._editor.getSelection());\n this._executeEditorCommand('replaceAll', command);\n }\n _regularReplaceAll(findScopes) {\n const replacePattern = this._getReplacePattern();\n // Get all the ranges (even more than the highlighted ones)\n let matches = this._findMatches(findScopes, replacePattern.hasReplacementPatterns || this._state.preserveCase, 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\n let replaceStrings = [];\n for (let i = 0, len = matches.length; i < len; i++) {\n replaceStrings[i] = replacePattern.buildReplaceString(matches[i].matches, this._state.preserveCase);\n }\n let command = new ReplaceAllCommand(this._editor.getSelection(), matches.map(m => m.range), replaceStrings);\n this._executeEditorCommand('replaceAll', command);\n }\n selectAllMatches() {\n if (!this._hasMatches()) {\n return;\n }\n let findScopes = this._decorations.getFindScopes();\n // Get all the ranges (even more than the highlighted ones)\n let matches = this._findMatches(findScopes, false, 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\n let selections = matches.map(m => new Selection(m.range.startLineNumber, m.range.startColumn, m.range.endLineNumber, m.range.endColumn));\n // If one of the ranges is the editor selection, then maintain it as primary\n let editorSelection = this._editor.getSelection();\n for (let i = 0, len = selections.length; i < len; i++) {\n let sel = selections[i];\n if (sel.equalsRange(editorSelection)) {\n selections = [editorSelection].concat(selections.slice(0, i)).concat(selections.slice(i + 1));\n break;\n }\n }\n this._editor.setSelections(selections);\n }\n _executeEditorCommand(source, command) {\n try {\n this._ignoreModelContentChanged = true;\n this._editor.pushUndoStop();\n this._editor.executeCommand(source, command);\n this._editor.pushUndoStop();\n }\n finally {\n this._ignoreModelContentChanged = false;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './checkbox.css';\nimport { Widget } from '../widget.js';\nimport { Color } from '../../../common/color.js';\nimport { Emitter } from '../../../common/event.js';\nimport { CSSIcon } from '../../../common/codicons.js';\nconst defaultOpts = {\n inputActiveOptionBorder: Color.fromHex('#007ACC00'),\n inputActiveOptionForeground: Color.fromHex('#FFFFFF'),\n inputActiveOptionBackground: Color.fromHex('#0E639C50')\n};\nexport class Checkbox extends Widget {\n constructor(opts) {\n super();\n this._onChange = this._register(new Emitter());\n this.onChange = this._onChange.event;\n this._onKeyDown = this._register(new Emitter());\n this.onKeyDown = this._onKeyDown.event;\n this._opts = Object.assign(Object.assign({}, defaultOpts), opts);\n this._checked = this._opts.isChecked;\n const classes = ['monaco-custom-checkbox'];\n if (this._opts.icon) {\n classes.push(...CSSIcon.asClassNameArray(this._opts.icon));\n }\n if (this._opts.actionClassName) {\n classes.push(...this._opts.actionClassName.split(' '));\n }\n if (this._checked) {\n classes.push('checked');\n }\n this.domNode = document.createElement('div');\n this.domNode.title = this._opts.title;\n this.domNode.classList.add(...classes);\n if (!this._opts.notFocusable) {\n this.domNode.tabIndex = 0;\n }\n this.domNode.setAttribute('role', 'checkbox');\n this.domNode.setAttribute('aria-checked', String(this._checked));\n this.domNode.setAttribute('aria-label', this._opts.title);\n this.applyStyles();\n this.onclick(this.domNode, (ev) => {\n this.checked = !this._checked;\n this._onChange.fire(false);\n ev.preventDefault();\n });\n this.ignoreGesture(this.domNode);\n this.onkeydown(this.domNode, (keyboardEvent) => {\n if (keyboardEvent.keyCode === 10 /* Space */ || keyboardEvent.keyCode === 3 /* Enter */) {\n this.checked = !this._checked;\n this._onChange.fire(true);\n keyboardEvent.preventDefault();\n return;\n }\n this._onKeyDown.fire(keyboardEvent);\n });\n }\n get enabled() {\n return this.domNode.getAttribute('aria-disabled') !== 'true';\n }\n focus() {\n this.domNode.focus();\n }\n get checked() {\n return this._checked;\n }\n set checked(newIsChecked) {\n this._checked = newIsChecked;\n this.domNode.setAttribute('aria-checked', String(this._checked));\n this.domNode.classList.toggle('checked', this._checked);\n this.applyStyles();\n }\n width() {\n return 2 /*marginleft*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */;\n }\n style(styles) {\n if (styles.inputActiveOptionBorder) {\n this._opts.inputActiveOptionBorder = styles.inputActiveOptionBorder;\n }\n if (styles.inputActiveOptionForeground) {\n this._opts.inputActiveOptionForeground = styles.inputActiveOptionForeground;\n }\n if (styles.inputActiveOptionBackground) {\n this._opts.inputActiveOptionBackground = styles.inputActiveOptionBackground;\n }\n this.applyStyles();\n }\n applyStyles() {\n if (this.domNode) {\n this.domNode.style.borderColor = this._checked && this._opts.inputActiveOptionBorder ? this._opts.inputActiveOptionBorder.toString() : 'transparent';\n this.domNode.style.color = this._checked && this._opts.inputActiveOptionForeground ? this._opts.inputActiveOptionForeground.toString() : 'inherit';\n this.domNode.style.backgroundColor = this._checked && this._opts.inputActiveOptionBackground ? this._opts.inputActiveOptionBackground.toString() : 'transparent';\n }\n }\n enable() {\n this.domNode.setAttribute('aria-disabled', String(false));\n }\n disable() {\n this.domNode.setAttribute('aria-disabled', String(true));\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Checkbox } from '../checkbox/checkbox.js';\nimport * as nls from '../../../../nls.js';\nimport { Codicon } from '../../../common/codicons.js';\nconst NLS_CASE_SENSITIVE_CHECKBOX_LABEL = nls.localize('caseDescription', \"Match Case\");\nconst NLS_WHOLE_WORD_CHECKBOX_LABEL = nls.localize('wordsDescription', \"Match Whole Word\");\nconst NLS_REGEX_CHECKBOX_LABEL = nls.localize('regexDescription', \"Use Regular Expression\");\nexport class CaseSensitiveCheckbox extends Checkbox {\n constructor(opts) {\n super({\n icon: Codicon.caseSensitive,\n title: NLS_CASE_SENSITIVE_CHECKBOX_LABEL + opts.appendTitle,\n isChecked: opts.isChecked,\n inputActiveOptionBorder: opts.inputActiveOptionBorder,\n inputActiveOptionForeground: opts.inputActiveOptionForeground,\n inputActiveOptionBackground: opts.inputActiveOptionBackground\n });\n }\n}\nexport class WholeWordsCheckbox extends Checkbox {\n constructor(opts) {\n super({\n icon: Codicon.wholeWord,\n title: NLS_WHOLE_WORD_CHECKBOX_LABEL + opts.appendTitle,\n isChecked: opts.isChecked,\n inputActiveOptionBorder: opts.inputActiveOptionBorder,\n inputActiveOptionForeground: opts.inputActiveOptionForeground,\n inputActiveOptionBackground: opts.inputActiveOptionBackground\n });\n }\n}\nexport class RegexCheckbox extends Checkbox {\n constructor(opts) {\n super({\n icon: Codicon.regex,\n title: NLS_REGEX_CHECKBOX_LABEL + opts.appendTitle,\n isChecked: opts.isChecked,\n inputActiveOptionBorder: opts.inputActiveOptionBorder,\n inputActiveOptionForeground: opts.inputActiveOptionForeground,\n inputActiveOptionBackground: opts.inputActiveOptionBackground\n });\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../../base/browser/dom.js';\nimport { CaseSensitiveCheckbox, RegexCheckbox, WholeWordsCheckbox } from '../../../base/browser/ui/findinput/findInputCheckboxes.js';\nimport { Widget } from '../../../base/browser/ui/widget.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { FIND_IDS } from './findModel.js';\nimport { contrastBorder, editorWidgetBackground, inputActiveOptionBorder, inputActiveOptionBackground, widgetShadow, editorWidgetForeground, inputActiveOptionForeground } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nexport class FindOptionsWidget extends Widget {\n constructor(editor, state, keybindingService, themeService) {\n super();\n this._hideSoon = this._register(new RunOnceScheduler(() => this._hide(), 2000));\n this._isVisible = false;\n this._editor = editor;\n this._state = state;\n this._keybindingService = keybindingService;\n this._domNode = document.createElement('div');\n this._domNode.className = 'findOptionsWidget';\n this._domNode.style.display = 'none';\n this._domNode.style.top = '10px';\n this._domNode.setAttribute('role', 'presentation');\n this._domNode.setAttribute('aria-hidden', 'true');\n const inputActiveOptionBorderColor = themeService.getColorTheme().getColor(inputActiveOptionBorder);\n const inputActiveOptionForegroundColor = themeService.getColorTheme().getColor(inputActiveOptionForeground);\n const inputActiveOptionBackgroundColor = themeService.getColorTheme().getColor(inputActiveOptionBackground);\n this.caseSensitive = this._register(new CaseSensitiveCheckbox({\n appendTitle: this._keybindingLabelFor(FIND_IDS.ToggleCaseSensitiveCommand),\n isChecked: this._state.matchCase,\n inputActiveOptionBorder: inputActiveOptionBorderColor,\n inputActiveOptionForeground: inputActiveOptionForegroundColor,\n inputActiveOptionBackground: inputActiveOptionBackgroundColor\n }));\n this._domNode.appendChild(this.caseSensitive.domNode);\n this._register(this.caseSensitive.onChange(() => {\n this._state.change({\n matchCase: this.caseSensitive.checked\n }, false);\n }));\n this.wholeWords = this._register(new WholeWordsCheckbox({\n appendTitle: this._keybindingLabelFor(FIND_IDS.ToggleWholeWordCommand),\n isChecked: this._state.wholeWord,\n inputActiveOptionBorder: inputActiveOptionBorderColor,\n inputActiveOptionForeground: inputActiveOptionForegroundColor,\n inputActiveOptionBackground: inputActiveOptionBackgroundColor\n }));\n this._domNode.appendChild(this.wholeWords.domNode);\n this._register(this.wholeWords.onChange(() => {\n this._state.change({\n wholeWord: this.wholeWords.checked\n }, false);\n }));\n this.regex = this._register(new RegexCheckbox({\n appendTitle: this._keybindingLabelFor(FIND_IDS.ToggleRegexCommand),\n isChecked: this._state.isRegex,\n inputActiveOptionBorder: inputActiveOptionBorderColor,\n inputActiveOptionForeground: inputActiveOptionForegroundColor,\n inputActiveOptionBackground: inputActiveOptionBackgroundColor\n }));\n this._domNode.appendChild(this.regex.domNode);\n this._register(this.regex.onChange(() => {\n this._state.change({\n isRegex: this.regex.checked\n }, false);\n }));\n this._editor.addOverlayWidget(this);\n this._register(this._state.onFindReplaceStateChange((e) => {\n let somethingChanged = false;\n if (e.isRegex) {\n this.regex.checked = this._state.isRegex;\n somethingChanged = true;\n }\n if (e.wholeWord) {\n this.wholeWords.checked = this._state.wholeWord;\n somethingChanged = true;\n }\n if (e.matchCase) {\n this.caseSensitive.checked = this._state.matchCase;\n somethingChanged = true;\n }\n if (!this._state.isRevealed && somethingChanged) {\n this._revealTemporarily();\n }\n }));\n this._register(dom.addDisposableNonBubblingMouseOutListener(this._domNode, (e) => this._onMouseOut()));\n this._register(dom.addDisposableListener(this._domNode, 'mouseover', (e) => this._onMouseOver()));\n this._applyTheme(themeService.getColorTheme());\n this._register(themeService.onDidColorThemeChange(this._applyTheme.bind(this)));\n }\n _keybindingLabelFor(actionId) {\n let kb = this._keybindingService.lookupKeybinding(actionId);\n if (!kb) {\n return '';\n }\n return ` (${kb.getLabel()})`;\n }\n dispose() {\n this._editor.removeOverlayWidget(this);\n super.dispose();\n }\n // ----- IOverlayWidget API\n getId() {\n return FindOptionsWidget.ID;\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n return {\n preference: 0 /* TOP_RIGHT_CORNER */\n };\n }\n highlightFindOptions() {\n this._revealTemporarily();\n }\n _revealTemporarily() {\n this._show();\n this._hideSoon.schedule();\n }\n _onMouseOut() {\n this._hideSoon.schedule();\n }\n _onMouseOver() {\n this._hideSoon.cancel();\n }\n _show() {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n this._domNode.style.display = 'block';\n }\n _hide() {\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._domNode.style.display = 'none';\n }\n _applyTheme(theme) {\n let inputStyles = {\n inputActiveOptionBorder: theme.getColor(inputActiveOptionBorder),\n inputActiveOptionForeground: theme.getColor(inputActiveOptionForeground),\n inputActiveOptionBackground: theme.getColor(inputActiveOptionBackground)\n };\n this.caseSensitive.style(inputStyles);\n this.wholeWords.style(inputStyles);\n this.regex.style(inputStyles);\n }\n}\nFindOptionsWidget.ID = 'editor.contrib.findOptionsWidget';\nregisterThemingParticipant((theme, collector) => {\n const widgetBackground = theme.getColor(editorWidgetBackground);\n if (widgetBackground) {\n collector.addRule(`.monaco-editor .findOptionsWidget { background-color: ${widgetBackground}; }`);\n }\n const widgetForeground = theme.getColor(editorWidgetForeground);\n if (widgetForeground) {\n collector.addRule(`.monaco-editor .findOptionsWidget { color: ${widgetForeground}; }`);\n }\n const widgetShadowColor = theme.getColor(widgetShadow);\n if (widgetShadowColor) {\n collector.addRule(`.monaco-editor .findOptionsWidget { box-shadow: 0 0 8px 2px ${widgetShadowColor}; }`);\n }\n const hcBorder = theme.getColor(contrastBorder);\n if (hcBorder) {\n collector.addRule(`.monaco-editor .findOptionsWidget { border: 2px solid ${hcBorder}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { Range } from '../../common/core/range.js';\nimport { MATCHES_LIMIT } from './findModel.js';\nfunction effectiveOptionValue(override, value) {\n if (override === 1 /* True */) {\n return true;\n }\n if (override === 2 /* False */) {\n return false;\n }\n return value;\n}\nexport class FindReplaceState extends Disposable {\n constructor() {\n super();\n this._onFindReplaceStateChange = this._register(new Emitter());\n this.onFindReplaceStateChange = this._onFindReplaceStateChange.event;\n this._searchString = '';\n this._replaceString = '';\n this._isRevealed = false;\n this._isReplaceRevealed = false;\n this._isRegex = false;\n this._isRegexOverride = 0 /* NotSet */;\n this._wholeWord = false;\n this._wholeWordOverride = 0 /* NotSet */;\n this._matchCase = false;\n this._matchCaseOverride = 0 /* NotSet */;\n this._preserveCase = false;\n this._preserveCaseOverride = 0 /* NotSet */;\n this._searchScope = null;\n this._matchesPosition = 0;\n this._matchesCount = 0;\n this._currentMatch = null;\n this._loop = true;\n }\n get searchString() { return this._searchString; }\n get replaceString() { return this._replaceString; }\n get isRevealed() { return this._isRevealed; }\n get isReplaceRevealed() { return this._isReplaceRevealed; }\n get isRegex() { return effectiveOptionValue(this._isRegexOverride, this._isRegex); }\n get wholeWord() { return effectiveOptionValue(this._wholeWordOverride, this._wholeWord); }\n get matchCase() { return effectiveOptionValue(this._matchCaseOverride, this._matchCase); }\n get preserveCase() { return effectiveOptionValue(this._preserveCaseOverride, this._preserveCase); }\n get actualIsRegex() { return this._isRegex; }\n get actualWholeWord() { return this._wholeWord; }\n get actualMatchCase() { return this._matchCase; }\n get actualPreserveCase() { return this._preserveCase; }\n get searchScope() { return this._searchScope; }\n get matchesPosition() { return this._matchesPosition; }\n get matchesCount() { return this._matchesCount; }\n get currentMatch() { return this._currentMatch; }\n changeMatchInfo(matchesPosition, matchesCount, currentMatch) {\n let changeEvent = {\n moveCursor: false,\n updateHistory: false,\n searchString: false,\n replaceString: false,\n isRevealed: false,\n isReplaceRevealed: false,\n isRegex: false,\n wholeWord: false,\n matchCase: false,\n preserveCase: false,\n searchScope: false,\n matchesPosition: false,\n matchesCount: false,\n currentMatch: false,\n loop: false\n };\n let somethingChanged = false;\n if (matchesCount === 0) {\n matchesPosition = 0;\n }\n if (matchesPosition > matchesCount) {\n matchesPosition = matchesCount;\n }\n if (this._matchesPosition !== matchesPosition) {\n this._matchesPosition = matchesPosition;\n changeEvent.matchesPosition = true;\n somethingChanged = true;\n }\n if (this._matchesCount !== matchesCount) {\n this._matchesCount = matchesCount;\n changeEvent.matchesCount = true;\n somethingChanged = true;\n }\n if (typeof currentMatch !== 'undefined') {\n if (!Range.equalsRange(this._currentMatch, currentMatch)) {\n this._currentMatch = currentMatch;\n changeEvent.currentMatch = true;\n somethingChanged = true;\n }\n }\n if (somethingChanged) {\n this._onFindReplaceStateChange.fire(changeEvent);\n }\n }\n change(newState, moveCursor, updateHistory = true) {\n var _a;\n let changeEvent = {\n moveCursor: moveCursor,\n updateHistory: updateHistory,\n searchString: false,\n replaceString: false,\n isRevealed: false,\n isReplaceRevealed: false,\n isRegex: false,\n wholeWord: false,\n matchCase: false,\n preserveCase: false,\n searchScope: false,\n matchesPosition: false,\n matchesCount: false,\n currentMatch: false,\n loop: false\n };\n let somethingChanged = false;\n const oldEffectiveIsRegex = this.isRegex;\n const oldEffectiveWholeWords = this.wholeWord;\n const oldEffectiveMatchCase = this.matchCase;\n const oldEffectivePreserveCase = this.preserveCase;\n if (typeof newState.searchString !== 'undefined') {\n if (this._searchString !== newState.searchString) {\n this._searchString = newState.searchString;\n changeEvent.searchString = true;\n somethingChanged = true;\n }\n }\n if (typeof newState.replaceString !== 'undefined') {\n if (this._replaceString !== newState.replaceString) {\n this._replaceString = newState.replaceString;\n changeEvent.replaceString = true;\n somethingChanged = true;\n }\n }\n if (typeof newState.isRevealed !== 'undefined') {\n if (this._isRevealed !== newState.isRevealed) {\n this._isRevealed = newState.isRevealed;\n changeEvent.isRevealed = true;\n somethingChanged = true;\n }\n }\n if (typeof newState.isReplaceRevealed !== 'undefined') {\n if (this._isReplaceRevealed !== newState.isReplaceRevealed) {\n this._isReplaceRevealed = newState.isReplaceRevealed;\n changeEvent.isReplaceRevealed = true;\n somethingChanged = true;\n }\n }\n if (typeof newState.isRegex !== 'undefined') {\n this._isRegex = newState.isRegex;\n }\n if (typeof newState.wholeWord !== 'undefined') {\n this._wholeWord = newState.wholeWord;\n }\n if (typeof newState.matchCase !== 'undefined') {\n this._matchCase = newState.matchCase;\n }\n if (typeof newState.preserveCase !== 'undefined') {\n this._preserveCase = newState.preserveCase;\n }\n if (typeof newState.searchScope !== 'undefined') {\n if (!((_a = newState.searchScope) === null || _a === void 0 ? void 0 : _a.every((newSearchScope) => {\n var _a;\n return (_a = this._searchScope) === null || _a === void 0 ? void 0 : _a.some(existingSearchScope => {\n return !Range.equalsRange(existingSearchScope, newSearchScope);\n });\n }))) {\n this._searchScope = newState.searchScope;\n changeEvent.searchScope = true;\n somethingChanged = true;\n }\n }\n if (typeof newState.loop !== 'undefined') {\n if (this._loop !== newState.loop) {\n this._loop = newState.loop;\n changeEvent.loop = true;\n somethingChanged = true;\n }\n }\n // Overrides get set when they explicitly come in and get reset anytime something else changes\n this._isRegexOverride = (typeof newState.isRegexOverride !== 'undefined' ? newState.isRegexOverride : 0 /* NotSet */);\n this._wholeWordOverride = (typeof newState.wholeWordOverride !== 'undefined' ? newState.wholeWordOverride : 0 /* NotSet */);\n this._matchCaseOverride = (typeof newState.matchCaseOverride !== 'undefined' ? newState.matchCaseOverride : 0 /* NotSet */);\n this._preserveCaseOverride = (typeof newState.preserveCaseOverride !== 'undefined' ? newState.preserveCaseOverride : 0 /* NotSet */);\n if (oldEffectiveIsRegex !== this.isRegex) {\n somethingChanged = true;\n changeEvent.isRegex = true;\n }\n if (oldEffectiveWholeWords !== this.wholeWord) {\n somethingChanged = true;\n changeEvent.wholeWord = true;\n }\n if (oldEffectiveMatchCase !== this.matchCase) {\n somethingChanged = true;\n changeEvent.matchCase = true;\n }\n if (oldEffectivePreserveCase !== this.preserveCase) {\n somethingChanged = true;\n changeEvent.preserveCase = true;\n }\n if (somethingChanged) {\n this._onFindReplaceStateChange.fire(changeEvent);\n }\n }\n canNavigateBack() {\n return this.canNavigateInLoop() || (this.matchesPosition !== 1);\n }\n canNavigateForward() {\n return this.canNavigateInLoop() || (this.matchesPosition < this.matchesCount);\n }\n canNavigateInLoop() {\n return this._loop || (this.matchesCount >= MATCHES_LIMIT);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './findInput.css';\nimport * as nls from '../../../../nls.js';\nimport * as dom from '../../dom.js';\nimport { HistoryInputBox } from '../inputbox/inputBox.js';\nimport { Widget } from '../widget.js';\nimport { Emitter } from '../../../common/event.js';\nimport { CaseSensitiveCheckbox, WholeWordsCheckbox, RegexCheckbox } from './findInputCheckboxes.js';\nconst NLS_DEFAULT_LABEL = nls.localize('defaultLabel', \"input\");\nexport class FindInput extends Widget {\n constructor(parent, contextViewProvider, _showOptionButtons, options) {\n super();\n this._showOptionButtons = _showOptionButtons;\n this.fixFocusOnOptionClickEnabled = true;\n this._onDidOptionChange = this._register(new Emitter());\n this.onDidOptionChange = this._onDidOptionChange.event;\n this._onKeyDown = this._register(new Emitter());\n this.onKeyDown = this._onKeyDown.event;\n this._onMouseDown = this._register(new Emitter());\n this.onMouseDown = this._onMouseDown.event;\n this._onInput = this._register(new Emitter());\n this._onKeyUp = this._register(new Emitter());\n this._onCaseSensitiveKeyDown = this._register(new Emitter());\n this.onCaseSensitiveKeyDown = this._onCaseSensitiveKeyDown.event;\n this._onRegexKeyDown = this._register(new Emitter());\n this.onRegexKeyDown = this._onRegexKeyDown.event;\n this._lastHighlightFindOptions = 0;\n this.contextViewProvider = contextViewProvider;\n this.placeholder = options.placeholder || '';\n this.validation = options.validation;\n this.label = options.label || NLS_DEFAULT_LABEL;\n this.inputActiveOptionBorder = options.inputActiveOptionBorder;\n this.inputActiveOptionForeground = options.inputActiveOptionForeground;\n this.inputActiveOptionBackground = options.inputActiveOptionBackground;\n this.inputBackground = options.inputBackground;\n this.inputForeground = options.inputForeground;\n this.inputBorder = options.inputBorder;\n this.inputValidationInfoBorder = options.inputValidationInfoBorder;\n this.inputValidationInfoBackground = options.inputValidationInfoBackground;\n this.inputValidationInfoForeground = options.inputValidationInfoForeground;\n this.inputValidationWarningBorder = options.inputValidationWarningBorder;\n this.inputValidationWarningBackground = options.inputValidationWarningBackground;\n this.inputValidationWarningForeground = options.inputValidationWarningForeground;\n this.inputValidationErrorBorder = options.inputValidationErrorBorder;\n this.inputValidationErrorBackground = options.inputValidationErrorBackground;\n this.inputValidationErrorForeground = options.inputValidationErrorForeground;\n const appendCaseSensitiveLabel = options.appendCaseSensitiveLabel || '';\n const appendWholeWordsLabel = options.appendWholeWordsLabel || '';\n const appendRegexLabel = options.appendRegexLabel || '';\n const history = options.history || [];\n const flexibleHeight = !!options.flexibleHeight;\n const flexibleWidth = !!options.flexibleWidth;\n const flexibleMaxHeight = options.flexibleMaxHeight;\n this.domNode = document.createElement('div');\n this.domNode.classList.add('monaco-findInput');\n this.inputBox = this._register(new HistoryInputBox(this.domNode, this.contextViewProvider, {\n placeholder: this.placeholder || '',\n ariaLabel: this.label || '',\n validationOptions: {\n validation: this.validation\n },\n inputBackground: this.inputBackground,\n inputForeground: this.inputForeground,\n inputBorder: this.inputBorder,\n inputValidationInfoBackground: this.inputValidationInfoBackground,\n inputValidationInfoForeground: this.inputValidationInfoForeground,\n inputValidationInfoBorder: this.inputValidationInfoBorder,\n inputValidationWarningBackground: this.inputValidationWarningBackground,\n inputValidationWarningForeground: this.inputValidationWarningForeground,\n inputValidationWarningBorder: this.inputValidationWarningBorder,\n inputValidationErrorBackground: this.inputValidationErrorBackground,\n inputValidationErrorForeground: this.inputValidationErrorForeground,\n inputValidationErrorBorder: this.inputValidationErrorBorder,\n history,\n flexibleHeight,\n flexibleWidth,\n flexibleMaxHeight\n }));\n this.regex = this._register(new RegexCheckbox({\n appendTitle: appendRegexLabel,\n isChecked: false,\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground\n }));\n this._register(this.regex.onChange(viaKeyboard => {\n this._onDidOptionChange.fire(viaKeyboard);\n if (!viaKeyboard && this.fixFocusOnOptionClickEnabled) {\n this.inputBox.focus();\n }\n this.validate();\n }));\n this._register(this.regex.onKeyDown(e => {\n this._onRegexKeyDown.fire(e);\n }));\n this.wholeWords = this._register(new WholeWordsCheckbox({\n appendTitle: appendWholeWordsLabel,\n isChecked: false,\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground\n }));\n this._register(this.wholeWords.onChange(viaKeyboard => {\n this._onDidOptionChange.fire(viaKeyboard);\n if (!viaKeyboard && this.fixFocusOnOptionClickEnabled) {\n this.inputBox.focus();\n }\n this.validate();\n }));\n this.caseSensitive = this._register(new CaseSensitiveCheckbox({\n appendTitle: appendCaseSensitiveLabel,\n isChecked: false,\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground\n }));\n this._register(this.caseSensitive.onChange(viaKeyboard => {\n this._onDidOptionChange.fire(viaKeyboard);\n if (!viaKeyboard && this.fixFocusOnOptionClickEnabled) {\n this.inputBox.focus();\n }\n this.validate();\n }));\n this._register(this.caseSensitive.onKeyDown(e => {\n this._onCaseSensitiveKeyDown.fire(e);\n }));\n if (this._showOptionButtons) {\n this.inputBox.paddingRight = this.caseSensitive.width() + this.wholeWords.width() + this.regex.width();\n }\n // Arrow-Key support to navigate between options\n let indexes = [this.caseSensitive.domNode, this.wholeWords.domNode, this.regex.domNode];\n this.onkeydown(this.domNode, (event) => {\n if (event.equals(15 /* LeftArrow */) || event.equals(17 /* RightArrow */) || event.equals(9 /* Escape */)) {\n let index = indexes.indexOf(document.activeElement);\n if (index >= 0) {\n let newIndex = -1;\n if (event.equals(17 /* RightArrow */)) {\n newIndex = (index + 1) % indexes.length;\n }\n else if (event.equals(15 /* LeftArrow */)) {\n if (index === 0) {\n newIndex = indexes.length - 1;\n }\n else {\n newIndex = index - 1;\n }\n }\n if (event.equals(9 /* Escape */)) {\n indexes[index].blur();\n this.inputBox.focus();\n }\n else if (newIndex >= 0) {\n indexes[newIndex].focus();\n }\n dom.EventHelper.stop(event, true);\n }\n }\n });\n let controls = document.createElement('div');\n controls.className = 'controls';\n controls.style.display = this._showOptionButtons ? 'block' : 'none';\n controls.appendChild(this.caseSensitive.domNode);\n controls.appendChild(this.wholeWords.domNode);\n controls.appendChild(this.regex.domNode);\n this.domNode.appendChild(controls);\n if (parent) {\n parent.appendChild(this.domNode);\n }\n this.onkeydown(this.inputBox.inputElement, (e) => this._onKeyDown.fire(e));\n this.onkeyup(this.inputBox.inputElement, (e) => this._onKeyUp.fire(e));\n this.oninput(this.inputBox.inputElement, (e) => this._onInput.fire());\n this.onmousedown(this.inputBox.inputElement, (e) => this._onMouseDown.fire(e));\n }\n enable() {\n this.domNode.classList.remove('disabled');\n this.inputBox.enable();\n this.regex.enable();\n this.wholeWords.enable();\n this.caseSensitive.enable();\n }\n disable() {\n this.domNode.classList.add('disabled');\n this.inputBox.disable();\n this.regex.disable();\n this.wholeWords.disable();\n this.caseSensitive.disable();\n }\n setFocusInputOnOptionClick(value) {\n this.fixFocusOnOptionClickEnabled = value;\n }\n setEnabled(enabled) {\n if (enabled) {\n this.enable();\n }\n else {\n this.disable();\n }\n }\n getValue() {\n return this.inputBox.value;\n }\n setValue(value) {\n if (this.inputBox.value !== value) {\n this.inputBox.value = value;\n }\n }\n style(styles) {\n this.inputActiveOptionBorder = styles.inputActiveOptionBorder;\n this.inputActiveOptionForeground = styles.inputActiveOptionForeground;\n this.inputActiveOptionBackground = styles.inputActiveOptionBackground;\n this.inputBackground = styles.inputBackground;\n this.inputForeground = styles.inputForeground;\n this.inputBorder = styles.inputBorder;\n this.inputValidationInfoBackground = styles.inputValidationInfoBackground;\n this.inputValidationInfoForeground = styles.inputValidationInfoForeground;\n this.inputValidationInfoBorder = styles.inputValidationInfoBorder;\n this.inputValidationWarningBackground = styles.inputValidationWarningBackground;\n this.inputValidationWarningForeground = styles.inputValidationWarningForeground;\n this.inputValidationWarningBorder = styles.inputValidationWarningBorder;\n this.inputValidationErrorBackground = styles.inputValidationErrorBackground;\n this.inputValidationErrorForeground = styles.inputValidationErrorForeground;\n this.inputValidationErrorBorder = styles.inputValidationErrorBorder;\n this.applyStyles();\n }\n applyStyles() {\n if (this.domNode) {\n const checkBoxStyles = {\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground,\n };\n this.regex.style(checkBoxStyles);\n this.wholeWords.style(checkBoxStyles);\n this.caseSensitive.style(checkBoxStyles);\n const inputBoxStyles = {\n inputBackground: this.inputBackground,\n inputForeground: this.inputForeground,\n inputBorder: this.inputBorder,\n inputValidationInfoBackground: this.inputValidationInfoBackground,\n inputValidationInfoForeground: this.inputValidationInfoForeground,\n inputValidationInfoBorder: this.inputValidationInfoBorder,\n inputValidationWarningBackground: this.inputValidationWarningBackground,\n inputValidationWarningForeground: this.inputValidationWarningForeground,\n inputValidationWarningBorder: this.inputValidationWarningBorder,\n inputValidationErrorBackground: this.inputValidationErrorBackground,\n inputValidationErrorForeground: this.inputValidationErrorForeground,\n inputValidationErrorBorder: this.inputValidationErrorBorder\n };\n this.inputBox.style(inputBoxStyles);\n }\n }\n select() {\n this.inputBox.select();\n }\n focus() {\n this.inputBox.focus();\n }\n getCaseSensitive() {\n return this.caseSensitive.checked;\n }\n setCaseSensitive(value) {\n this.caseSensitive.checked = value;\n }\n getWholeWords() {\n return this.wholeWords.checked;\n }\n setWholeWords(value) {\n this.wholeWords.checked = value;\n }\n getRegex() {\n return this.regex.checked;\n }\n setRegex(value) {\n this.regex.checked = value;\n this.validate();\n }\n focusOnCaseSensitive() {\n this.caseSensitive.focus();\n }\n highlightFindOptions() {\n this.domNode.classList.remove('highlight-' + (this._lastHighlightFindOptions));\n this._lastHighlightFindOptions = 1 - this._lastHighlightFindOptions;\n this.domNode.classList.add('highlight-' + (this._lastHighlightFindOptions));\n }\n validate() {\n this.inputBox.validate();\n }\n clearMessage() {\n this.inputBox.hideMessage();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './findInput.css';\nimport * as nls from '../../../../nls.js';\nimport * as dom from '../../dom.js';\nimport { HistoryInputBox } from '../inputbox/inputBox.js';\nimport { Widget } from '../widget.js';\nimport { Emitter } from '../../../common/event.js';\nimport { Checkbox } from '../checkbox/checkbox.js';\nimport { Codicon } from '../../../common/codicons.js';\nconst NLS_DEFAULT_LABEL = nls.localize('defaultLabel', \"input\");\nconst NLS_PRESERVE_CASE_LABEL = nls.localize('label.preserveCaseCheckbox', \"Preserve Case\");\nexport class PreserveCaseCheckbox extends Checkbox {\n constructor(opts) {\n super({\n // TODO: does this need its own icon?\n icon: Codicon.preserveCase,\n title: NLS_PRESERVE_CASE_LABEL + opts.appendTitle,\n isChecked: opts.isChecked,\n inputActiveOptionBorder: opts.inputActiveOptionBorder,\n inputActiveOptionForeground: opts.inputActiveOptionForeground,\n inputActiveOptionBackground: opts.inputActiveOptionBackground\n });\n }\n}\nexport class ReplaceInput extends Widget {\n constructor(parent, contextViewProvider, _showOptionButtons, options) {\n super();\n this._showOptionButtons = _showOptionButtons;\n this.fixFocusOnOptionClickEnabled = true;\n this.cachedOptionsWidth = 0;\n this._onDidOptionChange = this._register(new Emitter());\n this.onDidOptionChange = this._onDidOptionChange.event;\n this._onKeyDown = this._register(new Emitter());\n this.onKeyDown = this._onKeyDown.event;\n this._onMouseDown = this._register(new Emitter());\n this._onInput = this._register(new Emitter());\n this._onKeyUp = this._register(new Emitter());\n this._onPreserveCaseKeyDown = this._register(new Emitter());\n this.onPreserveCaseKeyDown = this._onPreserveCaseKeyDown.event;\n this.contextViewProvider = contextViewProvider;\n this.placeholder = options.placeholder || '';\n this.validation = options.validation;\n this.label = options.label || NLS_DEFAULT_LABEL;\n this.inputActiveOptionBorder = options.inputActiveOptionBorder;\n this.inputActiveOptionForeground = options.inputActiveOptionForeground;\n this.inputActiveOptionBackground = options.inputActiveOptionBackground;\n this.inputBackground = options.inputBackground;\n this.inputForeground = options.inputForeground;\n this.inputBorder = options.inputBorder;\n this.inputValidationInfoBorder = options.inputValidationInfoBorder;\n this.inputValidationInfoBackground = options.inputValidationInfoBackground;\n this.inputValidationInfoForeground = options.inputValidationInfoForeground;\n this.inputValidationWarningBorder = options.inputValidationWarningBorder;\n this.inputValidationWarningBackground = options.inputValidationWarningBackground;\n this.inputValidationWarningForeground = options.inputValidationWarningForeground;\n this.inputValidationErrorBorder = options.inputValidationErrorBorder;\n this.inputValidationErrorBackground = options.inputValidationErrorBackground;\n this.inputValidationErrorForeground = options.inputValidationErrorForeground;\n const appendPreserveCaseLabel = options.appendPreserveCaseLabel || '';\n const history = options.history || [];\n const flexibleHeight = !!options.flexibleHeight;\n const flexibleWidth = !!options.flexibleWidth;\n const flexibleMaxHeight = options.flexibleMaxHeight;\n this.domNode = document.createElement('div');\n this.domNode.classList.add('monaco-findInput');\n this.inputBox = this._register(new HistoryInputBox(this.domNode, this.contextViewProvider, {\n ariaLabel: this.label || '',\n placeholder: this.placeholder || '',\n validationOptions: {\n validation: this.validation\n },\n inputBackground: this.inputBackground,\n inputForeground: this.inputForeground,\n inputBorder: this.inputBorder,\n inputValidationInfoBackground: this.inputValidationInfoBackground,\n inputValidationInfoForeground: this.inputValidationInfoForeground,\n inputValidationInfoBorder: this.inputValidationInfoBorder,\n inputValidationWarningBackground: this.inputValidationWarningBackground,\n inputValidationWarningForeground: this.inputValidationWarningForeground,\n inputValidationWarningBorder: this.inputValidationWarningBorder,\n inputValidationErrorBackground: this.inputValidationErrorBackground,\n inputValidationErrorForeground: this.inputValidationErrorForeground,\n inputValidationErrorBorder: this.inputValidationErrorBorder,\n history,\n flexibleHeight,\n flexibleWidth,\n flexibleMaxHeight\n }));\n this.preserveCase = this._register(new PreserveCaseCheckbox({\n appendTitle: appendPreserveCaseLabel,\n isChecked: false,\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground,\n }));\n this._register(this.preserveCase.onChange(viaKeyboard => {\n this._onDidOptionChange.fire(viaKeyboard);\n if (!viaKeyboard && this.fixFocusOnOptionClickEnabled) {\n this.inputBox.focus();\n }\n this.validate();\n }));\n this._register(this.preserveCase.onKeyDown(e => {\n this._onPreserveCaseKeyDown.fire(e);\n }));\n if (this._showOptionButtons) {\n this.cachedOptionsWidth = this.preserveCase.width();\n }\n else {\n this.cachedOptionsWidth = 0;\n }\n // Arrow-Key support to navigate between options\n let indexes = [this.preserveCase.domNode];\n this.onkeydown(this.domNode, (event) => {\n if (event.equals(15 /* LeftArrow */) || event.equals(17 /* RightArrow */) || event.equals(9 /* Escape */)) {\n let index = indexes.indexOf(document.activeElement);\n if (index >= 0) {\n let newIndex = -1;\n if (event.equals(17 /* RightArrow */)) {\n newIndex = (index + 1) % indexes.length;\n }\n else if (event.equals(15 /* LeftArrow */)) {\n if (index === 0) {\n newIndex = indexes.length - 1;\n }\n else {\n newIndex = index - 1;\n }\n }\n if (event.equals(9 /* Escape */)) {\n indexes[index].blur();\n this.inputBox.focus();\n }\n else if (newIndex >= 0) {\n indexes[newIndex].focus();\n }\n dom.EventHelper.stop(event, true);\n }\n }\n });\n let controls = document.createElement('div');\n controls.className = 'controls';\n controls.style.display = this._showOptionButtons ? 'block' : 'none';\n controls.appendChild(this.preserveCase.domNode);\n this.domNode.appendChild(controls);\n if (parent) {\n parent.appendChild(this.domNode);\n }\n this.onkeydown(this.inputBox.inputElement, (e) => this._onKeyDown.fire(e));\n this.onkeyup(this.inputBox.inputElement, (e) => this._onKeyUp.fire(e));\n this.oninput(this.inputBox.inputElement, (e) => this._onInput.fire());\n this.onmousedown(this.inputBox.inputElement, (e) => this._onMouseDown.fire(e));\n }\n enable() {\n this.domNode.classList.remove('disabled');\n this.inputBox.enable();\n this.preserveCase.enable();\n }\n disable() {\n this.domNode.classList.add('disabled');\n this.inputBox.disable();\n this.preserveCase.disable();\n }\n setEnabled(enabled) {\n if (enabled) {\n this.enable();\n }\n else {\n this.disable();\n }\n }\n style(styles) {\n this.inputActiveOptionBorder = styles.inputActiveOptionBorder;\n this.inputActiveOptionForeground = styles.inputActiveOptionForeground;\n this.inputActiveOptionBackground = styles.inputActiveOptionBackground;\n this.inputBackground = styles.inputBackground;\n this.inputForeground = styles.inputForeground;\n this.inputBorder = styles.inputBorder;\n this.inputValidationInfoBackground = styles.inputValidationInfoBackground;\n this.inputValidationInfoForeground = styles.inputValidationInfoForeground;\n this.inputValidationInfoBorder = styles.inputValidationInfoBorder;\n this.inputValidationWarningBackground = styles.inputValidationWarningBackground;\n this.inputValidationWarningForeground = styles.inputValidationWarningForeground;\n this.inputValidationWarningBorder = styles.inputValidationWarningBorder;\n this.inputValidationErrorBackground = styles.inputValidationErrorBackground;\n this.inputValidationErrorForeground = styles.inputValidationErrorForeground;\n this.inputValidationErrorBorder = styles.inputValidationErrorBorder;\n this.applyStyles();\n }\n applyStyles() {\n if (this.domNode) {\n const checkBoxStyles = {\n inputActiveOptionBorder: this.inputActiveOptionBorder,\n inputActiveOptionForeground: this.inputActiveOptionForeground,\n inputActiveOptionBackground: this.inputActiveOptionBackground,\n };\n this.preserveCase.style(checkBoxStyles);\n const inputBoxStyles = {\n inputBackground: this.inputBackground,\n inputForeground: this.inputForeground,\n inputBorder: this.inputBorder,\n inputValidationInfoBackground: this.inputValidationInfoBackground,\n inputValidationInfoForeground: this.inputValidationInfoForeground,\n inputValidationInfoBorder: this.inputValidationInfoBorder,\n inputValidationWarningBackground: this.inputValidationWarningBackground,\n inputValidationWarningForeground: this.inputValidationWarningForeground,\n inputValidationWarningBorder: this.inputValidationWarningBorder,\n inputValidationErrorBackground: this.inputValidationErrorBackground,\n inputValidationErrorForeground: this.inputValidationErrorForeground,\n inputValidationErrorBorder: this.inputValidationErrorBorder\n };\n this.inputBox.style(inputBoxStyles);\n }\n }\n select() {\n this.inputBox.select();\n }\n focus() {\n this.inputBox.focus();\n }\n getPreserveCase() {\n return this.preserveCase.checked;\n }\n setPreserveCase(value) {\n this.preserveCase.checked = value;\n }\n focusOnPreserve() {\n this.preserveCase.focus();\n }\n validate() {\n if (this.inputBox) {\n this.inputBox.validate();\n }\n }\n set width(newWidth) {\n this.inputBox.paddingRight = this.cachedOptionsWidth;\n this.inputBox.width = newWidth;\n this.domNode.style.width = newWidth + 'px';\n }\n dispose() {\n super.dispose();\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { IContextKeyService, ContextKeyExpr, RawContextKey } from '../contextkey/common/contextkey.js';\nimport { FindInput } from '../../base/browser/ui/findinput/findInput.js';\nimport { KeybindingsRegistry } from '../keybinding/common/keybindingsRegistry.js';\nimport { ReplaceInput } from '../../base/browser/ui/findinput/replaceInput.js';\nexport const HistoryNavigationWidgetContext = 'historyNavigationWidget';\nexport const HistoryNavigationEnablementContext = 'historyNavigationEnabled';\nfunction bindContextScopedWidget(contextKeyService, widget, contextKey) {\n new RawContextKey(contextKey, widget).bindTo(contextKeyService);\n}\nfunction createWidgetScopedContextKeyService(contextKeyService, widget) {\n return contextKeyService.createScoped(widget.target);\n}\nfunction getContextScopedWidget(contextKeyService, contextKey) {\n return contextKeyService.getContext(document.activeElement).getValue(contextKey);\n}\nexport function createAndBindHistoryNavigationWidgetScopedContextKeyService(contextKeyService, widget) {\n const scopedContextKeyService = createWidgetScopedContextKeyService(contextKeyService, widget);\n bindContextScopedWidget(scopedContextKeyService, widget, HistoryNavigationWidgetContext);\n const historyNavigationEnablement = new RawContextKey(HistoryNavigationEnablementContext, true).bindTo(scopedContextKeyService);\n return { scopedContextKeyService, historyNavigationEnablement };\n}\nlet ContextScopedFindInput = class ContextScopedFindInput extends FindInput {\n constructor(container, contextViewProvider, options, contextKeyService, showFindOptions = false) {\n super(container, contextViewProvider, showFindOptions, options);\n this._register(createAndBindHistoryNavigationWidgetScopedContextKeyService(contextKeyService, { target: this.inputBox.element, historyNavigator: this.inputBox }).scopedContextKeyService);\n }\n};\nContextScopedFindInput = __decorate([\n __param(3, IContextKeyService)\n], ContextScopedFindInput);\nexport { ContextScopedFindInput };\nlet ContextScopedReplaceInput = class ContextScopedReplaceInput extends ReplaceInput {\n constructor(container, contextViewProvider, options, contextKeyService, showReplaceOptions = false) {\n super(container, contextViewProvider, showReplaceOptions, options);\n this._register(createAndBindHistoryNavigationWidgetScopedContextKeyService(contextKeyService, { target: this.inputBox.element, historyNavigator: this.inputBox }).scopedContextKeyService);\n }\n};\nContextScopedReplaceInput = __decorate([\n __param(3, IContextKeyService)\n], ContextScopedReplaceInput);\nexport { ContextScopedReplaceInput };\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n id: 'history.showPrevious',\n weight: 200 /* WorkbenchContrib */,\n when: ContextKeyExpr.and(ContextKeyExpr.has(HistoryNavigationWidgetContext), ContextKeyExpr.equals(HistoryNavigationEnablementContext, true)),\n primary: 16 /* UpArrow */,\n secondary: [512 /* Alt */ | 16 /* UpArrow */],\n handler: (accessor, arg2) => {\n const widget = getContextScopedWidget(accessor.get(IContextKeyService), HistoryNavigationWidgetContext);\n if (widget) {\n const historyInputBox = widget.historyNavigator;\n historyInputBox.showPreviousValue();\n }\n }\n});\nKeybindingsRegistry.registerCommandAndKeybindingRule({\n id: 'history.showNext',\n weight: 200 /* WorkbenchContrib */,\n when: ContextKeyExpr.and(ContextKeyExpr.has(HistoryNavigationWidgetContext), ContextKeyExpr.equals(HistoryNavigationEnablementContext, true)),\n primary: 18 /* DownArrow */,\n secondary: [512 /* Alt */ | 18 /* DownArrow */],\n handler: (accessor, arg2) => {\n const widget = getContextScopedWidget(accessor.get(IContextKeyService), HistoryNavigationWidgetContext);\n if (widget) {\n const historyInputBox = widget.historyNavigator;\n historyInputBox.showNextValue();\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport './findWidget.css';\nimport * as nls from '../../../nls.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { alert as alertFn } from '../../../base/browser/ui/aria/aria.js';\nimport { Checkbox } from '../../../base/browser/ui/checkbox/checkbox.js';\nimport { Sash } from '../../../base/browser/ui/sash/sash.js';\nimport { Widget } from '../../../base/browser/ui/widget.js';\nimport { Delayer } from '../../../base/common/async.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { Range } from '../../common/core/range.js';\nimport { CONTEXT_FIND_INPUT_FOCUSED, CONTEXT_REPLACE_INPUT_FOCUSED, FIND_IDS, MATCHES_LIMIT } from './findModel.js';\nimport { contrastBorder, editorFindMatch, editorFindMatchBorder, editorFindMatchHighlight, editorFindMatchHighlightBorder, editorFindRangeHighlight, editorFindRangeHighlightBorder, editorWidgetBackground, editorWidgetBorder, editorWidgetResizeBorder, errorForeground, inputActiveOptionBorder, inputActiveOptionBackground, inputActiveOptionForeground, inputBackground, inputBorder, inputForeground, inputValidationErrorBackground, inputValidationErrorBorder, inputValidationErrorForeground, inputValidationInfoBackground, inputValidationInfoBorder, inputValidationInfoForeground, inputValidationWarningBackground, inputValidationWarningBorder, inputValidationWarningForeground, widgetShadow, editorWidgetForeground, focusBorder } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant, ThemeIcon } from '../../../platform/theme/common/themeService.js';\nimport { ContextScopedFindInput, ContextScopedReplaceInput } from '../../../platform/browser/contextScopedHistoryWidget.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { registerIcon, widgetClose } from '../../../platform/theme/common/iconRegistry.js';\nconst findSelectionIcon = registerIcon('find-selection', Codicon.selection, nls.localize('findSelectionIcon', 'Icon for \\'Find in Selection\\' in the editor find widget.'));\nconst findCollapsedIcon = registerIcon('find-collapsed', Codicon.chevronRight, nls.localize('findCollapsedIcon', 'Icon to indicate that the editor find widget is collapsed.'));\nconst findExpandedIcon = registerIcon('find-expanded', Codicon.chevronDown, nls.localize('findExpandedIcon', 'Icon to indicate that the editor find widget is expanded.'));\nexport const findReplaceIcon = registerIcon('find-replace', Codicon.replace, nls.localize('findReplaceIcon', 'Icon for \\'Replace\\' in the editor find widget.'));\nexport const findReplaceAllIcon = registerIcon('find-replace-all', Codicon.replaceAll, nls.localize('findReplaceAllIcon', 'Icon for \\'Replace All\\' in the editor find widget.'));\nexport const findPreviousMatchIcon = registerIcon('find-previous-match', Codicon.arrowUp, nls.localize('findPreviousMatchIcon', 'Icon for \\'Find Previous\\' in the editor find widget.'));\nexport const findNextMatchIcon = registerIcon('find-next-match', Codicon.arrowDown, nls.localize('findNextMatchIcon', 'Icon for \\'Find Next\\' in the editor find widget.'));\nconst NLS_FIND_INPUT_LABEL = nls.localize('label.find', \"Find\");\nconst NLS_FIND_INPUT_PLACEHOLDER = nls.localize('placeholder.find', \"Find\");\nconst NLS_PREVIOUS_MATCH_BTN_LABEL = nls.localize('label.previousMatchButton', \"Previous match\");\nconst NLS_NEXT_MATCH_BTN_LABEL = nls.localize('label.nextMatchButton', \"Next match\");\nconst NLS_TOGGLE_SELECTION_FIND_TITLE = nls.localize('label.toggleSelectionFind', \"Find in selection\");\nconst NLS_CLOSE_BTN_LABEL = nls.localize('label.closeButton', \"Close\");\nconst NLS_REPLACE_INPUT_LABEL = nls.localize('label.replace', \"Replace\");\nconst NLS_REPLACE_INPUT_PLACEHOLDER = nls.localize('placeholder.replace', \"Replace\");\nconst NLS_REPLACE_BTN_LABEL = nls.localize('label.replaceButton', \"Replace\");\nconst NLS_REPLACE_ALL_BTN_LABEL = nls.localize('label.replaceAllButton', \"Replace All\");\nconst NLS_TOGGLE_REPLACE_MODE_BTN_LABEL = nls.localize('label.toggleReplaceButton', \"Toggle Replace mode\");\nconst NLS_MATCHES_COUNT_LIMIT_TITLE = nls.localize('title.matchesCountLimit', \"Only the first {0} results are highlighted, but all find operations work on the entire text.\", MATCHES_LIMIT);\nexport const NLS_MATCHES_LOCATION = nls.localize('label.matchesLocation', \"{0} of {1}\");\nexport const NLS_NO_RESULTS = nls.localize('label.noResults', \"No results\");\nconst FIND_WIDGET_INITIAL_WIDTH = 419;\nconst PART_WIDTH = 275;\nconst FIND_INPUT_AREA_WIDTH = PART_WIDTH - 54;\nlet MAX_MATCHES_COUNT_WIDTH = 69;\n// let FIND_ALL_CONTROLS_WIDTH = 17/** Find Input margin-left */ + (MAX_MATCHES_COUNT_WIDTH + 3 + 1) /** Match Results */ + 23 /** Button */ * 4 + 2/** sash */;\nconst FIND_INPUT_AREA_HEIGHT = 33; // The height of Find Widget when Replace Input is not visible.\nconst ctrlEnterReplaceAllWarningPromptedKey = 'ctrlEnterReplaceAll.windows.donotask';\nconst ctrlKeyMod = (platform.isMacintosh ? 256 /* WinCtrl */ : 2048 /* CtrlCmd */);\nexport class FindWidgetViewZone {\n constructor(afterLineNumber) {\n this.afterLineNumber = afterLineNumber;\n this.heightInPx = FIND_INPUT_AREA_HEIGHT;\n this.suppressMouseDown = false;\n this.domNode = document.createElement('div');\n this.domNode.className = 'dock-find-viewzone';\n }\n}\nfunction stopPropagationForMultiLineUpwards(event, value, textarea) {\n const isMultiline = !!value.match(/\\n/);\n if (textarea && isMultiline && textarea.selectionStart > 0) {\n event.stopPropagation();\n return;\n }\n}\nfunction stopPropagationForMultiLineDownwards(event, value, textarea) {\n const isMultiline = !!value.match(/\\n/);\n if (textarea && isMultiline && textarea.selectionEnd < textarea.value.length) {\n event.stopPropagation();\n return;\n }\n}\nexport class FindWidget extends Widget {\n constructor(codeEditor, controller, state, contextViewProvider, keybindingService, contextKeyService, themeService, storageService, notificationService) {\n super();\n this._cachedHeight = null;\n this._revealTimeouts = [];\n this._codeEditor = codeEditor;\n this._controller = controller;\n this._state = state;\n this._contextViewProvider = contextViewProvider;\n this._keybindingService = keybindingService;\n this._contextKeyService = contextKeyService;\n this._storageService = storageService;\n this._notificationService = notificationService;\n this._ctrlEnterReplaceAllWarningPrompted = !!storageService.getBoolean(ctrlEnterReplaceAllWarningPromptedKey, 0 /* GLOBAL */);\n this._isVisible = false;\n this._isReplaceVisible = false;\n this._ignoreChangeEvent = false;\n this._updateHistoryDelayer = new Delayer(500);\n this._register(toDisposable(() => this._updateHistoryDelayer.cancel()));\n this._register(this._state.onFindReplaceStateChange((e) => this._onStateChanged(e)));\n this._buildDomNode();\n this._updateButtons();\n this._tryUpdateWidgetWidth();\n this._findInput.inputBox.layout();\n this._register(this._codeEditor.onDidChangeConfiguration((e) => {\n if (e.hasChanged(77 /* readOnly */)) {\n if (this._codeEditor.getOption(77 /* readOnly */)) {\n // Hide replace part if editor becomes read only\n this._state.change({ isReplaceRevealed: false }, false);\n }\n this._updateButtons();\n }\n if (e.hasChanged(127 /* layoutInfo */)) {\n this._tryUpdateWidgetWidth();\n }\n if (e.hasChanged(2 /* accessibilitySupport */)) {\n this.updateAccessibilitySupport();\n }\n if (e.hasChanged(33 /* find */)) {\n const addExtraSpaceOnTop = this._codeEditor.getOption(33 /* find */).addExtraSpaceOnTop;\n if (addExtraSpaceOnTop && !this._viewZone) {\n this._viewZone = new FindWidgetViewZone(0);\n this._showViewZone();\n }\n if (!addExtraSpaceOnTop && this._viewZone) {\n this._removeViewZone();\n }\n }\n }));\n this.updateAccessibilitySupport();\n this._register(this._codeEditor.onDidChangeCursorSelection(() => {\n if (this._isVisible) {\n this._updateToggleSelectionFindButton();\n }\n }));\n this._register(this._codeEditor.onDidFocusEditorWidget(() => __awaiter(this, void 0, void 0, function* () {\n if (this._isVisible) {\n let globalBufferTerm = yield this._controller.getGlobalBufferTerm();\n if (globalBufferTerm && globalBufferTerm !== this._state.searchString) {\n this._state.change({ searchString: globalBufferTerm }, false);\n this._findInput.select();\n }\n }\n })));\n this._findInputFocused = CONTEXT_FIND_INPUT_FOCUSED.bindTo(contextKeyService);\n this._findFocusTracker = this._register(dom.trackFocus(this._findInput.inputBox.inputElement));\n this._register(this._findFocusTracker.onDidFocus(() => {\n this._findInputFocused.set(true);\n this._updateSearchScope();\n }));\n this._register(this._findFocusTracker.onDidBlur(() => {\n this._findInputFocused.set(false);\n }));\n this._replaceInputFocused = CONTEXT_REPLACE_INPUT_FOCUSED.bindTo(contextKeyService);\n this._replaceFocusTracker = this._register(dom.trackFocus(this._replaceInput.inputBox.inputElement));\n this._register(this._replaceFocusTracker.onDidFocus(() => {\n this._replaceInputFocused.set(true);\n this._updateSearchScope();\n }));\n this._register(this._replaceFocusTracker.onDidBlur(() => {\n this._replaceInputFocused.set(false);\n }));\n this._codeEditor.addOverlayWidget(this);\n if (this._codeEditor.getOption(33 /* find */).addExtraSpaceOnTop) {\n this._viewZone = new FindWidgetViewZone(0); // Put it before the first line then users can scroll beyond the first line.\n }\n this._applyTheme(themeService.getColorTheme());\n this._register(themeService.onDidColorThemeChange(this._applyTheme.bind(this)));\n this._register(this._codeEditor.onDidChangeModel(() => {\n if (!this._isVisible) {\n return;\n }\n this._viewZoneId = undefined;\n }));\n this._register(this._codeEditor.onDidScrollChange((e) => {\n if (e.scrollTopChanged) {\n this._layoutViewZone();\n return;\n }\n // for other scroll changes, layout the viewzone in next tick to avoid ruining current rendering.\n setTimeout(() => {\n this._layoutViewZone();\n }, 0);\n }));\n }\n // ----- IOverlayWidget API\n getId() {\n return FindWidget.ID;\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n if (this._isVisible) {\n return {\n preference: 0 /* TOP_RIGHT_CORNER */\n };\n }\n return null;\n }\n // ----- React to state changes\n _onStateChanged(e) {\n if (e.searchString) {\n try {\n this._ignoreChangeEvent = true;\n this._findInput.setValue(this._state.searchString);\n }\n finally {\n this._ignoreChangeEvent = false;\n }\n this._updateButtons();\n }\n if (e.replaceString) {\n this._replaceInput.inputBox.value = this._state.replaceString;\n }\n if (e.isRevealed) {\n if (this._state.isRevealed) {\n this._reveal();\n }\n else {\n this._hide(true);\n }\n }\n if (e.isReplaceRevealed) {\n if (this._state.isReplaceRevealed) {\n if (!this._codeEditor.getOption(77 /* readOnly */) && !this._isReplaceVisible) {\n this._isReplaceVisible = true;\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n this._updateButtons();\n this._replaceInput.inputBox.layout();\n }\n }\n else {\n if (this._isReplaceVisible) {\n this._isReplaceVisible = false;\n this._updateButtons();\n }\n }\n }\n if ((e.isRevealed || e.isReplaceRevealed) && (this._state.isRevealed || this._state.isReplaceRevealed)) {\n if (this._tryUpdateHeight()) {\n this._showViewZone();\n }\n }\n if (e.isRegex) {\n this._findInput.setRegex(this._state.isRegex);\n }\n if (e.wholeWord) {\n this._findInput.setWholeWords(this._state.wholeWord);\n }\n if (e.matchCase) {\n this._findInput.setCaseSensitive(this._state.matchCase);\n }\n if (e.preserveCase) {\n this._replaceInput.setPreserveCase(this._state.preserveCase);\n }\n if (e.searchScope) {\n if (this._state.searchScope) {\n this._toggleSelectionFind.checked = true;\n }\n else {\n this._toggleSelectionFind.checked = false;\n }\n this._updateToggleSelectionFindButton();\n }\n if (e.searchString || e.matchesCount || e.matchesPosition) {\n let showRedOutline = (this._state.searchString.length > 0 && this._state.matchesCount === 0);\n this._domNode.classList.toggle('no-results', showRedOutline);\n this._updateMatchesCount();\n this._updateButtons();\n }\n if (e.searchString || e.currentMatch) {\n this._layoutViewZone();\n }\n if (e.updateHistory) {\n this._delayedUpdateHistory();\n }\n if (e.loop) {\n this._updateButtons();\n }\n }\n _delayedUpdateHistory() {\n this._updateHistoryDelayer.trigger(this._updateHistory.bind(this)).then(undefined, onUnexpectedError);\n }\n _updateHistory() {\n if (this._state.searchString) {\n this._findInput.inputBox.addToHistory();\n }\n if (this._state.replaceString) {\n this._replaceInput.inputBox.addToHistory();\n }\n }\n _updateMatchesCount() {\n this._matchesCount.style.minWidth = MAX_MATCHES_COUNT_WIDTH + 'px';\n if (this._state.matchesCount >= MATCHES_LIMIT) {\n this._matchesCount.title = NLS_MATCHES_COUNT_LIMIT_TITLE;\n }\n else {\n this._matchesCount.title = '';\n }\n // remove previous content\n if (this._matchesCount.firstChild) {\n this._matchesCount.removeChild(this._matchesCount.firstChild);\n }\n let label;\n if (this._state.matchesCount > 0) {\n let matchesCount = String(this._state.matchesCount);\n if (this._state.matchesCount >= MATCHES_LIMIT) {\n matchesCount += '+';\n }\n let matchesPosition = String(this._state.matchesPosition);\n if (matchesPosition === '0') {\n matchesPosition = '?';\n }\n label = strings.format(NLS_MATCHES_LOCATION, matchesPosition, matchesCount);\n }\n else {\n label = NLS_NO_RESULTS;\n }\n this._matchesCount.appendChild(document.createTextNode(label));\n alertFn(this._getAriaLabel(label, this._state.currentMatch, this._state.searchString));\n MAX_MATCHES_COUNT_WIDTH = Math.max(MAX_MATCHES_COUNT_WIDTH, this._matchesCount.clientWidth);\n }\n // ----- actions\n _getAriaLabel(label, currentMatch, searchString) {\n if (label === NLS_NO_RESULTS) {\n return searchString === ''\n ? nls.localize('ariaSearchNoResultEmpty', \"{0} found\", label)\n : nls.localize('ariaSearchNoResult', \"{0} found for '{1}'\", label, searchString);\n }\n if (currentMatch) {\n const ariaLabel = nls.localize('ariaSearchNoResultWithLineNum', \"{0} found for '{1}', at {2}\", label, searchString, currentMatch.startLineNumber + ':' + currentMatch.startColumn);\n const model = this._codeEditor.getModel();\n if (model && (currentMatch.startLineNumber <= model.getLineCount()) && (currentMatch.startLineNumber >= 1)) {\n const lineContent = model.getLineContent(currentMatch.startLineNumber);\n return `${lineContent}, ${ariaLabel}`;\n }\n return ariaLabel;\n }\n return nls.localize('ariaSearchNoResultWithLineNumNoCurrentMatch', \"{0} found for '{1}'\", label, searchString);\n }\n /**\n * If 'selection find' is ON we should not disable the button (its function is to cancel 'selection find').\n * If 'selection find' is OFF we enable the button only if there is a selection.\n */\n _updateToggleSelectionFindButton() {\n let selection = this._codeEditor.getSelection();\n let isSelection = selection ? (selection.startLineNumber !== selection.endLineNumber || selection.startColumn !== selection.endColumn) : false;\n let isChecked = this._toggleSelectionFind.checked;\n if (this._isVisible && (isChecked || isSelection)) {\n this._toggleSelectionFind.enable();\n }\n else {\n this._toggleSelectionFind.disable();\n }\n }\n _updateButtons() {\n this._findInput.setEnabled(this._isVisible);\n this._replaceInput.setEnabled(this._isVisible && this._isReplaceVisible);\n this._updateToggleSelectionFindButton();\n this._closeBtn.setEnabled(this._isVisible);\n let findInputIsNonEmpty = (this._state.searchString.length > 0);\n let matchesCount = this._state.matchesCount ? true : false;\n this._prevBtn.setEnabled(this._isVisible && findInputIsNonEmpty && matchesCount && this._state.canNavigateBack());\n this._nextBtn.setEnabled(this._isVisible && findInputIsNonEmpty && matchesCount && this._state.canNavigateForward());\n this._replaceBtn.setEnabled(this._isVisible && this._isReplaceVisible && findInputIsNonEmpty);\n this._replaceAllBtn.setEnabled(this._isVisible && this._isReplaceVisible && findInputIsNonEmpty);\n this._domNode.classList.toggle('replaceToggled', this._isReplaceVisible);\n this._toggleReplaceBtn.setExpanded(this._isReplaceVisible);\n let canReplace = !this._codeEditor.getOption(77 /* readOnly */);\n this._toggleReplaceBtn.setEnabled(this._isVisible && canReplace);\n }\n _reveal() {\n this._revealTimeouts.forEach(e => {\n clearTimeout(e);\n });\n this._revealTimeouts = [];\n if (!this._isVisible) {\n this._isVisible = true;\n const selection = this._codeEditor.getSelection();\n switch (this._codeEditor.getOption(33 /* find */).autoFindInSelection) {\n case 'always':\n this._toggleSelectionFind.checked = true;\n break;\n case 'never':\n this._toggleSelectionFind.checked = false;\n break;\n case 'multiline':\n const isSelectionMultipleLine = !!selection && selection.startLineNumber !== selection.endLineNumber;\n this._toggleSelectionFind.checked = isSelectionMultipleLine;\n break;\n default:\n break;\n }\n this._tryUpdateWidgetWidth();\n this._updateButtons();\n this._revealTimeouts.push(setTimeout(() => {\n this._domNode.classList.add('visible');\n this._domNode.setAttribute('aria-hidden', 'false');\n }, 0));\n // validate query again as it's being dismissed when we hide the find widget.\n this._revealTimeouts.push(setTimeout(() => {\n this._findInput.validate();\n }, 200));\n this._codeEditor.layoutOverlayWidget(this);\n let adjustEditorScrollTop = true;\n if (this._codeEditor.getOption(33 /* find */).seedSearchStringFromSelection && selection) {\n const domNode = this._codeEditor.getDomNode();\n if (domNode) {\n const editorCoords = dom.getDomNodePagePosition(domNode);\n const startCoords = this._codeEditor.getScrolledVisiblePosition(selection.getStartPosition());\n const startLeft = editorCoords.left + (startCoords ? startCoords.left : 0);\n const startTop = startCoords ? startCoords.top : 0;\n if (this._viewZone && startTop < this._viewZone.heightInPx) {\n if (selection.endLineNumber > selection.startLineNumber) {\n adjustEditorScrollTop = false;\n }\n const leftOfFindWidget = dom.getTopLeftOffset(this._domNode).left;\n if (startLeft > leftOfFindWidget) {\n adjustEditorScrollTop = false;\n }\n const endCoords = this._codeEditor.getScrolledVisiblePosition(selection.getEndPosition());\n const endLeft = editorCoords.left + (endCoords ? endCoords.left : 0);\n if (endLeft > leftOfFindWidget) {\n adjustEditorScrollTop = false;\n }\n }\n }\n }\n this._showViewZone(adjustEditorScrollTop);\n }\n }\n _hide(focusTheEditor) {\n this._revealTimeouts.forEach(e => {\n clearTimeout(e);\n });\n this._revealTimeouts = [];\n if (this._isVisible) {\n this._isVisible = false;\n this._updateButtons();\n this._domNode.classList.remove('visible');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._findInput.clearMessage();\n if (focusTheEditor) {\n this._codeEditor.focus();\n }\n this._codeEditor.layoutOverlayWidget(this);\n this._removeViewZone();\n }\n }\n _layoutViewZone(targetScrollTop) {\n const addExtraSpaceOnTop = this._codeEditor.getOption(33 /* find */).addExtraSpaceOnTop;\n if (!addExtraSpaceOnTop) {\n this._removeViewZone();\n return;\n }\n if (!this._isVisible) {\n return;\n }\n const viewZone = this._viewZone;\n if (this._viewZoneId !== undefined || !viewZone) {\n return;\n }\n this._codeEditor.changeViewZones((accessor) => {\n viewZone.heightInPx = this._getHeight();\n this._viewZoneId = accessor.addZone(viewZone);\n // scroll top adjust to make sure the editor doesn't scroll when adding viewzone at the beginning.\n this._codeEditor.setScrollTop(targetScrollTop || this._codeEditor.getScrollTop() + viewZone.heightInPx);\n });\n }\n _showViewZone(adjustScroll = true) {\n if (!this._isVisible) {\n return;\n }\n const addExtraSpaceOnTop = this._codeEditor.getOption(33 /* find */).addExtraSpaceOnTop;\n if (!addExtraSpaceOnTop) {\n return;\n }\n if (this._viewZone === undefined) {\n this._viewZone = new FindWidgetViewZone(0);\n }\n const viewZone = this._viewZone;\n this._codeEditor.changeViewZones((accessor) => {\n if (this._viewZoneId !== undefined) {\n // the view zone already exists, we need to update the height\n const newHeight = this._getHeight();\n if (newHeight === viewZone.heightInPx) {\n return;\n }\n let scrollAdjustment = newHeight - viewZone.heightInPx;\n viewZone.heightInPx = newHeight;\n accessor.layoutZone(this._viewZoneId);\n if (adjustScroll) {\n this._codeEditor.setScrollTop(this._codeEditor.getScrollTop() + scrollAdjustment);\n }\n return;\n }\n else {\n let scrollAdjustment = this._getHeight();\n // if the editor has top padding, factor that into the zone height\n scrollAdjustment -= this._codeEditor.getOption(71 /* padding */).top;\n if (scrollAdjustment <= 0) {\n return;\n }\n viewZone.heightInPx = scrollAdjustment;\n this._viewZoneId = accessor.addZone(viewZone);\n if (adjustScroll) {\n this._codeEditor.setScrollTop(this._codeEditor.getScrollTop() + scrollAdjustment);\n }\n }\n });\n }\n _removeViewZone() {\n this._codeEditor.changeViewZones((accessor) => {\n if (this._viewZoneId !== undefined) {\n accessor.removeZone(this._viewZoneId);\n this._viewZoneId = undefined;\n if (this._viewZone) {\n this._codeEditor.setScrollTop(this._codeEditor.getScrollTop() - this._viewZone.heightInPx);\n this._viewZone = undefined;\n }\n }\n });\n }\n _applyTheme(theme) {\n let inputStyles = {\n inputActiveOptionBorder: theme.getColor(inputActiveOptionBorder),\n inputActiveOptionBackground: theme.getColor(inputActiveOptionBackground),\n inputActiveOptionForeground: theme.getColor(inputActiveOptionForeground),\n inputBackground: theme.getColor(inputBackground),\n inputForeground: theme.getColor(inputForeground),\n inputBorder: theme.getColor(inputBorder),\n inputValidationInfoBackground: theme.getColor(inputValidationInfoBackground),\n inputValidationInfoForeground: theme.getColor(inputValidationInfoForeground),\n inputValidationInfoBorder: theme.getColor(inputValidationInfoBorder),\n inputValidationWarningBackground: theme.getColor(inputValidationWarningBackground),\n inputValidationWarningForeground: theme.getColor(inputValidationWarningForeground),\n inputValidationWarningBorder: theme.getColor(inputValidationWarningBorder),\n inputValidationErrorBackground: theme.getColor(inputValidationErrorBackground),\n inputValidationErrorForeground: theme.getColor(inputValidationErrorForeground),\n inputValidationErrorBorder: theme.getColor(inputValidationErrorBorder),\n };\n this._findInput.style(inputStyles);\n this._replaceInput.style(inputStyles);\n this._toggleSelectionFind.style(inputStyles);\n }\n _tryUpdateWidgetWidth() {\n if (!this._isVisible) {\n return;\n }\n if (!dom.isInDOM(this._domNode)) {\n // the widget is not in the DOM\n return;\n }\n const layoutInfo = this._codeEditor.getLayoutInfo();\n const editorContentWidth = layoutInfo.contentWidth;\n if (editorContentWidth <= 0) {\n // for example, diff view original editor\n this._domNode.classList.add('hiddenEditor');\n return;\n }\n else if (this._domNode.classList.contains('hiddenEditor')) {\n this._domNode.classList.remove('hiddenEditor');\n }\n const editorWidth = layoutInfo.width;\n const minimapWidth = layoutInfo.minimap.minimapWidth;\n let collapsedFindWidget = false;\n let reducedFindWidget = false;\n let narrowFindWidget = false;\n if (this._resized) {\n let widgetWidth = dom.getTotalWidth(this._domNode);\n if (widgetWidth > FIND_WIDGET_INITIAL_WIDTH) {\n // as the widget is resized by users, we may need to change the max width of the widget as the editor width changes.\n this._domNode.style.maxWidth = `${editorWidth - 28 - minimapWidth - 15}px`;\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n return;\n }\n }\n if (FIND_WIDGET_INITIAL_WIDTH + 28 + minimapWidth >= editorWidth) {\n reducedFindWidget = true;\n }\n if (FIND_WIDGET_INITIAL_WIDTH + 28 + minimapWidth - MAX_MATCHES_COUNT_WIDTH >= editorWidth) {\n narrowFindWidget = true;\n }\n if (FIND_WIDGET_INITIAL_WIDTH + 28 + minimapWidth - MAX_MATCHES_COUNT_WIDTH >= editorWidth + 50) {\n collapsedFindWidget = true;\n }\n this._domNode.classList.toggle('collapsed-find-widget', collapsedFindWidget);\n this._domNode.classList.toggle('narrow-find-widget', narrowFindWidget);\n this._domNode.classList.toggle('reduced-find-widget', reducedFindWidget);\n if (!narrowFindWidget && !collapsedFindWidget) {\n // the minimal left offset of findwidget is 15px.\n this._domNode.style.maxWidth = `${editorWidth - 28 - minimapWidth - 15}px`;\n }\n if (this._resized) {\n this._findInput.inputBox.layout();\n let findInputWidth = this._findInput.inputBox.element.clientWidth;\n if (findInputWidth > 0) {\n this._replaceInput.width = findInputWidth;\n }\n }\n else if (this._isReplaceVisible) {\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n }\n }\n _getHeight() {\n let totalheight = 0;\n // find input margin top\n totalheight += 4;\n // find input height\n totalheight += this._findInput.inputBox.height + 2 /** input box border */;\n if (this._isReplaceVisible) {\n // replace input margin\n totalheight += 4;\n totalheight += this._replaceInput.inputBox.height + 2 /** input box border */;\n }\n // margin bottom\n totalheight += 4;\n return totalheight;\n }\n _tryUpdateHeight() {\n const totalHeight = this._getHeight();\n if (this._cachedHeight !== null && this._cachedHeight === totalHeight) {\n return false;\n }\n this._cachedHeight = totalHeight;\n this._domNode.style.height = `${totalHeight}px`;\n return true;\n }\n // ----- Public\n focusFindInput() {\n this._findInput.select();\n // Edge browser requires focus() in addition to select()\n this._findInput.focus();\n }\n focusReplaceInput() {\n this._replaceInput.select();\n // Edge browser requires focus() in addition to select()\n this._replaceInput.focus();\n }\n highlightFindOptions() {\n this._findInput.highlightFindOptions();\n }\n _updateSearchScope() {\n if (!this._codeEditor.hasModel()) {\n return;\n }\n if (this._toggleSelectionFind.checked) {\n let selections = this._codeEditor.getSelections();\n selections.map(selection => {\n if (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) {\n selection = selection.setEndPosition(selection.endLineNumber - 1, this._codeEditor.getModel().getLineMaxColumn(selection.endLineNumber - 1));\n }\n const currentMatch = this._state.currentMatch;\n if (selection.startLineNumber !== selection.endLineNumber) {\n if (!Range.equalsRange(selection, currentMatch)) {\n return selection;\n }\n }\n return null;\n }).filter(element => !!element);\n if (selections.length) {\n this._state.change({ searchScope: selections }, true);\n }\n }\n }\n _onFindInputMouseDown(e) {\n // on linux, middle key does pasting.\n if (e.middleButton) {\n e.stopPropagation();\n }\n }\n _onFindInputKeyDown(e) {\n if (e.equals(ctrlKeyMod | 3 /* Enter */)) {\n this._findInput.inputBox.insertAtCursor('\\n');\n e.preventDefault();\n return;\n }\n if (e.equals(2 /* Tab */)) {\n if (this._isReplaceVisible) {\n this._replaceInput.focus();\n }\n else {\n this._findInput.focusOnCaseSensitive();\n }\n e.preventDefault();\n return;\n }\n if (e.equals(2048 /* CtrlCmd */ | 18 /* DownArrow */)) {\n this._codeEditor.focus();\n e.preventDefault();\n return;\n }\n if (e.equals(16 /* UpArrow */)) {\n return stopPropagationForMultiLineUpwards(e, this._findInput.getValue(), this._findInput.domNode.querySelector('textarea'));\n }\n if (e.equals(18 /* DownArrow */)) {\n return stopPropagationForMultiLineDownwards(e, this._findInput.getValue(), this._findInput.domNode.querySelector('textarea'));\n }\n }\n _onReplaceInputKeyDown(e) {\n if (e.equals(ctrlKeyMod | 3 /* Enter */)) {\n if (platform.isWindows && platform.isNative && !this._ctrlEnterReplaceAllWarningPrompted) {\n // this is the first time when users press Ctrl + Enter to replace all\n this._notificationService.info(nls.localize('ctrlEnter.keybindingChanged', 'Ctrl+Enter now inserts line break instead of replacing all. You can modify the keybinding for editor.action.replaceAll to override this behavior.'));\n this._ctrlEnterReplaceAllWarningPrompted = true;\n this._storageService.store(ctrlEnterReplaceAllWarningPromptedKey, true, 0 /* GLOBAL */, 0 /* USER */);\n }\n this._replaceInput.inputBox.insertAtCursor('\\n');\n e.preventDefault();\n return;\n }\n if (e.equals(2 /* Tab */)) {\n this._findInput.focusOnCaseSensitive();\n e.preventDefault();\n return;\n }\n if (e.equals(1024 /* Shift */ | 2 /* Tab */)) {\n this._findInput.focus();\n e.preventDefault();\n return;\n }\n if (e.equals(2048 /* CtrlCmd */ | 18 /* DownArrow */)) {\n this._codeEditor.focus();\n e.preventDefault();\n return;\n }\n if (e.equals(16 /* UpArrow */)) {\n return stopPropagationForMultiLineUpwards(e, this._replaceInput.inputBox.value, this._replaceInput.inputBox.element.querySelector('textarea'));\n }\n if (e.equals(18 /* DownArrow */)) {\n return stopPropagationForMultiLineDownwards(e, this._replaceInput.inputBox.value, this._replaceInput.inputBox.element.querySelector('textarea'));\n }\n }\n // ----- sash\n getVerticalSashLeft(_sash) {\n return 0;\n }\n // ----- initialization\n _keybindingLabelFor(actionId) {\n let kb = this._keybindingService.lookupKeybinding(actionId);\n if (!kb) {\n return '';\n }\n return ` (${kb.getLabel()})`;\n }\n _buildDomNode() {\n const flexibleHeight = true;\n const flexibleWidth = true;\n // Find input\n this._findInput = this._register(new ContextScopedFindInput(null, this._contextViewProvider, {\n width: FIND_INPUT_AREA_WIDTH,\n label: NLS_FIND_INPUT_LABEL,\n placeholder: NLS_FIND_INPUT_PLACEHOLDER,\n appendCaseSensitiveLabel: this._keybindingLabelFor(FIND_IDS.ToggleCaseSensitiveCommand),\n appendWholeWordsLabel: this._keybindingLabelFor(FIND_IDS.ToggleWholeWordCommand),\n appendRegexLabel: this._keybindingLabelFor(FIND_IDS.ToggleRegexCommand),\n validation: (value) => {\n if (value.length === 0 || !this._findInput.getRegex()) {\n return null;\n }\n try {\n // use `g` and `u` which are also used by the TextModel search\n new RegExp(value, 'gu');\n return null;\n }\n catch (e) {\n return { content: e.message };\n }\n },\n flexibleHeight,\n flexibleWidth,\n flexibleMaxHeight: 118\n }, this._contextKeyService, true));\n this._findInput.setRegex(!!this._state.isRegex);\n this._findInput.setCaseSensitive(!!this._state.matchCase);\n this._findInput.setWholeWords(!!this._state.wholeWord);\n this._register(this._findInput.onKeyDown((e) => this._onFindInputKeyDown(e)));\n this._register(this._findInput.inputBox.onDidChange(() => {\n if (this._ignoreChangeEvent) {\n return;\n }\n this._state.change({ searchString: this._findInput.getValue() }, true);\n }));\n this._register(this._findInput.onDidOptionChange(() => {\n this._state.change({\n isRegex: this._findInput.getRegex(),\n wholeWord: this._findInput.getWholeWords(),\n matchCase: this._findInput.getCaseSensitive()\n }, true);\n }));\n this._register(this._findInput.onCaseSensitiveKeyDown((e) => {\n if (e.equals(1024 /* Shift */ | 2 /* Tab */)) {\n if (this._isReplaceVisible) {\n this._replaceInput.focus();\n e.preventDefault();\n }\n }\n }));\n this._register(this._findInput.onRegexKeyDown((e) => {\n if (e.equals(2 /* Tab */)) {\n if (this._isReplaceVisible) {\n this._replaceInput.focusOnPreserve();\n e.preventDefault();\n }\n }\n }));\n this._register(this._findInput.inputBox.onDidHeightChange((e) => {\n if (this._tryUpdateHeight()) {\n this._showViewZone();\n }\n }));\n if (platform.isLinux) {\n this._register(this._findInput.onMouseDown((e) => this._onFindInputMouseDown(e)));\n }\n this._matchesCount = document.createElement('div');\n this._matchesCount.className = 'matchesCount';\n this._updateMatchesCount();\n // Previous button\n this._prevBtn = this._register(new SimpleButton({\n label: NLS_PREVIOUS_MATCH_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.PreviousMatchFindAction),\n icon: findPreviousMatchIcon,\n onTrigger: () => {\n this._codeEditor.getAction(FIND_IDS.PreviousMatchFindAction).run().then(undefined, onUnexpectedError);\n }\n }));\n // Next button\n this._nextBtn = this._register(new SimpleButton({\n label: NLS_NEXT_MATCH_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.NextMatchFindAction),\n icon: findNextMatchIcon,\n onTrigger: () => {\n this._codeEditor.getAction(FIND_IDS.NextMatchFindAction).run().then(undefined, onUnexpectedError);\n }\n }));\n let findPart = document.createElement('div');\n findPart.className = 'find-part';\n findPart.appendChild(this._findInput.domNode);\n const actionsContainer = document.createElement('div');\n actionsContainer.className = 'find-actions';\n findPart.appendChild(actionsContainer);\n actionsContainer.appendChild(this._matchesCount);\n actionsContainer.appendChild(this._prevBtn.domNode);\n actionsContainer.appendChild(this._nextBtn.domNode);\n // Toggle selection button\n this._toggleSelectionFind = this._register(new Checkbox({\n icon: findSelectionIcon,\n title: NLS_TOGGLE_SELECTION_FIND_TITLE + this._keybindingLabelFor(FIND_IDS.ToggleSearchScopeCommand),\n isChecked: false\n }));\n this._register(this._toggleSelectionFind.onChange(() => {\n if (this._toggleSelectionFind.checked) {\n if (this._codeEditor.hasModel()) {\n let selections = this._codeEditor.getSelections();\n selections.map(selection => {\n if (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) {\n selection = selection.setEndPosition(selection.endLineNumber - 1, this._codeEditor.getModel().getLineMaxColumn(selection.endLineNumber - 1));\n }\n if (!selection.isEmpty()) {\n return selection;\n }\n return null;\n }).filter(element => !!element);\n if (selections.length) {\n this._state.change({ searchScope: selections }, true);\n }\n }\n }\n else {\n this._state.change({ searchScope: null }, true);\n }\n }));\n actionsContainer.appendChild(this._toggleSelectionFind.domNode);\n // Close button\n this._closeBtn = this._register(new SimpleButton({\n label: NLS_CLOSE_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.CloseFindWidgetCommand),\n icon: widgetClose,\n onTrigger: () => {\n this._state.change({ isRevealed: false, searchScope: null }, false);\n },\n onKeyDown: (e) => {\n if (e.equals(2 /* Tab */)) {\n if (this._isReplaceVisible) {\n if (this._replaceBtn.isEnabled()) {\n this._replaceBtn.focus();\n }\n else {\n this._codeEditor.focus();\n }\n e.preventDefault();\n }\n }\n }\n }));\n actionsContainer.appendChild(this._closeBtn.domNode);\n // Replace input\n this._replaceInput = this._register(new ContextScopedReplaceInput(null, undefined, {\n label: NLS_REPLACE_INPUT_LABEL,\n placeholder: NLS_REPLACE_INPUT_PLACEHOLDER,\n appendPreserveCaseLabel: this._keybindingLabelFor(FIND_IDS.TogglePreserveCaseCommand),\n history: [],\n flexibleHeight,\n flexibleWidth,\n flexibleMaxHeight: 118\n }, this._contextKeyService, true));\n this._replaceInput.setPreserveCase(!!this._state.preserveCase);\n this._register(this._replaceInput.onKeyDown((e) => this._onReplaceInputKeyDown(e)));\n this._register(this._replaceInput.inputBox.onDidChange(() => {\n this._state.change({ replaceString: this._replaceInput.inputBox.value }, false);\n }));\n this._register(this._replaceInput.inputBox.onDidHeightChange((e) => {\n if (this._isReplaceVisible && this._tryUpdateHeight()) {\n this._showViewZone();\n }\n }));\n this._register(this._replaceInput.onDidOptionChange(() => {\n this._state.change({\n preserveCase: this._replaceInput.getPreserveCase()\n }, true);\n }));\n this._register(this._replaceInput.onPreserveCaseKeyDown((e) => {\n if (e.equals(2 /* Tab */)) {\n if (this._prevBtn.isEnabled()) {\n this._prevBtn.focus();\n }\n else if (this._nextBtn.isEnabled()) {\n this._nextBtn.focus();\n }\n else if (this._toggleSelectionFind.enabled) {\n this._toggleSelectionFind.focus();\n }\n else if (this._closeBtn.isEnabled()) {\n this._closeBtn.focus();\n }\n e.preventDefault();\n }\n }));\n // Replace one button\n this._replaceBtn = this._register(new SimpleButton({\n label: NLS_REPLACE_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.ReplaceOneAction),\n icon: findReplaceIcon,\n onTrigger: () => {\n this._controller.replace();\n },\n onKeyDown: (e) => {\n if (e.equals(1024 /* Shift */ | 2 /* Tab */)) {\n this._closeBtn.focus();\n e.preventDefault();\n }\n }\n }));\n // Replace all button\n this._replaceAllBtn = this._register(new SimpleButton({\n label: NLS_REPLACE_ALL_BTN_LABEL + this._keybindingLabelFor(FIND_IDS.ReplaceAllAction),\n icon: findReplaceAllIcon,\n onTrigger: () => {\n this._controller.replaceAll();\n }\n }));\n let replacePart = document.createElement('div');\n replacePart.className = 'replace-part';\n replacePart.appendChild(this._replaceInput.domNode);\n const replaceActionsContainer = document.createElement('div');\n replaceActionsContainer.className = 'replace-actions';\n replacePart.appendChild(replaceActionsContainer);\n replaceActionsContainer.appendChild(this._replaceBtn.domNode);\n replaceActionsContainer.appendChild(this._replaceAllBtn.domNode);\n // Toggle replace button\n this._toggleReplaceBtn = this._register(new SimpleButton({\n label: NLS_TOGGLE_REPLACE_MODE_BTN_LABEL,\n className: 'codicon toggle left',\n onTrigger: () => {\n this._state.change({ isReplaceRevealed: !this._isReplaceVisible }, false);\n if (this._isReplaceVisible) {\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n this._replaceInput.inputBox.layout();\n }\n this._showViewZone();\n }\n }));\n this._toggleReplaceBtn.setExpanded(this._isReplaceVisible);\n // Widget\n this._domNode = document.createElement('div');\n this._domNode.className = 'editor-widget find-widget';\n this._domNode.setAttribute('aria-hidden', 'true');\n // We need to set this explicitly, otherwise on IE11, the width inheritence of flex doesn't work.\n this._domNode.style.width = `${FIND_WIDGET_INITIAL_WIDTH}px`;\n this._domNode.appendChild(this._toggleReplaceBtn.domNode);\n this._domNode.appendChild(findPart);\n this._domNode.appendChild(replacePart);\n this._resizeSash = new Sash(this._domNode, this, { orientation: 0 /* VERTICAL */, size: 2 });\n this._resized = false;\n let originalWidth = FIND_WIDGET_INITIAL_WIDTH;\n this._register(this._resizeSash.onDidStart(() => {\n originalWidth = dom.getTotalWidth(this._domNode);\n }));\n this._register(this._resizeSash.onDidChange((evt) => {\n this._resized = true;\n let width = originalWidth + evt.startX - evt.currentX;\n if (width < FIND_WIDGET_INITIAL_WIDTH) {\n // narrow down the find widget should be handled by CSS.\n return;\n }\n const maxWidth = parseFloat(dom.getComputedStyle(this._domNode).maxWidth) || 0;\n if (width > maxWidth) {\n return;\n }\n this._domNode.style.width = `${width}px`;\n if (this._isReplaceVisible) {\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n }\n this._findInput.inputBox.layout();\n this._tryUpdateHeight();\n }));\n this._register(this._resizeSash.onDidReset(() => {\n // users double click on the sash\n const currentWidth = dom.getTotalWidth(this._domNode);\n if (currentWidth < FIND_WIDGET_INITIAL_WIDTH) {\n // The editor is narrow and the width of the find widget is controlled fully by CSS.\n return;\n }\n let width = FIND_WIDGET_INITIAL_WIDTH;\n if (!this._resized || currentWidth === FIND_WIDGET_INITIAL_WIDTH) {\n // 1. never resized before, double click should maximizes it\n // 2. users resized it already but its width is the same as default\n const layoutInfo = this._codeEditor.getLayoutInfo();\n width = layoutInfo.width - 28 - layoutInfo.minimap.minimapWidth - 15;\n this._resized = true;\n }\n else {\n /**\n * no op, the find widget should be shrinked to its default size.\n */\n }\n this._domNode.style.width = `${width}px`;\n if (this._isReplaceVisible) {\n this._replaceInput.width = dom.getTotalWidth(this._findInput.domNode);\n }\n this._findInput.inputBox.layout();\n }));\n }\n updateAccessibilitySupport() {\n const value = this._codeEditor.getOption(2 /* accessibilitySupport */);\n this._findInput.setFocusInputOnOptionClick(value !== 2 /* Enabled */);\n }\n}\nFindWidget.ID = 'editor.contrib.findWidget';\nexport class SimpleButton extends Widget {\n constructor(opts) {\n super();\n this._opts = opts;\n let className = 'button';\n if (this._opts.className) {\n className = className + ' ' + this._opts.className;\n }\n if (this._opts.icon) {\n className = className + ' ' + ThemeIcon.asClassName(this._opts.icon);\n }\n this._domNode = document.createElement('div');\n this._domNode.title = this._opts.label;\n this._domNode.tabIndex = 0;\n this._domNode.className = className;\n this._domNode.setAttribute('role', 'button');\n this._domNode.setAttribute('aria-label', this._opts.label);\n this.onclick(this._domNode, (e) => {\n this._opts.onTrigger();\n e.preventDefault();\n });\n this.onkeydown(this._domNode, (e) => {\n if (e.equals(10 /* Space */) || e.equals(3 /* Enter */)) {\n this._opts.onTrigger();\n e.preventDefault();\n return;\n }\n if (this._opts.onKeyDown) {\n this._opts.onKeyDown(e);\n }\n });\n }\n get domNode() {\n return this._domNode;\n }\n isEnabled() {\n return (this._domNode.tabIndex >= 0);\n }\n focus() {\n this._domNode.focus();\n }\n setEnabled(enabled) {\n this._domNode.classList.toggle('disabled', !enabled);\n this._domNode.setAttribute('aria-disabled', String(!enabled));\n this._domNode.tabIndex = enabled ? 0 : -1;\n }\n setExpanded(expanded) {\n this._domNode.setAttribute('aria-expanded', String(!!expanded));\n if (expanded) {\n this._domNode.classList.remove(...ThemeIcon.asClassNameArray(findCollapsedIcon));\n this._domNode.classList.add(...ThemeIcon.asClassNameArray(findExpandedIcon));\n }\n else {\n this._domNode.classList.remove(...ThemeIcon.asClassNameArray(findExpandedIcon));\n this._domNode.classList.add(...ThemeIcon.asClassNameArray(findCollapsedIcon));\n }\n }\n}\n// theming\nregisterThemingParticipant((theme, collector) => {\n const addBackgroundColorRule = (selector, color) => {\n if (color) {\n collector.addRule(`.monaco-editor ${selector} { background-color: ${color}; }`);\n }\n };\n addBackgroundColorRule('.findMatch', theme.getColor(editorFindMatchHighlight));\n addBackgroundColorRule('.currentFindMatch', theme.getColor(editorFindMatch));\n addBackgroundColorRule('.findScope', theme.getColor(editorFindRangeHighlight));\n const widgetBackground = theme.getColor(editorWidgetBackground);\n addBackgroundColorRule('.find-widget', widgetBackground);\n const widgetShadowColor = theme.getColor(widgetShadow);\n if (widgetShadowColor) {\n collector.addRule(`.monaco-editor .find-widget { box-shadow: 0 0 8px 2px ${widgetShadowColor}; }`);\n }\n const findMatchHighlightBorder = theme.getColor(editorFindMatchHighlightBorder);\n if (findMatchHighlightBorder) {\n collector.addRule(`.monaco-editor .findMatch { border: 1px ${theme.type === 'hc' ? 'dotted' : 'solid'} ${findMatchHighlightBorder}; box-sizing: border-box; }`);\n }\n const findMatchBorder = theme.getColor(editorFindMatchBorder);\n if (findMatchBorder) {\n collector.addRule(`.monaco-editor .currentFindMatch { border: 2px solid ${findMatchBorder}; padding: 1px; box-sizing: border-box; }`);\n }\n const findRangeHighlightBorder = theme.getColor(editorFindRangeHighlightBorder);\n if (findRangeHighlightBorder) {\n collector.addRule(`.monaco-editor .findScope { border: 1px ${theme.type === 'hc' ? 'dashed' : 'solid'} ${findRangeHighlightBorder}; }`);\n }\n const hcBorder = theme.getColor(contrastBorder);\n if (hcBorder) {\n collector.addRule(`.monaco-editor .find-widget { border: 1px solid ${hcBorder}; }`);\n }\n const foreground = theme.getColor(editorWidgetForeground);\n if (foreground) {\n collector.addRule(`.monaco-editor .find-widget { color: ${foreground}; }`);\n }\n const error = theme.getColor(errorForeground);\n if (error) {\n collector.addRule(`.monaco-editor .find-widget.no-results .matchesCount { color: ${error}; }`);\n }\n const resizeBorderBackground = theme.getColor(editorWidgetResizeBorder);\n if (resizeBorderBackground) {\n collector.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${resizeBorderBackground}; }`);\n }\n else {\n const border = theme.getColor(editorWidgetBorder);\n if (border) {\n collector.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${border}; }`);\n }\n }\n // This rule is used to override the outline color for synthetic-focus find input.\n const focusOutline = theme.getColor(focusBorder);\n if (focusOutline) {\n collector.addRule(`.monaco-editor .find-widget .monaco-inputbox.synthetic-focus { outline-color: ${focusOutline}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../../nls.js';\nimport { Delayer } from '../../../base/common/async.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution, MultiEditorAction, registerMultiEditorAction } from '../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { CONTEXT_FIND_INPUT_FOCUSED, CONTEXT_FIND_WIDGET_VISIBLE, FIND_IDS, FindModelBoundToEditorModel, ToggleCaseSensitiveKeybinding, TogglePreserveCaseKeybinding, ToggleRegexKeybinding, ToggleSearchScopeKeybinding, ToggleWholeWordKeybinding, CONTEXT_REPLACE_INPUT_FOCUSED } from './findModel.js';\nimport { FindOptionsWidget } from './findOptionsWidget.js';\nimport { FindReplaceState } from './findState.js';\nimport { FindWidget } from './findWidget.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js';\nimport { IContextKeyService, ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\nimport { IContextViewService } from '../../../platform/contextview/browser/contextView.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { IStorageService } from '../../../platform/storage/common/storage.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nconst SEARCH_STRING_MAX_LENGTH = 524288;\nexport function getSelectionSearchString(editor, seedSearchStringFromSelection = 'single') {\n if (!editor.hasModel()) {\n return null;\n }\n const selection = editor.getSelection();\n // if selection spans multiple lines, default search string to empty\n if ((seedSearchStringFromSelection === 'single' && selection.startLineNumber === selection.endLineNumber)\n || seedSearchStringFromSelection === 'multiple') {\n if (selection.isEmpty()) {\n const wordAtPosition = editor.getConfiguredWordAtPosition(selection.getStartPosition());\n if (wordAtPosition) {\n return wordAtPosition.word;\n }\n }\n else {\n if (editor.getModel().getValueLengthInRange(selection) < SEARCH_STRING_MAX_LENGTH) {\n return editor.getModel().getValueInRange(selection);\n }\n }\n }\n return null;\n}\nlet CommonFindController = class CommonFindController extends Disposable {\n constructor(editor, contextKeyService, storageService, clipboardService) {\n super();\n this._editor = editor;\n this._findWidgetVisible = CONTEXT_FIND_WIDGET_VISIBLE.bindTo(contextKeyService);\n this._contextKeyService = contextKeyService;\n this._storageService = storageService;\n this._clipboardService = clipboardService;\n this._updateHistoryDelayer = new Delayer(500);\n this._state = this._register(new FindReplaceState());\n this.loadQueryState();\n this._register(this._state.onFindReplaceStateChange((e) => this._onStateChanged(e)));\n this._model = null;\n this._register(this._editor.onDidChangeModel(() => {\n let shouldRestartFind = (this._editor.getModel() && this._state.isRevealed);\n this.disposeModel();\n this._state.change({\n searchScope: null,\n matchCase: this._storageService.getBoolean('editor.matchCase', 1 /* WORKSPACE */, false),\n wholeWord: this._storageService.getBoolean('editor.wholeWord', 1 /* WORKSPACE */, false),\n isRegex: this._storageService.getBoolean('editor.isRegex', 1 /* WORKSPACE */, false),\n preserveCase: this._storageService.getBoolean('editor.preserveCase', 1 /* WORKSPACE */, false)\n }, false);\n if (shouldRestartFind) {\n this._start({\n forceRevealReplace: false,\n seedSearchStringFromSelection: 'none',\n seedSearchStringFromGlobalClipboard: false,\n shouldFocus: 0 /* NoFocusChange */,\n shouldAnimate: false,\n updateSearchScope: false,\n loop: this._editor.getOption(33 /* find */).loop\n });\n }\n }));\n }\n get editor() {\n return this._editor;\n }\n static get(editor) {\n return editor.getContribution(CommonFindController.ID);\n }\n dispose() {\n this.disposeModel();\n super.dispose();\n }\n disposeModel() {\n if (this._model) {\n this._model.dispose();\n this._model = null;\n }\n }\n _onStateChanged(e) {\n this.saveQueryState(e);\n if (e.isRevealed) {\n if (this._state.isRevealed) {\n this._findWidgetVisible.set(true);\n }\n else {\n this._findWidgetVisible.reset();\n this.disposeModel();\n }\n }\n if (e.searchString) {\n this.setGlobalBufferTerm(this._state.searchString);\n }\n }\n saveQueryState(e) {\n if (e.isRegex) {\n this._storageService.store('editor.isRegex', this._state.actualIsRegex, 1 /* WORKSPACE */, 0 /* USER */);\n }\n if (e.wholeWord) {\n this._storageService.store('editor.wholeWord', this._state.actualWholeWord, 1 /* WORKSPACE */, 0 /* USER */);\n }\n if (e.matchCase) {\n this._storageService.store('editor.matchCase', this._state.actualMatchCase, 1 /* WORKSPACE */, 0 /* USER */);\n }\n if (e.preserveCase) {\n this._storageService.store('editor.preserveCase', this._state.actualPreserveCase, 1 /* WORKSPACE */, 0 /* USER */);\n }\n }\n loadQueryState() {\n this._state.change({\n matchCase: this._storageService.getBoolean('editor.matchCase', 1 /* WORKSPACE */, this._state.matchCase),\n wholeWord: this._storageService.getBoolean('editor.wholeWord', 1 /* WORKSPACE */, this._state.wholeWord),\n isRegex: this._storageService.getBoolean('editor.isRegex', 1 /* WORKSPACE */, this._state.isRegex),\n preserveCase: this._storageService.getBoolean('editor.preserveCase', 1 /* WORKSPACE */, this._state.preserveCase)\n }, false);\n }\n isFindInputFocused() {\n return !!CONTEXT_FIND_INPUT_FOCUSED.getValue(this._contextKeyService);\n }\n getState() {\n return this._state;\n }\n closeFindWidget() {\n this._state.change({\n isRevealed: false,\n searchScope: null\n }, false);\n this._editor.focus();\n }\n toggleCaseSensitive() {\n this._state.change({ matchCase: !this._state.matchCase }, false);\n if (!this._state.isRevealed) {\n this.highlightFindOptions();\n }\n }\n toggleWholeWords() {\n this._state.change({ wholeWord: !this._state.wholeWord }, false);\n if (!this._state.isRevealed) {\n this.highlightFindOptions();\n }\n }\n toggleRegex() {\n this._state.change({ isRegex: !this._state.isRegex }, false);\n if (!this._state.isRevealed) {\n this.highlightFindOptions();\n }\n }\n togglePreserveCase() {\n this._state.change({ preserveCase: !this._state.preserveCase }, false);\n if (!this._state.isRevealed) {\n this.highlightFindOptions();\n }\n }\n toggleSearchScope() {\n if (this._state.searchScope) {\n this._state.change({ searchScope: null }, true);\n }\n else {\n if (this._editor.hasModel()) {\n let selections = this._editor.getSelections();\n selections.map(selection => {\n if (selection.endColumn === 1 && selection.endLineNumber > selection.startLineNumber) {\n selection = selection.setEndPosition(selection.endLineNumber - 1, this._editor.getModel().getLineMaxColumn(selection.endLineNumber - 1));\n }\n if (!selection.isEmpty()) {\n return selection;\n }\n return null;\n }).filter(element => !!element);\n if (selections.length) {\n this._state.change({ searchScope: selections }, true);\n }\n }\n }\n }\n setSearchString(searchString) {\n if (this._state.isRegex) {\n searchString = strings.escapeRegExpCharacters(searchString);\n }\n this._state.change({ searchString: searchString }, false);\n }\n highlightFindOptions(ignoreWhenVisible = false) {\n // overwritten in subclass\n }\n _start(opts) {\n return __awaiter(this, void 0, void 0, function* () {\n this.disposeModel();\n if (!this._editor.hasModel()) {\n // cannot do anything with an editor that doesn't have a model...\n return;\n }\n let stateChanges = {\n isRevealed: true\n };\n if (opts.seedSearchStringFromSelection === 'single') {\n let selectionSearchString = getSelectionSearchString(this._editor, opts.seedSearchStringFromSelection);\n if (selectionSearchString) {\n if (this._state.isRegex) {\n stateChanges.searchString = strings.escapeRegExpCharacters(selectionSearchString);\n }\n else {\n stateChanges.searchString = selectionSearchString;\n }\n }\n }\n else if (opts.seedSearchStringFromSelection === 'multiple' && !opts.updateSearchScope) {\n let selectionSearchString = getSelectionSearchString(this._editor, opts.seedSearchStringFromSelection);\n if (selectionSearchString) {\n stateChanges.searchString = selectionSearchString;\n }\n }\n if (!stateChanges.searchString && opts.seedSearchStringFromGlobalClipboard) {\n let selectionSearchString = yield this.getGlobalBufferTerm();\n if (!this._editor.hasModel()) {\n // the editor has lost its model in the meantime\n return;\n }\n if (selectionSearchString) {\n stateChanges.searchString = selectionSearchString;\n }\n }\n // Overwrite isReplaceRevealed\n if (opts.forceRevealReplace) {\n stateChanges.isReplaceRevealed = true;\n }\n else if (!this._findWidgetVisible.get()) {\n stateChanges.isReplaceRevealed = false;\n }\n if (opts.updateSearchScope) {\n let currentSelections = this._editor.getSelections();\n if (currentSelections.some(selection => !selection.isEmpty())) {\n stateChanges.searchScope = currentSelections;\n }\n }\n stateChanges.loop = opts.loop;\n this._state.change(stateChanges, false);\n if (!this._model) {\n this._model = new FindModelBoundToEditorModel(this._editor, this._state);\n }\n });\n }\n start(opts) {\n return this._start(opts);\n }\n moveToNextMatch() {\n if (this._model) {\n this._model.moveToNextMatch();\n return true;\n }\n return false;\n }\n moveToPrevMatch() {\n if (this._model) {\n this._model.moveToPrevMatch();\n return true;\n }\n return false;\n }\n replace() {\n if (this._model) {\n this._model.replace();\n return true;\n }\n return false;\n }\n replaceAll() {\n if (this._model) {\n this._model.replaceAll();\n return true;\n }\n return false;\n }\n selectAllMatches() {\n if (this._model) {\n this._model.selectAllMatches();\n this._editor.focus();\n return true;\n }\n return false;\n }\n getGlobalBufferTerm() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._editor.getOption(33 /* find */).globalFindClipboard\n && this._editor.hasModel()\n && !this._editor.getModel().isTooLargeForSyncing()) {\n return this._clipboardService.readFindText();\n }\n return '';\n });\n }\n setGlobalBufferTerm(text) {\n if (this._editor.getOption(33 /* find */).globalFindClipboard\n && this._editor.hasModel()\n && !this._editor.getModel().isTooLargeForSyncing()) {\n // intentionally not awaited\n this._clipboardService.writeFindText(text);\n }\n }\n};\nCommonFindController.ID = 'editor.contrib.findController';\nCommonFindController = __decorate([\n __param(1, IContextKeyService),\n __param(2, IStorageService),\n __param(3, IClipboardService)\n], CommonFindController);\nexport { CommonFindController };\nlet FindController = class FindController extends CommonFindController {\n constructor(editor, _contextViewService, _contextKeyService, _keybindingService, _themeService, _notificationService, _storageService, clipboardService) {\n super(editor, _contextKeyService, _storageService, clipboardService);\n this._contextViewService = _contextViewService;\n this._keybindingService = _keybindingService;\n this._themeService = _themeService;\n this._notificationService = _notificationService;\n this._widget = null;\n this._findOptionsWidget = null;\n }\n _start(opts) {\n const _super = Object.create(null, {\n _start: { get: () => super._start }\n });\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._widget) {\n this._createFindWidget();\n }\n const selection = this._editor.getSelection();\n let updateSearchScope = false;\n switch (this._editor.getOption(33 /* find */).autoFindInSelection) {\n case 'always':\n updateSearchScope = true;\n break;\n case 'never':\n updateSearchScope = false;\n break;\n case 'multiline':\n const isSelectionMultipleLine = !!selection && selection.startLineNumber !== selection.endLineNumber;\n updateSearchScope = isSelectionMultipleLine;\n break;\n default:\n break;\n }\n opts.updateSearchScope = updateSearchScope;\n yield _super._start.call(this, opts);\n if (this._widget) {\n if (opts.shouldFocus === 2 /* FocusReplaceInput */) {\n this._widget.focusReplaceInput();\n }\n else if (opts.shouldFocus === 1 /* FocusFindInput */) {\n this._widget.focusFindInput();\n }\n }\n });\n }\n highlightFindOptions(ignoreWhenVisible = false) {\n if (!this._widget) {\n this._createFindWidget();\n }\n if (this._state.isRevealed && !ignoreWhenVisible) {\n this._widget.highlightFindOptions();\n }\n else {\n this._findOptionsWidget.highlightFindOptions();\n }\n }\n _createFindWidget() {\n this._widget = this._register(new FindWidget(this._editor, this, this._state, this._contextViewService, this._keybindingService, this._contextKeyService, this._themeService, this._storageService, this._notificationService));\n this._findOptionsWidget = this._register(new FindOptionsWidget(this._editor, this._state, this._keybindingService, this._themeService));\n }\n};\nFindController = __decorate([\n __param(1, IContextViewService),\n __param(2, IContextKeyService),\n __param(3, IKeybindingService),\n __param(4, IThemeService),\n __param(5, INotificationService),\n __param(6, IStorageService),\n __param(7, IClipboardService)\n], FindController);\nexport { FindController };\nexport const StartFindAction = registerMultiEditorAction(new MultiEditorAction({\n id: FIND_IDS.StartFindAction,\n label: nls.localize('startFindAction', \"Find\"),\n alias: 'Find',\n precondition: ContextKeyExpr.or(EditorContextKeys.focus, ContextKeyExpr.has('editorIsOpen')),\n kbOpts: {\n kbExpr: null,\n primary: 2048 /* CtrlCmd */ | 36 /* KEY_F */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarEditMenu,\n group: '3_find',\n title: nls.localize({ key: 'miFind', comment: ['&& denotes a mnemonic'] }, \"&&Find\"),\n order: 1\n }\n}));\nStartFindAction.addImplementation(0, (accessor, editor, args) => {\n const controller = CommonFindController.get(editor);\n if (!controller) {\n return false;\n }\n return controller.start({\n forceRevealReplace: false,\n seedSearchStringFromSelection: editor.getOption(33 /* find */).seedSearchStringFromSelection ? 'single' : 'none',\n seedSearchStringFromGlobalClipboard: editor.getOption(33 /* find */).globalFindClipboard,\n shouldFocus: 1 /* FocusFindInput */,\n shouldAnimate: true,\n updateSearchScope: false,\n loop: editor.getOption(33 /* find */).loop\n });\n});\nexport class StartFindWithSelectionAction extends EditorAction {\n constructor() {\n super({\n id: FIND_IDS.StartFindWithSelection,\n label: nls.localize('startFindWithSelectionAction', \"Find With Selection\"),\n alias: 'Find With Selection',\n precondition: undefined,\n kbOpts: {\n kbExpr: null,\n primary: 0,\n mac: {\n primary: 2048 /* CtrlCmd */ | 35 /* KEY_E */,\n },\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n let controller = CommonFindController.get(editor);\n if (controller) {\n yield controller.start({\n forceRevealReplace: false,\n seedSearchStringFromSelection: 'multiple',\n seedSearchStringFromGlobalClipboard: false,\n shouldFocus: 0 /* NoFocusChange */,\n shouldAnimate: true,\n updateSearchScope: false,\n loop: editor.getOption(33 /* find */).loop\n });\n controller.setGlobalBufferTerm(controller.getState().searchString);\n }\n });\n }\n}\nexport class MatchFindAction extends EditorAction {\n run(accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n let controller = CommonFindController.get(editor);\n if (controller && !this._run(controller)) {\n yield controller.start({\n forceRevealReplace: false,\n seedSearchStringFromSelection: (controller.getState().searchString.length === 0) && editor.getOption(33 /* find */).seedSearchStringFromSelection ? 'single' : 'none',\n seedSearchStringFromGlobalClipboard: true,\n shouldFocus: 0 /* NoFocusChange */,\n shouldAnimate: true,\n updateSearchScope: false,\n loop: editor.getOption(33 /* find */).loop\n });\n this._run(controller);\n }\n });\n }\n}\nexport class NextMatchFindAction extends MatchFindAction {\n constructor() {\n super({\n id: FIND_IDS.NextMatchFindAction,\n label: nls.localize('findNextMatchAction', \"Find Next\"),\n alias: 'Find Next',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 61 /* F3 */,\n mac: { primary: 2048 /* CtrlCmd */ | 37 /* KEY_G */, secondary: [61 /* F3 */] },\n weight: 100 /* EditorContrib */\n }\n });\n }\n _run(controller) {\n const result = controller.moveToNextMatch();\n if (result) {\n controller.editor.pushUndoStop();\n return true;\n }\n return false;\n }\n}\nexport class NextMatchFindAction2 extends MatchFindAction {\n constructor() {\n super({\n id: FIND_IDS.NextMatchFindAction,\n label: nls.localize('findNextMatchAction', \"Find Next\"),\n alias: 'Find Next',\n precondition: undefined,\n kbOpts: {\n kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, CONTEXT_FIND_INPUT_FOCUSED),\n primary: 3 /* Enter */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n _run(controller) {\n const result = controller.moveToNextMatch();\n if (result) {\n controller.editor.pushUndoStop();\n return true;\n }\n return false;\n }\n}\nexport class PreviousMatchFindAction extends MatchFindAction {\n constructor() {\n super({\n id: FIND_IDS.PreviousMatchFindAction,\n label: nls.localize('findPreviousMatchAction', \"Find Previous\"),\n alias: 'Find Previous',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 1024 /* Shift */ | 61 /* F3 */,\n mac: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 37 /* KEY_G */, secondary: [1024 /* Shift */ | 61 /* F3 */] },\n weight: 100 /* EditorContrib */\n }\n });\n }\n _run(controller) {\n return controller.moveToPrevMatch();\n }\n}\nexport class PreviousMatchFindAction2 extends MatchFindAction {\n constructor() {\n super({\n id: FIND_IDS.PreviousMatchFindAction,\n label: nls.localize('findPreviousMatchAction', \"Find Previous\"),\n alias: 'Find Previous',\n precondition: undefined,\n kbOpts: {\n kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, CONTEXT_FIND_INPUT_FOCUSED),\n primary: 1024 /* Shift */ | 3 /* Enter */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n _run(controller) {\n return controller.moveToPrevMatch();\n }\n}\nexport class SelectionMatchFindAction extends EditorAction {\n run(accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n let controller = CommonFindController.get(editor);\n if (!controller) {\n return;\n }\n let selectionSearchString = getSelectionSearchString(editor);\n if (selectionSearchString) {\n controller.setSearchString(selectionSearchString);\n }\n if (!this._run(controller)) {\n yield controller.start({\n forceRevealReplace: false,\n seedSearchStringFromSelection: editor.getOption(33 /* find */).seedSearchStringFromSelection ? 'single' : 'none',\n seedSearchStringFromGlobalClipboard: false,\n shouldFocus: 0 /* NoFocusChange */,\n shouldAnimate: true,\n updateSearchScope: false,\n loop: editor.getOption(33 /* find */).loop\n });\n this._run(controller);\n }\n });\n }\n}\nexport class NextSelectionMatchFindAction extends SelectionMatchFindAction {\n constructor() {\n super({\n id: FIND_IDS.NextSelectionMatchFindAction,\n label: nls.localize('nextSelectionMatchFindAction', \"Find Next Selection\"),\n alias: 'Find Next Selection',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 61 /* F3 */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n _run(controller) {\n return controller.moveToNextMatch();\n }\n}\nexport class PreviousSelectionMatchFindAction extends SelectionMatchFindAction {\n constructor() {\n super({\n id: FIND_IDS.PreviousSelectionMatchFindAction,\n label: nls.localize('previousSelectionMatchFindAction', \"Find Previous Selection\"),\n alias: 'Find Previous Selection',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 61 /* F3 */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n _run(controller) {\n return controller.moveToPrevMatch();\n }\n}\nexport const StartFindReplaceAction = registerMultiEditorAction(new MultiEditorAction({\n id: FIND_IDS.StartFindReplaceAction,\n label: nls.localize('startReplace', \"Replace\"),\n alias: 'Replace',\n precondition: ContextKeyExpr.or(EditorContextKeys.focus, ContextKeyExpr.has('editorIsOpen')),\n kbOpts: {\n kbExpr: null,\n primary: 2048 /* CtrlCmd */ | 38 /* KEY_H */,\n mac: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 36 /* KEY_F */ },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarEditMenu,\n group: '3_find',\n title: nls.localize({ key: 'miReplace', comment: ['&& denotes a mnemonic'] }, \"&&Replace\"),\n order: 2\n }\n}));\nStartFindReplaceAction.addImplementation(0, (accessor, editor, args) => {\n if (!editor.hasModel() || editor.getOption(77 /* readOnly */)) {\n return false;\n }\n const controller = CommonFindController.get(editor);\n if (!controller) {\n return false;\n }\n const currentSelection = editor.getSelection();\n const findInputFocused = controller.isFindInputFocused();\n // we only seed search string from selection when the current selection is single line and not empty,\n // + the find input is not focused\n const seedSearchStringFromSelection = !currentSelection.isEmpty()\n && currentSelection.startLineNumber === currentSelection.endLineNumber && editor.getOption(33 /* find */).seedSearchStringFromSelection\n && !findInputFocused;\n /*\n * if the existing search string in find widget is empty and we don't seed search string from selection, it means the Find Input is still empty, so we should focus the Find Input instead of Replace Input.\n\n * findInputFocused true -> seedSearchStringFromSelection false, FocusReplaceInput\n * findInputFocused false, seedSearchStringFromSelection true FocusReplaceInput\n * findInputFocused false seedSearchStringFromSelection false FocusFindInput\n */\n const shouldFocus = (findInputFocused || seedSearchStringFromSelection) ?\n 2 /* FocusReplaceInput */ : 1 /* FocusFindInput */;\n return controller.start({\n forceRevealReplace: true,\n seedSearchStringFromSelection: seedSearchStringFromSelection ? 'single' : 'none',\n seedSearchStringFromGlobalClipboard: editor.getOption(33 /* find */).seedSearchStringFromSelection,\n shouldFocus: shouldFocus,\n shouldAnimate: true,\n updateSearchScope: false,\n loop: editor.getOption(33 /* find */).loop\n });\n});\nregisterEditorContribution(CommonFindController.ID, FindController);\nregisterEditorAction(StartFindWithSelectionAction);\nregisterEditorAction(NextMatchFindAction);\nregisterEditorAction(NextMatchFindAction2);\nregisterEditorAction(PreviousMatchFindAction);\nregisterEditorAction(PreviousMatchFindAction2);\nregisterEditorAction(NextSelectionMatchFindAction);\nregisterEditorAction(PreviousSelectionMatchFindAction);\nconst FindCommand = EditorCommand.bindToContribution(CommonFindController.get);\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.CloseFindWidgetCommand,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.closeFindWidget(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, ContextKeyExpr.not('isComposing')),\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ToggleCaseSensitiveCommand,\n precondition: undefined,\n handler: x => x.toggleCaseSensitive(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: ToggleCaseSensitiveKeybinding.primary,\n mac: ToggleCaseSensitiveKeybinding.mac,\n win: ToggleCaseSensitiveKeybinding.win,\n linux: ToggleCaseSensitiveKeybinding.linux\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ToggleWholeWordCommand,\n precondition: undefined,\n handler: x => x.toggleWholeWords(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: ToggleWholeWordKeybinding.primary,\n mac: ToggleWholeWordKeybinding.mac,\n win: ToggleWholeWordKeybinding.win,\n linux: ToggleWholeWordKeybinding.linux\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ToggleRegexCommand,\n precondition: undefined,\n handler: x => x.toggleRegex(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: ToggleRegexKeybinding.primary,\n mac: ToggleRegexKeybinding.mac,\n win: ToggleRegexKeybinding.win,\n linux: ToggleRegexKeybinding.linux\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ToggleSearchScopeCommand,\n precondition: undefined,\n handler: x => x.toggleSearchScope(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: ToggleSearchScopeKeybinding.primary,\n mac: ToggleSearchScopeKeybinding.mac,\n win: ToggleSearchScopeKeybinding.win,\n linux: ToggleSearchScopeKeybinding.linux\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.TogglePreserveCaseCommand,\n precondition: undefined,\n handler: x => x.togglePreserveCase(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: TogglePreserveCaseKeybinding.primary,\n mac: TogglePreserveCaseKeybinding.mac,\n win: TogglePreserveCaseKeybinding.win,\n linux: TogglePreserveCaseKeybinding.linux\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ReplaceOneAction,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.replace(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 22 /* KEY_1 */\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ReplaceOneAction,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.replace(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, CONTEXT_REPLACE_INPUT_FOCUSED),\n primary: 3 /* Enter */\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ReplaceAllAction,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.replaceAll(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 3 /* Enter */\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.ReplaceAllAction,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.replaceAll(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: ContextKeyExpr.and(EditorContextKeys.focus, CONTEXT_REPLACE_INPUT_FOCUSED),\n primary: undefined,\n mac: {\n primary: 2048 /* CtrlCmd */ | 3 /* Enter */,\n }\n }\n}));\nregisterEditorCommand(new FindCommand({\n id: FIND_IDS.SelectAllMatchesAction,\n precondition: CONTEXT_FIND_WIDGET_VISIBLE,\n handler: x => x.selectAllMatches(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 5,\n kbExpr: EditorContextKeys.focus,\n primary: 512 /* Alt */ | 3 /* Enter */\n }\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 *--------------------------------------------------------------------------------------------*/\nexport const MAX_FOLDING_REGIONS = 0xFFFF;\nexport const MAX_LINE_NUMBER = 0xFFFFFF;\nconst MASK_INDENT = 0xFF000000;\nexport class FoldingRegions {\n constructor(startIndexes, endIndexes, types) {\n if (startIndexes.length !== endIndexes.length || startIndexes.length > MAX_FOLDING_REGIONS) {\n throw new Error('invalid startIndexes or endIndexes size');\n }\n this._startIndexes = startIndexes;\n this._endIndexes = endIndexes;\n this._collapseStates = new Uint32Array(Math.ceil(startIndexes.length / 32));\n this._types = types;\n this._parentsComputed = false;\n }\n ensureParentIndices() {\n if (!this._parentsComputed) {\n this._parentsComputed = true;\n let parentIndexes = [];\n let isInsideLast = (startLineNumber, endLineNumber) => {\n let index = parentIndexes[parentIndexes.length - 1];\n return this.getStartLineNumber(index) <= startLineNumber && this.getEndLineNumber(index) >= endLineNumber;\n };\n for (let i = 0, len = this._startIndexes.length; i < len; i++) {\n let startLineNumber = this._startIndexes[i];\n let endLineNumber = this._endIndexes[i];\n if (startLineNumber > MAX_LINE_NUMBER || endLineNumber > MAX_LINE_NUMBER) {\n throw new Error('startLineNumber or endLineNumber must not exceed ' + MAX_LINE_NUMBER);\n }\n while (parentIndexes.length > 0 && !isInsideLast(startLineNumber, endLineNumber)) {\n parentIndexes.pop();\n }\n let parentIndex = parentIndexes.length > 0 ? parentIndexes[parentIndexes.length - 1] : -1;\n parentIndexes.push(i);\n this._startIndexes[i] = startLineNumber + ((parentIndex & 0xFF) << 24);\n this._endIndexes[i] = endLineNumber + ((parentIndex & 0xFF00) << 16);\n }\n }\n }\n get length() {\n return this._startIndexes.length;\n }\n getStartLineNumber(index) {\n return this._startIndexes[index] & MAX_LINE_NUMBER;\n }\n getEndLineNumber(index) {\n return this._endIndexes[index] & MAX_LINE_NUMBER;\n }\n getType(index) {\n return this._types ? this._types[index] : undefined;\n }\n hasTypes() {\n return !!this._types;\n }\n isCollapsed(index) {\n let arrayIndex = (index / 32) | 0;\n let bit = index % 32;\n return (this._collapseStates[arrayIndex] & (1 << bit)) !== 0;\n }\n setCollapsed(index, newState) {\n let arrayIndex = (index / 32) | 0;\n let bit = index % 32;\n let value = this._collapseStates[arrayIndex];\n if (newState) {\n this._collapseStates[arrayIndex] = value | (1 << bit);\n }\n else {\n this._collapseStates[arrayIndex] = value & ~(1 << bit);\n }\n }\n toRegion(index) {\n return new FoldingRegion(this, index);\n }\n getParentIndex(index) {\n this.ensureParentIndices();\n let parent = ((this._startIndexes[index] & MASK_INDENT) >>> 24) + ((this._endIndexes[index] & MASK_INDENT) >>> 16);\n if (parent === MAX_FOLDING_REGIONS) {\n return -1;\n }\n return parent;\n }\n contains(index, line) {\n return this.getStartLineNumber(index) <= line && this.getEndLineNumber(index) >= line;\n }\n findIndex(line) {\n let low = 0, high = this._startIndexes.length;\n if (high === 0) {\n return -1; // no children\n }\n while (low < high) {\n let mid = Math.floor((low + high) / 2);\n if (line < this.getStartLineNumber(mid)) {\n high = mid;\n }\n else {\n low = mid + 1;\n }\n }\n return low - 1;\n }\n findRange(line) {\n let index = this.findIndex(line);\n if (index >= 0) {\n let endLineNumber = this.getEndLineNumber(index);\n if (endLineNumber >= line) {\n return index;\n }\n index = this.getParentIndex(index);\n while (index !== -1) {\n if (this.contains(index, line)) {\n return index;\n }\n index = this.getParentIndex(index);\n }\n }\n return -1;\n }\n toString() {\n let res = [];\n for (let i = 0; i < this.length; i++) {\n res[i] = `[${this.isCollapsed(i) ? '+' : '-'}] ${this.getStartLineNumber(i)}/${this.getEndLineNumber(i)}`;\n }\n return res.join(', ');\n }\n}\nexport class FoldingRegion {\n constructor(ranges, index) {\n this.ranges = ranges;\n this.index = index;\n }\n get startLineNumber() {\n return this.ranges.getStartLineNumber(this.index);\n }\n get endLineNumber() {\n return this.ranges.getEndLineNumber(this.index);\n }\n get regionIndex() {\n return this.index;\n }\n get parentIndex() {\n return this.ranges.getParentIndex(this.index);\n }\n get isCollapsed() {\n return this.ranges.isCollapsed(this.index);\n }\n containedBy(range) {\n return range.startLineNumber <= this.startLineNumber && range.endLineNumber >= this.endLineNumber;\n }\n containsLine(lineNumber) {\n return this.startLineNumber <= lineNumber && lineNumber <= this.endLineNumber;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { FoldingRegions } from './foldingRanges.js';\nexport class FoldingModel {\n constructor(textModel, decorationProvider) {\n this._updateEventEmitter = new Emitter();\n this.onDidChange = this._updateEventEmitter.event;\n this._textModel = textModel;\n this._decorationProvider = decorationProvider;\n this._regions = new FoldingRegions(new Uint32Array(0), new Uint32Array(0));\n this._editorDecorationIds = [];\n this._isInitialized = false;\n }\n get regions() { return this._regions; }\n get textModel() { return this._textModel; }\n get isInitialized() { return this._isInitialized; }\n toggleCollapseState(toggledRegions) {\n if (!toggledRegions.length) {\n return;\n }\n toggledRegions = toggledRegions.sort((r1, r2) => r1.regionIndex - r2.regionIndex);\n const processed = {};\n this._decorationProvider.changeDecorations(accessor => {\n let k = 0; // index from [0 ... this.regions.length]\n let dirtyRegionEndLine = -1; // end of the range where decorations need to be updated\n let lastHiddenLine = -1; // the end of the last hidden lines\n const updateDecorationsUntil = (index) => {\n while (k < index) {\n const endLineNumber = this._regions.getEndLineNumber(k);\n const isCollapsed = this._regions.isCollapsed(k);\n if (endLineNumber <= dirtyRegionEndLine) {\n accessor.changeDecorationOptions(this._editorDecorationIds[k], this._decorationProvider.getDecorationOption(isCollapsed, endLineNumber <= lastHiddenLine));\n }\n if (isCollapsed && endLineNumber > lastHiddenLine) {\n lastHiddenLine = endLineNumber;\n }\n k++;\n }\n };\n for (let region of toggledRegions) {\n let index = region.regionIndex;\n let editorDecorationId = this._editorDecorationIds[index];\n if (editorDecorationId && !processed[editorDecorationId]) {\n processed[editorDecorationId] = true;\n updateDecorationsUntil(index); // update all decorations up to current index using the old dirtyRegionEndLine\n let newCollapseState = !this._regions.isCollapsed(index);\n this._regions.setCollapsed(index, newCollapseState);\n dirtyRegionEndLine = Math.max(dirtyRegionEndLine, this._regions.getEndLineNumber(index));\n }\n }\n updateDecorationsUntil(this._regions.length);\n });\n this._updateEventEmitter.fire({ model: this, collapseStateChanged: toggledRegions });\n }\n update(newRegions, blockedLineNumers = []) {\n let newEditorDecorations = [];\n let isBlocked = (startLineNumber, endLineNumber) => {\n for (let blockedLineNumber of blockedLineNumers) {\n if (startLineNumber < blockedLineNumber && blockedLineNumber <= endLineNumber) { // first line is visible\n return true;\n }\n }\n return false;\n };\n let lastHiddenLine = -1;\n let initRange = (index, isCollapsed) => {\n const startLineNumber = newRegions.getStartLineNumber(index);\n const endLineNumber = newRegions.getEndLineNumber(index);\n if (isCollapsed && isBlocked(startLineNumber, endLineNumber)) {\n isCollapsed = false;\n }\n newRegions.setCollapsed(index, isCollapsed);\n const maxColumn = this._textModel.getLineMaxColumn(startLineNumber);\n const decorationRange = {\n startLineNumber: startLineNumber,\n startColumn: Math.max(maxColumn - 1, 1),\n endLineNumber: startLineNumber,\n endColumn: maxColumn\n };\n newEditorDecorations.push({ range: decorationRange, options: this._decorationProvider.getDecorationOption(isCollapsed, endLineNumber <= lastHiddenLine) });\n if (isCollapsed && endLineNumber > lastHiddenLine) {\n lastHiddenLine = endLineNumber;\n }\n };\n let i = 0;\n let nextCollapsed = () => {\n while (i < this._regions.length) {\n let isCollapsed = this._regions.isCollapsed(i);\n i++;\n if (isCollapsed) {\n return i - 1;\n }\n }\n return -1;\n };\n let k = 0;\n let collapsedIndex = nextCollapsed();\n while (collapsedIndex !== -1 && k < newRegions.length) {\n // get the latest range\n let decRange = this._textModel.getDecorationRange(this._editorDecorationIds[collapsedIndex]);\n if (decRange) {\n let collapsedStartLineNumber = decRange.startLineNumber;\n if (decRange.startColumn === Math.max(decRange.endColumn - 1, 1) && this._textModel.getLineMaxColumn(collapsedStartLineNumber) === decRange.endColumn) { // test that the decoration is still covering the full line else it got deleted\n while (k < newRegions.length) {\n let startLineNumber = newRegions.getStartLineNumber(k);\n if (collapsedStartLineNumber >= startLineNumber) {\n initRange(k, collapsedStartLineNumber === startLineNumber);\n k++;\n }\n else {\n break;\n }\n }\n }\n }\n collapsedIndex = nextCollapsed();\n }\n while (k < newRegions.length) {\n initRange(k, false);\n k++;\n }\n this._editorDecorationIds = this._decorationProvider.deltaDecorations(this._editorDecorationIds, newEditorDecorations);\n this._regions = newRegions;\n this._isInitialized = true;\n this._updateEventEmitter.fire({ model: this });\n }\n /**\n * Collapse state memento, for persistence only\n */\n getMemento() {\n let collapsedRanges = [];\n for (let i = 0; i < this._regions.length; i++) {\n if (this._regions.isCollapsed(i)) {\n let range = this._textModel.getDecorationRange(this._editorDecorationIds[i]);\n if (range) {\n let startLineNumber = range.startLineNumber;\n let endLineNumber = range.endLineNumber + this._regions.getEndLineNumber(i) - this._regions.getStartLineNumber(i);\n collapsedRanges.push({ startLineNumber, endLineNumber });\n }\n }\n }\n if (collapsedRanges.length > 0) {\n return collapsedRanges;\n }\n return undefined;\n }\n /**\n * Apply persisted state, for persistence only\n */\n applyMemento(state) {\n if (!Array.isArray(state)) {\n return;\n }\n let toToogle = [];\n for (let range of state) {\n let region = this.getRegionAtLine(range.startLineNumber);\n if (region && !region.isCollapsed) {\n toToogle.push(region);\n }\n }\n this.toggleCollapseState(toToogle);\n }\n dispose() {\n this._decorationProvider.deltaDecorations(this._editorDecorationIds, []);\n }\n getAllRegionsAtLine(lineNumber, filter) {\n let result = [];\n if (this._regions) {\n let index = this._regions.findRange(lineNumber);\n let level = 1;\n while (index >= 0) {\n let current = this._regions.toRegion(index);\n if (!filter || filter(current, level)) {\n result.push(current);\n }\n level++;\n index = current.parentIndex;\n }\n }\n return result;\n }\n getRegionAtLine(lineNumber) {\n if (this._regions) {\n let index = this._regions.findRange(lineNumber);\n if (index >= 0) {\n return this._regions.toRegion(index);\n }\n }\n return null;\n }\n getRegionsInside(region, filter) {\n let result = [];\n let index = region ? region.regionIndex + 1 : 0;\n let endLineNumber = region ? region.endLineNumber : Number.MAX_VALUE;\n if (filter && filter.length === 2) {\n const levelStack = [];\n for (let i = index, len = this._regions.length; i < len; i++) {\n let current = this._regions.toRegion(i);\n if (this._regions.getStartLineNumber(i) < endLineNumber) {\n while (levelStack.length > 0 && !current.containedBy(levelStack[levelStack.length - 1])) {\n levelStack.pop();\n }\n levelStack.push(current);\n if (filter(current, levelStack.length)) {\n result.push(current);\n }\n }\n else {\n break;\n }\n }\n }\n else {\n for (let i = index, len = this._regions.length; i < len; i++) {\n let current = this._regions.toRegion(i);\n if (this._regions.getStartLineNumber(i) < endLineNumber) {\n if (!filter || filter(current)) {\n result.push(current);\n }\n }\n else {\n break;\n }\n }\n }\n return result;\n }\n}\n/**\n * Collapse or expand the regions at the given locations\n * @param levels The number of levels. Use 1 to only impact the regions at the location, use Number.MAX_VALUE for all levels.\n * @param lineNumbers the location of the regions to collapse or expand, or if not set, all regions in the model.\n */\nexport function toggleCollapseState(foldingModel, levels, lineNumbers) {\n let toToggle = [];\n for (let lineNumber of lineNumbers) {\n let region = foldingModel.getRegionAtLine(lineNumber);\n if (region) {\n const doCollapse = !region.isCollapsed;\n toToggle.push(region);\n if (levels > 1) {\n let regionsInside = foldingModel.getRegionsInside(region, (r, level) => r.isCollapsed !== doCollapse && level < levels);\n toToggle.push(...regionsInside);\n }\n }\n }\n foldingModel.toggleCollapseState(toToggle);\n}\n/**\n * Collapse or expand the regions at the given locations including all children.\n * @param doCollapse Whether to collapse or expand\n * @param levels The number of levels. Use 1 to only impact the regions at the location, use Number.MAX_VALUE for all levels.\n * @param lineNumbers the location of the regions to collapse or expand, or if not set, all regions in the model.\n */\nexport function setCollapseStateLevelsDown(foldingModel, doCollapse, levels = Number.MAX_VALUE, lineNumbers) {\n let toToggle = [];\n if (lineNumbers && lineNumbers.length > 0) {\n for (let lineNumber of lineNumbers) {\n let region = foldingModel.getRegionAtLine(lineNumber);\n if (region) {\n if (region.isCollapsed !== doCollapse) {\n toToggle.push(region);\n }\n if (levels > 1) {\n let regionsInside = foldingModel.getRegionsInside(region, (r, level) => r.isCollapsed !== doCollapse && level < levels);\n toToggle.push(...regionsInside);\n }\n }\n }\n }\n else {\n let regionsInside = foldingModel.getRegionsInside(null, (r, level) => r.isCollapsed !== doCollapse && level < levels);\n toToggle.push(...regionsInside);\n }\n foldingModel.toggleCollapseState(toToggle);\n}\n/**\n * Collapse or expand the regions at the given locations including all parents.\n * @param doCollapse Whether to collapse or expand\n * @param levels The number of levels. Use 1 to only impact the regions at the location, use Number.MAX_VALUE for all levels.\n * @param lineNumbers the location of the regions to collapse or expand.\n */\nexport function setCollapseStateLevelsUp(foldingModel, doCollapse, levels, lineNumbers) {\n let toToggle = [];\n for (let lineNumber of lineNumbers) {\n let regions = foldingModel.getAllRegionsAtLine(lineNumber, (region, level) => region.isCollapsed !== doCollapse && level <= levels);\n toToggle.push(...regions);\n }\n foldingModel.toggleCollapseState(toToggle);\n}\n/**\n * Collapse or expand a region at the given locations. If the inner most region is already collapsed/expanded, uses the first parent instead.\n * @param doCollapse Whether to collapse or expand\n * @param lineNumbers the location of the regions to collapse or expand.\n */\nexport function setCollapseStateUp(foldingModel, doCollapse, lineNumbers) {\n let toToggle = [];\n for (let lineNumber of lineNumbers) {\n let regions = foldingModel.getAllRegionsAtLine(lineNumber, (region) => region.isCollapsed !== doCollapse);\n if (regions.length > 0) {\n toToggle.push(regions[0]);\n }\n }\n foldingModel.toggleCollapseState(toToggle);\n}\n/**\n * Folds or unfolds all regions that have a given level, except if they contain one of the blocked lines.\n * @param foldLevel level. Level == 1 is the top level\n * @param doCollapse Whether to collapse or expand\n*/\nexport function setCollapseStateAtLevel(foldingModel, foldLevel, doCollapse, blockedLineNumbers) {\n let filter = (region, level) => level === foldLevel && region.isCollapsed !== doCollapse && !blockedLineNumbers.some(line => region.containsLine(line));\n let toToggle = foldingModel.getRegionsInside(null, filter);\n foldingModel.toggleCollapseState(toToggle);\n}\n/**\n * Folds or unfolds all regions, except if they contain or are contained by a region of one of the blocked lines.\n * @param doCollapse Whether to collapse or expand\n * @param blockedLineNumbers the location of regions to not collapse or expand\n */\nexport function setCollapseStateForRest(foldingModel, doCollapse, blockedLineNumbers) {\n let filteredRegions = [];\n for (let lineNumber of blockedLineNumbers) {\n filteredRegions.push(foldingModel.getAllRegionsAtLine(lineNumber, undefined)[0]);\n }\n let filter = (region) => filteredRegions.every((filteredRegion) => !filteredRegion.containedBy(region) && !region.containedBy(filteredRegion)) && region.isCollapsed !== doCollapse;\n let toToggle = foldingModel.getRegionsInside(null, filter);\n foldingModel.toggleCollapseState(toToggle);\n}\n/**\n * Folds all regions for which the lines start with a given regex\n * @param foldingModel the folding model\n */\nexport function setCollapseStateForMatchingLines(foldingModel, regExp, doCollapse) {\n let editorModel = foldingModel.textModel;\n let regions = foldingModel.regions;\n let toToggle = [];\n for (let i = regions.length - 1; i >= 0; i--) {\n if (doCollapse !== regions.isCollapsed(i)) {\n let startLineNumber = regions.getStartLineNumber(i);\n if (regExp.test(editorModel.getLineContent(startLineNumber))) {\n toToggle.push(regions.toRegion(i));\n }\n }\n }\n foldingModel.toggleCollapseState(toToggle);\n}\n/**\n * Folds all regions of the given type\n * @param foldingModel the folding model\n */\nexport function setCollapseStateForType(foldingModel, type, doCollapse) {\n let regions = foldingModel.regions;\n let toToggle = [];\n for (let i = regions.length - 1; i >= 0; i--) {\n if (doCollapse !== regions.isCollapsed(i) && type === regions.getType(i)) {\n toToggle.push(regions.toRegion(i));\n }\n }\n foldingModel.toggleCollapseState(toToggle);\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 *--------------------------------------------------------------------------------------------*/\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { localize } from '../../../nls.js';\nimport { registerIcon } from '../../../platform/theme/common/iconRegistry.js';\nimport { ThemeIcon } from '../../../platform/theme/common/themeService.js';\nexport const foldingExpandedIcon = registerIcon('folding-expanded', Codicon.chevronDown, localize('foldingExpandedIcon', 'Icon for expanded ranges in the editor glyph margin.'));\nexport const foldingCollapsedIcon = registerIcon('folding-collapsed', Codicon.chevronRight, localize('foldingCollapsedIcon', 'Icon for collapsed ranges in the editor glyph margin.'));\nexport class FoldingDecorationProvider {\n constructor(editor) {\n this.editor = editor;\n this.autoHideFoldingControls = true;\n this.showFoldingHighlights = true;\n }\n getDecorationOption(isCollapsed, isHidden) {\n if (isHidden) {\n return FoldingDecorationProvider.HIDDEN_RANGE_DECORATION;\n }\n if (isCollapsed) {\n return this.showFoldingHighlights ? FoldingDecorationProvider.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION : FoldingDecorationProvider.COLLAPSED_VISUAL_DECORATION;\n }\n else if (this.autoHideFoldingControls) {\n return FoldingDecorationProvider.EXPANDED_AUTO_HIDE_VISUAL_DECORATION;\n }\n else {\n return FoldingDecorationProvider.EXPANDED_VISUAL_DECORATION;\n }\n }\n deltaDecorations(oldDecorations, newDecorations) {\n return this.editor.deltaDecorations(oldDecorations, newDecorations);\n }\n changeDecorations(callback) {\n return this.editor.changeDecorations(callback);\n }\n}\nFoldingDecorationProvider.COLLAPSED_VISUAL_DECORATION = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n afterContentClassName: 'inline-folded',\n isWholeLine: true,\n firstLineDecorationClassName: ThemeIcon.asClassName(foldingCollapsedIcon)\n});\nFoldingDecorationProvider.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n afterContentClassName: 'inline-folded',\n className: 'folded-background',\n isWholeLine: true,\n firstLineDecorationClassName: ThemeIcon.asClassName(foldingCollapsedIcon)\n});\nFoldingDecorationProvider.EXPANDED_AUTO_HIDE_VISUAL_DECORATION = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n isWholeLine: true,\n firstLineDecorationClassName: ThemeIcon.asClassName(foldingExpandedIcon)\n});\nFoldingDecorationProvider.EXPANDED_VISUAL_DECORATION = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n isWholeLine: true,\n firstLineDecorationClassName: 'alwaysShowFoldIcons ' + ThemeIcon.asClassName(foldingExpandedIcon)\n});\nFoldingDecorationProvider.HIDDEN_RANGE_DECORATION = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */\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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../../../base/common/event.js';\nimport { Range } from '../../common/core/range.js';\nimport { findFirstInSorted } from '../../../base/common/arrays.js';\nexport class HiddenRangeModel {\n constructor(model) {\n this._updateEventEmitter = new Emitter();\n this._foldingModel = model;\n this._foldingModelListener = model.onDidChange(_ => this.updateHiddenRanges());\n this._hiddenRanges = [];\n if (model.regions.length) {\n this.updateHiddenRanges();\n }\n }\n get onDidChange() { return this._updateEventEmitter.event; }\n get hiddenRanges() { return this._hiddenRanges; }\n updateHiddenRanges() {\n let updateHiddenAreas = false;\n let newHiddenAreas = [];\n let i = 0; // index into hidden\n let k = 0;\n let lastCollapsedStart = Number.MAX_VALUE;\n let lastCollapsedEnd = -1;\n let ranges = this._foldingModel.regions;\n for (; i < ranges.length; i++) {\n if (!ranges.isCollapsed(i)) {\n continue;\n }\n let startLineNumber = ranges.getStartLineNumber(i) + 1; // the first line is not hidden\n let endLineNumber = ranges.getEndLineNumber(i);\n if (lastCollapsedStart <= startLineNumber && endLineNumber <= lastCollapsedEnd) {\n // ignore ranges contained in collapsed regions\n continue;\n }\n if (!updateHiddenAreas && k < this._hiddenRanges.length && this._hiddenRanges[k].startLineNumber === startLineNumber && this._hiddenRanges[k].endLineNumber === endLineNumber) {\n // reuse the old ranges\n newHiddenAreas.push(this._hiddenRanges[k]);\n k++;\n }\n else {\n updateHiddenAreas = true;\n newHiddenAreas.push(new Range(startLineNumber, 1, endLineNumber, 1));\n }\n lastCollapsedStart = startLineNumber;\n lastCollapsedEnd = endLineNumber;\n }\n if (updateHiddenAreas || k < this._hiddenRanges.length) {\n this.applyHiddenRanges(newHiddenAreas);\n }\n }\n applyMemento(state) {\n if (!Array.isArray(state) || state.length === 0) {\n return false;\n }\n let hiddenRanges = [];\n for (let r of state) {\n if (!r.startLineNumber || !r.endLineNumber) {\n return false;\n }\n hiddenRanges.push(new Range(r.startLineNumber + 1, 1, r.endLineNumber, 1));\n }\n this.applyHiddenRanges(hiddenRanges);\n return true;\n }\n /**\n * Collapse state memento, for persistence only, only used if folding model is not yet initialized\n */\n getMemento() {\n return this._hiddenRanges.map(r => ({ startLineNumber: r.startLineNumber - 1, endLineNumber: r.endLineNumber }));\n }\n applyHiddenRanges(newHiddenAreas) {\n this._hiddenRanges = newHiddenAreas;\n this._updateEventEmitter.fire(newHiddenAreas);\n }\n hasRanges() {\n return this._hiddenRanges.length > 0;\n }\n isHidden(line) {\n return findRange(this._hiddenRanges, line) !== null;\n }\n adjustSelections(selections) {\n let hasChanges = false;\n let editorModel = this._foldingModel.textModel;\n let lastRange = null;\n let adjustLine = (line) => {\n if (!lastRange || !isInside(line, lastRange)) {\n lastRange = findRange(this._hiddenRanges, line);\n }\n if (lastRange) {\n return lastRange.startLineNumber - 1;\n }\n return null;\n };\n for (let i = 0, len = selections.length; i < len; i++) {\n let selection = selections[i];\n let adjustedStartLine = adjustLine(selection.startLineNumber);\n if (adjustedStartLine) {\n selection = selection.setStartPosition(adjustedStartLine, editorModel.getLineMaxColumn(adjustedStartLine));\n hasChanges = true;\n }\n let adjustedEndLine = adjustLine(selection.endLineNumber);\n if (adjustedEndLine) {\n selection = selection.setEndPosition(adjustedEndLine, editorModel.getLineMaxColumn(adjustedEndLine));\n hasChanges = true;\n }\n selections[i] = selection;\n }\n return hasChanges;\n }\n dispose() {\n if (this.hiddenRanges.length > 0) {\n this._hiddenRanges = [];\n this._updateEventEmitter.fire(this._hiddenRanges);\n }\n if (this._foldingModelListener) {\n this._foldingModelListener.dispose();\n this._foldingModelListener = null;\n }\n }\n}\nfunction isInside(line, range) {\n return line >= range.startLineNumber && line <= range.endLineNumber;\n}\nfunction findRange(ranges, line) {\n let i = findFirstInSorted(ranges, r => line < r.startLineNumber) - 1;\n if (i >= 0 && ranges[i].endLineNumber >= line) {\n return ranges[i];\n }\n return null;\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 *--------------------------------------------------------------------------------------------*/\nimport { FoldingRegions, MAX_LINE_NUMBER } from './foldingRanges.js';\nimport { TextModel } from '../../common/model/textModel.js';\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\nconst MAX_FOLDING_REGIONS_FOR_INDENT_LIMIT = 5000;\nexport const ID_INDENT_PROVIDER = 'indent';\nexport class IndentRangeProvider {\n constructor(editorModel) {\n this.editorModel = editorModel;\n this.id = ID_INDENT_PROVIDER;\n }\n dispose() {\n }\n compute(cancelationToken) {\n let foldingRules = LanguageConfigurationRegistry.getFoldingRules(this.editorModel.getLanguageIdentifier().id);\n let offSide = foldingRules && !!foldingRules.offSide;\n let markers = foldingRules && foldingRules.markers;\n return Promise.resolve(computeRanges(this.editorModel, offSide, markers));\n }\n}\n// public only for testing\nexport class RangesCollector {\n constructor(foldingRangesLimit) {\n this._startIndexes = [];\n this._endIndexes = [];\n this._indentOccurrences = [];\n this._length = 0;\n this._foldingRangesLimit = foldingRangesLimit;\n }\n insertFirst(startLineNumber, endLineNumber, indent) {\n if (startLineNumber > MAX_LINE_NUMBER || endLineNumber > MAX_LINE_NUMBER) {\n return;\n }\n let index = this._length;\n this._startIndexes[index] = startLineNumber;\n this._endIndexes[index] = endLineNumber;\n this._length++;\n if (indent < 1000) {\n this._indentOccurrences[indent] = (this._indentOccurrences[indent] || 0) + 1;\n }\n }\n toIndentRanges(model) {\n if (this._length <= this._foldingRangesLimit) {\n // reverse and create arrays of the exact length\n let startIndexes = new Uint32Array(this._length);\n let endIndexes = new Uint32Array(this._length);\n for (let i = this._length - 1, k = 0; i >= 0; i--, k++) {\n startIndexes[k] = this._startIndexes[i];\n endIndexes[k] = this._endIndexes[i];\n }\n return new FoldingRegions(startIndexes, endIndexes);\n }\n else {\n let entries = 0;\n let maxIndent = this._indentOccurrences.length;\n for (let i = 0; i < this._indentOccurrences.length; i++) {\n let n = this._indentOccurrences[i];\n if (n) {\n if (n + entries > this._foldingRangesLimit) {\n maxIndent = i;\n break;\n }\n entries += n;\n }\n }\n const tabSize = model.getOptions().tabSize;\n // reverse and create arrays of the exact length\n let startIndexes = new Uint32Array(this._foldingRangesLimit);\n let endIndexes = new Uint32Array(this._foldingRangesLimit);\n for (let i = this._length - 1, k = 0; i >= 0; i--) {\n let startIndex = this._startIndexes[i];\n let lineContent = model.getLineContent(startIndex);\n let indent = TextModel.computeIndentLevel(lineContent, tabSize);\n if (indent < maxIndent || (indent === maxIndent && entries++ < this._foldingRangesLimit)) {\n startIndexes[k] = startIndex;\n endIndexes[k] = this._endIndexes[i];\n k++;\n }\n }\n return new FoldingRegions(startIndexes, endIndexes);\n }\n }\n}\nexport function computeRanges(model, offSide, markers, foldingRangesLimit = MAX_FOLDING_REGIONS_FOR_INDENT_LIMIT) {\n const tabSize = model.getOptions().tabSize;\n let result = new RangesCollector(foldingRangesLimit);\n let pattern = undefined;\n if (markers) {\n pattern = new RegExp(`(${markers.start.source})|(?:${markers.end.source})`);\n }\n let previousRegions = [];\n let line = model.getLineCount() + 1;\n previousRegions.push({ indent: -1, endAbove: line, line }); // sentinel, to make sure there's at least one entry\n for (let line = model.getLineCount(); line > 0; line--) {\n let lineContent = model.getLineContent(line);\n let indent = TextModel.computeIndentLevel(lineContent, tabSize);\n let previous = previousRegions[previousRegions.length - 1];\n if (indent === -1) {\n if (offSide) {\n // for offSide languages, empty lines are associated to the previous block\n // note: the next block is already written to the results, so this only\n // impacts the end position of the block before\n previous.endAbove = line;\n }\n continue; // only whitespace\n }\n let m;\n if (pattern && (m = lineContent.match(pattern))) {\n // folding pattern match\n if (m[1]) { // start pattern match\n // discard all regions until the folding pattern\n let i = previousRegions.length - 1;\n while (i > 0 && previousRegions[i].indent !== -2) {\n i--;\n }\n if (i > 0) {\n previousRegions.length = i + 1;\n previous = previousRegions[i];\n // new folding range from pattern, includes the end line\n result.insertFirst(line, previous.line, indent);\n previous.line = line;\n previous.indent = indent;\n previous.endAbove = line;\n continue;\n }\n else {\n // no end marker found, treat line as a regular line\n }\n }\n else { // end pattern match\n previousRegions.push({ indent: -2, endAbove: line, line });\n continue;\n }\n }\n if (previous.indent > indent) {\n // discard all regions with larger indent\n do {\n previousRegions.pop();\n previous = previousRegions[previousRegions.length - 1];\n } while (previous.indent > indent);\n // new folding range\n let endLineNumber = previous.endAbove - 1;\n if (endLineNumber - line >= 1) { // needs at east size 1\n result.insertFirst(line, endLineNumber, indent);\n }\n }\n if (previous.indent === indent) {\n previous.endAbove = line;\n }\n else { // previous.indent < indent\n // new region with a bigger indent\n previousRegions.push({ indent, endAbove: line, line });\n }\n }\n return result.toIndentRanges(model);\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 *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { MAX_LINE_NUMBER, FoldingRegions } from './foldingRanges.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nconst MAX_FOLDING_REGIONS = 5000;\nconst foldingContext = {};\nexport const ID_SYNTAX_PROVIDER = 'syntax';\nexport class SyntaxRangeProvider {\n constructor(editorModel, providers, handleFoldingRangesChange, limit = MAX_FOLDING_REGIONS) {\n this.editorModel = editorModel;\n this.providers = providers;\n this.limit = limit;\n this.id = ID_SYNTAX_PROVIDER;\n for (const provider of providers) {\n if (typeof provider.onDidChange === 'function') {\n if (!this.disposables) {\n this.disposables = new DisposableStore();\n }\n this.disposables.add(provider.onDidChange(handleFoldingRangesChange));\n }\n }\n }\n compute(cancellationToken) {\n return collectSyntaxRanges(this.providers, this.editorModel, cancellationToken).then(ranges => {\n if (ranges) {\n let res = sanitizeRanges(ranges, this.limit);\n return res;\n }\n return null;\n });\n }\n dispose() {\n var _a;\n (_a = this.disposables) === null || _a === void 0 ? void 0 : _a.dispose();\n }\n}\nfunction collectSyntaxRanges(providers, model, cancellationToken) {\n let rangeData = null;\n let promises = providers.map((provider, i) => {\n return Promise.resolve(provider.provideFoldingRanges(model, foldingContext, cancellationToken)).then(ranges => {\n if (cancellationToken.isCancellationRequested) {\n return;\n }\n if (Array.isArray(ranges)) {\n if (!Array.isArray(rangeData)) {\n rangeData = [];\n }\n let nLines = model.getLineCount();\n for (let r of ranges) {\n if (r.start > 0 && r.end > r.start && r.end <= nLines) {\n rangeData.push({ start: r.start, end: r.end, rank: i, kind: r.kind });\n }\n }\n }\n }, onUnexpectedExternalError);\n });\n return Promise.all(promises).then(_ => {\n return rangeData;\n });\n}\nexport class RangesCollector {\n constructor(foldingRangesLimit) {\n this._startIndexes = [];\n this._endIndexes = [];\n this._nestingLevels = [];\n this._nestingLevelCounts = [];\n this._types = [];\n this._length = 0;\n this._foldingRangesLimit = foldingRangesLimit;\n }\n add(startLineNumber, endLineNumber, type, nestingLevel) {\n if (startLineNumber > MAX_LINE_NUMBER || endLineNumber > MAX_LINE_NUMBER) {\n return;\n }\n let index = this._length;\n this._startIndexes[index] = startLineNumber;\n this._endIndexes[index] = endLineNumber;\n this._nestingLevels[index] = nestingLevel;\n this._types[index] = type;\n this._length++;\n if (nestingLevel < 30) {\n this._nestingLevelCounts[nestingLevel] = (this._nestingLevelCounts[nestingLevel] || 0) + 1;\n }\n }\n toIndentRanges() {\n if (this._length <= this._foldingRangesLimit) {\n let startIndexes = new Uint32Array(this._length);\n let endIndexes = new Uint32Array(this._length);\n for (let i = 0; i < this._length; i++) {\n startIndexes[i] = this._startIndexes[i];\n endIndexes[i] = this._endIndexes[i];\n }\n return new FoldingRegions(startIndexes, endIndexes, this._types);\n }\n else {\n let entries = 0;\n let maxLevel = this._nestingLevelCounts.length;\n for (let i = 0; i < this._nestingLevelCounts.length; i++) {\n let n = this._nestingLevelCounts[i];\n if (n) {\n if (n + entries > this._foldingRangesLimit) {\n maxLevel = i;\n break;\n }\n entries += n;\n }\n }\n let startIndexes = new Uint32Array(this._foldingRangesLimit);\n let endIndexes = new Uint32Array(this._foldingRangesLimit);\n let types = [];\n for (let i = 0, k = 0; i < this._length; i++) {\n let level = this._nestingLevels[i];\n if (level < maxLevel || (level === maxLevel && entries++ < this._foldingRangesLimit)) {\n startIndexes[k] = this._startIndexes[i];\n endIndexes[k] = this._endIndexes[i];\n types[k] = this._types[i];\n k++;\n }\n }\n return new FoldingRegions(startIndexes, endIndexes, types);\n }\n }\n}\nexport function sanitizeRanges(rangeData, limit) {\n let sorted = rangeData.sort((d1, d2) => {\n let diff = d1.start - d2.start;\n if (diff === 0) {\n diff = d1.rank - d2.rank;\n }\n return diff;\n });\n let collector = new RangesCollector(limit);\n let top = undefined;\n let previous = [];\n for (let entry of sorted) {\n if (!top) {\n top = entry;\n collector.add(entry.start, entry.end, entry.kind && entry.kind.value, previous.length);\n }\n else {\n if (entry.start > top.start) {\n if (entry.end <= top.end) {\n previous.push(top);\n top = entry;\n collector.add(entry.start, entry.end, entry.kind && entry.kind.value, previous.length);\n }\n else {\n if (entry.start > top.end) {\n do {\n top = previous.pop();\n } while (top && entry.start > top.end);\n if (top) {\n previous.push(top);\n }\n top = entry;\n }\n collector.add(entry.start, entry.end, entry.kind && entry.kind.value, previous.length);\n }\n }\n }\n }\n return collector.toIndentRanges();\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 *--------------------------------------------------------------------------------------------*/\nimport { sanitizeRanges } from './syntaxRangeProvider.js';\nexport const ID_INIT_PROVIDER = 'init';\nexport class InitializingRangeProvider {\n constructor(editorModel, initialRanges, onTimeout, timeoutTime) {\n this.editorModel = editorModel;\n this.id = ID_INIT_PROVIDER;\n if (initialRanges.length) {\n let toDecorationRange = (range) => {\n return {\n range: {\n startLineNumber: range.startLineNumber,\n startColumn: 0,\n endLineNumber: range.endLineNumber,\n endColumn: editorModel.getLineLength(range.endLineNumber)\n },\n options: {\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */\n }\n };\n };\n this.decorationIds = editorModel.deltaDecorations([], initialRanges.map(toDecorationRange));\n this.timeout = setTimeout(onTimeout, timeoutTime);\n }\n }\n dispose() {\n if (this.decorationIds) {\n this.editorModel.deltaDecorations(this.decorationIds, []);\n this.decorationIds = undefined;\n }\n if (typeof this.timeout === 'number') {\n clearTimeout(this.timeout);\n this.timeout = undefined;\n }\n }\n compute(cancelationToken) {\n let foldingRangeData = [];\n if (this.decorationIds) {\n for (let id of this.decorationIds) {\n let range = this.editorModel.getDecorationRange(id);\n if (range) {\n foldingRangeData.push({ start: range.startLineNumber, end: range.endLineNumber, rank: 1 });\n }\n }\n }\n return Promise.resolve(sanitizeRanges(foldingRangeData, Number.MAX_VALUE));\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport './folding.css';\nimport * as nls from '../../../nls.js';\nimport * as types from '../../../base/common/types.js';\nimport { escapeRegExpCharacters } from '../../../base/common/strings.js';\nimport { RunOnceScheduler, Delayer, createCancelablePromise } from '../../../base/common/async.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { registerEditorAction, registerEditorContribution, EditorAction, registerInstantiatedEditorAction } from '../../browser/editorExtensions.js';\nimport { FoldingModel, setCollapseStateAtLevel, setCollapseStateLevelsDown, setCollapseStateLevelsUp, setCollapseStateForMatchingLines, setCollapseStateForType, setCollapseStateForRest, toggleCollapseState, setCollapseStateUp } from './foldingModel.js';\nimport { FoldingDecorationProvider, foldingCollapsedIcon, foldingExpandedIcon } from './foldingDecorations.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { HiddenRangeModel } from './hiddenRangeModel.js';\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\nimport { IndentRangeProvider } from './indentRangeProvider.js';\nimport { FoldingRangeProviderRegistry, FoldingRangeKind } from '../../common/modes.js';\nimport { SyntaxRangeProvider, ID_SYNTAX_PROVIDER } from './syntaxRangeProvider.js';\nimport { InitializingRangeProvider, ID_INIT_PROVIDER } from './intializingRangeProvider.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { RawContextKey, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { registerThemingParticipant, ThemeIcon } from '../../../platform/theme/common/themeService.js';\nimport { registerColor, editorSelectionBackground, transparent, iconForeground } from '../../../platform/theme/common/colorRegistry.js';\nconst CONTEXT_FOLDING_ENABLED = new RawContextKey('foldingEnabled', false);\nlet FoldingController = class FoldingController extends Disposable {\n constructor(editor, contextKeyService) {\n super();\n this.contextKeyService = contextKeyService;\n this.localToDispose = this._register(new DisposableStore());\n this.editor = editor;\n const options = this.editor.getOptions();\n this._isEnabled = options.get(35 /* folding */);\n this._useFoldingProviders = options.get(36 /* foldingStrategy */) !== 'indentation';\n this._unfoldOnClickAfterEndOfLine = options.get(38 /* unfoldOnClickAfterEndOfLine */);\n this._restoringViewState = false;\n this.foldingModel = null;\n this.hiddenRangeModel = null;\n this.rangeProvider = null;\n this.foldingRegionPromise = null;\n this.foldingStateMemento = null;\n this.foldingModelPromise = null;\n this.updateScheduler = null;\n this.cursorChangedScheduler = null;\n this.mouseDownInfo = null;\n this.foldingDecorationProvider = new FoldingDecorationProvider(editor);\n this.foldingDecorationProvider.autoHideFoldingControls = options.get(96 /* showFoldingControls */) === 'mouseover';\n this.foldingDecorationProvider.showFoldingHighlights = options.get(37 /* foldingHighlight */);\n this.foldingEnabled = CONTEXT_FOLDING_ENABLED.bindTo(this.contextKeyService);\n this.foldingEnabled.set(this._isEnabled);\n this._register(this.editor.onDidChangeModel(() => this.onModelChanged()));\n this._register(this.editor.onDidChangeConfiguration((e) => {\n if (e.hasChanged(35 /* folding */)) {\n this._isEnabled = this.editor.getOptions().get(35 /* folding */);\n this.foldingEnabled.set(this._isEnabled);\n this.onModelChanged();\n }\n if (e.hasChanged(96 /* showFoldingControls */) || e.hasChanged(37 /* foldingHighlight */)) {\n const options = this.editor.getOptions();\n this.foldingDecorationProvider.autoHideFoldingControls = options.get(96 /* showFoldingControls */) === 'mouseover';\n this.foldingDecorationProvider.showFoldingHighlights = options.get(37 /* foldingHighlight */);\n this.onModelContentChanged();\n }\n if (e.hasChanged(36 /* foldingStrategy */)) {\n this._useFoldingProviders = this.editor.getOptions().get(36 /* foldingStrategy */) !== 'indentation';\n this.onFoldingStrategyChanged();\n }\n if (e.hasChanged(38 /* unfoldOnClickAfterEndOfLine */)) {\n this._unfoldOnClickAfterEndOfLine = this.editor.getOptions().get(38 /* unfoldOnClickAfterEndOfLine */);\n }\n }));\n this.onModelChanged();\n }\n static get(editor) {\n return editor.getContribution(FoldingController.ID);\n }\n /**\n * Store view state.\n */\n saveViewState() {\n let model = this.editor.getModel();\n if (!model || !this._isEnabled || model.isTooLargeForTokenization()) {\n return {};\n }\n if (this.foldingModel) { // disposed ?\n let collapsedRegions = this.foldingModel.isInitialized ? this.foldingModel.getMemento() : this.hiddenRangeModel.getMemento();\n let provider = this.rangeProvider ? this.rangeProvider.id : undefined;\n return { collapsedRegions, lineCount: model.getLineCount(), provider };\n }\n return undefined;\n }\n /**\n * Restore view state.\n */\n restoreViewState(state) {\n let model = this.editor.getModel();\n if (!model || !this._isEnabled || model.isTooLargeForTokenization() || !this.hiddenRangeModel) {\n return;\n }\n if (!state || !state.collapsedRegions || state.lineCount !== model.getLineCount()) {\n return;\n }\n if (state.provider === ID_SYNTAX_PROVIDER || state.provider === ID_INIT_PROVIDER) {\n this.foldingStateMemento = state;\n }\n const collapsedRegions = state.collapsedRegions;\n // set the hidden ranges right away, before waiting for the folding model.\n if (this.hiddenRangeModel.applyMemento(collapsedRegions)) {\n const foldingModel = this.getFoldingModel();\n if (foldingModel) {\n foldingModel.then(foldingModel => {\n if (foldingModel) {\n this._restoringViewState = true;\n try {\n foldingModel.applyMemento(collapsedRegions);\n }\n finally {\n this._restoringViewState = false;\n }\n }\n }).then(undefined, onUnexpectedError);\n }\n }\n }\n onModelChanged() {\n this.localToDispose.clear();\n let model = this.editor.getModel();\n if (!this._isEnabled || !model || model.isTooLargeForTokenization()) {\n // huge files get no view model, so they cannot support hidden areas\n return;\n }\n this.foldingModel = new FoldingModel(model, this.foldingDecorationProvider);\n this.localToDispose.add(this.foldingModel);\n this.hiddenRangeModel = new HiddenRangeModel(this.foldingModel);\n this.localToDispose.add(this.hiddenRangeModel);\n this.localToDispose.add(this.hiddenRangeModel.onDidChange(hr => this.onHiddenRangesChanges(hr)));\n this.updateScheduler = new Delayer(200);\n this.cursorChangedScheduler = new RunOnceScheduler(() => this.revealCursor(), 200);\n this.localToDispose.add(this.cursorChangedScheduler);\n this.localToDispose.add(FoldingRangeProviderRegistry.onDidChange(() => this.onFoldingStrategyChanged()));\n this.localToDispose.add(this.editor.onDidChangeModelLanguageConfiguration(() => this.onFoldingStrategyChanged())); // covers model language changes as well\n this.localToDispose.add(this.editor.onDidChangeModelContent(() => this.onModelContentChanged()));\n this.localToDispose.add(this.editor.onDidChangeCursorPosition(() => this.onCursorPositionChanged()));\n this.localToDispose.add(this.editor.onMouseDown(e => this.onEditorMouseDown(e)));\n this.localToDispose.add(this.editor.onMouseUp(e => this.onEditorMouseUp(e)));\n this.localToDispose.add({\n dispose: () => {\n if (this.foldingRegionPromise) {\n this.foldingRegionPromise.cancel();\n this.foldingRegionPromise = null;\n }\n if (this.updateScheduler) {\n this.updateScheduler.cancel();\n }\n this.updateScheduler = null;\n this.foldingModel = null;\n this.foldingModelPromise = null;\n this.hiddenRangeModel = null;\n this.cursorChangedScheduler = null;\n this.foldingStateMemento = null;\n if (this.rangeProvider) {\n this.rangeProvider.dispose();\n }\n this.rangeProvider = null;\n }\n });\n this.onModelContentChanged();\n }\n onFoldingStrategyChanged() {\n if (this.rangeProvider) {\n this.rangeProvider.dispose();\n }\n this.rangeProvider = null;\n this.onModelContentChanged();\n }\n getRangeProvider(editorModel) {\n if (this.rangeProvider) {\n return this.rangeProvider;\n }\n this.rangeProvider = new IndentRangeProvider(editorModel); // fallback\n if (this._useFoldingProviders && this.foldingModel) {\n let foldingProviders = FoldingRangeProviderRegistry.ordered(this.foldingModel.textModel);\n if (foldingProviders.length === 0 && this.foldingStateMemento && this.foldingStateMemento.collapsedRegions) {\n const rangeProvider = this.rangeProvider = new InitializingRangeProvider(editorModel, this.foldingStateMemento.collapsedRegions, () => {\n // if after 30 the InitializingRangeProvider is still not replaced, force a refresh\n this.foldingStateMemento = null;\n this.onFoldingStrategyChanged();\n }, 30000);\n return rangeProvider; // keep memento in case there are still no foldingProviders on the next request.\n }\n else if (foldingProviders.length > 0) {\n this.rangeProvider = new SyntaxRangeProvider(editorModel, foldingProviders, () => this.onModelContentChanged());\n }\n }\n this.foldingStateMemento = null;\n return this.rangeProvider;\n }\n getFoldingModel() {\n return this.foldingModelPromise;\n }\n onModelContentChanged() {\n if (this.updateScheduler) {\n if (this.foldingRegionPromise) {\n this.foldingRegionPromise.cancel();\n this.foldingRegionPromise = null;\n }\n this.foldingModelPromise = this.updateScheduler.trigger(() => {\n const foldingModel = this.foldingModel;\n if (!foldingModel) { // null if editor has been disposed, or folding turned off\n return null;\n }\n let foldingRegionPromise = this.foldingRegionPromise = createCancelablePromise(token => this.getRangeProvider(foldingModel.textModel).compute(token));\n return foldingRegionPromise.then(foldingRanges => {\n if (foldingRanges && foldingRegionPromise === this.foldingRegionPromise) { // new request or cancelled in the meantime?\n // some cursors might have moved into hidden regions, make sure they are in expanded regions\n let selections = this.editor.getSelections();\n let selectionLineNumbers = selections ? selections.map(s => s.startLineNumber) : [];\n foldingModel.update(foldingRanges, selectionLineNumbers);\n }\n return foldingModel;\n });\n }).then(undefined, (err) => {\n onUnexpectedError(err);\n return null;\n });\n }\n }\n onHiddenRangesChanges(hiddenRanges) {\n if (this.hiddenRangeModel && hiddenRanges.length && !this._restoringViewState) {\n let selections = this.editor.getSelections();\n if (selections) {\n if (this.hiddenRangeModel.adjustSelections(selections)) {\n this.editor.setSelections(selections);\n }\n }\n }\n this.editor.setHiddenAreas(hiddenRanges);\n }\n onCursorPositionChanged() {\n if (this.hiddenRangeModel && this.hiddenRangeModel.hasRanges()) {\n this.cursorChangedScheduler.schedule();\n }\n }\n revealCursor() {\n const foldingModel = this.getFoldingModel();\n if (!foldingModel) {\n return;\n }\n foldingModel.then(foldingModel => {\n if (foldingModel) {\n let selections = this.editor.getSelections();\n if (selections && selections.length > 0) {\n let toToggle = [];\n for (let selection of selections) {\n let lineNumber = selection.selectionStartLineNumber;\n if (this.hiddenRangeModel && this.hiddenRangeModel.isHidden(lineNumber)) {\n toToggle.push(...foldingModel.getAllRegionsAtLine(lineNumber, r => r.isCollapsed && lineNumber > r.startLineNumber));\n }\n }\n if (toToggle.length) {\n foldingModel.toggleCollapseState(toToggle);\n this.reveal(selections[0].getPosition());\n }\n }\n }\n }).then(undefined, onUnexpectedError);\n }\n onEditorMouseDown(e) {\n this.mouseDownInfo = null;\n if (!this.hiddenRangeModel || !e.target || !e.target.range) {\n return;\n }\n if (!e.event.leftButton && !e.event.middleButton) {\n return;\n }\n const range = e.target.range;\n let iconClicked = false;\n switch (e.target.type) {\n case 4 /* GUTTER_LINE_DECORATIONS */:\n const data = e.target.detail;\n const offsetLeftInGutter = e.target.element.offsetLeft;\n const gutterOffsetX = data.offsetX - offsetLeftInGutter;\n // const gutterOffsetX = data.offsetX - data.glyphMarginWidth - data.lineNumbersWidth - data.glyphMarginLeft;\n // TODO@joao TODO@alex TODO@martin this is such that we don't collide with dirty diff\n if (gutterOffsetX < 5) { // the whitespace between the border and the real folding icon border is 5px\n return;\n }\n iconClicked = true;\n break;\n case 7 /* CONTENT_EMPTY */: {\n if (this._unfoldOnClickAfterEndOfLine && this.hiddenRangeModel.hasRanges()) {\n const data = e.target.detail;\n if (!data.isAfterLines) {\n break;\n }\n }\n return;\n }\n case 6 /* CONTENT_TEXT */: {\n if (this.hiddenRangeModel.hasRanges()) {\n let model = this.editor.getModel();\n if (model && range.startColumn === model.getLineMaxColumn(range.startLineNumber)) {\n break;\n }\n }\n return;\n }\n default:\n return;\n }\n this.mouseDownInfo = { lineNumber: range.startLineNumber, iconClicked };\n }\n onEditorMouseUp(e) {\n const foldingModel = this.getFoldingModel();\n if (!foldingModel || !this.mouseDownInfo || !e.target) {\n return;\n }\n let lineNumber = this.mouseDownInfo.lineNumber;\n let iconClicked = this.mouseDownInfo.iconClicked;\n let range = e.target.range;\n if (!range || range.startLineNumber !== lineNumber) {\n return;\n }\n if (iconClicked) {\n if (e.target.type !== 4 /* GUTTER_LINE_DECORATIONS */) {\n return;\n }\n }\n else {\n let model = this.editor.getModel();\n if (!model || range.startColumn !== model.getLineMaxColumn(lineNumber)) {\n return;\n }\n }\n foldingModel.then(foldingModel => {\n if (foldingModel) {\n let region = foldingModel.getRegionAtLine(lineNumber);\n if (region && region.startLineNumber === lineNumber) {\n let isCollapsed = region.isCollapsed;\n if (iconClicked || isCollapsed) {\n let surrounding = e.event.altKey;\n let toToggle = [];\n if (surrounding) {\n let filter = (otherRegion) => !otherRegion.containedBy(region) && !region.containedBy(otherRegion);\n let toMaybeToggle = foldingModel.getRegionsInside(null, filter);\n for (const r of toMaybeToggle) {\n if (r.isCollapsed) {\n toToggle.push(r);\n }\n }\n // if any surrounding regions are folded, unfold those. Otherwise, fold all surrounding\n if (toToggle.length === 0) {\n toToggle = toMaybeToggle;\n }\n }\n else {\n let recursive = e.event.middleButton || e.event.shiftKey;\n if (recursive) {\n for (const r of foldingModel.getRegionsInside(region)) {\n if (r.isCollapsed === isCollapsed) {\n toToggle.push(r);\n }\n }\n }\n // when recursive, first only collapse all children. If all are already folded or there are no children, also fold parent.\n if (isCollapsed || !recursive || toToggle.length === 0) {\n toToggle.push(region);\n }\n }\n foldingModel.toggleCollapseState(toToggle);\n this.reveal({ lineNumber, column: 1 });\n }\n }\n }\n }).then(undefined, onUnexpectedError);\n }\n reveal(position) {\n this.editor.revealPositionInCenterIfOutsideViewport(position, 0 /* Smooth */);\n }\n};\nFoldingController.ID = 'editor.contrib.folding';\nFoldingController = __decorate([\n __param(1, IContextKeyService)\n], FoldingController);\nexport { FoldingController };\nclass FoldingAction extends EditorAction {\n runEditorCommand(accessor, editor, args) {\n let foldingController = FoldingController.get(editor);\n if (!foldingController) {\n return;\n }\n let foldingModelPromise = foldingController.getFoldingModel();\n if (foldingModelPromise) {\n this.reportTelemetry(accessor, editor);\n return foldingModelPromise.then(foldingModel => {\n if (foldingModel) {\n this.invoke(foldingController, foldingModel, editor, args);\n const selection = editor.getSelection();\n if (selection) {\n foldingController.reveal(selection.getStartPosition());\n }\n }\n });\n }\n }\n getSelectedLines(editor) {\n let selections = editor.getSelections();\n return selections ? selections.map(s => s.startLineNumber) : [];\n }\n getLineNumbers(args, editor) {\n if (args && args.selectionLines) {\n return args.selectionLines.map(l => l + 1); // to 0-bases line numbers\n }\n return this.getSelectedLines(editor);\n }\n run(_accessor, _editor) {\n }\n}\nfunction foldingArgumentsConstraint(args) {\n if (!types.isUndefined(args)) {\n if (!types.isObject(args)) {\n return false;\n }\n const foldingArgs = args;\n if (!types.isUndefined(foldingArgs.levels) && !types.isNumber(foldingArgs.levels)) {\n return false;\n }\n if (!types.isUndefined(foldingArgs.direction) && !types.isString(foldingArgs.direction)) {\n return false;\n }\n if (!types.isUndefined(foldingArgs.selectionLines) && (!types.isArray(foldingArgs.selectionLines) || !foldingArgs.selectionLines.every(types.isNumber))) {\n return false;\n }\n }\n return true;\n}\nclass UnfoldAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.unfold',\n label: nls.localize('unfoldAction.label', \"Unfold\"),\n alias: 'Unfold',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 89 /* US_CLOSE_SQUARE_BRACKET */,\n mac: {\n primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 89 /* US_CLOSE_SQUARE_BRACKET */\n },\n weight: 100 /* EditorContrib */\n },\n description: {\n description: 'Unfold the content in the editor',\n args: [\n {\n name: 'Unfold editor argument',\n description: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t* 'levels': Number of levels to unfold. If not set, defaults to 1.\n\t\t\t\t\t\t* 'direction': If 'up', unfold given number of levels up otherwise unfolds down.\n\t\t\t\t\t\t* 'selectionLines': The start lines (0-based) of the editor selections to apply the unfold action to. If not set, the active selection(s) will be used.\n\t\t\t\t\t\t`,\n constraint: foldingArgumentsConstraint,\n schema: {\n 'type': 'object',\n 'properties': {\n 'levels': {\n 'type': 'number',\n 'default': 1\n },\n 'direction': {\n 'type': 'string',\n 'enum': ['up', 'down'],\n 'default': 'down'\n },\n 'selectionLines': {\n 'type': 'array',\n 'items': {\n 'type': 'number'\n }\n }\n }\n }\n }\n ]\n }\n });\n }\n invoke(_foldingController, foldingModel, editor, args) {\n let levels = args && args.levels || 1;\n let lineNumbers = this.getLineNumbers(args, editor);\n if (args && args.direction === 'up') {\n setCollapseStateLevelsUp(foldingModel, false, levels, lineNumbers);\n }\n else {\n setCollapseStateLevelsDown(foldingModel, false, levels, lineNumbers);\n }\n }\n}\nclass UnFoldRecursivelyAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.unfoldRecursively',\n label: nls.localize('unFoldRecursivelyAction.label', \"Unfold Recursively\"),\n alias: 'Unfold Recursively',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 89 /* US_CLOSE_SQUARE_BRACKET */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n invoke(_foldingController, foldingModel, editor, _args) {\n setCollapseStateLevelsDown(foldingModel, false, Number.MAX_VALUE, this.getSelectedLines(editor));\n }\n}\nclass FoldAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.fold',\n label: nls.localize('foldAction.label', \"Fold\"),\n alias: 'Fold',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 87 /* US_OPEN_SQUARE_BRACKET */,\n mac: {\n primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 87 /* US_OPEN_SQUARE_BRACKET */\n },\n weight: 100 /* EditorContrib */\n },\n description: {\n description: 'Fold the content in the editor',\n args: [\n {\n name: 'Fold editor argument',\n description: `Property-value pairs that can be passed through this argument:\n\t\t\t\t\t\t\t* 'levels': Number of levels to fold.\n\t\t\t\t\t\t\t* 'direction': If 'up', folds given number of levels up otherwise folds down.\n\t\t\t\t\t\t\t* 'selectionLines': The start lines (0-based) of the editor selections to apply the fold action to. If not set, the active selection(s) will be used.\n\t\t\t\t\t\t\tIf no levels or direction is set, folds the region at the locations or if already collapsed, the first uncollapsed parent instead.\n\t\t\t\t\t\t`,\n constraint: foldingArgumentsConstraint,\n schema: {\n 'type': 'object',\n 'properties': {\n 'levels': {\n 'type': 'number',\n },\n 'direction': {\n 'type': 'string',\n 'enum': ['up', 'down'],\n },\n 'selectionLines': {\n 'type': 'array',\n 'items': {\n 'type': 'number'\n }\n }\n }\n }\n }\n ]\n }\n });\n }\n invoke(_foldingController, foldingModel, editor, args) {\n let lineNumbers = this.getLineNumbers(args, editor);\n const levels = args && args.levels;\n const direction = args && args.direction;\n if (typeof levels !== 'number' && typeof direction !== 'string') {\n // fold the region at the location or if already collapsed, the first uncollapsed parent instead.\n setCollapseStateUp(foldingModel, true, lineNumbers);\n }\n else {\n if (direction === 'up') {\n setCollapseStateLevelsUp(foldingModel, true, levels || 1, lineNumbers);\n }\n else {\n setCollapseStateLevelsDown(foldingModel, true, levels || 1, lineNumbers);\n }\n }\n }\n}\nclass ToggleFoldAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.toggleFold',\n label: nls.localize('toggleFoldAction.label', \"Toggle Fold\"),\n alias: 'Toggle Fold',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 42 /* KEY_L */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n invoke(_foldingController, foldingModel, editor) {\n let selectedLines = this.getSelectedLines(editor);\n toggleCollapseState(foldingModel, 1, selectedLines);\n }\n}\nclass FoldRecursivelyAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.foldRecursively',\n label: nls.localize('foldRecursivelyAction.label', \"Fold Recursively\"),\n alias: 'Fold Recursively',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 87 /* US_OPEN_SQUARE_BRACKET */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n invoke(_foldingController, foldingModel, editor) {\n let selectedLines = this.getSelectedLines(editor);\n setCollapseStateLevelsDown(foldingModel, true, Number.MAX_VALUE, selectedLines);\n }\n}\nclass FoldAllBlockCommentsAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.foldAllBlockComments',\n label: nls.localize('foldAllBlockComments.label', \"Fold All Block Comments\"),\n alias: 'Fold All Block Comments',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 85 /* US_SLASH */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n invoke(_foldingController, foldingModel, editor) {\n if (foldingModel.regions.hasTypes()) {\n setCollapseStateForType(foldingModel, FoldingRangeKind.Comment.value, true);\n }\n else {\n const editorModel = editor.getModel();\n if (!editorModel) {\n return;\n }\n let comments = LanguageConfigurationRegistry.getComments(editorModel.getLanguageIdentifier().id);\n if (comments && comments.blockCommentStartToken) {\n let regExp = new RegExp('^\\\\s*' + escapeRegExpCharacters(comments.blockCommentStartToken));\n setCollapseStateForMatchingLines(foldingModel, regExp, true);\n }\n }\n }\n}\nclass FoldAllRegionsAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.foldAllMarkerRegions',\n label: nls.localize('foldAllMarkerRegions.label', \"Fold All Regions\"),\n alias: 'Fold All Regions',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 29 /* KEY_8 */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n invoke(_foldingController, foldingModel, editor) {\n if (foldingModel.regions.hasTypes()) {\n setCollapseStateForType(foldingModel, FoldingRangeKind.Region.value, true);\n }\n else {\n const editorModel = editor.getModel();\n if (!editorModel) {\n return;\n }\n let foldingRules = LanguageConfigurationRegistry.getFoldingRules(editorModel.getLanguageIdentifier().id);\n if (foldingRules && foldingRules.markers && foldingRules.markers.start) {\n let regExp = new RegExp(foldingRules.markers.start);\n setCollapseStateForMatchingLines(foldingModel, regExp, true);\n }\n }\n }\n}\nclass UnfoldAllRegionsAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.unfoldAllMarkerRegions',\n label: nls.localize('unfoldAllMarkerRegions.label', \"Unfold All Regions\"),\n alias: 'Unfold All Regions',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 30 /* KEY_9 */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n invoke(_foldingController, foldingModel, editor) {\n if (foldingModel.regions.hasTypes()) {\n setCollapseStateForType(foldingModel, FoldingRangeKind.Region.value, false);\n }\n else {\n const editorModel = editor.getModel();\n if (!editorModel) {\n return;\n }\n let foldingRules = LanguageConfigurationRegistry.getFoldingRules(editorModel.getLanguageIdentifier().id);\n if (foldingRules && foldingRules.markers && foldingRules.markers.start) {\n let regExp = new RegExp(foldingRules.markers.start);\n setCollapseStateForMatchingLines(foldingModel, regExp, false);\n }\n }\n }\n}\nclass FoldAllRegionsExceptAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.foldAllExcept',\n label: nls.localize('foldAllExcept.label', \"Fold All Regions Except Selected\"),\n alias: 'Fold All Regions Except Selected',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 83 /* US_MINUS */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n invoke(_foldingController, foldingModel, editor) {\n let selectedLines = this.getSelectedLines(editor);\n setCollapseStateForRest(foldingModel, true, selectedLines);\n }\n}\nclass UnfoldAllRegionsExceptAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.unfoldAllExcept',\n label: nls.localize('unfoldAllExcept.label', \"Unfold All Regions Except Selected\"),\n alias: 'Unfold All Regions Except Selected',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 81 /* US_EQUAL */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n invoke(_foldingController, foldingModel, editor) {\n let selectedLines = this.getSelectedLines(editor);\n setCollapseStateForRest(foldingModel, false, selectedLines);\n }\n}\nclass FoldAllAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.foldAll',\n label: nls.localize('foldAllAction.label', \"Fold All\"),\n alias: 'Fold All',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 21 /* KEY_0 */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n invoke(_foldingController, foldingModel, _editor) {\n setCollapseStateLevelsDown(foldingModel, true);\n }\n}\nclass UnfoldAllAction extends FoldingAction {\n constructor() {\n super({\n id: 'editor.unfoldAll',\n label: nls.localize('unfoldAllAction.label', \"Unfold All\"),\n alias: 'Unfold All',\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 40 /* KEY_J */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n invoke(_foldingController, foldingModel, _editor) {\n setCollapseStateLevelsDown(foldingModel, false);\n }\n}\nclass FoldLevelAction extends FoldingAction {\n getFoldingLevel() {\n return parseInt(this.id.substr(FoldLevelAction.ID_PREFIX.length));\n }\n invoke(_foldingController, foldingModel, editor) {\n setCollapseStateAtLevel(foldingModel, this.getFoldingLevel(), true, this.getSelectedLines(editor));\n }\n}\nFoldLevelAction.ID_PREFIX = 'editor.foldLevel';\nFoldLevelAction.ID = (level) => FoldLevelAction.ID_PREFIX + level;\nregisterEditorContribution(FoldingController.ID, FoldingController);\nregisterEditorAction(UnfoldAction);\nregisterEditorAction(UnFoldRecursivelyAction);\nregisterEditorAction(FoldAction);\nregisterEditorAction(FoldRecursivelyAction);\nregisterEditorAction(FoldAllAction);\nregisterEditorAction(UnfoldAllAction);\nregisterEditorAction(FoldAllBlockCommentsAction);\nregisterEditorAction(FoldAllRegionsAction);\nregisterEditorAction(UnfoldAllRegionsAction);\nregisterEditorAction(FoldAllRegionsExceptAction);\nregisterEditorAction(UnfoldAllRegionsExceptAction);\nregisterEditorAction(ToggleFoldAction);\nfor (let i = 1; i <= 7; i++) {\n registerInstantiatedEditorAction(new FoldLevelAction({\n id: FoldLevelAction.ID(i),\n label: nls.localize('foldLevelAction.label', \"Fold Level {0}\", i),\n alias: `Fold Level ${i}`,\n precondition: CONTEXT_FOLDING_ENABLED,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | (21 /* KEY_0 */ + i)),\n weight: 100 /* EditorContrib */\n }\n }));\n}\nexport const foldBackgroundBackground = registerColor('editor.foldBackground', { light: transparent(editorSelectionBackground, 0.3), dark: transparent(editorSelectionBackground, 0.3), hc: null }, nls.localize('foldBackgroundBackground', \"Background color behind folded ranges. The color must not be opaque so as not to hide underlying decorations.\"), true);\nexport const editorFoldForeground = registerColor('editorGutter.foldingControlForeground', { dark: iconForeground, light: iconForeground, hc: iconForeground }, nls.localize('editorGutter.foldingControlForeground', 'Color of the folding control in the editor gutter.'));\nregisterThemingParticipant((theme, collector) => {\n const foldBackground = theme.getColor(foldBackgroundBackground);\n if (foldBackground) {\n collector.addRule(`.monaco-editor .folded-background { background-color: ${foldBackground}; }`);\n }\n const editorFoldColor = theme.getColor(editorFoldForeground);\n if (editorFoldColor) {\n collector.addRule(`\n\t\t.monaco-editor .cldr${ThemeIcon.asCSSSelector(foldingExpandedIcon)},\n\t\t.monaco-editor .cldr${ThemeIcon.asCSSSelector(foldingCollapsedIcon)} {\n\t\t\tcolor: ${editorFoldColor} !important;\n\t\t}\n\t\t`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { EditorAction, registerEditorAction } from '../../browser/editorExtensions.js';\nimport { EditorZoom } from '../../common/config/editorZoom.js';\nclass EditorFontZoomIn extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.fontZoomIn',\n label: nls.localize('EditorFontZoomIn.label', \"Editor Font Zoom In\"),\n alias: 'Editor Font Zoom In',\n precondition: undefined\n });\n }\n run(accessor, editor) {\n EditorZoom.setZoomLevel(EditorZoom.getZoomLevel() + 1);\n }\n}\nclass EditorFontZoomOut extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.fontZoomOut',\n label: nls.localize('EditorFontZoomOut.label', \"Editor Font Zoom Out\"),\n alias: 'Editor Font Zoom Out',\n precondition: undefined\n });\n }\n run(accessor, editor) {\n EditorZoom.setZoomLevel(EditorZoom.getZoomLevel() - 1);\n }\n}\nclass EditorFontZoomReset extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.fontZoomReset',\n label: nls.localize('EditorFontZoomReset.label', \"Editor Font Zoom Reset\"),\n alias: 'Editor Font Zoom Reset',\n precondition: undefined\n });\n }\n run(accessor, editor) {\n EditorZoom.setZoomLevel(0);\n }\n}\nregisterEditorAction(EditorFontZoomIn);\nregisterEditorAction(EditorFontZoomOut);\nregisterEditorAction(EditorFontZoomReset);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { isNonEmptyArray } from '../../../base/common/arrays.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { CharacterSet } from '../../common/core/characterClassifier.js';\nimport { Range } from '../../common/core/range.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { DocumentRangeFormattingEditProviderRegistry, OnTypeFormattingEditProviderRegistry } from '../../common/modes.js';\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\nimport { getOnTypeFormattingEdits, alertFormattingEdits, formatDocumentRangesWithSelectedProvider, formatDocumentWithSelectedProvider } from './format.js';\nimport { FormattingEdit } from './formattingEdit.js';\nimport * as nls from '../../../nls.js';\nimport { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js';\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Progress, IEditorProgressService } from '../../../platform/progress/common/progress.js';\nlet FormatOnType = class FormatOnType {\n constructor(editor, _workerService) {\n this._workerService = _workerService;\n this._callOnDispose = new DisposableStore();\n this._callOnModel = new DisposableStore();\n this._editor = editor;\n this._callOnDispose.add(editor.onDidChangeConfiguration(() => this._update()));\n this._callOnDispose.add(editor.onDidChangeModel(() => this._update()));\n this._callOnDispose.add(editor.onDidChangeModelLanguage(() => this._update()));\n this._callOnDispose.add(OnTypeFormattingEditProviderRegistry.onDidChange(this._update, this));\n }\n dispose() {\n this._callOnDispose.dispose();\n this._callOnModel.dispose();\n }\n _update() {\n // clean up\n this._callOnModel.clear();\n // we are disabled\n if (!this._editor.getOption(45 /* formatOnType */)) {\n return;\n }\n // no model\n if (!this._editor.hasModel()) {\n return;\n }\n const model = this._editor.getModel();\n // no support\n const [support] = OnTypeFormattingEditProviderRegistry.ordered(model);\n if (!support || !support.autoFormatTriggerCharacters) {\n return;\n }\n // register typing listeners that will trigger the format\n let triggerChars = new CharacterSet();\n for (let ch of support.autoFormatTriggerCharacters) {\n triggerChars.add(ch.charCodeAt(0));\n }\n this._callOnModel.add(this._editor.onDidType((text) => {\n let lastCharCode = text.charCodeAt(text.length - 1);\n if (triggerChars.has(lastCharCode)) {\n this._trigger(String.fromCharCode(lastCharCode));\n }\n }));\n }\n _trigger(ch) {\n if (!this._editor.hasModel()) {\n return;\n }\n if (this._editor.getSelections().length > 1) {\n return;\n }\n const model = this._editor.getModel();\n const position = this._editor.getPosition();\n let canceled = false;\n // install a listener that checks if edits happens before the\n // position on which we format right now. If so, we won't\n // apply the format edits\n const unbind = this._editor.onDidChangeModelContent((e) => {\n if (e.isFlush) {\n // a model.setValue() was called\n // cancel only once\n canceled = true;\n unbind.dispose();\n return;\n }\n for (let i = 0, len = e.changes.length; i < len; i++) {\n const change = e.changes[i];\n if (change.range.endLineNumber <= position.lineNumber) {\n // cancel only once\n canceled = true;\n unbind.dispose();\n return;\n }\n }\n });\n getOnTypeFormattingEdits(this._workerService, model, position, ch, model.getFormattingOptions()).then(edits => {\n unbind.dispose();\n if (canceled) {\n return;\n }\n if (isNonEmptyArray(edits)) {\n FormattingEdit.execute(this._editor, edits, true);\n alertFormattingEdits(edits);\n }\n }, (err) => {\n unbind.dispose();\n throw err;\n });\n }\n};\nFormatOnType.ID = 'editor.contrib.autoFormat';\nFormatOnType = __decorate([\n __param(1, IEditorWorkerService)\n], FormatOnType);\nlet FormatOnPaste = class FormatOnPaste {\n constructor(editor, _instantiationService) {\n this.editor = editor;\n this._instantiationService = _instantiationService;\n this._callOnDispose = new DisposableStore();\n this._callOnModel = new DisposableStore();\n this._callOnDispose.add(editor.onDidChangeConfiguration(() => this._update()));\n this._callOnDispose.add(editor.onDidChangeModel(() => this._update()));\n this._callOnDispose.add(editor.onDidChangeModelLanguage(() => this._update()));\n this._callOnDispose.add(DocumentRangeFormattingEditProviderRegistry.onDidChange(this._update, this));\n }\n dispose() {\n this._callOnDispose.dispose();\n this._callOnModel.dispose();\n }\n _update() {\n // clean up\n this._callOnModel.clear();\n // we are disabled\n if (!this.editor.getOption(44 /* formatOnPaste */)) {\n return;\n }\n // no model\n if (!this.editor.hasModel()) {\n return;\n }\n // no formatter\n if (!DocumentRangeFormattingEditProviderRegistry.has(this.editor.getModel())) {\n return;\n }\n this._callOnModel.add(this.editor.onDidPaste(({ range }) => this._trigger(range)));\n }\n _trigger(range) {\n if (!this.editor.hasModel()) {\n return;\n }\n if (this.editor.getSelections().length > 1) {\n return;\n }\n this._instantiationService.invokeFunction(formatDocumentRangesWithSelectedProvider, this.editor, range, 2 /* Silent */, Progress.None, CancellationToken.None).catch(onUnexpectedError);\n }\n};\nFormatOnPaste.ID = 'editor.contrib.formatOnPaste';\nFormatOnPaste = __decorate([\n __param(1, IInstantiationService)\n], FormatOnPaste);\nclass FormatDocumentAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.formatDocument',\n label: nls.localize('formatDocument.label', \"Format Document\"),\n alias: 'Format Document',\n precondition: ContextKeyExpr.and(EditorContextKeys.notInCompositeEditor, EditorContextKeys.writable, EditorContextKeys.hasDocumentFormattingProvider),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 1024 /* Shift */ | 512 /* Alt */ | 36 /* KEY_F */,\n linux: { primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 39 /* KEY_I */ },\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n group: '1_modification',\n order: 1.3\n }\n });\n }\n run(accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n if (editor.hasModel()) {\n const instaService = accessor.get(IInstantiationService);\n const progressService = accessor.get(IEditorProgressService);\n yield progressService.showWhile(instaService.invokeFunction(formatDocumentWithSelectedProvider, editor, 1 /* Explicit */, Progress.None, CancellationToken.None), 250);\n }\n });\n }\n}\nclass FormatSelectionAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.formatSelection',\n label: nls.localize('formatSelection.label', \"Format Selection\"),\n alias: 'Format Selection',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasDocumentSelectionFormattingProvider),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 36 /* KEY_F */),\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n when: EditorContextKeys.hasNonEmptySelection,\n group: '1_modification',\n order: 1.31\n }\n });\n }\n run(accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!editor.hasModel()) {\n return;\n }\n const instaService = accessor.get(IInstantiationService);\n const model = editor.getModel();\n const ranges = editor.getSelections().map(range => {\n return range.isEmpty()\n ? new Range(range.startLineNumber, 1, range.startLineNumber, model.getLineMaxColumn(range.startLineNumber))\n : range;\n });\n const progressService = accessor.get(IEditorProgressService);\n yield progressService.showWhile(instaService.invokeFunction(formatDocumentRangesWithSelectedProvider, editor, ranges, 1 /* Explicit */, Progress.None, CancellationToken.None), 250);\n });\n }\n}\nregisterEditorContribution(FormatOnType.ID, FormatOnType);\nregisterEditorContribution(FormatOnPaste.ID, FormatOnPaste);\nregisterEditorAction(FormatDocumentAction);\nregisterEditorAction(FormatSelectionAction);\n// this is the old format action that does both (format document OR format selection)\n// and we keep it here such that existing keybinding configurations etc will still work\nCommandsRegistry.registerCommand('editor.action.format', (accessor) => __awaiter(void 0, void 0, void 0, function* () {\n const editor = accessor.get(ICodeEditorService).getFocusedCodeEditor();\n if (!editor || !editor.hasModel()) {\n return;\n }\n const commandService = accessor.get(ICommandService);\n if (editor.getSelection().isEmpty()) {\n yield commandService.executeCommand('editor.action.formatDocument');\n }\n else {\n yield commandService.executeCommand('editor.action.formatSelection');\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Selection } from '../../common/core/selection.js';\nexport class InPlaceReplaceCommand {\n constructor(editRange, originalSelection, text) {\n this._editRange = editRange;\n this._originalSelection = originalSelection;\n this._text = text;\n }\n getEditOperations(model, builder) {\n builder.addTrackedEditOperation(this._editRange, this._text);\n }\n computeCursorState(model, helper) {\n const inverseEditOperations = helper.getInverseEditOperations();\n const srcRange = inverseEditOperations[0].range;\n if (!this._originalSelection.isEmpty()) {\n // Preserve selection and extends to typed text\n return new Selection(srcRange.endLineNumber, srcRange.endColumn - this._text.length, srcRange.endLineNumber, srcRange.endColumn);\n }\n return new Selection(srcRange.endLineNumber, Math.min(this._originalSelection.positionColumn, srcRange.endColumn), srcRange.endLineNumber, Math.min(this._originalSelection.positionColumn, srcRange.endColumn));\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as nls from '../../../nls.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { registerEditorAction, EditorAction, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\nimport { InPlaceReplaceCommand } from './inPlaceReplaceCommand.js';\nimport { EditorState } from '../../browser/core/editorState.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { editorBracketMatchBorder } from '../../common/view/editorColorRegistry.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { createCancelablePromise, timeout } from '../../../base/common/async.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nlet InPlaceReplaceController = class InPlaceReplaceController {\n constructor(editor, editorWorkerService) {\n this.decorationIds = [];\n this.editor = editor;\n this.editorWorkerService = editorWorkerService;\n }\n static get(editor) {\n return editor.getContribution(InPlaceReplaceController.ID);\n }\n dispose() {\n }\n run(source, up) {\n // cancel any pending request\n if (this.currentRequest) {\n this.currentRequest.cancel();\n }\n const editorSelection = this.editor.getSelection();\n const model = this.editor.getModel();\n if (!model || !editorSelection) {\n return undefined;\n }\n let selection = editorSelection;\n if (selection.startLineNumber !== selection.endLineNumber) {\n // Can't accept multiline selection\n return undefined;\n }\n const state = new EditorState(this.editor, 1 /* Value */ | 4 /* Position */);\n const modelURI = model.uri;\n if (!this.editorWorkerService.canNavigateValueSet(modelURI)) {\n return Promise.resolve(undefined);\n }\n this.currentRequest = createCancelablePromise(token => this.editorWorkerService.navigateValueSet(modelURI, selection, up));\n return this.currentRequest.then(result => {\n if (!result || !result.range || !result.value) {\n // No proper result\n return;\n }\n if (!state.validate(this.editor)) {\n // state has changed\n return;\n }\n // Selection\n let editRange = Range.lift(result.range);\n let highlightRange = result.range;\n let diff = result.value.length - (selection.endColumn - selection.startColumn);\n // highlight\n highlightRange = {\n startLineNumber: highlightRange.startLineNumber,\n startColumn: highlightRange.startColumn,\n endLineNumber: highlightRange.endLineNumber,\n endColumn: highlightRange.startColumn + result.value.length\n };\n if (diff > 1) {\n selection = new Selection(selection.startLineNumber, selection.startColumn, selection.endLineNumber, selection.endColumn + diff - 1);\n }\n // Insert new text\n const command = new InPlaceReplaceCommand(editRange, selection, result.value);\n this.editor.pushUndoStop();\n this.editor.executeCommand(source, command);\n this.editor.pushUndoStop();\n // add decoration\n this.decorationIds = this.editor.deltaDecorations(this.decorationIds, [{\n range: highlightRange,\n options: InPlaceReplaceController.DECORATION\n }]);\n // remove decoration after delay\n if (this.decorationRemover) {\n this.decorationRemover.cancel();\n }\n this.decorationRemover = timeout(350);\n this.decorationRemover.then(() => this.decorationIds = this.editor.deltaDecorations(this.decorationIds, [])).catch(onUnexpectedError);\n }).catch(onUnexpectedError);\n }\n};\nInPlaceReplaceController.ID = 'editor.contrib.inPlaceReplaceController';\nInPlaceReplaceController.DECORATION = ModelDecorationOptions.register({\n className: 'valueSetReplacement'\n});\nInPlaceReplaceController = __decorate([\n __param(1, IEditorWorkerService)\n], InPlaceReplaceController);\nclass InPlaceReplaceUp extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.inPlaceReplace.up',\n label: nls.localize('InPlaceReplaceAction.previous.label', \"Replace with Previous Value\"),\n alias: 'Replace with Previous Value',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 82 /* US_COMMA */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n const controller = InPlaceReplaceController.get(editor);\n if (!controller) {\n return Promise.resolve(undefined);\n }\n return controller.run(this.id, true);\n }\n}\nclass InPlaceReplaceDown extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.inPlaceReplace.down',\n label: nls.localize('InPlaceReplaceAction.next.label', \"Replace with Next Value\"),\n alias: 'Replace with Next Value',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 84 /* US_DOT */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n const controller = InPlaceReplaceController.get(editor);\n if (!controller) {\n return Promise.resolve(undefined);\n }\n return controller.run(this.id, false);\n }\n}\nregisterEditorContribution(InPlaceReplaceController.ID, InPlaceReplaceController);\nregisterEditorAction(InPlaceReplaceUp);\nregisterEditorAction(InPlaceReplaceDown);\nregisterThemingParticipant((theme, collector) => {\n const border = theme.getColor(editorBracketMatchBorder);\n if (border) {\n collector.addRule(`.monaco-editor.vs .valueSetReplacement { outline: solid 2px ${border}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nexport function getSpaceCnt(str, tabSize) {\n let spacesCnt = 0;\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) === '\\t') {\n spacesCnt += tabSize;\n }\n else {\n spacesCnt++;\n }\n }\n return spacesCnt;\n}\nexport function generateIndent(spacesCnt, tabSize, insertSpaces) {\n spacesCnt = spacesCnt < 0 ? 0 : spacesCnt;\n let result = '';\n if (!insertSpaces) {\n let tabsCnt = Math.floor(spacesCnt / tabSize);\n spacesCnt = spacesCnt % tabSize;\n for (let i = 0; i < tabsCnt; i++) {\n result += '\\t';\n }\n }\n for (let i = 0; i < spacesCnt; i++) {\n result += ' ';\n }\n return result;\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { ShiftCommand } from '../../common/commands/shiftCommand.js';\nimport { EditOperation } from '../../common/core/editOperation.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { TextModel } from '../../common/model/textModel.js';\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport * as indentUtils from './indentUtils.js';\nimport { IQuickInputService } from '../../../platform/quickinput/common/quickInput.js';\nexport function getReindentEditOperations(model, startLineNumber, endLineNumber, inheritedIndent) {\n if (model.getLineCount() === 1 && model.getLineMaxColumn(1) === 1) {\n // Model is empty\n return [];\n }\n let indentationRules = LanguageConfigurationRegistry.getIndentationRules(model.getLanguageIdentifier().id);\n if (!indentationRules) {\n return [];\n }\n endLineNumber = Math.min(endLineNumber, model.getLineCount());\n // Skip `unIndentedLinePattern` lines\n while (startLineNumber <= endLineNumber) {\n if (!indentationRules.unIndentedLinePattern) {\n break;\n }\n let text = model.getLineContent(startLineNumber);\n if (!indentationRules.unIndentedLinePattern.test(text)) {\n break;\n }\n startLineNumber++;\n }\n if (startLineNumber > endLineNumber - 1) {\n return [];\n }\n const { tabSize, indentSize, insertSpaces } = model.getOptions();\n const shiftIndent = (indentation, count) => {\n count = count || 1;\n return ShiftCommand.shiftIndent(indentation, indentation.length + count, tabSize, indentSize, insertSpaces);\n };\n const unshiftIndent = (indentation, count) => {\n count = count || 1;\n return ShiftCommand.unshiftIndent(indentation, indentation.length + count, tabSize, indentSize, insertSpaces);\n };\n let indentEdits = [];\n // indentation being passed to lines below\n let globalIndent;\n // Calculate indentation for the first line\n // If there is no passed-in indentation, we use the indentation of the first line as base.\n let currentLineText = model.getLineContent(startLineNumber);\n let adjustedLineContent = currentLineText;\n if (inheritedIndent !== undefined && inheritedIndent !== null) {\n globalIndent = inheritedIndent;\n let oldIndentation = strings.getLeadingWhitespace(currentLineText);\n adjustedLineContent = globalIndent + currentLineText.substring(oldIndentation.length);\n if (indentationRules.decreaseIndentPattern && indentationRules.decreaseIndentPattern.test(adjustedLineContent)) {\n globalIndent = unshiftIndent(globalIndent);\n adjustedLineContent = globalIndent + currentLineText.substring(oldIndentation.length);\n }\n if (currentLineText !== adjustedLineContent) {\n indentEdits.push(EditOperation.replaceMove(new Selection(startLineNumber, 1, startLineNumber, oldIndentation.length + 1), TextModel.normalizeIndentation(globalIndent, indentSize, insertSpaces)));\n }\n }\n else {\n globalIndent = strings.getLeadingWhitespace(currentLineText);\n }\n // idealIndentForNextLine doesn't equal globalIndent when there is a line matching `indentNextLinePattern`.\n let idealIndentForNextLine = globalIndent;\n if (indentationRules.increaseIndentPattern && indentationRules.increaseIndentPattern.test(adjustedLineContent)) {\n idealIndentForNextLine = shiftIndent(idealIndentForNextLine);\n globalIndent = shiftIndent(globalIndent);\n }\n else if (indentationRules.indentNextLinePattern && indentationRules.indentNextLinePattern.test(adjustedLineContent)) {\n idealIndentForNextLine = shiftIndent(idealIndentForNextLine);\n }\n startLineNumber++;\n // Calculate indentation adjustment for all following lines\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n let text = model.getLineContent(lineNumber);\n let oldIndentation = strings.getLeadingWhitespace(text);\n let adjustedLineContent = idealIndentForNextLine + text.substring(oldIndentation.length);\n if (indentationRules.decreaseIndentPattern && indentationRules.decreaseIndentPattern.test(adjustedLineContent)) {\n idealIndentForNextLine = unshiftIndent(idealIndentForNextLine);\n globalIndent = unshiftIndent(globalIndent);\n }\n if (oldIndentation !== idealIndentForNextLine) {\n indentEdits.push(EditOperation.replaceMove(new Selection(lineNumber, 1, lineNumber, oldIndentation.length + 1), TextModel.normalizeIndentation(idealIndentForNextLine, indentSize, insertSpaces)));\n }\n // calculate idealIndentForNextLine\n if (indentationRules.unIndentedLinePattern && indentationRules.unIndentedLinePattern.test(text)) {\n // In reindent phase, if the line matches `unIndentedLinePattern` we inherit indentation from above lines\n // but don't change globalIndent and idealIndentForNextLine.\n continue;\n }\n else if (indentationRules.increaseIndentPattern && indentationRules.increaseIndentPattern.test(adjustedLineContent)) {\n globalIndent = shiftIndent(globalIndent);\n idealIndentForNextLine = globalIndent;\n }\n else if (indentationRules.indentNextLinePattern && indentationRules.indentNextLinePattern.test(adjustedLineContent)) {\n idealIndentForNextLine = shiftIndent(idealIndentForNextLine);\n }\n else {\n idealIndentForNextLine = globalIndent;\n }\n }\n return indentEdits;\n}\nexport class IndentationToSpacesAction extends EditorAction {\n constructor() {\n super({\n id: IndentationToSpacesAction.ID,\n label: nls.localize('indentationToSpaces', \"Convert Indentation to Spaces\"),\n alias: 'Convert Indentation to Spaces',\n precondition: EditorContextKeys.writable\n });\n }\n run(accessor, editor) {\n let model = editor.getModel();\n if (!model) {\n return;\n }\n let modelOpts = model.getOptions();\n let selection = editor.getSelection();\n if (!selection) {\n return;\n }\n const command = new IndentationToSpacesCommand(selection, modelOpts.tabSize);\n editor.pushUndoStop();\n editor.executeCommands(this.id, [command]);\n editor.pushUndoStop();\n model.updateOptions({\n insertSpaces: true\n });\n }\n}\nIndentationToSpacesAction.ID = 'editor.action.indentationToSpaces';\nexport class IndentationToTabsAction extends EditorAction {\n constructor() {\n super({\n id: IndentationToTabsAction.ID,\n label: nls.localize('indentationToTabs', \"Convert Indentation to Tabs\"),\n alias: 'Convert Indentation to Tabs',\n precondition: EditorContextKeys.writable\n });\n }\n run(accessor, editor) {\n let model = editor.getModel();\n if (!model) {\n return;\n }\n let modelOpts = model.getOptions();\n let selection = editor.getSelection();\n if (!selection) {\n return;\n }\n const command = new IndentationToTabsCommand(selection, modelOpts.tabSize);\n editor.pushUndoStop();\n editor.executeCommands(this.id, [command]);\n editor.pushUndoStop();\n model.updateOptions({\n insertSpaces: false\n });\n }\n}\nIndentationToTabsAction.ID = 'editor.action.indentationToTabs';\nexport class ChangeIndentationSizeAction extends EditorAction {\n constructor(insertSpaces, opts) {\n super(opts);\n this.insertSpaces = insertSpaces;\n }\n run(accessor, editor) {\n const quickInputService = accessor.get(IQuickInputService);\n const modelService = accessor.get(IModelService);\n let model = editor.getModel();\n if (!model) {\n return;\n }\n let creationOpts = modelService.getCreationOptions(model.getLanguageIdentifier().language, model.uri, model.isForSimpleWidget);\n const picks = [1, 2, 3, 4, 5, 6, 7, 8].map(n => ({\n id: n.toString(),\n label: n.toString(),\n // add description for tabSize value set in the configuration\n description: n === creationOpts.tabSize ? nls.localize('configuredTabSize', \"Configured Tab Size\") : undefined\n }));\n // auto focus the tabSize set for the current editor\n const autoFocusIndex = Math.min(model.getOptions().tabSize - 1, 7);\n setTimeout(() => {\n quickInputService.pick(picks, { placeHolder: nls.localize({ key: 'selectTabWidth', comment: ['Tab corresponds to the tab key'] }, \"Select Tab Size for Current File\"), activeItem: picks[autoFocusIndex] }).then(pick => {\n if (pick) {\n if (model && !model.isDisposed()) {\n model.updateOptions({\n tabSize: parseInt(pick.label, 10),\n insertSpaces: this.insertSpaces\n });\n }\n }\n });\n }, 50 /* quick input is sensitive to being opened so soon after another */);\n }\n}\nexport class IndentUsingTabs extends ChangeIndentationSizeAction {\n constructor() {\n super(false, {\n id: IndentUsingTabs.ID,\n label: nls.localize('indentUsingTabs', \"Indent Using Tabs\"),\n alias: 'Indent Using Tabs',\n precondition: undefined\n });\n }\n}\nIndentUsingTabs.ID = 'editor.action.indentUsingTabs';\nexport class IndentUsingSpaces extends ChangeIndentationSizeAction {\n constructor() {\n super(true, {\n id: IndentUsingSpaces.ID,\n label: nls.localize('indentUsingSpaces', \"Indent Using Spaces\"),\n alias: 'Indent Using Spaces',\n precondition: undefined\n });\n }\n}\nIndentUsingSpaces.ID = 'editor.action.indentUsingSpaces';\nexport class DetectIndentation extends EditorAction {\n constructor() {\n super({\n id: DetectIndentation.ID,\n label: nls.localize('detectIndentation', \"Detect Indentation from Content\"),\n alias: 'Detect Indentation from Content',\n precondition: undefined\n });\n }\n run(accessor, editor) {\n const modelService = accessor.get(IModelService);\n let model = editor.getModel();\n if (!model) {\n return;\n }\n let creationOpts = modelService.getCreationOptions(model.getLanguageIdentifier().language, model.uri, model.isForSimpleWidget);\n model.detectIndentation(creationOpts.insertSpaces, creationOpts.tabSize);\n }\n}\nDetectIndentation.ID = 'editor.action.detectIndentation';\nexport class ReindentLinesAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.reindentlines',\n label: nls.localize('editor.reindentlines', \"Reindent Lines\"),\n alias: 'Reindent Lines',\n precondition: EditorContextKeys.writable\n });\n }\n run(accessor, editor) {\n let model = editor.getModel();\n if (!model) {\n return;\n }\n let edits = getReindentEditOperations(model, 1, model.getLineCount());\n if (edits.length > 0) {\n editor.pushUndoStop();\n editor.executeEdits(this.id, edits);\n editor.pushUndoStop();\n }\n }\n}\nexport class ReindentSelectedLinesAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.reindentselectedlines',\n label: nls.localize('editor.reindentselectedlines', \"Reindent Selected Lines\"),\n alias: 'Reindent Selected Lines',\n precondition: EditorContextKeys.writable\n });\n }\n run(accessor, editor) {\n let model = editor.getModel();\n if (!model) {\n return;\n }\n let selections = editor.getSelections();\n if (selections === null) {\n return;\n }\n let edits = [];\n for (let selection of selections) {\n let startLineNumber = selection.startLineNumber;\n let endLineNumber = selection.endLineNumber;\n if (startLineNumber !== endLineNumber && selection.endColumn === 1) {\n endLineNumber--;\n }\n if (startLineNumber === 1) {\n if (startLineNumber === endLineNumber) {\n continue;\n }\n }\n else {\n startLineNumber--;\n }\n let editOperations = getReindentEditOperations(model, startLineNumber, endLineNumber);\n edits.push(...editOperations);\n }\n if (edits.length > 0) {\n editor.pushUndoStop();\n editor.executeEdits(this.id, edits);\n editor.pushUndoStop();\n }\n }\n}\nexport class AutoIndentOnPasteCommand {\n constructor(edits, initialSelection) {\n this._initialSelection = initialSelection;\n this._edits = [];\n this._selectionId = null;\n for (let edit of edits) {\n if (edit.range && typeof edit.text === 'string') {\n this._edits.push(edit);\n }\n }\n }\n getEditOperations(model, builder) {\n for (let edit of this._edits) {\n builder.addEditOperation(Range.lift(edit.range), edit.text);\n }\n let selectionIsSet = false;\n if (Array.isArray(this._edits) && this._edits.length === 1 && this._initialSelection.isEmpty()) {\n if (this._edits[0].range.startColumn === this._initialSelection.endColumn &&\n this._edits[0].range.startLineNumber === this._initialSelection.endLineNumber) {\n selectionIsSet = true;\n this._selectionId = builder.trackSelection(this._initialSelection, true);\n }\n else if (this._edits[0].range.endColumn === this._initialSelection.startColumn &&\n this._edits[0].range.endLineNumber === this._initialSelection.startLineNumber) {\n selectionIsSet = true;\n this._selectionId = builder.trackSelection(this._initialSelection, false);\n }\n }\n if (!selectionIsSet) {\n this._selectionId = builder.trackSelection(this._initialSelection);\n }\n }\n computeCursorState(model, helper) {\n return helper.getTrackedSelection(this._selectionId);\n }\n}\nexport class AutoIndentOnPaste {\n constructor(editor) {\n this.callOnDispose = new DisposableStore();\n this.callOnModel = new DisposableStore();\n this.editor = editor;\n this.callOnDispose.add(editor.onDidChangeConfiguration(() => this.update()));\n this.callOnDispose.add(editor.onDidChangeModel(() => this.update()));\n this.callOnDispose.add(editor.onDidChangeModelLanguage(() => this.update()));\n }\n update() {\n // clean up\n this.callOnModel.clear();\n // we are disabled\n if (this.editor.getOption(9 /* autoIndent */) < 4 /* Full */ || this.editor.getOption(44 /* formatOnPaste */)) {\n return;\n }\n // no model\n if (!this.editor.hasModel()) {\n return;\n }\n this.callOnModel.add(this.editor.onDidPaste(({ range }) => {\n this.trigger(range);\n }));\n }\n trigger(range) {\n let selections = this.editor.getSelections();\n if (selections === null || selections.length > 1) {\n return;\n }\n const model = this.editor.getModel();\n if (!model) {\n return;\n }\n if (!model.isCheapToTokenize(range.getStartPosition().lineNumber)) {\n return;\n }\n const autoIndent = this.editor.getOption(9 /* autoIndent */);\n const { tabSize, indentSize, insertSpaces } = model.getOptions();\n let textEdits = [];\n let indentConverter = {\n shiftIndent: (indentation) => {\n return ShiftCommand.shiftIndent(indentation, indentation.length + 1, tabSize, indentSize, insertSpaces);\n },\n unshiftIndent: (indentation) => {\n return ShiftCommand.unshiftIndent(indentation, indentation.length + 1, tabSize, indentSize, insertSpaces);\n }\n };\n let startLineNumber = range.startLineNumber;\n while (startLineNumber <= range.endLineNumber) {\n if (this.shouldIgnoreLine(model, startLineNumber)) {\n startLineNumber++;\n continue;\n }\n break;\n }\n if (startLineNumber > range.endLineNumber) {\n return;\n }\n let firstLineText = model.getLineContent(startLineNumber);\n if (!/\\S/.test(firstLineText.substring(0, range.startColumn - 1))) {\n let indentOfFirstLine = LanguageConfigurationRegistry.getGoodIndentForLine(autoIndent, model, model.getLanguageIdentifier().id, startLineNumber, indentConverter);\n if (indentOfFirstLine !== null) {\n let oldIndentation = strings.getLeadingWhitespace(firstLineText);\n let newSpaceCnt = indentUtils.getSpaceCnt(indentOfFirstLine, tabSize);\n let oldSpaceCnt = indentUtils.getSpaceCnt(oldIndentation, tabSize);\n if (newSpaceCnt !== oldSpaceCnt) {\n let newIndent = indentUtils.generateIndent(newSpaceCnt, tabSize, insertSpaces);\n textEdits.push({\n range: new Range(startLineNumber, 1, startLineNumber, oldIndentation.length + 1),\n text: newIndent\n });\n firstLineText = newIndent + firstLineText.substr(oldIndentation.length);\n }\n else {\n let indentMetadata = LanguageConfigurationRegistry.getIndentMetadata(model, startLineNumber);\n if (indentMetadata === 0 || indentMetadata === 8 /* UNINDENT_MASK */) {\n // we paste content into a line where only contains whitespaces\n // after pasting, the indentation of the first line is already correct\n // the first line doesn't match any indentation rule\n // then no-op.\n return;\n }\n }\n }\n }\n const firstLineNumber = startLineNumber;\n // ignore empty or ignored lines\n while (startLineNumber < range.endLineNumber) {\n if (!/\\S/.test(model.getLineContent(startLineNumber + 1))) {\n startLineNumber++;\n continue;\n }\n break;\n }\n if (startLineNumber !== range.endLineNumber) {\n let virtualModel = {\n getLineTokens: (lineNumber) => {\n return model.getLineTokens(lineNumber);\n },\n getLanguageIdentifier: () => {\n return model.getLanguageIdentifier();\n },\n getLanguageIdAtPosition: (lineNumber, column) => {\n return model.getLanguageIdAtPosition(lineNumber, column);\n },\n getLineContent: (lineNumber) => {\n if (lineNumber === firstLineNumber) {\n return firstLineText;\n }\n else {\n return model.getLineContent(lineNumber);\n }\n }\n };\n let indentOfSecondLine = LanguageConfigurationRegistry.getGoodIndentForLine(autoIndent, virtualModel, model.getLanguageIdentifier().id, startLineNumber + 1, indentConverter);\n if (indentOfSecondLine !== null) {\n let newSpaceCntOfSecondLine = indentUtils.getSpaceCnt(indentOfSecondLine, tabSize);\n let oldSpaceCntOfSecondLine = indentUtils.getSpaceCnt(strings.getLeadingWhitespace(model.getLineContent(startLineNumber + 1)), tabSize);\n if (newSpaceCntOfSecondLine !== oldSpaceCntOfSecondLine) {\n let spaceCntOffset = newSpaceCntOfSecondLine - oldSpaceCntOfSecondLine;\n for (let i = startLineNumber + 1; i <= range.endLineNumber; i++) {\n let lineContent = model.getLineContent(i);\n let originalIndent = strings.getLeadingWhitespace(lineContent);\n let originalSpacesCnt = indentUtils.getSpaceCnt(originalIndent, tabSize);\n let newSpacesCnt = originalSpacesCnt + spaceCntOffset;\n let newIndent = indentUtils.generateIndent(newSpacesCnt, tabSize, insertSpaces);\n if (newIndent !== originalIndent) {\n textEdits.push({\n range: new Range(i, 1, i, originalIndent.length + 1),\n text: newIndent\n });\n }\n }\n }\n }\n }\n if (textEdits.length > 0) {\n this.editor.pushUndoStop();\n let cmd = new AutoIndentOnPasteCommand(textEdits, this.editor.getSelection());\n this.editor.executeCommand('autoIndentOnPaste', cmd);\n this.editor.pushUndoStop();\n }\n }\n shouldIgnoreLine(model, lineNumber) {\n model.forceTokenization(lineNumber);\n let nonWhitespaceColumn = model.getLineFirstNonWhitespaceColumn(lineNumber);\n if (nonWhitespaceColumn === 0) {\n return true;\n }\n let tokens = model.getLineTokens(lineNumber);\n if (tokens.getCount() > 0) {\n let firstNonWhitespaceTokenIndex = tokens.findTokenIndexAtOffset(nonWhitespaceColumn);\n if (firstNonWhitespaceTokenIndex >= 0 && tokens.getStandardTokenType(firstNonWhitespaceTokenIndex) === 1 /* Comment */) {\n return true;\n }\n }\n return false;\n }\n dispose() {\n this.callOnDispose.dispose();\n this.callOnModel.dispose();\n }\n}\nAutoIndentOnPaste.ID = 'editor.contrib.autoIndentOnPaste';\nfunction getIndentationEditOperations(model, builder, tabSize, tabsToSpaces) {\n if (model.getLineCount() === 1 && model.getLineMaxColumn(1) === 1) {\n // Model is empty\n return;\n }\n let spaces = '';\n for (let i = 0; i < tabSize; i++) {\n spaces += ' ';\n }\n let spacesRegExp = new RegExp(spaces, 'gi');\n for (let lineNumber = 1, lineCount = model.getLineCount(); lineNumber <= lineCount; lineNumber++) {\n let lastIndentationColumn = model.getLineFirstNonWhitespaceColumn(lineNumber);\n if (lastIndentationColumn === 0) {\n lastIndentationColumn = model.getLineMaxColumn(lineNumber);\n }\n if (lastIndentationColumn === 1) {\n continue;\n }\n const originalIndentationRange = new Range(lineNumber, 1, lineNumber, lastIndentationColumn);\n const originalIndentation = model.getValueInRange(originalIndentationRange);\n const newIndentation = (tabsToSpaces\n ? originalIndentation.replace(/\\t/ig, spaces)\n : originalIndentation.replace(spacesRegExp, '\\t'));\n builder.addEditOperation(originalIndentationRange, newIndentation);\n }\n}\nexport class IndentationToSpacesCommand {\n constructor(selection, tabSize) {\n this.selection = selection;\n this.tabSize = tabSize;\n this.selectionId = null;\n }\n getEditOperations(model, builder) {\n this.selectionId = builder.trackSelection(this.selection);\n getIndentationEditOperations(model, builder, this.tabSize, true);\n }\n computeCursorState(model, helper) {\n return helper.getTrackedSelection(this.selectionId);\n }\n}\nexport class IndentationToTabsCommand {\n constructor(selection, tabSize) {\n this.selection = selection;\n this.tabSize = tabSize;\n this.selectionId = null;\n }\n getEditOperations(model, builder) {\n this.selectionId = builder.trackSelection(this.selection);\n getIndentationEditOperations(model, builder, this.tabSize, false);\n }\n computeCursorState(model, helper) {\n return helper.getTrackedSelection(this.selectionId);\n }\n}\nregisterEditorContribution(AutoIndentOnPaste.ID, AutoIndentOnPaste);\nregisterEditorAction(IndentationToSpacesAction);\nregisterEditorAction(IndentationToTabsAction);\nregisterEditorAction(IndentUsingTabs);\nregisterEditorAction(IndentUsingSpaces);\nregisterEditorAction(DetectIndentation);\nregisterEditorAction(ReindentLinesAction);\nregisterEditorAction(ReindentSelectedLinesAction);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { hash } from '../../../base/common/hash.js';\nimport { DisposableStore, toDisposable } from '../../../base/common/lifecycle.js';\nimport { registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { InlineHintsProviderRegistry } from '../../common/modes.js';\nimport { flatten } from '../../../base/common/arrays.js';\nimport { editorInlineHintForeground, editorInlineHintBackground } from '../../../platform/theme/common/colorRegistry.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nimport { Range } from '../../common/core/range.js';\nimport { LanguageFeatureRequestDelays } from '../../common/modes/languageFeatureRegistry.js';\nimport { MarkdownString } from '../../../base/common/htmlContent.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { assertType } from '../../../base/common/types.js';\nimport { ITextModelService } from '../../common/services/resolverService.js';\nconst MAX_DECORATORS = 500;\nexport function getInlineHints(model, ranges, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const datas = [];\n const providers = InlineHintsProviderRegistry.ordered(model).reverse();\n const promises = flatten(providers.map(provider => ranges.map(range => Promise.resolve(provider.provideInlineHints(model, range, token)).then(result => {\n if (result) {\n datas.push({ list: result, provider });\n }\n }, err => {\n onUnexpectedExternalError(err);\n }))));\n yield Promise.all(promises);\n return datas;\n });\n}\nlet InlineHintsController = class InlineHintsController {\n constructor(_editor, _codeEditorService, _themeService) {\n this._editor = _editor;\n this._codeEditorService = _codeEditorService;\n this._themeService = _themeService;\n // static get(editor: ICodeEditor): InlineHintsController {\n // \treturn editor.getContribution<InlineHintsController>(this.ID);\n // }\n this._disposables = new DisposableStore();\n this._sessionDisposables = new DisposableStore();\n this._getInlineHintsDelays = new LanguageFeatureRequestDelays(InlineHintsProviderRegistry, 250, 2500);\n this._decorationsTypeIds = [];\n this._decorationIds = [];\n this._disposables.add(InlineHintsProviderRegistry.onDidChange(() => this._update()));\n this._disposables.add(_themeService.onDidColorThemeChange(() => this._update()));\n this._disposables.add(_editor.onDidChangeModel(() => this._update()));\n this._disposables.add(_editor.onDidChangeModelLanguage(() => this._update()));\n this._disposables.add(_editor.onDidChangeConfiguration(e => {\n if (e.hasChanged(123 /* inlineHints */)) {\n this._update();\n }\n }));\n this._update();\n }\n dispose() {\n this._sessionDisposables.dispose();\n this._removeAllDecorations();\n this._disposables.dispose();\n }\n _update() {\n this._sessionDisposables.clear();\n if (!this._editor.getOption(123 /* inlineHints */).enabled) {\n this._removeAllDecorations();\n return;\n }\n const model = this._editor.getModel();\n if (!model || !InlineHintsProviderRegistry.has(model)) {\n this._removeAllDecorations();\n return;\n }\n const scheduler = new RunOnceScheduler(() => __awaiter(this, void 0, void 0, function* () {\n const t1 = Date.now();\n const cts = new CancellationTokenSource();\n this._sessionDisposables.add(toDisposable(() => cts.dispose(true)));\n const visibleRanges = this._editor.getVisibleRangesPlusViewportAboveBelow();\n const result = yield getInlineHints(model, visibleRanges, cts.token);\n // update moving average\n const newDelay = this._getInlineHintsDelays.update(model, Date.now() - t1);\n scheduler.delay = newDelay;\n // render hints\n this._updateHintsDecorators(result);\n }), this._getInlineHintsDelays.get(model));\n this._sessionDisposables.add(scheduler);\n // update inline hints when content or scroll position changes\n this._sessionDisposables.add(this._editor.onDidChangeModelContent(() => scheduler.schedule()));\n this._disposables.add(this._editor.onDidScrollChange(() => scheduler.schedule()));\n scheduler.schedule();\n // update inline hints when any any provider fires an event\n const providerListener = new DisposableStore();\n this._sessionDisposables.add(providerListener);\n for (const provider of InlineHintsProviderRegistry.all(model)) {\n if (typeof provider.onDidChangeInlineHints === 'function') {\n providerListener.add(provider.onDidChangeInlineHints(() => scheduler.schedule()));\n }\n }\n }\n _updateHintsDecorators(hintsData) {\n const { fontSize, fontFamily } = this._getLayoutInfo();\n const backgroundColor = this._themeService.getColorTheme().getColor(editorInlineHintBackground);\n const fontColor = this._themeService.getColorTheme().getColor(editorInlineHintForeground);\n const newDecorationsTypeIds = [];\n const newDecorationsData = [];\n const fontFamilyVar = '--inlineHintsFontFamily';\n this._editor.getContainerDomNode().style.setProperty(fontFamilyVar, fontFamily);\n for (const { list: hints } of hintsData) {\n for (let j = 0; j < hints.length && newDecorationsData.length < MAX_DECORATORS; j++) {\n const { text, range, description: hoverMessage, whitespaceBefore, whitespaceAfter } = hints[j];\n const marginBefore = whitespaceBefore ? (fontSize / 3) | 0 : 0;\n const marginAfter = whitespaceAfter ? (fontSize / 3) | 0 : 0;\n const before = {\n contentText: text,\n backgroundColor: `${backgroundColor}`,\n color: `${fontColor}`,\n margin: `0px ${marginAfter}px 0px ${marginBefore}px`,\n fontSize: `${fontSize}px`,\n fontFamily: `var(${fontFamilyVar})`,\n padding: `0px ${(fontSize / 4) | 0}px`,\n borderRadius: `${(fontSize / 4) | 0}px`,\n };\n const key = 'inlineHints-' + hash(before).toString(16);\n this._codeEditorService.registerDecorationType(key, { before }, undefined, this._editor);\n // decoration types are ref-counted which means we only need to\n // call register und remove equally often\n newDecorationsTypeIds.push(key);\n const options = this._codeEditorService.resolveDecorationOptions(key, true);\n if (typeof hoverMessage === 'string') {\n options.hoverMessage = new MarkdownString().appendText(hoverMessage);\n }\n else if (hoverMessage) {\n options.hoverMessage = hoverMessage;\n }\n newDecorationsData.push({\n range,\n options\n });\n }\n }\n this._decorationsTypeIds.forEach(this._codeEditorService.removeDecorationType, this._codeEditorService);\n this._decorationsTypeIds = newDecorationsTypeIds;\n this._decorationIds = this._editor.deltaDecorations(this._decorationIds, newDecorationsData);\n }\n _getLayoutInfo() {\n const options = this._editor.getOption(123 /* inlineHints */);\n const editorFontSize = this._editor.getOption(42 /* fontSize */);\n let fontSize = options.fontSize;\n if (!fontSize || fontSize < 5 || fontSize > editorFontSize) {\n fontSize = (editorFontSize * .9) | 0;\n }\n const fontFamily = options.fontFamily;\n return { fontSize, fontFamily };\n }\n _removeAllDecorations() {\n this._decorationIds = this._editor.deltaDecorations(this._decorationIds, []);\n this._decorationsTypeIds.forEach(this._codeEditorService.removeDecorationType, this._codeEditorService);\n this._decorationsTypeIds = [];\n }\n};\nInlineHintsController.ID = 'editor.contrib.InlineHints';\nInlineHintsController = __decorate([\n __param(1, ICodeEditorService),\n __param(2, IThemeService)\n], InlineHintsController);\nexport { InlineHintsController };\nregisterEditorContribution(InlineHintsController.ID, InlineHintsController);\nCommandsRegistry.registerCommand('_executeInlineHintProvider', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {\n const [uri, range] = args;\n assertType(URI.isUri(uri));\n assertType(Range.isIRange(range));\n const ref = yield accessor.get(ITextModelService).createModelReference(uri);\n try {\n const data = yield getInlineHints(ref.object.textEditorModel, [Range.lift(range)], CancellationToken.None);\n return flatten(data.map(item => item.list)).sort((a, b) => Range.compareRangesUsingStarts(a.range, b.range));\n }\n finally {\n ref.dispose();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { EditOperation } from '../core/editOperation.js';\nimport { Range } from '../core/range.js';\nexport class TrimTrailingWhitespaceCommand {\n constructor(selection, cursors) {\n this._selection = selection;\n this._cursors = cursors;\n this._selectionId = null;\n }\n getEditOperations(model, builder) {\n let ops = trimTrailingWhitespace(model, this._cursors);\n for (let i = 0, len = ops.length; i < len; i++) {\n let op = ops[i];\n builder.addEditOperation(op.range, op.text);\n }\n this._selectionId = builder.trackSelection(this._selection);\n }\n computeCursorState(model, helper) {\n return helper.getTrackedSelection(this._selectionId);\n }\n}\n/**\n * Generate commands for trimming trailing whitespace on a model and ignore lines on which cursors are sitting.\n */\nexport function trimTrailingWhitespace(model, cursors) {\n // Sort cursors ascending\n cursors.sort((a, b) => {\n if (a.lineNumber === b.lineNumber) {\n return a.column - b.column;\n }\n return a.lineNumber - b.lineNumber;\n });\n // Reduce multiple cursors on the same line and only keep the last one on the line\n for (let i = cursors.length - 2; i >= 0; i--) {\n if (cursors[i].lineNumber === cursors[i + 1].lineNumber) {\n // Remove cursor at `i`\n cursors.splice(i, 1);\n }\n }\n let r = [];\n let rLen = 0;\n let cursorIndex = 0;\n let cursorLen = cursors.length;\n for (let lineNumber = 1, lineCount = model.getLineCount(); lineNumber <= lineCount; lineNumber++) {\n let lineContent = model.getLineContent(lineNumber);\n let maxLineColumn = lineContent.length + 1;\n let minEditColumn = 0;\n if (cursorIndex < cursorLen && cursors[cursorIndex].lineNumber === lineNumber) {\n minEditColumn = cursors[cursorIndex].column;\n cursorIndex++;\n if (minEditColumn === maxLineColumn) {\n // The cursor is at the end of the line => no edits for sure on this line\n continue;\n }\n }\n if (lineContent.length === 0) {\n continue;\n }\n let lastNonWhitespaceIndex = strings.lastNonWhitespaceIndex(lineContent);\n let fromColumn = 0;\n if (lastNonWhitespaceIndex === -1) {\n // Entire line is whitespace\n fromColumn = 1;\n }\n else if (lastNonWhitespaceIndex !== lineContent.length - 1) {\n // There is trailing whitespace\n fromColumn = lastNonWhitespaceIndex + 2;\n }\n else {\n // There is no trailing whitespace\n continue;\n }\n fromColumn = Math.max(minEditColumn, fromColumn);\n r[rLen++] = EditOperation.delete(new Range(lineNumber, fromColumn, lineNumber, maxLineColumn));\n }\n return r;\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 *--------------------------------------------------------------------------------------------*/\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nexport class CopyLinesCommand {\n constructor(selection, isCopyingDown, noop) {\n this._selection = selection;\n this._isCopyingDown = isCopyingDown;\n this._noop = noop || false;\n this._selectionDirection = 0 /* LTR */;\n this._selectionId = null;\n this._startLineNumberDelta = 0;\n this._endLineNumberDelta = 0;\n }\n getEditOperations(model, builder) {\n let s = this._selection;\n this._startLineNumberDelta = 0;\n this._endLineNumberDelta = 0;\n if (s.startLineNumber < s.endLineNumber && s.endColumn === 1) {\n this._endLineNumberDelta = 1;\n s = s.setEndPosition(s.endLineNumber - 1, model.getLineMaxColumn(s.endLineNumber - 1));\n }\n let sourceLines = [];\n for (let i = s.startLineNumber; i <= s.endLineNumber; i++) {\n sourceLines.push(model.getLineContent(i));\n }\n const sourceText = sourceLines.join('\\n');\n if (sourceText === '') {\n // Duplicating empty line\n if (this._isCopyingDown) {\n this._startLineNumberDelta++;\n this._endLineNumberDelta++;\n }\n }\n if (this._noop) {\n builder.addEditOperation(new Range(s.endLineNumber, model.getLineMaxColumn(s.endLineNumber), s.endLineNumber + 1, 1), s.endLineNumber === model.getLineCount() ? '' : '\\n');\n }\n else {\n if (!this._isCopyingDown) {\n builder.addEditOperation(new Range(s.endLineNumber, model.getLineMaxColumn(s.endLineNumber), s.endLineNumber, model.getLineMaxColumn(s.endLineNumber)), '\\n' + sourceText);\n }\n else {\n builder.addEditOperation(new Range(s.startLineNumber, 1, s.startLineNumber, 1), sourceText + '\\n');\n }\n }\n this._selectionId = builder.trackSelection(s);\n this._selectionDirection = this._selection.getDirection();\n }\n computeCursorState(model, helper) {\n let result = helper.getTrackedSelection(this._selectionId);\n if (this._startLineNumberDelta !== 0 || this._endLineNumberDelta !== 0) {\n let startLineNumber = result.startLineNumber;\n let startColumn = result.startColumn;\n let endLineNumber = result.endLineNumber;\n let endColumn = result.endColumn;\n if (this._startLineNumberDelta !== 0) {\n startLineNumber = startLineNumber + this._startLineNumberDelta;\n startColumn = 1;\n }\n if (this._endLineNumberDelta !== 0) {\n endLineNumber = endLineNumber + this._endLineNumberDelta;\n endColumn = 1;\n }\n result = Selection.createWithDirection(startLineNumber, startColumn, endLineNumber, endColumn, this._selectionDirection);\n }\n return result;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { ShiftCommand } from '../../common/commands/shiftCommand.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { IndentAction } from '../../common/modes/languageConfiguration.js';\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\nimport * as indentUtils from '../indentation/indentUtils.js';\nexport class MoveLinesCommand {\n constructor(selection, isMovingDown, autoIndent) {\n this._selection = selection;\n this._isMovingDown = isMovingDown;\n this._autoIndent = autoIndent;\n this._selectionId = null;\n this._moveEndLineSelectionShrink = false;\n }\n getEditOperations(model, builder) {\n let modelLineCount = model.getLineCount();\n if (this._isMovingDown && this._selection.endLineNumber === modelLineCount) {\n this._selectionId = builder.trackSelection(this._selection);\n return;\n }\n if (!this._isMovingDown && this._selection.startLineNumber === 1) {\n this._selectionId = builder.trackSelection(this._selection);\n return;\n }\n this._moveEndPositionDown = false;\n let s = this._selection;\n if (s.startLineNumber < s.endLineNumber && s.endColumn === 1) {\n this._moveEndPositionDown = true;\n s = s.setEndPosition(s.endLineNumber - 1, model.getLineMaxColumn(s.endLineNumber - 1));\n }\n const { tabSize, indentSize, insertSpaces } = model.getOptions();\n let indentConverter = this.buildIndentConverter(tabSize, indentSize, insertSpaces);\n let virtualModel = {\n getLineTokens: (lineNumber) => {\n return model.getLineTokens(lineNumber);\n },\n getLanguageIdentifier: () => {\n return model.getLanguageIdentifier();\n },\n getLanguageIdAtPosition: (lineNumber, column) => {\n return model.getLanguageIdAtPosition(lineNumber, column);\n },\n getLineContent: null,\n };\n if (s.startLineNumber === s.endLineNumber && model.getLineMaxColumn(s.startLineNumber) === 1) {\n // Current line is empty\n let lineNumber = s.startLineNumber;\n let otherLineNumber = (this._isMovingDown ? lineNumber + 1 : lineNumber - 1);\n if (model.getLineMaxColumn(otherLineNumber) === 1) {\n // Other line number is empty too, so no editing is needed\n // Add a no-op to force running by the model\n builder.addEditOperation(new Range(1, 1, 1, 1), null);\n }\n else {\n // Type content from other line number on line number\n builder.addEditOperation(new Range(lineNumber, 1, lineNumber, 1), model.getLineContent(otherLineNumber));\n // Remove content from other line number\n builder.addEditOperation(new Range(otherLineNumber, 1, otherLineNumber, model.getLineMaxColumn(otherLineNumber)), null);\n }\n // Track selection at the other line number\n s = new Selection(otherLineNumber, 1, otherLineNumber, 1);\n }\n else {\n let movingLineNumber;\n let movingLineText;\n if (this._isMovingDown) {\n movingLineNumber = s.endLineNumber + 1;\n movingLineText = model.getLineContent(movingLineNumber);\n // Delete line that needs to be moved\n builder.addEditOperation(new Range(movingLineNumber - 1, model.getLineMaxColumn(movingLineNumber - 1), movingLineNumber, model.getLineMaxColumn(movingLineNumber)), null);\n let insertingText = movingLineText;\n if (this.shouldAutoIndent(model, s)) {\n let movingLineMatchResult = this.matchEnterRule(model, indentConverter, tabSize, movingLineNumber, s.startLineNumber - 1);\n // if s.startLineNumber - 1 matches onEnter rule, we still honor that.\n if (movingLineMatchResult !== null) {\n let oldIndentation = strings.getLeadingWhitespace(model.getLineContent(movingLineNumber));\n let newSpaceCnt = movingLineMatchResult + indentUtils.getSpaceCnt(oldIndentation, tabSize);\n let newIndentation = indentUtils.generateIndent(newSpaceCnt, tabSize, insertSpaces);\n insertingText = newIndentation + this.trimLeft(movingLineText);\n }\n else {\n // no enter rule matches, let's check indentatin rules then.\n virtualModel.getLineContent = (lineNumber) => {\n if (lineNumber === s.startLineNumber) {\n return model.getLineContent(movingLineNumber);\n }\n else {\n return model.getLineContent(lineNumber);\n }\n };\n let indentOfMovingLine = LanguageConfigurationRegistry.getGoodIndentForLine(this._autoIndent, virtualModel, model.getLanguageIdAtPosition(movingLineNumber, 1), s.startLineNumber, indentConverter);\n if (indentOfMovingLine !== null) {\n let oldIndentation = strings.getLeadingWhitespace(model.getLineContent(movingLineNumber));\n let newSpaceCnt = indentUtils.getSpaceCnt(indentOfMovingLine, tabSize);\n let oldSpaceCnt = indentUtils.getSpaceCnt(oldIndentation, tabSize);\n if (newSpaceCnt !== oldSpaceCnt) {\n let newIndentation = indentUtils.generateIndent(newSpaceCnt, tabSize, insertSpaces);\n insertingText = newIndentation + this.trimLeft(movingLineText);\n }\n }\n }\n // add edit operations for moving line first to make sure it's executed after we make indentation change\n // to s.startLineNumber\n builder.addEditOperation(new Range(s.startLineNumber, 1, s.startLineNumber, 1), insertingText + '\\n');\n let ret = this.matchEnterRuleMovingDown(model, indentConverter, tabSize, s.startLineNumber, movingLineNumber, insertingText);\n // check if the line being moved before matches onEnter rules, if so let's adjust the indentation by onEnter rules.\n if (ret !== null) {\n if (ret !== 0) {\n this.getIndentEditsOfMovingBlock(model, builder, s, tabSize, insertSpaces, ret);\n }\n }\n else {\n // it doesn't match onEnter rules, let's check indentation rules then.\n virtualModel.getLineContent = (lineNumber) => {\n if (lineNumber === s.startLineNumber) {\n return insertingText;\n }\n else if (lineNumber >= s.startLineNumber + 1 && lineNumber <= s.endLineNumber + 1) {\n return model.getLineContent(lineNumber - 1);\n }\n else {\n return model.getLineContent(lineNumber);\n }\n };\n let newIndentatOfMovingBlock = LanguageConfigurationRegistry.getGoodIndentForLine(this._autoIndent, virtualModel, model.getLanguageIdAtPosition(movingLineNumber, 1), s.startLineNumber + 1, indentConverter);\n if (newIndentatOfMovingBlock !== null) {\n const oldIndentation = strings.getLeadingWhitespace(model.getLineContent(s.startLineNumber));\n const newSpaceCnt = indentUtils.getSpaceCnt(newIndentatOfMovingBlock, tabSize);\n const oldSpaceCnt = indentUtils.getSpaceCnt(oldIndentation, tabSize);\n if (newSpaceCnt !== oldSpaceCnt) {\n const spaceCntOffset = newSpaceCnt - oldSpaceCnt;\n this.getIndentEditsOfMovingBlock(model, builder, s, tabSize, insertSpaces, spaceCntOffset);\n }\n }\n }\n }\n else {\n // Insert line that needs to be moved before\n builder.addEditOperation(new Range(s.startLineNumber, 1, s.startLineNumber, 1), insertingText + '\\n');\n }\n }\n else {\n movingLineNumber = s.startLineNumber - 1;\n movingLineText = model.getLineContent(movingLineNumber);\n // Delete line that needs to be moved\n builder.addEditOperation(new Range(movingLineNumber, 1, movingLineNumber + 1, 1), null);\n // Insert line that needs to be moved after\n builder.addEditOperation(new Range(s.endLineNumber, model.getLineMaxColumn(s.endLineNumber), s.endLineNumber, model.getLineMaxColumn(s.endLineNumber)), '\\n' + movingLineText);\n if (this.shouldAutoIndent(model, s)) {\n virtualModel.getLineContent = (lineNumber) => {\n if (lineNumber === movingLineNumber) {\n return model.getLineContent(s.startLineNumber);\n }\n else {\n return model.getLineContent(lineNumber);\n }\n };\n let ret = this.matchEnterRule(model, indentConverter, tabSize, s.startLineNumber, s.startLineNumber - 2);\n // check if s.startLineNumber - 2 matches onEnter rules, if so adjust the moving block by onEnter rules.\n if (ret !== null) {\n if (ret !== 0) {\n this.getIndentEditsOfMovingBlock(model, builder, s, tabSize, insertSpaces, ret);\n }\n }\n else {\n // it doesn't match any onEnter rule, let's check indentation rules then.\n let indentOfFirstLine = LanguageConfigurationRegistry.getGoodIndentForLine(this._autoIndent, virtualModel, model.getLanguageIdAtPosition(s.startLineNumber, 1), movingLineNumber, indentConverter);\n if (indentOfFirstLine !== null) {\n // adjust the indentation of the moving block\n let oldIndent = strings.getLeadingWhitespace(model.getLineContent(s.startLineNumber));\n let newSpaceCnt = indentUtils.getSpaceCnt(indentOfFirstLine, tabSize);\n let oldSpaceCnt = indentUtils.getSpaceCnt(oldIndent, tabSize);\n if (newSpaceCnt !== oldSpaceCnt) {\n let spaceCntOffset = newSpaceCnt - oldSpaceCnt;\n this.getIndentEditsOfMovingBlock(model, builder, s, tabSize, insertSpaces, spaceCntOffset);\n }\n }\n }\n }\n }\n }\n this._selectionId = builder.trackSelection(s);\n }\n buildIndentConverter(tabSize, indentSize, insertSpaces) {\n return {\n shiftIndent: (indentation) => {\n return ShiftCommand.shiftIndent(indentation, indentation.length + 1, tabSize, indentSize, insertSpaces);\n },\n unshiftIndent: (indentation) => {\n return ShiftCommand.unshiftIndent(indentation, indentation.length + 1, tabSize, indentSize, insertSpaces);\n }\n };\n }\n parseEnterResult(model, indentConverter, tabSize, line, enter) {\n if (enter) {\n let enterPrefix = enter.indentation;\n if (enter.indentAction === IndentAction.None) {\n enterPrefix = enter.indentation + enter.appendText;\n }\n else if (enter.indentAction === IndentAction.Indent) {\n enterPrefix = enter.indentation + enter.appendText;\n }\n else if (enter.indentAction === IndentAction.IndentOutdent) {\n enterPrefix = enter.indentation;\n }\n else if (enter.indentAction === IndentAction.Outdent) {\n enterPrefix = indentConverter.unshiftIndent(enter.indentation) + enter.appendText;\n }\n let movingLineText = model.getLineContent(line);\n if (this.trimLeft(movingLineText).indexOf(this.trimLeft(enterPrefix)) >= 0) {\n let oldIndentation = strings.getLeadingWhitespace(model.getLineContent(line));\n let newIndentation = strings.getLeadingWhitespace(enterPrefix);\n let indentMetadataOfMovelingLine = LanguageConfigurationRegistry.getIndentMetadata(model, line);\n if (indentMetadataOfMovelingLine !== null && indentMetadataOfMovelingLine & 2 /* DECREASE_MASK */) {\n newIndentation = indentConverter.unshiftIndent(newIndentation);\n }\n let newSpaceCnt = indentUtils.getSpaceCnt(newIndentation, tabSize);\n let oldSpaceCnt = indentUtils.getSpaceCnt(oldIndentation, tabSize);\n return newSpaceCnt - oldSpaceCnt;\n }\n }\n return null;\n }\n /**\n *\n * @param model\n * @param indentConverter\n * @param tabSize\n * @param line the line moving down\n * @param futureAboveLineNumber the line which will be at the `line` position\n * @param futureAboveLineText\n */\n matchEnterRuleMovingDown(model, indentConverter, tabSize, line, futureAboveLineNumber, futureAboveLineText) {\n if (strings.lastNonWhitespaceIndex(futureAboveLineText) >= 0) {\n // break\n let maxColumn = model.getLineMaxColumn(futureAboveLineNumber);\n let enter = LanguageConfigurationRegistry.getEnterAction(this._autoIndent, model, new Range(futureAboveLineNumber, maxColumn, futureAboveLineNumber, maxColumn));\n return this.parseEnterResult(model, indentConverter, tabSize, line, enter);\n }\n else {\n // go upwards, starting from `line - 1`\n let validPrecedingLine = line - 1;\n while (validPrecedingLine >= 1) {\n let lineContent = model.getLineContent(validPrecedingLine);\n let nonWhitespaceIdx = strings.lastNonWhitespaceIndex(lineContent);\n if (nonWhitespaceIdx >= 0) {\n break;\n }\n validPrecedingLine--;\n }\n if (validPrecedingLine < 1 || line > model.getLineCount()) {\n return null;\n }\n let maxColumn = model.getLineMaxColumn(validPrecedingLine);\n let enter = LanguageConfigurationRegistry.getEnterAction(this._autoIndent, model, new Range(validPrecedingLine, maxColumn, validPrecedingLine, maxColumn));\n return this.parseEnterResult(model, indentConverter, tabSize, line, enter);\n }\n }\n matchEnterRule(model, indentConverter, tabSize, line, oneLineAbove, previousLineText) {\n let validPrecedingLine = oneLineAbove;\n while (validPrecedingLine >= 1) {\n // ship empty lines as empty lines just inherit indentation\n let lineContent;\n if (validPrecedingLine === oneLineAbove && previousLineText !== undefined) {\n lineContent = previousLineText;\n }\n else {\n lineContent = model.getLineContent(validPrecedingLine);\n }\n let nonWhitespaceIdx = strings.lastNonWhitespaceIndex(lineContent);\n if (nonWhitespaceIdx >= 0) {\n break;\n }\n validPrecedingLine--;\n }\n if (validPrecedingLine < 1 || line > model.getLineCount()) {\n return null;\n }\n let maxColumn = model.getLineMaxColumn(validPrecedingLine);\n let enter = LanguageConfigurationRegistry.getEnterAction(this._autoIndent, model, new Range(validPrecedingLine, maxColumn, validPrecedingLine, maxColumn));\n return this.parseEnterResult(model, indentConverter, tabSize, line, enter);\n }\n trimLeft(str) {\n return str.replace(/^\\s+/, '');\n }\n shouldAutoIndent(model, selection) {\n if (this._autoIndent < 4 /* Full */) {\n return false;\n }\n // if it's not easy to tokenize, we stop auto indent.\n if (!model.isCheapToTokenize(selection.startLineNumber)) {\n return false;\n }\n let languageAtSelectionStart = model.getLanguageIdAtPosition(selection.startLineNumber, 1);\n let languageAtSelectionEnd = model.getLanguageIdAtPosition(selection.endLineNumber, 1);\n if (languageAtSelectionStart !== languageAtSelectionEnd) {\n return false;\n }\n if (LanguageConfigurationRegistry.getIndentRulesSupport(languageAtSelectionStart) === null) {\n return false;\n }\n return true;\n }\n getIndentEditsOfMovingBlock(model, builder, s, tabSize, insertSpaces, offset) {\n for (let i = s.startLineNumber; i <= s.endLineNumber; i++) {\n let lineContent = model.getLineContent(i);\n let originalIndent = strings.getLeadingWhitespace(lineContent);\n let originalSpacesCnt = indentUtils.getSpaceCnt(originalIndent, tabSize);\n let newSpacesCnt = originalSpacesCnt + offset;\n let newIndent = indentUtils.generateIndent(newSpacesCnt, tabSize, insertSpaces);\n if (newIndent !== originalIndent) {\n builder.addEditOperation(new Range(i, 1, i, originalIndent.length + 1), newIndent);\n if (i === s.endLineNumber && s.endColumn <= originalIndent.length + 1 && newIndent === '') {\n // as users select part of the original indent white spaces\n // when we adjust the indentation of endLine, we should adjust the cursor position as well.\n this._moveEndLineSelectionShrink = true;\n }\n }\n }\n }\n computeCursorState(model, helper) {\n let result = helper.getTrackedSelection(this._selectionId);\n if (this._moveEndPositionDown) {\n result = result.setEndPosition(result.endLineNumber + 1, 1);\n }\n if (this._moveEndLineSelectionShrink && result.startLineNumber < result.endLineNumber) {\n result = result.setEndPosition(result.endLineNumber, 2);\n }\n return result;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { EditOperation } from '../../common/core/editOperation.js';\nimport { Range } from '../../common/core/range.js';\nexport class SortLinesCommand {\n constructor(selection, descending) {\n this.selection = selection;\n this.descending = descending;\n this.selectionId = null;\n }\n static getCollator() {\n if (!SortLinesCommand._COLLATOR) {\n SortLinesCommand._COLLATOR = new Intl.Collator();\n }\n return SortLinesCommand._COLLATOR;\n }\n getEditOperations(model, builder) {\n let op = sortLines(model, this.selection, this.descending);\n if (op) {\n builder.addEditOperation(op.range, op.text);\n }\n this.selectionId = builder.trackSelection(this.selection);\n }\n computeCursorState(model, helper) {\n return helper.getTrackedSelection(this.selectionId);\n }\n static canRun(model, selection, descending) {\n if (model === null) {\n return false;\n }\n let data = getSortData(model, selection, descending);\n if (!data) {\n return false;\n }\n for (let i = 0, len = data.before.length; i < len; i++) {\n if (data.before[i] !== data.after[i]) {\n return true;\n }\n }\n return false;\n }\n}\nSortLinesCommand._COLLATOR = null;\nfunction getSortData(model, selection, descending) {\n let startLineNumber = selection.startLineNumber;\n let endLineNumber = selection.endLineNumber;\n if (selection.endColumn === 1) {\n endLineNumber--;\n }\n // Nothing to sort if user didn't select anything.\n if (startLineNumber >= endLineNumber) {\n return null;\n }\n let linesToSort = [];\n // Get the contents of the selection to be sorted.\n for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n linesToSort.push(model.getLineContent(lineNumber));\n }\n let sorted = linesToSort.slice(0);\n sorted.sort(SortLinesCommand.getCollator().compare);\n // If descending, reverse the order.\n if (descending === true) {\n sorted = sorted.reverse();\n }\n return {\n startLineNumber: startLineNumber,\n endLineNumber: endLineNumber,\n before: linesToSort,\n after: sorted\n };\n}\n/**\n * Generate commands for sorting lines on a model.\n */\nfunction sortLines(model, selection, descending) {\n let data = getSortData(model, selection, descending);\n if (!data) {\n return null;\n }\n return EditOperation.replace(new Range(data.startLineNumber, 1, data.endLineNumber, model.getLineMaxColumn(data.endLineNumber)), data.after.join('\\n'));\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { CoreEditingCommands } from '../../browser/controller/coreCommands.js';\nimport { EditorAction, registerEditorAction } from '../../browser/editorExtensions.js';\nimport { ReplaceCommand, ReplaceCommandThatPreservesSelection, ReplaceCommandThatSelectsText } from '../../common/commands/replaceCommand.js';\nimport { TrimTrailingWhitespaceCommand } from '../../common/commands/trimTrailingWhitespaceCommand.js';\nimport { TypeOperations } from '../../common/controller/cursorTypeOperations.js';\nimport { EditOperation } from '../../common/core/editOperation.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { CopyLinesCommand } from './copyLinesCommand.js';\nimport { MoveLinesCommand } from './moveLinesCommand.js';\nimport { SortLinesCommand } from './sortLinesCommand.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\n// copy lines\nclass AbstractCopyLinesAction extends EditorAction {\n constructor(down, opts) {\n super(opts);\n this.down = down;\n }\n run(_accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n const selections = editor.getSelections().map((selection, index) => ({ selection, index, ignore: false }));\n selections.sort((a, b) => Range.compareRangesUsingStarts(a.selection, b.selection));\n // Remove selections that would result in copying the same line\n let prev = selections[0];\n for (let i = 1; i < selections.length; i++) {\n const curr = selections[i];\n if (prev.selection.endLineNumber === curr.selection.startLineNumber) {\n // these two selections would copy the same line\n if (prev.index < curr.index) {\n // prev wins\n curr.ignore = true;\n }\n else {\n // curr wins\n prev.ignore = true;\n prev = curr;\n }\n }\n }\n const commands = [];\n for (const selection of selections) {\n commands.push(new CopyLinesCommand(selection.selection, this.down, selection.ignore));\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n}\nclass CopyLinesUpAction extends AbstractCopyLinesAction {\n constructor() {\n super(false, {\n id: 'editor.action.copyLinesUpAction',\n label: nls.localize('lines.copyUp', \"Copy Line Up\"),\n alias: 'Copy Line Up',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 512 /* Alt */ | 1024 /* Shift */ | 16 /* UpArrow */,\n linux: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 1024 /* Shift */ | 16 /* UpArrow */ },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '2_line',\n title: nls.localize({ key: 'miCopyLinesUp', comment: ['&& denotes a mnemonic'] }, \"&&Copy Line Up\"),\n order: 1\n }\n });\n }\n}\nclass CopyLinesDownAction extends AbstractCopyLinesAction {\n constructor() {\n super(true, {\n id: 'editor.action.copyLinesDownAction',\n label: nls.localize('lines.copyDown', \"Copy Line Down\"),\n alias: 'Copy Line Down',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 512 /* Alt */ | 1024 /* Shift */ | 18 /* DownArrow */,\n linux: { primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 1024 /* Shift */ | 18 /* DownArrow */ },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '2_line',\n title: nls.localize({ key: 'miCopyLinesDown', comment: ['&& denotes a mnemonic'] }, \"Co&&py Line Down\"),\n order: 2\n }\n });\n }\n}\nexport class DuplicateSelectionAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.duplicateSelection',\n label: nls.localize('duplicateSelection', \"Duplicate Selection\"),\n alias: 'Duplicate Selection',\n precondition: EditorContextKeys.writable,\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '2_line',\n title: nls.localize({ key: 'miDuplicateSelection', comment: ['&& denotes a mnemonic'] }, \"&&Duplicate Selection\"),\n order: 5\n }\n });\n }\n run(accessor, editor, args) {\n if (!editor.hasModel()) {\n return;\n }\n const commands = [];\n const selections = editor.getSelections();\n const model = editor.getModel();\n for (const selection of selections) {\n if (selection.isEmpty()) {\n commands.push(new CopyLinesCommand(selection, true));\n }\n else {\n const insertSelection = new Selection(selection.endLineNumber, selection.endColumn, selection.endLineNumber, selection.endColumn);\n commands.push(new ReplaceCommandThatSelectsText(insertSelection, model.getValueInRange(selection)));\n }\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n}\n// move lines\nclass AbstractMoveLinesAction extends EditorAction {\n constructor(down, opts) {\n super(opts);\n this.down = down;\n }\n run(_accessor, editor) {\n let commands = [];\n let selections = editor.getSelections() || [];\n const autoIndent = editor.getOption(9 /* autoIndent */);\n for (const selection of selections) {\n commands.push(new MoveLinesCommand(selection, this.down, autoIndent));\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n}\nclass MoveLinesUpAction extends AbstractMoveLinesAction {\n constructor() {\n super(false, {\n id: 'editor.action.moveLinesUpAction',\n label: nls.localize('lines.moveUp', \"Move Line Up\"),\n alias: 'Move Line Up',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 512 /* Alt */ | 16 /* UpArrow */,\n linux: { primary: 512 /* Alt */ | 16 /* UpArrow */ },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '2_line',\n title: nls.localize({ key: 'miMoveLinesUp', comment: ['&& denotes a mnemonic'] }, \"Mo&&ve Line Up\"),\n order: 3\n }\n });\n }\n}\nclass MoveLinesDownAction extends AbstractMoveLinesAction {\n constructor() {\n super(true, {\n id: 'editor.action.moveLinesDownAction',\n label: nls.localize('lines.moveDown', \"Move Line Down\"),\n alias: 'Move Line Down',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 512 /* Alt */ | 18 /* DownArrow */,\n linux: { primary: 512 /* Alt */ | 18 /* DownArrow */ },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '2_line',\n title: nls.localize({ key: 'miMoveLinesDown', comment: ['&& denotes a mnemonic'] }, \"Move &&Line Down\"),\n order: 4\n }\n });\n }\n}\nexport class AbstractSortLinesAction extends EditorAction {\n constructor(descending, opts) {\n super(opts);\n this.descending = descending;\n }\n run(_accessor, editor) {\n const selections = editor.getSelections() || [];\n for (const selection of selections) {\n if (!SortLinesCommand.canRun(editor.getModel(), selection, this.descending)) {\n return;\n }\n }\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n commands[i] = new SortLinesCommand(selections[i], this.descending);\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n}\nexport class SortLinesAscendingAction extends AbstractSortLinesAction {\n constructor() {\n super(false, {\n id: 'editor.action.sortLinesAscending',\n label: nls.localize('lines.sortAscending', \"Sort Lines Ascending\"),\n alias: 'Sort Lines Ascending',\n precondition: EditorContextKeys.writable\n });\n }\n}\nexport class SortLinesDescendingAction extends AbstractSortLinesAction {\n constructor() {\n super(true, {\n id: 'editor.action.sortLinesDescending',\n label: nls.localize('lines.sortDescending', \"Sort Lines Descending\"),\n alias: 'Sort Lines Descending',\n precondition: EditorContextKeys.writable\n });\n }\n}\nexport class TrimTrailingWhitespaceAction extends EditorAction {\n constructor() {\n super({\n id: TrimTrailingWhitespaceAction.ID,\n label: nls.localize('lines.trimTrailingWhitespace', \"Trim Trailing Whitespace\"),\n alias: 'Trim Trailing Whitespace',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 54 /* KEY_X */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor, args) {\n let cursors = [];\n if (args.reason === 'auto-save') {\n // See https://github.com/editorconfig/editorconfig-vscode/issues/47\n // It is very convenient for the editor config extension to invoke this action.\n // So, if we get a reason:'auto-save' passed in, let's preserve cursor positions.\n cursors = (editor.getSelections() || []).map(s => new Position(s.positionLineNumber, s.positionColumn));\n }\n let selection = editor.getSelection();\n if (selection === null) {\n return;\n }\n let command = new TrimTrailingWhitespaceCommand(selection, cursors);\n editor.pushUndoStop();\n editor.executeCommands(this.id, [command]);\n editor.pushUndoStop();\n }\n}\nTrimTrailingWhitespaceAction.ID = 'editor.action.trimTrailingWhitespace';\nexport class DeleteLinesAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.deleteLines',\n label: nls.localize('lines.delete', \"Delete Line\"),\n alias: 'Delete Line',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 41 /* KEY_K */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n let ops = this._getLinesToRemove(editor);\n let model = editor.getModel();\n if (model.getLineCount() === 1 && model.getLineMaxColumn(1) === 1) {\n // Model is empty\n return;\n }\n let linesDeleted = 0;\n let edits = [];\n let cursorState = [];\n for (let i = 0, len = ops.length; i < len; i++) {\n const op = ops[i];\n let startLineNumber = op.startLineNumber;\n let endLineNumber = op.endLineNumber;\n let startColumn = 1;\n let endColumn = model.getLineMaxColumn(endLineNumber);\n if (endLineNumber < model.getLineCount()) {\n endLineNumber += 1;\n endColumn = 1;\n }\n else if (startLineNumber > 1) {\n startLineNumber -= 1;\n startColumn = model.getLineMaxColumn(startLineNumber);\n }\n edits.push(EditOperation.replace(new Selection(startLineNumber, startColumn, endLineNumber, endColumn), ''));\n cursorState.push(new Selection(startLineNumber - linesDeleted, op.positionColumn, startLineNumber - linesDeleted, op.positionColumn));\n linesDeleted += (op.endLineNumber - op.startLineNumber + 1);\n }\n editor.pushUndoStop();\n editor.executeEdits(this.id, edits, cursorState);\n editor.pushUndoStop();\n }\n _getLinesToRemove(editor) {\n // Construct delete operations\n let operations = editor.getSelections().map((s) => {\n let endLineNumber = s.endLineNumber;\n if (s.startLineNumber < s.endLineNumber && s.endColumn === 1) {\n endLineNumber -= 1;\n }\n return {\n startLineNumber: s.startLineNumber,\n selectionStartColumn: s.selectionStartColumn,\n endLineNumber: endLineNumber,\n positionColumn: s.positionColumn\n };\n });\n // Sort delete operations\n operations.sort((a, b) => {\n if (a.startLineNumber === b.startLineNumber) {\n return a.endLineNumber - b.endLineNumber;\n }\n return a.startLineNumber - b.startLineNumber;\n });\n // Merge delete operations which are adjacent or overlapping\n let mergedOperations = [];\n let previousOperation = operations[0];\n for (let i = 1; i < operations.length; i++) {\n if (previousOperation.endLineNumber + 1 >= operations[i].startLineNumber) {\n // Merge current operations into the previous one\n previousOperation.endLineNumber = operations[i].endLineNumber;\n }\n else {\n // Push previous operation\n mergedOperations.push(previousOperation);\n previousOperation = operations[i];\n }\n }\n // Push the last operation\n mergedOperations.push(previousOperation);\n return mergedOperations;\n }\n}\nexport class IndentLinesAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.indentLines',\n label: nls.localize('lines.indent', \"Indent Line\"),\n alias: 'Indent Line',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 89 /* US_CLOSE_SQUARE_BRACKET */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n const viewModel = editor._getViewModel();\n if (!viewModel) {\n return;\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, TypeOperations.indent(viewModel.cursorConfig, editor.getModel(), editor.getSelections()));\n editor.pushUndoStop();\n }\n}\nclass OutdentLinesAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.outdentLines',\n label: nls.localize('lines.outdent', \"Outdent Line\"),\n alias: 'Outdent Line',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 87 /* US_OPEN_SQUARE_BRACKET */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n CoreEditingCommands.Outdent.runEditorCommand(_accessor, editor, null);\n }\n}\nexport class InsertLineBeforeAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.insertLineBefore',\n label: nls.localize('lines.insertBefore', \"Insert Line Above\"),\n alias: 'Insert Line Above',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 3 /* Enter */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n const viewModel = editor._getViewModel();\n if (!viewModel) {\n return;\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, TypeOperations.lineInsertBefore(viewModel.cursorConfig, editor.getModel(), editor.getSelections()));\n }\n}\nexport class InsertLineAfterAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.insertLineAfter',\n label: nls.localize('lines.insertAfter', \"Insert Line Below\"),\n alias: 'Insert Line Below',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 3 /* Enter */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n const viewModel = editor._getViewModel();\n if (!viewModel) {\n return;\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, TypeOperations.lineInsertAfter(viewModel.cursorConfig, editor.getModel(), editor.getSelections()));\n }\n}\nexport class AbstractDeleteAllToBoundaryAction extends EditorAction {\n run(_accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n const primaryCursor = editor.getSelection();\n let rangesToDelete = this._getRangesToDelete(editor);\n // merge overlapping selections\n let effectiveRanges = [];\n for (let i = 0, count = rangesToDelete.length - 1; i < count; i++) {\n let range = rangesToDelete[i];\n let nextRange = rangesToDelete[i + 1];\n if (Range.intersectRanges(range, nextRange) === null) {\n effectiveRanges.push(range);\n }\n else {\n rangesToDelete[i + 1] = Range.plusRange(range, nextRange);\n }\n }\n effectiveRanges.push(rangesToDelete[rangesToDelete.length - 1]);\n let endCursorState = this._getEndCursorState(primaryCursor, effectiveRanges);\n let edits = effectiveRanges.map(range => {\n return EditOperation.replace(range, '');\n });\n editor.pushUndoStop();\n editor.executeEdits(this.id, edits, endCursorState);\n editor.pushUndoStop();\n }\n}\nexport class DeleteAllLeftAction extends AbstractDeleteAllToBoundaryAction {\n constructor() {\n super({\n id: 'deleteAllLeft',\n label: nls.localize('lines.deleteAllLeft', \"Delete All Left\"),\n alias: 'Delete All Left',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 2048 /* CtrlCmd */ | 1 /* Backspace */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n _getEndCursorState(primaryCursor, rangesToDelete) {\n let endPrimaryCursor = null;\n let endCursorState = [];\n let deletedLines = 0;\n rangesToDelete.forEach(range => {\n let endCursor;\n if (range.endColumn === 1 && deletedLines > 0) {\n let newStartLine = range.startLineNumber - deletedLines;\n endCursor = new Selection(newStartLine, range.startColumn, newStartLine, range.startColumn);\n }\n else {\n endCursor = new Selection(range.startLineNumber, range.startColumn, range.startLineNumber, range.startColumn);\n }\n deletedLines += range.endLineNumber - range.startLineNumber;\n if (range.intersectRanges(primaryCursor)) {\n endPrimaryCursor = endCursor;\n }\n else {\n endCursorState.push(endCursor);\n }\n });\n if (endPrimaryCursor) {\n endCursorState.unshift(endPrimaryCursor);\n }\n return endCursorState;\n }\n _getRangesToDelete(editor) {\n let selections = editor.getSelections();\n if (selections === null) {\n return [];\n }\n let rangesToDelete = selections;\n let model = editor.getModel();\n if (model === null) {\n return [];\n }\n rangesToDelete.sort(Range.compareRangesUsingStarts);\n rangesToDelete = rangesToDelete.map(selection => {\n if (selection.isEmpty()) {\n if (selection.startColumn === 1) {\n let deleteFromLine = Math.max(1, selection.startLineNumber - 1);\n let deleteFromColumn = selection.startLineNumber === 1 ? 1 : model.getLineContent(deleteFromLine).length + 1;\n return new Range(deleteFromLine, deleteFromColumn, selection.startLineNumber, 1);\n }\n else {\n return new Range(selection.startLineNumber, 1, selection.startLineNumber, selection.startColumn);\n }\n }\n else {\n return new Range(selection.startLineNumber, 1, selection.endLineNumber, selection.endColumn);\n }\n });\n return rangesToDelete;\n }\n}\nexport class DeleteAllRightAction extends AbstractDeleteAllToBoundaryAction {\n constructor() {\n super({\n id: 'deleteAllRight',\n label: nls.localize('lines.deleteAllRight', \"Delete All Right\"),\n alias: 'Delete All Right',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 41 /* KEY_K */, secondary: [2048 /* CtrlCmd */ | 20 /* Delete */] },\n weight: 100 /* EditorContrib */\n }\n });\n }\n _getEndCursorState(primaryCursor, rangesToDelete) {\n let endPrimaryCursor = null;\n let endCursorState = [];\n for (let i = 0, len = rangesToDelete.length, offset = 0; i < len; i++) {\n let range = rangesToDelete[i];\n let endCursor = new Selection(range.startLineNumber - offset, range.startColumn, range.startLineNumber - offset, range.startColumn);\n if (range.intersectRanges(primaryCursor)) {\n endPrimaryCursor = endCursor;\n }\n else {\n endCursorState.push(endCursor);\n }\n }\n if (endPrimaryCursor) {\n endCursorState.unshift(endPrimaryCursor);\n }\n return endCursorState;\n }\n _getRangesToDelete(editor) {\n let model = editor.getModel();\n if (model === null) {\n return [];\n }\n let selections = editor.getSelections();\n if (selections === null) {\n return [];\n }\n let rangesToDelete = selections.map((sel) => {\n if (sel.isEmpty()) {\n const maxColumn = model.getLineMaxColumn(sel.startLineNumber);\n if (sel.startColumn === maxColumn) {\n return new Range(sel.startLineNumber, sel.startColumn, sel.startLineNumber + 1, 1);\n }\n else {\n return new Range(sel.startLineNumber, sel.startColumn, sel.startLineNumber, maxColumn);\n }\n }\n return sel;\n });\n rangesToDelete.sort(Range.compareRangesUsingStarts);\n return rangesToDelete;\n }\n}\nexport class JoinLinesAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.joinLines',\n label: nls.localize('lines.joinLines', \"Join Lines\"),\n alias: 'Join Lines',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 40 /* KEY_J */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(_accessor, editor) {\n let selections = editor.getSelections();\n if (selections === null) {\n return;\n }\n let primaryCursor = editor.getSelection();\n if (primaryCursor === null) {\n return;\n }\n selections.sort(Range.compareRangesUsingStarts);\n let reducedSelections = [];\n let lastSelection = selections.reduce((previousValue, currentValue) => {\n if (previousValue.isEmpty()) {\n if (previousValue.endLineNumber === currentValue.startLineNumber) {\n if (primaryCursor.equalsSelection(previousValue)) {\n primaryCursor = currentValue;\n }\n return currentValue;\n }\n if (currentValue.startLineNumber > previousValue.endLineNumber + 1) {\n reducedSelections.push(previousValue);\n return currentValue;\n }\n else {\n return new Selection(previousValue.startLineNumber, previousValue.startColumn, currentValue.endLineNumber, currentValue.endColumn);\n }\n }\n else {\n if (currentValue.startLineNumber > previousValue.endLineNumber) {\n reducedSelections.push(previousValue);\n return currentValue;\n }\n else {\n return new Selection(previousValue.startLineNumber, previousValue.startColumn, currentValue.endLineNumber, currentValue.endColumn);\n }\n }\n });\n reducedSelections.push(lastSelection);\n let model = editor.getModel();\n if (model === null) {\n return;\n }\n let edits = [];\n let endCursorState = [];\n let endPrimaryCursor = primaryCursor;\n let lineOffset = 0;\n for (let i = 0, len = reducedSelections.length; i < len; i++) {\n let selection = reducedSelections[i];\n let startLineNumber = selection.startLineNumber;\n let startColumn = 1;\n let columnDeltaOffset = 0;\n let endLineNumber, endColumn;\n let selectionEndPositionOffset = model.getLineContent(selection.endLineNumber).length - selection.endColumn;\n if (selection.isEmpty() || selection.startLineNumber === selection.endLineNumber) {\n let position = selection.getStartPosition();\n if (position.lineNumber < model.getLineCount()) {\n endLineNumber = startLineNumber + 1;\n endColumn = model.getLineMaxColumn(endLineNumber);\n }\n else {\n endLineNumber = position.lineNumber;\n endColumn = model.getLineMaxColumn(position.lineNumber);\n }\n }\n else {\n endLineNumber = selection.endLineNumber;\n endColumn = model.getLineMaxColumn(endLineNumber);\n }\n let trimmedLinesContent = model.getLineContent(startLineNumber);\n for (let i = startLineNumber + 1; i <= endLineNumber; i++) {\n let lineText = model.getLineContent(i);\n let firstNonWhitespaceIdx = model.getLineFirstNonWhitespaceColumn(i);\n if (firstNonWhitespaceIdx >= 1) {\n let insertSpace = true;\n if (trimmedLinesContent === '') {\n insertSpace = false;\n }\n if (insertSpace && (trimmedLinesContent.charAt(trimmedLinesContent.length - 1) === ' ' ||\n trimmedLinesContent.charAt(trimmedLinesContent.length - 1) === '\\t')) {\n insertSpace = false;\n trimmedLinesContent = trimmedLinesContent.replace(/[\\s\\uFEFF\\xA0]+$/g, ' ');\n }\n let lineTextWithoutIndent = lineText.substr(firstNonWhitespaceIdx - 1);\n trimmedLinesContent += (insertSpace ? ' ' : '') + lineTextWithoutIndent;\n if (insertSpace) {\n columnDeltaOffset = lineTextWithoutIndent.length + 1;\n }\n else {\n columnDeltaOffset = lineTextWithoutIndent.length;\n }\n }\n else {\n columnDeltaOffset = 0;\n }\n }\n let deleteSelection = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n if (!deleteSelection.isEmpty()) {\n let resultSelection;\n if (selection.isEmpty()) {\n edits.push(EditOperation.replace(deleteSelection, trimmedLinesContent));\n resultSelection = new Selection(deleteSelection.startLineNumber - lineOffset, trimmedLinesContent.length - columnDeltaOffset + 1, startLineNumber - lineOffset, trimmedLinesContent.length - columnDeltaOffset + 1);\n }\n else {\n if (selection.startLineNumber === selection.endLineNumber) {\n edits.push(EditOperation.replace(deleteSelection, trimmedLinesContent));\n resultSelection = new Selection(selection.startLineNumber - lineOffset, selection.startColumn, selection.endLineNumber - lineOffset, selection.endColumn);\n }\n else {\n edits.push(EditOperation.replace(deleteSelection, trimmedLinesContent));\n resultSelection = new Selection(selection.startLineNumber - lineOffset, selection.startColumn, selection.startLineNumber - lineOffset, trimmedLinesContent.length - selectionEndPositionOffset);\n }\n }\n if (Range.intersectRanges(deleteSelection, primaryCursor) !== null) {\n endPrimaryCursor = resultSelection;\n }\n else {\n endCursorState.push(resultSelection);\n }\n }\n lineOffset += deleteSelection.endLineNumber - deleteSelection.startLineNumber;\n }\n endCursorState.unshift(endPrimaryCursor);\n editor.pushUndoStop();\n editor.executeEdits(this.id, edits, endCursorState);\n editor.pushUndoStop();\n }\n}\nexport class TransposeAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.transpose',\n label: nls.localize('editor.transpose', \"Transpose characters around the cursor\"),\n alias: 'Transpose characters around the cursor',\n precondition: EditorContextKeys.writable\n });\n }\n run(_accessor, editor) {\n let selections = editor.getSelections();\n if (selections === null) {\n return;\n }\n let model = editor.getModel();\n if (model === null) {\n return;\n }\n let commands = [];\n for (let i = 0, len = selections.length; i < len; i++) {\n let selection = selections[i];\n if (!selection.isEmpty()) {\n continue;\n }\n let cursor = selection.getStartPosition();\n let maxColumn = model.getLineMaxColumn(cursor.lineNumber);\n if (cursor.column >= maxColumn) {\n if (cursor.lineNumber === model.getLineCount()) {\n continue;\n }\n // The cursor is at the end of current line and current line is not empty\n // then we transpose the character before the cursor and the line break if there is any following line.\n let deleteSelection = new Range(cursor.lineNumber, Math.max(1, cursor.column - 1), cursor.lineNumber + 1, 1);\n let chars = model.getValueInRange(deleteSelection).split('').reverse().join('');\n commands.push(new ReplaceCommand(new Selection(cursor.lineNumber, Math.max(1, cursor.column - 1), cursor.lineNumber + 1, 1), chars));\n }\n else {\n let deleteSelection = new Range(cursor.lineNumber, Math.max(1, cursor.column - 1), cursor.lineNumber, cursor.column + 1);\n let chars = model.getValueInRange(deleteSelection).split('').reverse().join('');\n commands.push(new ReplaceCommandThatPreservesSelection(deleteSelection, chars, new Selection(cursor.lineNumber, cursor.column + 1, cursor.lineNumber, cursor.column + 1)));\n }\n }\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n}\nexport class AbstractCaseAction extends EditorAction {\n run(_accessor, editor) {\n const selections = editor.getSelections();\n if (selections === null) {\n return;\n }\n const model = editor.getModel();\n if (model === null) {\n return;\n }\n const wordSeparators = editor.getOption(113 /* wordSeparators */);\n const textEdits = [];\n for (const selection of selections) {\n if (selection.isEmpty()) {\n const cursor = selection.getStartPosition();\n const word = editor.getConfiguredWordAtPosition(cursor);\n if (!word) {\n continue;\n }\n const wordRange = new Range(cursor.lineNumber, word.startColumn, cursor.lineNumber, word.endColumn);\n const text = model.getValueInRange(wordRange);\n textEdits.push(EditOperation.replace(wordRange, this._modifyText(text, wordSeparators)));\n }\n else {\n const text = model.getValueInRange(selection);\n textEdits.push(EditOperation.replace(selection, this._modifyText(text, wordSeparators)));\n }\n }\n editor.pushUndoStop();\n editor.executeEdits(this.id, textEdits);\n editor.pushUndoStop();\n }\n}\nexport class UpperCaseAction extends AbstractCaseAction {\n constructor() {\n super({\n id: 'editor.action.transformToUppercase',\n label: nls.localize('editor.transformToUppercase', \"Transform to Uppercase\"),\n alias: 'Transform to Uppercase',\n precondition: EditorContextKeys.writable\n });\n }\n _modifyText(text, wordSeparators) {\n return text.toLocaleUpperCase();\n }\n}\nexport class LowerCaseAction extends AbstractCaseAction {\n constructor() {\n super({\n id: 'editor.action.transformToLowercase',\n label: nls.localize('editor.transformToLowercase', \"Transform to Lowercase\"),\n alias: 'Transform to Lowercase',\n precondition: EditorContextKeys.writable\n });\n }\n _modifyText(text, wordSeparators) {\n return text.toLocaleLowerCase();\n }\n}\nexport class TitleCaseAction extends AbstractCaseAction {\n constructor() {\n super({\n id: 'editor.action.transformToTitlecase',\n label: nls.localize('editor.transformToTitlecase', \"Transform to Title Case\"),\n alias: 'Transform to Title Case',\n precondition: EditorContextKeys.writable\n });\n }\n _modifyText(text, wordSeparators) {\n const separators = '\\r\\n\\t ' + wordSeparators;\n const excludedChars = separators.split('');\n let title = '';\n let startUpperCase = true;\n for (let i = 0; i < text.length; i++) {\n let currentChar = text[i];\n if (excludedChars.indexOf(currentChar) >= 0) {\n startUpperCase = true;\n title += currentChar;\n }\n else if (startUpperCase) {\n startUpperCase = false;\n title += currentChar.toLocaleUpperCase();\n }\n else {\n title += currentChar.toLocaleLowerCase();\n }\n }\n return title;\n }\n}\nclass BackwardsCompatibleRegExp {\n constructor(_pattern, _flags) {\n this._pattern = _pattern;\n this._flags = _flags;\n this._actual = null;\n this._evaluated = false;\n }\n get() {\n if (!this._evaluated) {\n this._evaluated = true;\n try {\n this._actual = new RegExp(this._pattern, this._flags);\n }\n catch (err) {\n // this browser does not support this regular expression\n }\n }\n return this._actual;\n }\n isSupported() {\n return (this.get() !== null);\n }\n}\nexport class SnakeCaseAction extends AbstractCaseAction {\n constructor() {\n super({\n id: 'editor.action.transformToSnakecase',\n label: nls.localize('editor.transformToSnakecase', \"Transform to Snake Case\"),\n alias: 'Transform to Snake Case',\n precondition: EditorContextKeys.writable\n });\n }\n _modifyText(text, wordSeparators) {\n const regExp1 = SnakeCaseAction.regExp1.get();\n const regExp2 = SnakeCaseAction.regExp2.get();\n if (!regExp1 || !regExp2) {\n // cannot support this\n return text;\n }\n return (text\n .replace(regExp1, '$1_$2')\n .replace(regExp2, '$1_$2$3')\n .toLocaleLowerCase());\n }\n}\nSnakeCaseAction.regExp1 = new BackwardsCompatibleRegExp('(\\\\p{Ll})(\\\\p{Lu})', 'gmu');\nSnakeCaseAction.regExp2 = new BackwardsCompatibleRegExp('(\\\\p{Lu}|\\\\p{N})(\\\\p{Lu})(\\\\p{Ll})', 'gmu');\nregisterEditorAction(CopyLinesUpAction);\nregisterEditorAction(CopyLinesDownAction);\nregisterEditorAction(DuplicateSelectionAction);\nregisterEditorAction(MoveLinesUpAction);\nregisterEditorAction(MoveLinesDownAction);\nregisterEditorAction(SortLinesAscendingAction);\nregisterEditorAction(SortLinesDescendingAction);\nregisterEditorAction(TrimTrailingWhitespaceAction);\nregisterEditorAction(DeleteLinesAction);\nregisterEditorAction(IndentLinesAction);\nregisterEditorAction(OutdentLinesAction);\nregisterEditorAction(InsertLineBeforeAction);\nregisterEditorAction(InsertLineAfterAction);\nregisterEditorAction(DeleteAllLeftAction);\nregisterEditorAction(DeleteAllRightAction);\nregisterEditorAction(JoinLinesAction);\nregisterEditorAction(TransposeAction);\nregisterEditorAction(UpperCaseAction);\nregisterEditorAction(LowerCaseAction);\nregisterEditorAction(TitleCaseAction);\nif (SnakeCaseAction.regExp1.isSupported() && SnakeCaseAction.regExp2.isSupported()) {\n registerEditorAction(SnakeCaseAction);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../../nls.js';\nimport { registerEditorContribution, registerModelAndPositionCommand, EditorAction, EditorCommand, registerEditorAction, registerEditorCommand } from '../../browser/editorExtensions.js';\nimport * as arrays from '../../../base/common/arrays.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { Position } from '../../common/core/position.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { Range } from '../../common/core/range.js';\nimport { LinkedEditingRangeProviderRegistry } from '../../common/modes.js';\nimport { first, createCancelablePromise, Delayer } from '../../../base/common/async.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { ContextKeyExpr, RawContextKey, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { isPromiseCanceledError, onUnexpectedError, onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { registerColor } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { Color } from '../../../base/common/color.js';\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\nexport const CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE = new RawContextKey('LinkedEditingInputVisible', false);\nconst DECORATION_CLASS_NAME = 'linked-editing-decoration';\nlet LinkedEditingContribution = class LinkedEditingContribution extends Disposable {\n constructor(editor, contextKeyService) {\n super();\n this._debounceDuration = 200;\n this._localToDispose = this._register(new DisposableStore());\n this._editor = editor;\n this._enabled = false;\n this._visibleContextKey = CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE.bindTo(contextKeyService);\n this._currentDecorations = [];\n this._languageWordPattern = null;\n this._currentWordPattern = null;\n this._ignoreChangeEvent = false;\n this._localToDispose = this._register(new DisposableStore());\n this._rangeUpdateTriggerPromise = null;\n this._rangeSyncTriggerPromise = null;\n this._currentRequest = null;\n this._currentRequestPosition = null;\n this._currentRequestModelVersion = null;\n this._register(this._editor.onDidChangeModel(() => this.reinitialize()));\n this._register(this._editor.onDidChangeConfiguration(e => {\n if (e.hasChanged(58 /* linkedEditing */) || e.hasChanged(78 /* renameOnType */)) {\n this.reinitialize();\n }\n }));\n this._register(LinkedEditingRangeProviderRegistry.onDidChange(() => this.reinitialize()));\n this._register(this._editor.onDidChangeModelLanguage(() => this.reinitialize()));\n this.reinitialize();\n }\n static get(editor) {\n return editor.getContribution(LinkedEditingContribution.ID);\n }\n reinitialize() {\n const model = this._editor.getModel();\n const isEnabled = model !== null && (this._editor.getOption(58 /* linkedEditing */) || this._editor.getOption(78 /* renameOnType */)) && LinkedEditingRangeProviderRegistry.has(model);\n if (isEnabled === this._enabled) {\n return;\n }\n this._enabled = isEnabled;\n this.clearRanges();\n this._localToDispose.clear();\n if (!isEnabled || model === null) {\n return;\n }\n this._languageWordPattern = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageIdentifier().id);\n this._localToDispose.add(model.onDidChangeLanguageConfiguration(() => {\n this._languageWordPattern = LanguageConfigurationRegistry.getWordDefinition(model.getLanguageIdentifier().id);\n }));\n const rangeUpdateScheduler = new Delayer(this._debounceDuration);\n const triggerRangeUpdate = () => {\n this._rangeUpdateTriggerPromise = rangeUpdateScheduler.trigger(() => this.updateRanges(), this._debounceDuration);\n };\n const rangeSyncScheduler = new Delayer(0);\n const triggerRangeSync = (decorations) => {\n this._rangeSyncTriggerPromise = rangeSyncScheduler.trigger(() => this._syncRanges(decorations));\n };\n this._localToDispose.add(this._editor.onDidChangeCursorPosition(() => {\n triggerRangeUpdate();\n }));\n this._localToDispose.add(this._editor.onDidChangeModelContent((e) => {\n if (!this._ignoreChangeEvent) {\n if (this._currentDecorations.length > 0) {\n const referenceRange = model.getDecorationRange(this._currentDecorations[0]);\n if (referenceRange && e.changes.every(c => referenceRange.intersectRanges(c.range))) {\n triggerRangeSync(this._currentDecorations);\n return;\n }\n }\n }\n triggerRangeUpdate();\n }));\n this._localToDispose.add({\n dispose: () => {\n rangeUpdateScheduler.cancel();\n rangeSyncScheduler.cancel();\n }\n });\n this.updateRanges();\n }\n _syncRanges(decorations) {\n // dalayed invocation, make sure we're still on\n if (!this._editor.hasModel() || decorations !== this._currentDecorations || decorations.length === 0) {\n // nothing to do\n return;\n }\n const model = this._editor.getModel();\n const referenceRange = model.getDecorationRange(decorations[0]);\n if (!referenceRange || referenceRange.startLineNumber !== referenceRange.endLineNumber) {\n return this.clearRanges();\n }\n const referenceValue = model.getValueInRange(referenceRange);\n if (this._currentWordPattern) {\n const match = referenceValue.match(this._currentWordPattern);\n const matchLength = match ? match[0].length : 0;\n if (matchLength !== referenceValue.length) {\n return this.clearRanges();\n }\n }\n let edits = [];\n for (let i = 1, len = decorations.length; i < len; i++) {\n const mirrorRange = model.getDecorationRange(decorations[i]);\n if (!mirrorRange) {\n continue;\n }\n if (mirrorRange.startLineNumber !== mirrorRange.endLineNumber) {\n edits.push({\n range: mirrorRange,\n text: referenceValue\n });\n }\n else {\n let oldValue = model.getValueInRange(mirrorRange);\n let newValue = referenceValue;\n let rangeStartColumn = mirrorRange.startColumn;\n let rangeEndColumn = mirrorRange.endColumn;\n const commonPrefixLength = strings.commonPrefixLength(oldValue, newValue);\n rangeStartColumn += commonPrefixLength;\n oldValue = oldValue.substr(commonPrefixLength);\n newValue = newValue.substr(commonPrefixLength);\n const commonSuffixLength = strings.commonSuffixLength(oldValue, newValue);\n rangeEndColumn -= commonSuffixLength;\n oldValue = oldValue.substr(0, oldValue.length - commonSuffixLength);\n newValue = newValue.substr(0, newValue.length - commonSuffixLength);\n if (rangeStartColumn !== rangeEndColumn || newValue.length !== 0) {\n edits.push({\n range: new Range(mirrorRange.startLineNumber, rangeStartColumn, mirrorRange.endLineNumber, rangeEndColumn),\n text: newValue\n });\n }\n }\n }\n if (edits.length === 0) {\n return;\n }\n try {\n this._editor.popUndoStop();\n this._ignoreChangeEvent = true;\n const prevEditOperationType = this._editor._getViewModel().getPrevEditOperationType();\n this._editor.executeEdits('linkedEditing', edits);\n this._editor._getViewModel().setPrevEditOperationType(prevEditOperationType);\n }\n finally {\n this._ignoreChangeEvent = false;\n }\n }\n dispose() {\n this.clearRanges();\n super.dispose();\n }\n clearRanges() {\n this._visibleContextKey.set(false);\n this._currentDecorations = this._editor.deltaDecorations(this._currentDecorations, []);\n if (this._currentRequest) {\n this._currentRequest.cancel();\n this._currentRequest = null;\n this._currentRequestPosition = null;\n }\n }\n updateRanges(force = false) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._editor.hasModel()) {\n this.clearRanges();\n return;\n }\n const position = this._editor.getPosition();\n if (!this._enabled && !force || this._editor.getSelections().length > 1) {\n // disabled or multicursor\n this.clearRanges();\n return;\n }\n const model = this._editor.getModel();\n const modelVersionId = model.getVersionId();\n if (this._currentRequestPosition && this._currentRequestModelVersion === modelVersionId) {\n if (position.equals(this._currentRequestPosition)) {\n return; // same position\n }\n if (this._currentDecorations && this._currentDecorations.length > 0) {\n const range = model.getDecorationRange(this._currentDecorations[0]);\n if (range && range.containsPosition(position)) {\n return; // just moving inside the existing primary range\n }\n }\n }\n this._currentRequestPosition = position;\n this._currentRequestModelVersion = modelVersionId;\n const request = createCancelablePromise((token) => __awaiter(this, void 0, void 0, function* () {\n try {\n const response = yield getLinkedEditingRanges(model, position, token);\n if (request !== this._currentRequest) {\n return;\n }\n this._currentRequest = null;\n if (modelVersionId !== model.getVersionId()) {\n return;\n }\n let ranges = [];\n if (response === null || response === void 0 ? void 0 : response.ranges) {\n ranges = response.ranges;\n }\n this._currentWordPattern = (response === null || response === void 0 ? void 0 : response.wordPattern) || this._languageWordPattern;\n let foundReferenceRange = false;\n for (let i = 0, len = ranges.length; i < len; i++) {\n if (Range.containsPosition(ranges[i], position)) {\n foundReferenceRange = true;\n if (i !== 0) {\n const referenceRange = ranges[i];\n ranges.splice(i, 1);\n ranges.unshift(referenceRange);\n }\n break;\n }\n }\n if (!foundReferenceRange) {\n // Cannot do linked editing if the ranges are not where the cursor is...\n this.clearRanges();\n return;\n }\n const decorations = ranges.map(range => ({ range: range, options: LinkedEditingContribution.DECORATION }));\n this._visibleContextKey.set(true);\n this._currentDecorations = this._editor.deltaDecorations(this._currentDecorations, decorations);\n }\n catch (err) {\n if (!isPromiseCanceledError(err)) {\n onUnexpectedError(err);\n }\n if (this._currentRequest === request || !this._currentRequest) {\n // stop if we are still the latest request\n this.clearRanges();\n }\n }\n }));\n this._currentRequest = request;\n return request;\n });\n }\n};\nLinkedEditingContribution.ID = 'editor.contrib.linkedEditing';\nLinkedEditingContribution.DECORATION = ModelDecorationOptions.register({\n stickiness: 0 /* AlwaysGrowsWhenTypingAtEdges */,\n className: DECORATION_CLASS_NAME\n});\nLinkedEditingContribution = __decorate([\n __param(1, IContextKeyService)\n], LinkedEditingContribution);\nexport { LinkedEditingContribution };\nexport class LinkedEditingAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.linkedEditing',\n label: nls.localize('linkedEditing.label', \"Start Linked Editing\"),\n alias: 'Start Linked Editing',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasRenameProvider),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 60 /* F2 */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n runCommand(accessor, args) {\n const editorService = accessor.get(ICodeEditorService);\n const [uri, pos] = Array.isArray(args) && args || [undefined, undefined];\n if (URI.isUri(uri) && Position.isIPosition(pos)) {\n return editorService.openCodeEditor({ resource: uri }, editorService.getActiveCodeEditor()).then(editor => {\n if (!editor) {\n return;\n }\n editor.setPosition(pos);\n editor.invokeWithinContext(accessor => {\n this.reportTelemetry(accessor, editor);\n return this.run(accessor, editor);\n });\n }, onUnexpectedError);\n }\n return super.runCommand(accessor, args);\n }\n run(_accessor, editor) {\n const controller = LinkedEditingContribution.get(editor);\n if (controller) {\n return Promise.resolve(controller.updateRanges(true));\n }\n return Promise.resolve();\n }\n}\nconst LinkedEditingCommand = EditorCommand.bindToContribution(LinkedEditingContribution.get);\nregisterEditorCommand(new LinkedEditingCommand({\n id: 'cancelLinkedEditingInput',\n precondition: CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE,\n handler: x => x.clearRanges(),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n weight: 100 /* EditorContrib */ + 99,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\n}));\nfunction getLinkedEditingRanges(model, position, token) {\n const orderedByScore = LinkedEditingRangeProviderRegistry.ordered(model);\n // in order of score ask the linked editing range provider\n // until someone response with a good result\n // (good = not null)\n return first(orderedByScore.map(provider => () => __awaiter(this, void 0, void 0, function* () {\n try {\n return yield provider.provideLinkedEditingRanges(model, position, token);\n }\n catch (e) {\n onUnexpectedExternalError(e);\n return undefined;\n }\n })), result => !!result && arrays.isNonEmptyArray(result === null || result === void 0 ? void 0 : result.ranges));\n}\nexport const editorLinkedEditingBackground = registerColor('editor.linkedEditingBackground', { dark: Color.fromHex('#f00').transparent(0.3), light: Color.fromHex('#f00').transparent(0.3), hc: Color.fromHex('#f00').transparent(0.3) }, nls.localize('editorLinkedEditingBackground', 'Background color when the editor auto renames on type.'));\nregisterThemingParticipant((theme, collector) => {\n const editorLinkedEditingBackgroundColor = theme.getColor(editorLinkedEditingBackground);\n if (editorLinkedEditingBackgroundColor) {\n collector.addRule(`.monaco-editor .${DECORATION_CLASS_NAME} { background: ${editorLinkedEditingBackgroundColor}; border-left-color: ${editorLinkedEditingBackgroundColor}; }`);\n }\n});\nregisterModelAndPositionCommand('_executeLinkedEditingProvider', (model, position) => getLinkedEditingRanges(model, position, CancellationToken.None));\nregisterEditorContribution(LinkedEditingContribution.ID, LinkedEditingContribution);\nregisterEditorAction(LinkedEditingAction);\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Range } from '../../common/core/range.js';\nimport { LinkProviderRegistry } from '../../common/modes.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { isDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { coalesce } from '../../../base/common/arrays.js';\nimport { assertType } from '../../../base/common/types.js';\nexport class Link {\n constructor(link, provider) {\n this._link = link;\n this._provider = provider;\n }\n toJSON() {\n return {\n range: this.range,\n url: this.url,\n tooltip: this.tooltip\n };\n }\n get range() {\n return this._link.range;\n }\n get url() {\n return this._link.url;\n }\n get tooltip() {\n return this._link.tooltip;\n }\n resolve(token) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._link.url) {\n return this._link.url;\n }\n if (typeof this._provider.resolveLink === 'function') {\n return Promise.resolve(this._provider.resolveLink(this._link, token)).then(value => {\n this._link = value || this._link;\n if (this._link.url) {\n // recurse\n return this.resolve(token);\n }\n return Promise.reject(new Error('missing'));\n });\n }\n return Promise.reject(new Error('missing'));\n });\n }\n}\nexport class LinksList {\n constructor(tuples) {\n this._disposables = new DisposableStore();\n let links = [];\n for (const [list, provider] of tuples) {\n // merge all links\n const newLinks = list.links.map(link => new Link(link, provider));\n links = LinksList._union(links, newLinks);\n // register disposables\n if (isDisposable(list)) {\n this._disposables.add(list);\n }\n }\n this.links = links;\n }\n dispose() {\n this._disposables.dispose();\n this.links.length = 0;\n }\n static _union(oldLinks, newLinks) {\n // reunite oldLinks with newLinks and remove duplicates\n let result = [];\n let oldIndex;\n let oldLen;\n let newIndex;\n let newLen;\n for (oldIndex = 0, newIndex = 0, oldLen = oldLinks.length, newLen = newLinks.length; oldIndex < oldLen && newIndex < newLen;) {\n const oldLink = oldLinks[oldIndex];\n const newLink = newLinks[newIndex];\n if (Range.areIntersectingOrTouching(oldLink.range, newLink.range)) {\n // Remove the oldLink\n oldIndex++;\n continue;\n }\n const comparisonResult = Range.compareRangesUsingStarts(oldLink.range, newLink.range);\n if (comparisonResult < 0) {\n // oldLink is before\n result.push(oldLink);\n oldIndex++;\n }\n else {\n // newLink is before\n result.push(newLink);\n newIndex++;\n }\n }\n for (; oldIndex < oldLen; oldIndex++) {\n result.push(oldLinks[oldIndex]);\n }\n for (; newIndex < newLen; newIndex++) {\n result.push(newLinks[newIndex]);\n }\n return result;\n }\n}\nexport function getLinks(model, token) {\n const lists = [];\n // ask all providers for links in parallel\n const promises = LinkProviderRegistry.ordered(model).reverse().map((provider, i) => {\n return Promise.resolve(provider.provideLinks(model, token)).then(result => {\n if (result) {\n lists[i] = [result, provider];\n }\n }, onUnexpectedExternalError);\n });\n return Promise.all(promises).then(() => {\n const result = new LinksList(coalesce(lists));\n if (!token.isCancellationRequested) {\n return result;\n }\n result.dispose();\n return new LinksList([]);\n });\n}\nCommandsRegistry.registerCommand('_executeLinkProvider', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {\n let [uri, resolveCount] = args;\n assertType(uri instanceof URI);\n if (typeof resolveCount !== 'number') {\n resolveCount = 0;\n }\n const model = accessor.get(IModelService).getModel(uri);\n if (!model) {\n return [];\n }\n const list = yield getLinks(model, CancellationToken.None);\n if (!list) {\n return [];\n }\n // resolve links\n for (let i = 0; i < Math.min(resolveCount, list.links.length); i++) {\n yield list.links[i].resolve(CancellationToken.None);\n }\n const result = list.links.slice(0);\n list.dispose();\n return result;\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport './links.css';\nimport * as nls from '../../../nls.js';\nimport * as async from '../../../base/common/async.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { MarkdownString } from '../../../base/common/htmlContent.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { LinkProviderRegistry } from '../../common/modes.js';\nimport { ClickLinkGesture } from '../gotoSymbol/link/clickLinkGesture.js';\nimport { getLinks } from './getLinks.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\nimport { editorActiveLinkForeground } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport * as resources from '../../../base/common/resources.js';\nfunction getHoverMessage(link, useMetaKey) {\n const executeCmd = link.url && /^command:/i.test(link.url.toString());\n const label = link.tooltip\n ? link.tooltip\n : executeCmd\n ? nls.localize('links.navigate.executeCmd', 'Execute command')\n : nls.localize('links.navigate.follow', 'Follow link');\n const kb = useMetaKey\n ? platform.isMacintosh\n ? nls.localize('links.navigate.kb.meta.mac', \"cmd + click\")\n : nls.localize('links.navigate.kb.meta', \"ctrl + click\")\n : platform.isMacintosh\n ? nls.localize('links.navigate.kb.alt.mac', \"option + click\")\n : nls.localize('links.navigate.kb.alt', \"alt + click\");\n if (link.url) {\n let nativeLabel = '';\n if (/^command:/i.test(link.url.toString())) {\n // Don't show complete command arguments in the native tooltip\n const match = link.url.toString().match(/^command:([^?#]+)/);\n if (match) {\n const commandId = match[1];\n const nativeLabelText = nls.localize('tooltip.explanation', \"Execute command {0}\", commandId);\n nativeLabel = ` \"${nativeLabelText}\"`;\n }\n }\n const hoverMessage = new MarkdownString('', true).appendMarkdown(`[${label}](${link.url.toString(true)}${nativeLabel}) (${kb})`);\n return hoverMessage;\n }\n else {\n return new MarkdownString().appendText(`${label} (${kb})`);\n }\n}\nconst decoration = {\n general: ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n collapseOnReplaceEdit: true,\n inlineClassName: 'detected-link'\n }),\n active: ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n collapseOnReplaceEdit: true,\n inlineClassName: 'detected-link-active'\n })\n};\nclass LinkOccurrence {\n constructor(link, decorationId) {\n this.link = link;\n this.decorationId = decorationId;\n }\n static decoration(link, useMetaKey) {\n return {\n range: link.range,\n options: LinkOccurrence._getOptions(link, useMetaKey, false)\n };\n }\n static _getOptions(link, useMetaKey, isActive) {\n const options = Object.assign({}, (isActive ? decoration.active : decoration.general));\n options.hoverMessage = getHoverMessage(link, useMetaKey);\n return options;\n }\n activate(changeAccessor, useMetaKey) {\n changeAccessor.changeDecorationOptions(this.decorationId, LinkOccurrence._getOptions(this.link, useMetaKey, true));\n }\n deactivate(changeAccessor, useMetaKey) {\n changeAccessor.changeDecorationOptions(this.decorationId, LinkOccurrence._getOptions(this.link, useMetaKey, false));\n }\n}\nlet LinkDetector = class LinkDetector {\n constructor(editor, openerService, notificationService) {\n this.listenersToRemove = new DisposableStore();\n this.editor = editor;\n this.openerService = openerService;\n this.notificationService = notificationService;\n let clickLinkGesture = new ClickLinkGesture(editor);\n this.listenersToRemove.add(clickLinkGesture);\n this.listenersToRemove.add(clickLinkGesture.onMouseMoveOrRelevantKeyDown(([mouseEvent, keyboardEvent]) => {\n this._onEditorMouseMove(mouseEvent, keyboardEvent);\n }));\n this.listenersToRemove.add(clickLinkGesture.onExecute((e) => {\n this.onEditorMouseUp(e);\n }));\n this.listenersToRemove.add(clickLinkGesture.onCancel((e) => {\n this.cleanUpActiveLinkDecoration();\n }));\n this.enabled = editor.getOption(59 /* links */);\n this.listenersToRemove.add(editor.onDidChangeConfiguration((e) => {\n const enabled = editor.getOption(59 /* links */);\n if (this.enabled === enabled) {\n // No change in our configuration option\n return;\n }\n this.enabled = enabled;\n // Remove any links (for the getting disabled case)\n this.updateDecorations([]);\n // Stop any computation (for the getting disabled case)\n this.stop();\n // Start computing (for the getting enabled case)\n this.beginCompute();\n }));\n this.listenersToRemove.add(editor.onDidChangeModelContent((e) => this.onChange()));\n this.listenersToRemove.add(editor.onDidChangeModel((e) => this.onModelChanged()));\n this.listenersToRemove.add(editor.onDidChangeModelLanguage((e) => this.onModelModeChanged()));\n this.listenersToRemove.add(LinkProviderRegistry.onDidChange((e) => this.onModelModeChanged()));\n this.timeout = new async.TimeoutTimer();\n this.computePromise = null;\n this.activeLinksList = null;\n this.currentOccurrences = {};\n this.activeLinkDecorationId = null;\n this.beginCompute();\n }\n static get(editor) {\n return editor.getContribution(LinkDetector.ID);\n }\n onModelChanged() {\n this.currentOccurrences = {};\n this.activeLinkDecorationId = null;\n this.stop();\n this.beginCompute();\n }\n onModelModeChanged() {\n this.stop();\n this.beginCompute();\n }\n onChange() {\n this.timeout.setIfNotSet(() => this.beginCompute(), LinkDetector.RECOMPUTE_TIME);\n }\n beginCompute() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.editor.hasModel() || !this.enabled) {\n return;\n }\n const model = this.editor.getModel();\n if (!LinkProviderRegistry.has(model)) {\n return;\n }\n if (this.activeLinksList) {\n this.activeLinksList.dispose();\n this.activeLinksList = null;\n }\n this.computePromise = async.createCancelablePromise(token => getLinks(model, token));\n try {\n this.activeLinksList = yield this.computePromise;\n this.updateDecorations(this.activeLinksList.links);\n }\n catch (err) {\n onUnexpectedError(err);\n }\n finally {\n this.computePromise = null;\n }\n });\n }\n updateDecorations(links) {\n const useMetaKey = (this.editor.getOption(66 /* multiCursorModifier */) === 'altKey');\n let oldDecorations = [];\n let keys = Object.keys(this.currentOccurrences);\n for (let i = 0, len = keys.length; i < len; i++) {\n let decorationId = keys[i];\n let occurance = this.currentOccurrences[decorationId];\n oldDecorations.push(occurance.decorationId);\n }\n let newDecorations = [];\n if (links) {\n // Not sure why this is sometimes null\n for (const link of links) {\n newDecorations.push(LinkOccurrence.decoration(link, useMetaKey));\n }\n }\n let decorations = this.editor.deltaDecorations(oldDecorations, newDecorations);\n this.currentOccurrences = {};\n this.activeLinkDecorationId = null;\n for (let i = 0, len = decorations.length; i < len; i++) {\n let occurance = new LinkOccurrence(links[i], decorations[i]);\n this.currentOccurrences[occurance.decorationId] = occurance;\n }\n }\n _onEditorMouseMove(mouseEvent, withKey) {\n const useMetaKey = (this.editor.getOption(66 /* multiCursorModifier */) === 'altKey');\n if (this.isEnabled(mouseEvent, withKey)) {\n this.cleanUpActiveLinkDecoration(); // always remove previous link decoration as their can only be one\n const occurrence = this.getLinkOccurrence(mouseEvent.target.position);\n if (occurrence) {\n this.editor.changeDecorations((changeAccessor) => {\n occurrence.activate(changeAccessor, useMetaKey);\n this.activeLinkDecorationId = occurrence.decorationId;\n });\n }\n }\n else {\n this.cleanUpActiveLinkDecoration();\n }\n }\n cleanUpActiveLinkDecoration() {\n const useMetaKey = (this.editor.getOption(66 /* multiCursorModifier */) === 'altKey');\n if (this.activeLinkDecorationId) {\n const occurrence = this.currentOccurrences[this.activeLinkDecorationId];\n if (occurrence) {\n this.editor.changeDecorations((changeAccessor) => {\n occurrence.deactivate(changeAccessor, useMetaKey);\n });\n }\n this.activeLinkDecorationId = null;\n }\n }\n onEditorMouseUp(mouseEvent) {\n if (!this.isEnabled(mouseEvent)) {\n return;\n }\n const occurrence = this.getLinkOccurrence(mouseEvent.target.position);\n if (!occurrence) {\n return;\n }\n this.openLinkOccurrence(occurrence, mouseEvent.hasSideBySideModifier, true /* from user gesture */);\n }\n openLinkOccurrence(occurrence, openToSide, fromUserGesture = false) {\n if (!this.openerService) {\n return;\n }\n const { link } = occurrence;\n link.resolve(CancellationToken.None).then(uri => {\n // Support for relative file URIs of the shape file://./relativeFile.txt or file:///./relativeFile.txt\n if (typeof uri === 'string' && this.editor.hasModel()) {\n const modelUri = this.editor.getModel().uri;\n if (modelUri.scheme === Schemas.file && uri.startsWith(`${Schemas.file}:`)) {\n const parsedUri = URI.parse(uri);\n if (parsedUri.scheme === Schemas.file) {\n const fsPath = resources.originalFSPath(parsedUri);\n let relativePath = null;\n if (fsPath.startsWith('/./')) {\n relativePath = `.${fsPath.substr(1)}`;\n }\n else if (fsPath.startsWith('//./')) {\n relativePath = `.${fsPath.substr(2)}`;\n }\n if (relativePath) {\n uri = resources.joinPath(modelUri, relativePath);\n }\n }\n }\n }\n return this.openerService.open(uri, { openToSide, fromUserGesture, allowContributedOpeners: true, allowCommands: true });\n }, err => {\n const messageOrError = err instanceof Error ? err.message : err;\n // different error cases\n if (messageOrError === 'invalid') {\n this.notificationService.warn(nls.localize('invalid.url', 'Failed to open this link because it is not well-formed: {0}', link.url.toString()));\n }\n else if (messageOrError === 'missing') {\n this.notificationService.warn(nls.localize('missing.url', 'Failed to open this link because its target is missing.'));\n }\n else {\n onUnexpectedError(err);\n }\n });\n }\n getLinkOccurrence(position) {\n if (!this.editor.hasModel() || !position) {\n return null;\n }\n const decorations = this.editor.getModel().getDecorationsInRange({\n startLineNumber: position.lineNumber,\n startColumn: position.column,\n endLineNumber: position.lineNumber,\n endColumn: position.column\n }, 0, true);\n for (const decoration of decorations) {\n const currentOccurrence = this.currentOccurrences[decoration.id];\n if (currentOccurrence) {\n return currentOccurrence;\n }\n }\n return null;\n }\n isEnabled(mouseEvent, withKey) {\n return Boolean((mouseEvent.target.type === 6 /* CONTENT_TEXT */)\n && (mouseEvent.hasTriggerModifier || (withKey && withKey.keyCodeIsTriggerKey)));\n }\n stop() {\n var _a;\n this.timeout.cancel();\n if (this.activeLinksList) {\n (_a = this.activeLinksList) === null || _a === void 0 ? void 0 : _a.dispose();\n this.activeLinksList = null;\n }\n if (this.computePromise) {\n this.computePromise.cancel();\n this.computePromise = null;\n }\n }\n dispose() {\n this.listenersToRemove.dispose();\n this.stop();\n this.timeout.dispose();\n }\n};\nLinkDetector.ID = 'editor.linkDetector';\nLinkDetector.RECOMPUTE_TIME = 1000; // ms\nLinkDetector = __decorate([\n __param(1, IOpenerService),\n __param(2, INotificationService)\n], LinkDetector);\nexport { LinkDetector };\nclass OpenLinkAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.openLink',\n label: nls.localize('label', \"Open Link\"),\n alias: 'Open Link',\n precondition: undefined\n });\n }\n run(accessor, editor) {\n let linkDetector = LinkDetector.get(editor);\n if (!linkDetector) {\n return;\n }\n if (!editor.hasModel()) {\n return;\n }\n let selections = editor.getSelections();\n for (let sel of selections) {\n let link = linkDetector.getLinkOccurrence(sel.getEndPosition());\n if (link) {\n linkDetector.openLinkOccurrence(link, false);\n }\n }\n }\n}\nregisterEditorContribution(LinkDetector.ID, LinkDetector);\nregisterEditorAction(OpenLinkAction);\nregisterThemingParticipant((theme, collector) => {\n const activeLinkForeground = theme.getColor(editorActiveLinkForeground);\n if (activeLinkForeground) {\n collector.addRule(`.monaco-editor .detected-link-active { color: ${activeLinkForeground} !important; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { KeyChord } from '../../../base/common/keyCodes.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { status } from '../../../base/browser/ui/aria/aria.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { CursorMoveCommands } from '../../common/controller/cursorMoveCommands.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { OverviewRulerLane } from '../../common/model.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { DocumentHighlightProviderRegistry } from '../../common/modes.js';\nimport { CommonFindController } from '../find/findController.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { overviewRulerSelectionHighlightForeground } from '../../../platform/theme/common/colorRegistry.js';\nimport { themeColorFromId } from '../../../platform/theme/common/themeService.js';\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\nfunction announceCursorChange(previousCursorState, cursorState) {\n const cursorDiff = cursorState.filter(cs => !previousCursorState.find(pcs => pcs.equals(cs)));\n if (cursorDiff.length >= 1) {\n const cursorPositions = cursorDiff.map(cs => `line ${cs.viewState.position.lineNumber} column ${cs.viewState.position.column}`).join(', ');\n const msg = cursorDiff.length === 1 ? nls.localize('cursorAdded', \"Cursor added: {0}\", cursorPositions) : nls.localize('cursorsAdded', \"Cursors added: {0}\", cursorPositions);\n status(msg);\n }\n}\nexport class InsertCursorAbove extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.insertCursorAbove',\n label: nls.localize('mutlicursor.insertAbove', \"Add Cursor Above\"),\n alias: 'Add Cursor Above',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 16 /* UpArrow */,\n linux: {\n primary: 1024 /* Shift */ | 512 /* Alt */ | 16 /* UpArrow */,\n secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 16 /* UpArrow */]\n },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '3_multi',\n title: nls.localize({ key: 'miInsertCursorAbove', comment: ['&& denotes a mnemonic'] }, \"&&Add Cursor Above\"),\n order: 2\n }\n });\n }\n run(accessor, editor, args) {\n if (!editor.hasModel()) {\n return;\n }\n const useLogicalLine = (args && args.logicalLine === true);\n const viewModel = editor._getViewModel();\n if (viewModel.cursorConfig.readOnly) {\n return;\n }\n viewModel.pushStackElement();\n const previousCursorState = viewModel.getCursorStates();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, CursorMoveCommands.addCursorUp(viewModel, previousCursorState, useLogicalLine));\n viewModel.revealTopMostCursor(args.source);\n announceCursorChange(previousCursorState, viewModel.getCursorStates());\n }\n}\nexport class InsertCursorBelow extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.insertCursorBelow',\n label: nls.localize('mutlicursor.insertBelow', \"Add Cursor Below\"),\n alias: 'Add Cursor Below',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 18 /* DownArrow */,\n linux: {\n primary: 1024 /* Shift */ | 512 /* Alt */ | 18 /* DownArrow */,\n secondary: [2048 /* CtrlCmd */ | 1024 /* Shift */ | 18 /* DownArrow */]\n },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '3_multi',\n title: nls.localize({ key: 'miInsertCursorBelow', comment: ['&& denotes a mnemonic'] }, \"A&&dd Cursor Below\"),\n order: 3\n }\n });\n }\n run(accessor, editor, args) {\n if (!editor.hasModel()) {\n return;\n }\n const useLogicalLine = (args && args.logicalLine === true);\n const viewModel = editor._getViewModel();\n if (viewModel.cursorConfig.readOnly) {\n return;\n }\n viewModel.pushStackElement();\n const previousCursorState = viewModel.getCursorStates();\n viewModel.setCursorStates(args.source, 3 /* Explicit */, CursorMoveCommands.addCursorDown(viewModel, previousCursorState, useLogicalLine));\n viewModel.revealBottomMostCursor(args.source);\n announceCursorChange(previousCursorState, viewModel.getCursorStates());\n }\n}\nclass InsertCursorAtEndOfEachLineSelected extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.insertCursorAtEndOfEachLineSelected',\n label: nls.localize('mutlicursor.insertAtEndOfEachLineSelected', \"Add Cursors to Line Ends\"),\n alias: 'Add Cursors to Line Ends',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 1024 /* Shift */ | 512 /* Alt */ | 39 /* KEY_I */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '3_multi',\n title: nls.localize({ key: 'miInsertCursorAtEndOfEachLineSelected', comment: ['&& denotes a mnemonic'] }, \"Add C&&ursors to Line Ends\"),\n order: 4\n }\n });\n }\n getCursorsForSelection(selection, model, result) {\n if (selection.isEmpty()) {\n return;\n }\n for (let i = selection.startLineNumber; i < selection.endLineNumber; i++) {\n let currentLineMaxColumn = model.getLineMaxColumn(i);\n result.push(new Selection(i, currentLineMaxColumn, i, currentLineMaxColumn));\n }\n if (selection.endColumn > 1) {\n result.push(new Selection(selection.endLineNumber, selection.endColumn, selection.endLineNumber, selection.endColumn));\n }\n }\n run(accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n const model = editor.getModel();\n const selections = editor.getSelections();\n const viewModel = editor._getViewModel();\n const previousCursorState = viewModel.getCursorStates();\n let newSelections = [];\n selections.forEach((sel) => this.getCursorsForSelection(sel, model, newSelections));\n if (newSelections.length > 0) {\n editor.setSelections(newSelections);\n }\n announceCursorChange(previousCursorState, viewModel.getCursorStates());\n }\n}\nclass InsertCursorAtEndOfLineSelected extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.addCursorsToBottom',\n label: nls.localize('mutlicursor.addCursorsToBottom', \"Add Cursors To Bottom\"),\n alias: 'Add Cursors To Bottom',\n precondition: undefined\n });\n }\n run(accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n const selections = editor.getSelections();\n const lineCount = editor.getModel().getLineCount();\n let newSelections = [];\n for (let i = selections[0].startLineNumber; i <= lineCount; i++) {\n newSelections.push(new Selection(i, selections[0].startColumn, i, selections[0].endColumn));\n }\n const viewModel = editor._getViewModel();\n const previousCursorState = viewModel.getCursorStates();\n if (newSelections.length > 0) {\n editor.setSelections(newSelections);\n }\n announceCursorChange(previousCursorState, viewModel.getCursorStates());\n }\n}\nclass InsertCursorAtTopOfLineSelected extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.addCursorsToTop',\n label: nls.localize('mutlicursor.addCursorsToTop', \"Add Cursors To Top\"),\n alias: 'Add Cursors To Top',\n precondition: undefined\n });\n }\n run(accessor, editor) {\n if (!editor.hasModel()) {\n return;\n }\n const selections = editor.getSelections();\n let newSelections = [];\n for (let i = selections[0].startLineNumber; i >= 1; i--) {\n newSelections.push(new Selection(i, selections[0].startColumn, i, selections[0].endColumn));\n }\n const viewModel = editor._getViewModel();\n const previousCursorState = viewModel.getCursorStates();\n if (newSelections.length > 0) {\n editor.setSelections(newSelections);\n }\n announceCursorChange(previousCursorState, viewModel.getCursorStates());\n }\n}\nexport class MultiCursorSessionResult {\n constructor(selections, revealRange, revealScrollType) {\n this.selections = selections;\n this.revealRange = revealRange;\n this.revealScrollType = revealScrollType;\n }\n}\nexport class MultiCursorSession {\n constructor(_editor, findController, isDisconnectedFromFindController, searchText, wholeWord, matchCase, currentMatch) {\n this._editor = _editor;\n this.findController = findController;\n this.isDisconnectedFromFindController = isDisconnectedFromFindController;\n this.searchText = searchText;\n this.wholeWord = wholeWord;\n this.matchCase = matchCase;\n this.currentMatch = currentMatch;\n }\n static create(editor, findController) {\n if (!editor.hasModel()) {\n return null;\n }\n const findState = findController.getState();\n // Find widget owns entirely what we search for if:\n // - focus is not in the editor (i.e. it is in the find widget)\n // - and the search widget is visible\n // - and the search string is non-empty\n if (!editor.hasTextFocus() && findState.isRevealed && findState.searchString.length > 0) {\n // Find widget owns what is searched for\n return new MultiCursorSession(editor, findController, false, findState.searchString, findState.wholeWord, findState.matchCase, null);\n }\n // Otherwise, the selection gives the search text, and the find widget gives the search settings\n // The exception is the find state disassociation case: when beginning with a single, collapsed selection\n let isDisconnectedFromFindController = false;\n let wholeWord;\n let matchCase;\n const selections = editor.getSelections();\n if (selections.length === 1 && selections[0].isEmpty()) {\n isDisconnectedFromFindController = true;\n wholeWord = true;\n matchCase = true;\n }\n else {\n wholeWord = findState.wholeWord;\n matchCase = findState.matchCase;\n }\n // Selection owns what is searched for\n const s = editor.getSelection();\n let searchText;\n let currentMatch = null;\n if (s.isEmpty()) {\n // selection is empty => expand to current word\n const word = editor.getConfiguredWordAtPosition(s.getStartPosition());\n if (!word) {\n return null;\n }\n searchText = word.word;\n currentMatch = new Selection(s.startLineNumber, word.startColumn, s.startLineNumber, word.endColumn);\n }\n else {\n searchText = editor.getModel().getValueInRange(s).replace(/\\r\\n/g, '\\n');\n }\n return new MultiCursorSession(editor, findController, isDisconnectedFromFindController, searchText, wholeWord, matchCase, currentMatch);\n }\n addSelectionToNextFindMatch() {\n if (!this._editor.hasModel()) {\n return null;\n }\n const nextMatch = this._getNextMatch();\n if (!nextMatch) {\n return null;\n }\n const allSelections = this._editor.getSelections();\n return new MultiCursorSessionResult(allSelections.concat(nextMatch), nextMatch, 0 /* Smooth */);\n }\n moveSelectionToNextFindMatch() {\n if (!this._editor.hasModel()) {\n return null;\n }\n const nextMatch = this._getNextMatch();\n if (!nextMatch) {\n return null;\n }\n const allSelections = this._editor.getSelections();\n return new MultiCursorSessionResult(allSelections.slice(0, allSelections.length - 1).concat(nextMatch), nextMatch, 0 /* Smooth */);\n }\n _getNextMatch() {\n if (!this._editor.hasModel()) {\n return null;\n }\n if (this.currentMatch) {\n const result = this.currentMatch;\n this.currentMatch = null;\n return result;\n }\n this.findController.highlightFindOptions();\n const allSelections = this._editor.getSelections();\n const lastAddedSelection = allSelections[allSelections.length - 1];\n const nextMatch = this._editor.getModel().findNextMatch(this.searchText, lastAddedSelection.getEndPosition(), false, this.matchCase, this.wholeWord ? this._editor.getOption(113 /* wordSeparators */) : null, false);\n if (!nextMatch) {\n return null;\n }\n return new Selection(nextMatch.range.startLineNumber, nextMatch.range.startColumn, nextMatch.range.endLineNumber, nextMatch.range.endColumn);\n }\n addSelectionToPreviousFindMatch() {\n if (!this._editor.hasModel()) {\n return null;\n }\n const previousMatch = this._getPreviousMatch();\n if (!previousMatch) {\n return null;\n }\n const allSelections = this._editor.getSelections();\n return new MultiCursorSessionResult(allSelections.concat(previousMatch), previousMatch, 0 /* Smooth */);\n }\n moveSelectionToPreviousFindMatch() {\n if (!this._editor.hasModel()) {\n return null;\n }\n const previousMatch = this._getPreviousMatch();\n if (!previousMatch) {\n return null;\n }\n const allSelections = this._editor.getSelections();\n return new MultiCursorSessionResult(allSelections.slice(0, allSelections.length - 1).concat(previousMatch), previousMatch, 0 /* Smooth */);\n }\n _getPreviousMatch() {\n if (!this._editor.hasModel()) {\n return null;\n }\n if (this.currentMatch) {\n const result = this.currentMatch;\n this.currentMatch = null;\n return result;\n }\n this.findController.highlightFindOptions();\n const allSelections = this._editor.getSelections();\n const lastAddedSelection = allSelections[allSelections.length - 1];\n const previousMatch = this._editor.getModel().findPreviousMatch(this.searchText, lastAddedSelection.getStartPosition(), false, this.matchCase, this.wholeWord ? this._editor.getOption(113 /* wordSeparators */) : null, false);\n if (!previousMatch) {\n return null;\n }\n return new Selection(previousMatch.range.startLineNumber, previousMatch.range.startColumn, previousMatch.range.endLineNumber, previousMatch.range.endColumn);\n }\n selectAll() {\n if (!this._editor.hasModel()) {\n return [];\n }\n this.findController.highlightFindOptions();\n return this._editor.getModel().findMatches(this.searchText, true, false, this.matchCase, this.wholeWord ? this._editor.getOption(113 /* wordSeparators */) : null, false, 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\n }\n}\nexport class MultiCursorSelectionController extends Disposable {\n constructor(editor) {\n super();\n this._sessionDispose = this._register(new DisposableStore());\n this._editor = editor;\n this._ignoreSelectionChange = false;\n this._session = null;\n }\n static get(editor) {\n return editor.getContribution(MultiCursorSelectionController.ID);\n }\n dispose() {\n this._endSession();\n super.dispose();\n }\n _beginSessionIfNeeded(findController) {\n if (!this._session) {\n // Create a new session\n const session = MultiCursorSession.create(this._editor, findController);\n if (!session) {\n return;\n }\n this._session = session;\n const newState = { searchString: this._session.searchText };\n if (this._session.isDisconnectedFromFindController) {\n newState.wholeWordOverride = 1 /* True */;\n newState.matchCaseOverride = 1 /* True */;\n newState.isRegexOverride = 2 /* False */;\n }\n findController.getState().change(newState, false);\n this._sessionDispose.add(this._editor.onDidChangeCursorSelection((e) => {\n if (this._ignoreSelectionChange) {\n return;\n }\n this._endSession();\n }));\n this._sessionDispose.add(this._editor.onDidBlurEditorText(() => {\n this._endSession();\n }));\n this._sessionDispose.add(findController.getState().onFindReplaceStateChange((e) => {\n if (e.matchCase || e.wholeWord) {\n this._endSession();\n }\n }));\n }\n }\n _endSession() {\n this._sessionDispose.clear();\n if (this._session && this._session.isDisconnectedFromFindController) {\n const newState = {\n wholeWordOverride: 0 /* NotSet */,\n matchCaseOverride: 0 /* NotSet */,\n isRegexOverride: 0 /* NotSet */,\n };\n this._session.findController.getState().change(newState, false);\n }\n this._session = null;\n }\n _setSelections(selections) {\n this._ignoreSelectionChange = true;\n this._editor.setSelections(selections);\n this._ignoreSelectionChange = false;\n }\n _expandEmptyToWord(model, selection) {\n if (!selection.isEmpty()) {\n return selection;\n }\n const word = this._editor.getConfiguredWordAtPosition(selection.getStartPosition());\n if (!word) {\n return selection;\n }\n return new Selection(selection.startLineNumber, word.startColumn, selection.startLineNumber, word.endColumn);\n }\n _applySessionResult(result) {\n if (!result) {\n return;\n }\n this._setSelections(result.selections);\n if (result.revealRange) {\n this._editor.revealRangeInCenterIfOutsideViewport(result.revealRange, result.revealScrollType);\n }\n }\n getSession(findController) {\n return this._session;\n }\n addSelectionToNextFindMatch(findController) {\n if (!this._editor.hasModel()) {\n return;\n }\n if (!this._session) {\n // If there are multiple cursors, handle the case where they do not all select the same text.\n const allSelections = this._editor.getSelections();\n if (allSelections.length > 1) {\n const findState = findController.getState();\n const matchCase = findState.matchCase;\n const selectionsContainSameText = modelRangesContainSameText(this._editor.getModel(), allSelections, matchCase);\n if (!selectionsContainSameText) {\n const model = this._editor.getModel();\n let resultingSelections = [];\n for (let i = 0, len = allSelections.length; i < len; i++) {\n resultingSelections[i] = this._expandEmptyToWord(model, allSelections[i]);\n }\n this._editor.setSelections(resultingSelections);\n return;\n }\n }\n }\n this._beginSessionIfNeeded(findController);\n if (this._session) {\n this._applySessionResult(this._session.addSelectionToNextFindMatch());\n }\n }\n addSelectionToPreviousFindMatch(findController) {\n this._beginSessionIfNeeded(findController);\n if (this._session) {\n this._applySessionResult(this._session.addSelectionToPreviousFindMatch());\n }\n }\n moveSelectionToNextFindMatch(findController) {\n this._beginSessionIfNeeded(findController);\n if (this._session) {\n this._applySessionResult(this._session.moveSelectionToNextFindMatch());\n }\n }\n moveSelectionToPreviousFindMatch(findController) {\n this._beginSessionIfNeeded(findController);\n if (this._session) {\n this._applySessionResult(this._session.moveSelectionToPreviousFindMatch());\n }\n }\n selectAll(findController) {\n if (!this._editor.hasModel()) {\n return;\n }\n let matches = null;\n const findState = findController.getState();\n // Special case: find widget owns entirely what we search for if:\n // - focus is not in the editor (i.e. it is in the find widget)\n // - and the search widget is visible\n // - and the search string is non-empty\n // - and we're searching for a regex\n if (findState.isRevealed && findState.searchString.length > 0 && findState.isRegex) {\n matches = this._editor.getModel().findMatches(findState.searchString, true, findState.isRegex, findState.matchCase, findState.wholeWord ? this._editor.getOption(113 /* wordSeparators */) : null, false, 1073741824 /* MAX_SAFE_SMALL_INTEGER */);\n }\n else {\n this._beginSessionIfNeeded(findController);\n if (!this._session) {\n return;\n }\n matches = this._session.selectAll();\n }\n if (findState.searchScope) {\n const states = findState.searchScope;\n let inSelection = [];\n matches.forEach((match) => {\n states.forEach((state) => {\n if (match.range.endLineNumber <= state.endLineNumber && match.range.startLineNumber >= state.startLineNumber) {\n inSelection.push(match);\n }\n });\n });\n matches = inSelection;\n }\n if (matches.length > 0) {\n const editorSelection = this._editor.getSelection();\n // Have the primary cursor remain the one where the action was invoked\n for (let i = 0, len = matches.length; i < len; i++) {\n const match = matches[i];\n const intersection = match.range.intersectRanges(editorSelection);\n if (intersection) {\n // bingo!\n matches[i] = matches[0];\n matches[0] = match;\n break;\n }\n }\n this._setSelections(matches.map(m => new Selection(m.range.startLineNumber, m.range.startColumn, m.range.endLineNumber, m.range.endColumn)));\n }\n }\n}\nMultiCursorSelectionController.ID = 'editor.contrib.multiCursorController';\nexport class MultiCursorSelectionControllerAction extends EditorAction {\n run(accessor, editor) {\n const multiCursorController = MultiCursorSelectionController.get(editor);\n if (!multiCursorController) {\n return;\n }\n const findController = CommonFindController.get(editor);\n if (!findController) {\n return;\n }\n const viewModel = editor._getViewModel();\n if (viewModel) {\n const previousCursorState = viewModel.getCursorStates();\n this._run(multiCursorController, findController);\n announceCursorChange(previousCursorState, viewModel.getCursorStates());\n }\n }\n}\nexport class AddSelectionToNextFindMatchAction extends MultiCursorSelectionControllerAction {\n constructor() {\n super({\n id: 'editor.action.addSelectionToNextFindMatch',\n label: nls.localize('addSelectionToNextFindMatch', \"Add Selection To Next Find Match\"),\n alias: 'Add Selection To Next Find Match',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 34 /* KEY_D */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '3_multi',\n title: nls.localize({ key: 'miAddSelectionToNextFindMatch', comment: ['&& denotes a mnemonic'] }, \"Add &&Next Occurrence\"),\n order: 5\n }\n });\n }\n _run(multiCursorController, findController) {\n multiCursorController.addSelectionToNextFindMatch(findController);\n }\n}\nexport class AddSelectionToPreviousFindMatchAction extends MultiCursorSelectionControllerAction {\n constructor() {\n super({\n id: 'editor.action.addSelectionToPreviousFindMatch',\n label: nls.localize('addSelectionToPreviousFindMatch', \"Add Selection To Previous Find Match\"),\n alias: 'Add Selection To Previous Find Match',\n precondition: undefined,\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '3_multi',\n title: nls.localize({ key: 'miAddSelectionToPreviousFindMatch', comment: ['&& denotes a mnemonic'] }, \"Add P&&revious Occurrence\"),\n order: 6\n }\n });\n }\n _run(multiCursorController, findController) {\n multiCursorController.addSelectionToPreviousFindMatch(findController);\n }\n}\nexport class MoveSelectionToNextFindMatchAction extends MultiCursorSelectionControllerAction {\n constructor() {\n super({\n id: 'editor.action.moveSelectionToNextFindMatch',\n label: nls.localize('moveSelectionToNextFindMatch', \"Move Last Selection To Next Find Match\"),\n alias: 'Move Last Selection To Next Find Match',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: KeyChord(2048 /* CtrlCmd */ | 41 /* KEY_K */, 2048 /* CtrlCmd */ | 34 /* KEY_D */),\n weight: 100 /* EditorContrib */\n }\n });\n }\n _run(multiCursorController, findController) {\n multiCursorController.moveSelectionToNextFindMatch(findController);\n }\n}\nexport class MoveSelectionToPreviousFindMatchAction extends MultiCursorSelectionControllerAction {\n constructor() {\n super({\n id: 'editor.action.moveSelectionToPreviousFindMatch',\n label: nls.localize('moveSelectionToPreviousFindMatch', \"Move Last Selection To Previous Find Match\"),\n alias: 'Move Last Selection To Previous Find Match',\n precondition: undefined\n });\n }\n _run(multiCursorController, findController) {\n multiCursorController.moveSelectionToPreviousFindMatch(findController);\n }\n}\nexport class SelectHighlightsAction extends MultiCursorSelectionControllerAction {\n constructor() {\n super({\n id: 'editor.action.selectHighlights',\n label: nls.localize('selectAllOccurrencesOfFindMatch', \"Select All Occurrences of Find Match\"),\n alias: 'Select All Occurrences of Find Match',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 42 /* KEY_L */,\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '3_multi',\n title: nls.localize({ key: 'miSelectHighlights', comment: ['&& denotes a mnemonic'] }, \"Select All &&Occurrences\"),\n order: 7\n }\n });\n }\n _run(multiCursorController, findController) {\n multiCursorController.selectAll(findController);\n }\n}\nexport class CompatChangeAll extends MultiCursorSelectionControllerAction {\n constructor() {\n super({\n id: 'editor.action.changeAll',\n label: nls.localize('changeAll.label', \"Change All Occurrences\"),\n alias: 'Change All Occurrences',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.editorTextFocus),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 60 /* F2 */,\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n group: '1_modification',\n order: 1.2\n }\n });\n }\n _run(multiCursorController, findController) {\n multiCursorController.selectAll(findController);\n }\n}\nclass SelectionHighlighterState {\n constructor(searchText, matchCase, wordSeparators, modelVersionId) {\n this.searchText = searchText;\n this.matchCase = matchCase;\n this.wordSeparators = wordSeparators;\n this.modelVersionId = modelVersionId;\n }\n /**\n * Everything equals except for `lastWordUnderCursor`\n */\n static softEquals(a, b) {\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n return (a.searchText === b.searchText\n && a.matchCase === b.matchCase\n && a.wordSeparators === b.wordSeparators\n && a.modelVersionId === b.modelVersionId);\n }\n}\nexport class SelectionHighlighter extends Disposable {\n constructor(editor) {\n super();\n this.editor = editor;\n this._isEnabled = editor.getOption(94 /* selectionHighlight */);\n this.decorations = [];\n this.updateSoon = this._register(new RunOnceScheduler(() => this._update(), 300));\n this.state = null;\n this._register(editor.onDidChangeConfiguration((e) => {\n this._isEnabled = editor.getOption(94 /* selectionHighlight */);\n }));\n this._register(editor.onDidChangeCursorSelection((e) => {\n if (!this._isEnabled) {\n // Early exit if nothing needs to be done!\n // Leave some form of early exit check here if you wish to continue being a cursor position change listener ;)\n return;\n }\n if (e.selection.isEmpty()) {\n if (e.reason === 3 /* Explicit */) {\n if (this.state) {\n // no longer valid\n this._setState(null);\n }\n this.updateSoon.schedule();\n }\n else {\n this._setState(null);\n }\n }\n else {\n this._update();\n }\n }));\n this._register(editor.onDidChangeModel((e) => {\n this._setState(null);\n }));\n this._register(editor.onDidChangeModelContent((e) => {\n if (this._isEnabled) {\n this.updateSoon.schedule();\n }\n }));\n this._register(CommonFindController.get(editor).getState().onFindReplaceStateChange((e) => {\n this._update();\n }));\n }\n _update() {\n this._setState(SelectionHighlighter._createState(this._isEnabled, this.editor));\n }\n static _createState(isEnabled, editor) {\n if (!isEnabled) {\n return null;\n }\n if (!editor.hasModel()) {\n return null;\n }\n const s = editor.getSelection();\n if (s.startLineNumber !== s.endLineNumber) {\n // multiline forbidden for perf reasons\n return null;\n }\n const multiCursorController = MultiCursorSelectionController.get(editor);\n if (!multiCursorController) {\n return null;\n }\n const findController = CommonFindController.get(editor);\n if (!findController) {\n return null;\n }\n let r = multiCursorController.getSession(findController);\n if (!r) {\n const allSelections = editor.getSelections();\n if (allSelections.length > 1) {\n const findState = findController.getState();\n const matchCase = findState.matchCase;\n const selectionsContainSameText = modelRangesContainSameText(editor.getModel(), allSelections, matchCase);\n if (!selectionsContainSameText) {\n return null;\n }\n }\n r = MultiCursorSession.create(editor, findController);\n }\n if (!r) {\n return null;\n }\n if (r.currentMatch) {\n // This is an empty selection\n // Do not interfere with semantic word highlighting in the no selection case\n return null;\n }\n if (/^[ \\t]+$/.test(r.searchText)) {\n // whitespace only selection\n return null;\n }\n if (r.searchText.length > 200) {\n // very long selection\n return null;\n }\n // TODO: better handling of this case\n const findState = findController.getState();\n const caseSensitive = findState.matchCase;\n // Return early if the find widget shows the exact same matches\n if (findState.isRevealed) {\n let findStateSearchString = findState.searchString;\n if (!caseSensitive) {\n findStateSearchString = findStateSearchString.toLowerCase();\n }\n let mySearchString = r.searchText;\n if (!caseSensitive) {\n mySearchString = mySearchString.toLowerCase();\n }\n if (findStateSearchString === mySearchString && r.matchCase === findState.matchCase && r.wholeWord === findState.wholeWord && !findState.isRegex) {\n return null;\n }\n }\n return new SelectionHighlighterState(r.searchText, r.matchCase, r.wholeWord ? editor.getOption(113 /* wordSeparators */) : null, editor.getModel().getVersionId());\n }\n _setState(state) {\n if (SelectionHighlighterState.softEquals(this.state, state)) {\n this.state = state;\n return;\n }\n this.state = state;\n if (!this.state) {\n this.decorations = this.editor.deltaDecorations(this.decorations, []);\n return;\n }\n if (!this.editor.hasModel()) {\n return;\n }\n const model = this.editor.getModel();\n if (model.isTooLargeForTokenization()) {\n // the file is too large, so searching word under cursor in the whole document takes is blocking the UI.\n return;\n }\n const hasFindOccurrences = DocumentHighlightProviderRegistry.has(model) && this.editor.getOption(68 /* occurrencesHighlight */);\n let allMatches = model.findMatches(this.state.searchText, true, false, this.state.matchCase, this.state.wordSeparators, false).map(m => m.range);\n allMatches.sort(Range.compareRangesUsingStarts);\n let selections = this.editor.getSelections();\n selections.sort(Range.compareRangesUsingStarts);\n // do not overlap with selection (issue #64 and #512)\n let matches = [];\n for (let i = 0, j = 0, len = allMatches.length, lenJ = selections.length; i < len;) {\n const match = allMatches[i];\n if (j >= lenJ) {\n // finished all editor selections\n matches.push(match);\n i++;\n }\n else {\n const cmp = Range.compareRangesUsingStarts(match, selections[j]);\n if (cmp < 0) {\n // match is before sel\n if (selections[j].isEmpty() || !Range.areIntersecting(match, selections[j])) {\n matches.push(match);\n }\n i++;\n }\n else if (cmp > 0) {\n // sel is before match\n j++;\n }\n else {\n // sel is equal to match\n i++;\n j++;\n }\n }\n }\n const decorations = matches.map(r => {\n return {\n range: r,\n // Show in overviewRuler only if model has no semantic highlighting\n options: (hasFindOccurrences ? SelectionHighlighter._SELECTION_HIGHLIGHT : SelectionHighlighter._SELECTION_HIGHLIGHT_OVERVIEW)\n };\n });\n this.decorations = this.editor.deltaDecorations(this.decorations, decorations);\n }\n dispose() {\n this._setState(null);\n super.dispose();\n }\n}\nSelectionHighlighter.ID = 'editor.contrib.selectionHighlighter';\nSelectionHighlighter._SELECTION_HIGHLIGHT_OVERVIEW = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'selectionHighlight',\n overviewRuler: {\n color: themeColorFromId(overviewRulerSelectionHighlightForeground),\n position: OverviewRulerLane.Center\n }\n});\nSelectionHighlighter._SELECTION_HIGHLIGHT = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'selectionHighlight',\n});\nfunction modelRangesContainSameText(model, ranges, matchCase) {\n const selectedText = getValueInRange(model, ranges[0], !matchCase);\n for (let i = 1, len = ranges.length; i < len; i++) {\n const range = ranges[i];\n if (range.isEmpty()) {\n return false;\n }\n const thisSelectedText = getValueInRange(model, range, !matchCase);\n if (selectedText !== thisSelectedText) {\n return false;\n }\n }\n return true;\n}\nfunction getValueInRange(model, range, toLowerCase) {\n const text = model.getValueInRange(range);\n return (toLowerCase ? text.toLowerCase() : text);\n}\nregisterEditorContribution(MultiCursorSelectionController.ID, MultiCursorSelectionController);\nregisterEditorContribution(SelectionHighlighter.ID, SelectionHighlighter);\nregisterEditorAction(InsertCursorAbove);\nregisterEditorAction(InsertCursorBelow);\nregisterEditorAction(InsertCursorAtEndOfEachLineSelected);\nregisterEditorAction(AddSelectionToNextFindMatchAction);\nregisterEditorAction(AddSelectionToPreviousFindMatchAction);\nregisterEditorAction(MoveSelectionToNextFindMatchAction);\nregisterEditorAction(MoveSelectionToPreviousFindMatchAction);\nregisterEditorAction(SelectHighlightsAction);\nregisterEditorAction(CompatChangeAll);\nregisterEditorAction(InsertCursorAtEndOfLineSelected);\nregisterEditorAction(InsertCursorAtTopOfLineSelected);\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { Position } from '../../common/core/position.js';\nimport * as modes from '../../common/modes.js';\nimport { RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { assertType } from '../../../base/common/types.js';\nimport { ITextModelService } from '../../common/services/resolverService.js';\nexport const Context = {\n Visible: new RawContextKey('parameterHintsVisible', false),\n MultipleSignatures: new RawContextKey('parameterHintsMultipleSignatures', false),\n};\nexport function provideSignatureHelp(model, position, context, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const supports = modes.SignatureHelpProviderRegistry.ordered(model);\n for (const support of supports) {\n try {\n const result = yield support.provideSignatureHelp(model, position, token, context);\n if (result) {\n return result;\n }\n }\n catch (err) {\n onUnexpectedExternalError(err);\n }\n }\n return undefined;\n });\n}\nCommandsRegistry.registerCommand('_executeSignatureHelpProvider', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {\n const [uri, position, triggerCharacter] = args;\n assertType(URI.isUri(uri));\n assertType(Position.isIPosition(position));\n assertType(typeof triggerCharacter === 'string' || !triggerCharacter);\n const ref = yield accessor.get(ITextModelService).createModelReference(uri);\n try {\n const result = yield provideSignatureHelp(ref.object.textEditorModel, Position.lift(position), {\n triggerKind: modes.SignatureHelpTriggerKind.Invoke,\n isRetrigger: false,\n triggerCharacter,\n }, CancellationToken.None);\n if (!result) {\n return undefined;\n }\n setTimeout(() => result.dispose(), 0);\n return result.value;\n }\n finally {\n ref.dispose();\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { createCancelablePromise, Delayer } from '../../../base/common/async.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { CharacterSet } from '../../common/core/characterClassifier.js';\nimport * as modes from '../../common/modes.js';\nimport { provideSignatureHelp } from './provideSignatureHelp.js';\nvar ParameterHintState;\n(function (ParameterHintState) {\n ParameterHintState.Default = { type: 0 /* Default */ };\n class Pending {\n constructor(request, previouslyActiveHints) {\n this.request = request;\n this.previouslyActiveHints = previouslyActiveHints;\n this.type = 2 /* Pending */;\n }\n }\n ParameterHintState.Pending = Pending;\n class Active {\n constructor(hints) {\n this.hints = hints;\n this.type = 1 /* Active */;\n }\n }\n ParameterHintState.Active = Active;\n})(ParameterHintState || (ParameterHintState = {}));\nexport class ParameterHintsModel extends Disposable {\n constructor(editor, delay = ParameterHintsModel.DEFAULT_DELAY) {\n super();\n this._onChangedHints = this._register(new Emitter());\n this.onChangedHints = this._onChangedHints.event;\n this.triggerOnType = false;\n this._state = ParameterHintState.Default;\n this._pendingTriggers = [];\n this._lastSignatureHelpResult = this._register(new MutableDisposable());\n this.triggerChars = new CharacterSet();\n this.retriggerChars = new CharacterSet();\n this.triggerId = 0;\n this.editor = editor;\n this.throttledDelayer = new Delayer(delay);\n this._register(this.editor.onDidBlurEditorWidget(() => this.cancel()));\n this._register(this.editor.onDidChangeConfiguration(() => this.onEditorConfigurationChange()));\n this._register(this.editor.onDidChangeModel(e => this.onModelChanged()));\n this._register(this.editor.onDidChangeModelLanguage(_ => this.onModelChanged()));\n this._register(this.editor.onDidChangeCursorSelection(e => this.onCursorChange(e)));\n this._register(this.editor.onDidChangeModelContent(e => this.onModelContentChange()));\n this._register(modes.SignatureHelpProviderRegistry.onDidChange(this.onModelChanged, this));\n this._register(this.editor.onDidType(text => this.onDidType(text)));\n this.onEditorConfigurationChange();\n this.onModelChanged();\n }\n get state() { return this._state; }\n set state(value) {\n if (this._state.type === 2 /* Pending */) {\n this._state.request.cancel();\n }\n this._state = value;\n }\n cancel(silent = false) {\n this.state = ParameterHintState.Default;\n this.throttledDelayer.cancel();\n if (!silent) {\n this._onChangedHints.fire(undefined);\n }\n }\n trigger(context, delay) {\n const model = this.editor.getModel();\n if (!model || !modes.SignatureHelpProviderRegistry.has(model)) {\n return;\n }\n const triggerId = ++this.triggerId;\n this._pendingTriggers.push(context);\n this.throttledDelayer.trigger(() => {\n return this.doTrigger(triggerId);\n }, delay)\n .catch(onUnexpectedError);\n }\n next() {\n if (this.state.type !== 1 /* Active */) {\n return;\n }\n const length = this.state.hints.signatures.length;\n const activeSignature = this.state.hints.activeSignature;\n const last = (activeSignature % length) === (length - 1);\n const cycle = this.editor.getOption(72 /* parameterHints */).cycle;\n // If there is only one signature, or we're on last signature of list\n if ((length < 2 || last) && !cycle) {\n this.cancel();\n return;\n }\n this.updateActiveSignature(last && cycle ? 0 : activeSignature + 1);\n }\n previous() {\n if (this.state.type !== 1 /* Active */) {\n return;\n }\n const length = this.state.hints.signatures.length;\n const activeSignature = this.state.hints.activeSignature;\n const first = activeSignature === 0;\n const cycle = this.editor.getOption(72 /* parameterHints */).cycle;\n // If there is only one signature, or we're on first signature of list\n if ((length < 2 || first) && !cycle) {\n this.cancel();\n return;\n }\n this.updateActiveSignature(first && cycle ? length - 1 : activeSignature - 1);\n }\n updateActiveSignature(activeSignature) {\n if (this.state.type !== 1 /* Active */) {\n return;\n }\n this.state = new ParameterHintState.Active(Object.assign(Object.assign({}, this.state.hints), { activeSignature }));\n this._onChangedHints.fire(this.state.hints);\n }\n doTrigger(triggerId) {\n return __awaiter(this, void 0, void 0, function* () {\n const isRetrigger = this.state.type === 1 /* Active */ || this.state.type === 2 /* Pending */;\n const activeSignatureHelp = this.getLastActiveHints();\n this.cancel(true);\n if (this._pendingTriggers.length === 0) {\n return false;\n }\n const context = this._pendingTriggers.reduce(mergeTriggerContexts);\n this._pendingTriggers = [];\n const triggerContext = {\n triggerKind: context.triggerKind,\n triggerCharacter: context.triggerCharacter,\n isRetrigger: isRetrigger,\n activeSignatureHelp: activeSignatureHelp\n };\n if (!this.editor.hasModel()) {\n return false;\n }\n const model = this.editor.getModel();\n const position = this.editor.getPosition();\n this.state = new ParameterHintState.Pending(createCancelablePromise(token => provideSignatureHelp(model, position, triggerContext, token)), activeSignatureHelp);\n try {\n const result = yield this.state.request;\n // Check that we are still resolving the correct signature help\n if (triggerId !== this.triggerId) {\n result === null || result === void 0 ? void 0 : result.dispose();\n return false;\n }\n if (!result || !result.value.signatures || result.value.signatures.length === 0) {\n result === null || result === void 0 ? void 0 : result.dispose();\n this._lastSignatureHelpResult.clear();\n this.cancel();\n return false;\n }\n else {\n this.state = new ParameterHintState.Active(result.value);\n this._lastSignatureHelpResult.value = result;\n this._onChangedHints.fire(this.state.hints);\n return true;\n }\n }\n catch (error) {\n if (triggerId === this.triggerId) {\n this.state = ParameterHintState.Default;\n }\n onUnexpectedError(error);\n return false;\n }\n });\n }\n getLastActiveHints() {\n switch (this.state.type) {\n case 1 /* Active */: return this.state.hints;\n case 2 /* Pending */: return this.state.previouslyActiveHints;\n default: return undefined;\n }\n }\n get isTriggered() {\n return this.state.type === 1 /* Active */\n || this.state.type === 2 /* Pending */\n || this.throttledDelayer.isTriggered();\n }\n onModelChanged() {\n this.cancel();\n // Update trigger characters\n this.triggerChars = new CharacterSet();\n this.retriggerChars = new CharacterSet();\n const model = this.editor.getModel();\n if (!model) {\n return;\n }\n for (const support of modes.SignatureHelpProviderRegistry.ordered(model)) {\n for (const ch of support.signatureHelpTriggerCharacters || []) {\n this.triggerChars.add(ch.charCodeAt(0));\n // All trigger characters are also considered retrigger characters\n this.retriggerChars.add(ch.charCodeAt(0));\n }\n for (const ch of support.signatureHelpRetriggerCharacters || []) {\n this.retriggerChars.add(ch.charCodeAt(0));\n }\n }\n }\n onDidType(text) {\n if (!this.triggerOnType) {\n return;\n }\n const lastCharIndex = text.length - 1;\n const triggerCharCode = text.charCodeAt(lastCharIndex);\n if (this.triggerChars.has(triggerCharCode) || this.isTriggered && this.retriggerChars.has(triggerCharCode)) {\n this.trigger({\n triggerKind: modes.SignatureHelpTriggerKind.TriggerCharacter,\n triggerCharacter: text.charAt(lastCharIndex),\n });\n }\n }\n onCursorChange(e) {\n if (e.source === 'mouse') {\n this.cancel();\n }\n else if (this.isTriggered) {\n this.trigger({ triggerKind: modes.SignatureHelpTriggerKind.ContentChange });\n }\n }\n onModelContentChange() {\n if (this.isTriggered) {\n this.trigger({ triggerKind: modes.SignatureHelpTriggerKind.ContentChange });\n }\n }\n onEditorConfigurationChange() {\n this.triggerOnType = this.editor.getOption(72 /* parameterHints */).enabled;\n if (!this.triggerOnType) {\n this.cancel();\n }\n }\n dispose() {\n this.cancel(true);\n super.dispose();\n }\n}\nParameterHintsModel.DEFAULT_DELAY = 120; // ms\nfunction mergeTriggerContexts(previous, current) {\n switch (current.triggerKind) {\n case modes.SignatureHelpTriggerKind.Invoke:\n // Invoke overrides previous triggers.\n return current;\n case modes.SignatureHelpTriggerKind.ContentChange:\n // Ignore content changes triggers\n return previous;\n case modes.SignatureHelpTriggerKind.TriggerCharacter:\n default:\n return current;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as dom from '../../../base/browser/dom.js';\nimport { domEvent, stop } from '../../../base/browser/event.js';\nimport * as aria from '../../../base/browser/ui/aria/aria.js';\nimport { DomScrollableElement } from '../../../base/browser/ui/scrollbar/scrollableElement.js';\nimport { Event } from '../../../base/common/event.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport './parameterHints.css';\nimport { IModeService } from '../../common/services/modeService.js';\nimport { MarkdownRenderer } from '../../browser/core/markdownRenderer.js';\nimport { Context } from './provideSignatureHelp.js';\nimport * as nls from '../../../nls.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\nimport { editorHoverBackground, editorHoverBorder, textCodeBlockBackground, textLinkForeground, editorHoverForeground } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant, ThemeIcon } from '../../../platform/theme/common/themeService.js';\nimport { ParameterHintsModel } from './parameterHintsModel.js';\nimport { escapeRegExpCharacters } from '../../../base/common/strings.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { assertIsDefined } from '../../../base/common/types.js';\nimport { ColorScheme } from '../../../platform/theme/common/theme.js';\nimport { registerIcon } from '../../../platform/theme/common/iconRegistry.js';\nconst $ = dom.$;\nconst parameterHintsNextIcon = registerIcon('parameter-hints-next', Codicon.chevronDown, nls.localize('parameterHintsNextIcon', 'Icon for show next parameter hint.'));\nconst parameterHintsPreviousIcon = registerIcon('parameter-hints-previous', Codicon.chevronUp, nls.localize('parameterHintsPreviousIcon', 'Icon for show previous parameter hint.'));\nlet ParameterHintsWidget = class ParameterHintsWidget extends Disposable {\n constructor(editor, contextKeyService, openerService, modeService) {\n super();\n this.editor = editor;\n this.renderDisposeables = this._register(new DisposableStore());\n this.visible = false;\n this.announcedLabel = null;\n // Editor.IContentWidget.allowEditorOverflow\n this.allowEditorOverflow = true;\n this.markdownRenderer = this._register(new MarkdownRenderer({ editor }, modeService, openerService));\n this.model = this._register(new ParameterHintsModel(editor));\n this.keyVisible = Context.Visible.bindTo(contextKeyService);\n this.keyMultipleSignatures = Context.MultipleSignatures.bindTo(contextKeyService);\n this._register(this.model.onChangedHints(newParameterHints => {\n if (newParameterHints) {\n this.show();\n this.render(newParameterHints);\n }\n else {\n this.hide();\n }\n }));\n }\n createParamaterHintDOMNodes() {\n const element = $('.editor-widget.parameter-hints-widget');\n const wrapper = dom.append(element, $('.phwrapper'));\n wrapper.tabIndex = -1;\n const controls = dom.append(wrapper, $('.controls'));\n const previous = dom.append(controls, $('.button' + ThemeIcon.asCSSSelector(parameterHintsPreviousIcon)));\n const overloads = dom.append(controls, $('.overloads'));\n const next = dom.append(controls, $('.button' + ThemeIcon.asCSSSelector(parameterHintsNextIcon)));\n const onPreviousClick = stop(domEvent(previous, 'click'));\n this._register(onPreviousClick(this.previous, this));\n const onNextClick = stop(domEvent(next, 'click'));\n this._register(onNextClick(this.next, this));\n const body = $('.body');\n const scrollbar = new DomScrollableElement(body, {});\n this._register(scrollbar);\n wrapper.appendChild(scrollbar.getDomNode());\n const signature = dom.append(body, $('.signature'));\n const docs = dom.append(body, $('.docs'));\n element.style.userSelect = 'text';\n this.domNodes = {\n element,\n signature,\n overloads,\n docs,\n scrollbar,\n };\n this.editor.addContentWidget(this);\n this.hide();\n this._register(this.editor.onDidChangeCursorSelection(e => {\n if (this.visible) {\n this.editor.layoutContentWidget(this);\n }\n }));\n const updateFont = () => {\n if (!this.domNodes) {\n return;\n }\n const fontInfo = this.editor.getOption(40 /* fontInfo */);\n this.domNodes.element.style.fontSize = `${fontInfo.fontSize}px`;\n };\n updateFont();\n this._register(Event.chain(this.editor.onDidChangeConfiguration.bind(this.editor))\n .filter(e => e.hasChanged(40 /* fontInfo */))\n .on(updateFont, null));\n this._register(this.editor.onDidLayoutChange(e => this.updateMaxHeight()));\n this.updateMaxHeight();\n }\n show() {\n if (this.visible) {\n return;\n }\n if (!this.domNodes) {\n this.createParamaterHintDOMNodes();\n }\n this.keyVisible.set(true);\n this.visible = true;\n setTimeout(() => {\n if (this.domNodes) {\n this.domNodes.element.classList.add('visible');\n }\n }, 100);\n this.editor.layoutContentWidget(this);\n }\n hide() {\n this.renderDisposeables.clear();\n if (!this.visible) {\n return;\n }\n this.keyVisible.reset();\n this.visible = false;\n this.announcedLabel = null;\n if (this.domNodes) {\n this.domNodes.element.classList.remove('visible');\n }\n this.editor.layoutContentWidget(this);\n }\n getPosition() {\n if (this.visible) {\n return {\n position: this.editor.getPosition(),\n preference: [1 /* ABOVE */, 2 /* BELOW */]\n };\n }\n return null;\n }\n render(hints) {\n var _a;\n this.renderDisposeables.clear();\n if (!this.domNodes) {\n return;\n }\n const multiple = hints.signatures.length > 1;\n this.domNodes.element.classList.toggle('multiple', multiple);\n this.keyMultipleSignatures.set(multiple);\n this.domNodes.signature.innerText = '';\n this.domNodes.docs.innerText = '';\n const signature = hints.signatures[hints.activeSignature];\n if (!signature) {\n return;\n }\n const code = dom.append(this.domNodes.signature, $('.code'));\n const fontInfo = this.editor.getOption(40 /* fontInfo */);\n code.style.fontSize = `${fontInfo.fontSize}px`;\n code.style.fontFamily = fontInfo.fontFamily;\n const hasParameters = signature.parameters.length > 0;\n const activeParameterIndex = (_a = signature.activeParameter) !== null && _a !== void 0 ? _a : hints.activeParameter;\n if (!hasParameters) {\n const label = dom.append(code, $('span'));\n label.textContent = signature.label;\n }\n else {\n this.renderParameters(code, signature, activeParameterIndex);\n }\n const activeParameter = signature.parameters[activeParameterIndex];\n if (activeParameter === null || activeParameter === void 0 ? void 0 : activeParameter.documentation) {\n const documentation = $('span.documentation');\n if (typeof activeParameter.documentation === 'string') {\n documentation.textContent = activeParameter.documentation;\n }\n else {\n const renderedContents = this.renderMarkdownDocs(activeParameter.documentation);\n documentation.appendChild(renderedContents.element);\n }\n dom.append(this.domNodes.docs, $('p', {}, documentation));\n }\n if (signature.documentation === undefined) {\n /** no op */\n }\n else if (typeof signature.documentation === 'string') {\n dom.append(this.domNodes.docs, $('p', {}, signature.documentation));\n }\n else {\n const renderedContents = this.renderMarkdownDocs(signature.documentation);\n dom.append(this.domNodes.docs, renderedContents.element);\n }\n const hasDocs = this.hasDocs(signature, activeParameter);\n this.domNodes.signature.classList.toggle('has-docs', hasDocs);\n this.domNodes.docs.classList.toggle('empty', !hasDocs);\n this.domNodes.overloads.textContent =\n String(hints.activeSignature + 1).padStart(hints.signatures.length.toString().length, '0') + '/' + hints.signatures.length;\n if (activeParameter) {\n const labelToAnnounce = this.getParameterLabel(signature, activeParameterIndex);\n // Select method gets called on every user type while parameter hints are visible.\n // We do not want to spam the user with same announcements, so we only announce if the current parameter changed.\n if (this.announcedLabel !== labelToAnnounce) {\n aria.alert(nls.localize('hint', \"{0}, hint\", labelToAnnounce));\n this.announcedLabel = labelToAnnounce;\n }\n }\n this.editor.layoutContentWidget(this);\n this.domNodes.scrollbar.scanDomNode();\n }\n renderMarkdownDocs(markdown) {\n const renderedContents = this.renderDisposeables.add(this.markdownRenderer.render(markdown, {\n asyncRenderCallback: () => {\n var _a;\n (_a = this.domNodes) === null || _a === void 0 ? void 0 : _a.scrollbar.scanDomNode();\n }\n }));\n renderedContents.element.classList.add('markdown-docs');\n return renderedContents;\n }\n hasDocs(signature, activeParameter) {\n if (activeParameter && typeof activeParameter.documentation === 'string' && assertIsDefined(activeParameter.documentation).length > 0) {\n return true;\n }\n if (activeParameter && typeof activeParameter.documentation === 'object' && assertIsDefined(activeParameter.documentation).value.length > 0) {\n return true;\n }\n if (signature.documentation && typeof signature.documentation === 'string' && assertIsDefined(signature.documentation).length > 0) {\n return true;\n }\n if (signature.documentation && typeof signature.documentation === 'object' && assertIsDefined(signature.documentation.value).length > 0) {\n return true;\n }\n return false;\n }\n renderParameters(parent, signature, activeParameterIndex) {\n const [start, end] = this.getParameterLabelOffsets(signature, activeParameterIndex);\n const beforeSpan = document.createElement('span');\n beforeSpan.textContent = signature.label.substring(0, start);\n const paramSpan = document.createElement('span');\n paramSpan.textContent = signature.label.substring(start, end);\n paramSpan.className = 'parameter active';\n const afterSpan = document.createElement('span');\n afterSpan.textContent = signature.label.substring(end);\n dom.append(parent, beforeSpan, paramSpan, afterSpan);\n }\n getParameterLabel(signature, paramIdx) {\n const param = signature.parameters[paramIdx];\n if (Array.isArray(param.label)) {\n return signature.label.substring(param.label[0], param.label[1]);\n }\n else {\n return param.label;\n }\n }\n getParameterLabelOffsets(signature, paramIdx) {\n const param = signature.parameters[paramIdx];\n if (!param) {\n return [0, 0];\n }\n else if (Array.isArray(param.label)) {\n return param.label;\n }\n else if (!param.label.length) {\n return [0, 0];\n }\n else {\n const regex = new RegExp(`(\\\\W|^)${escapeRegExpCharacters(param.label)}(?=\\\\W|$)`, 'g');\n regex.test(signature.label);\n const idx = regex.lastIndex - param.label.length;\n return idx >= 0\n ? [idx, regex.lastIndex]\n : [0, 0];\n }\n }\n next() {\n this.editor.focus();\n this.model.next();\n }\n previous() {\n this.editor.focus();\n this.model.previous();\n }\n cancel() {\n this.model.cancel();\n }\n getDomNode() {\n if (!this.domNodes) {\n this.createParamaterHintDOMNodes();\n }\n return this.domNodes.element;\n }\n getId() {\n return ParameterHintsWidget.ID;\n }\n trigger(context) {\n this.model.trigger(context, 0);\n }\n updateMaxHeight() {\n if (!this.domNodes) {\n return;\n }\n const height = Math.max(this.editor.getLayoutInfo().height / 4, 250);\n const maxHeight = `${height}px`;\n this.domNodes.element.style.maxHeight = maxHeight;\n const wrapper = this.domNodes.element.getElementsByClassName('phwrapper');\n if (wrapper.length) {\n wrapper[0].style.maxHeight = maxHeight;\n }\n }\n};\nParameterHintsWidget.ID = 'editor.widget.parameterHintsWidget';\nParameterHintsWidget = __decorate([\n __param(1, IContextKeyService),\n __param(2, IOpenerService),\n __param(3, IModeService)\n], ParameterHintsWidget);\nexport { ParameterHintsWidget };\nregisterThemingParticipant((theme, collector) => {\n const border = theme.getColor(editorHoverBorder);\n if (border) {\n const borderWidth = theme.type === ColorScheme.HIGH_CONTRAST ? 2 : 1;\n collector.addRule(`.monaco-editor .parameter-hints-widget { border: ${borderWidth}px solid ${border}; }`);\n collector.addRule(`.monaco-editor .parameter-hints-widget.multiple .body { border-left: 1px solid ${border.transparent(0.5)}; }`);\n collector.addRule(`.monaco-editor .parameter-hints-widget .signature.has-docs { border-bottom: 1px solid ${border.transparent(0.5)}; }`);\n }\n const background = theme.getColor(editorHoverBackground);\n if (background) {\n collector.addRule(`.monaco-editor .parameter-hints-widget { background-color: ${background}; }`);\n }\n const link = theme.getColor(textLinkForeground);\n if (link) {\n collector.addRule(`.monaco-editor .parameter-hints-widget a { color: ${link}; }`);\n }\n const foreground = theme.getColor(editorHoverForeground);\n if (foreground) {\n collector.addRule(`.monaco-editor .parameter-hints-widget { color: ${foreground}; }`);\n }\n const codeBackground = theme.getColor(textCodeBlockBackground);\n if (codeBackground) {\n collector.addRule(`.monaco-editor .parameter-hints-widget code { background-color: ${codeBackground}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as nls from '../../../nls.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\nimport { registerEditorAction, registerEditorContribution, EditorAction, EditorCommand, registerEditorCommand } from '../../browser/editorExtensions.js';\nimport { ParameterHintsWidget } from './parameterHintsWidget.js';\nimport { Context } from './provideSignatureHelp.js';\nimport * as modes from '../../common/modes.js';\nlet ParameterHintsController = class ParameterHintsController extends Disposable {\n constructor(editor, instantiationService) {\n super();\n this.editor = editor;\n this.widget = this._register(instantiationService.createInstance(ParameterHintsWidget, this.editor));\n }\n static get(editor) {\n return editor.getContribution(ParameterHintsController.ID);\n }\n cancel() {\n this.widget.cancel();\n }\n previous() {\n this.widget.previous();\n }\n next() {\n this.widget.next();\n }\n trigger(context) {\n this.widget.trigger(context);\n }\n};\nParameterHintsController.ID = 'editor.controller.parameterHints';\nParameterHintsController = __decorate([\n __param(1, IInstantiationService)\n], ParameterHintsController);\nexport class TriggerParameterHintsAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.triggerParameterHints',\n label: nls.localize('parameterHints.trigger.label', \"Trigger Parameter Hints\"),\n alias: 'Trigger Parameter Hints',\n precondition: EditorContextKeys.hasSignatureHelpProvider,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 10 /* Space */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n const controller = ParameterHintsController.get(editor);\n if (controller) {\n controller.trigger({\n triggerKind: modes.SignatureHelpTriggerKind.Invoke\n });\n }\n }\n}\nregisterEditorContribution(ParameterHintsController.ID, ParameterHintsController);\nregisterEditorAction(TriggerParameterHintsAction);\nconst weight = 100 /* EditorContrib */ + 75;\nconst ParameterHintsCommand = EditorCommand.bindToContribution(ParameterHintsController.get);\nregisterEditorCommand(new ParameterHintsCommand({\n id: 'closeParameterHints',\n precondition: Context.Visible,\n handler: x => x.cancel(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.focus,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\n}));\nregisterEditorCommand(new ParameterHintsCommand({\n id: 'showPrevParameterHint',\n precondition: ContextKeyExpr.and(Context.Visible, Context.MultipleSignatures),\n handler: x => x.previous(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.focus,\n primary: 16 /* UpArrow */,\n secondary: [512 /* Alt */ | 16 /* UpArrow */],\n mac: { primary: 16 /* UpArrow */, secondary: [512 /* Alt */ | 16 /* UpArrow */, 256 /* WinCtrl */ | 46 /* KEY_P */] }\n }\n}));\nregisterEditorCommand(new ParameterHintsCommand({\n id: 'showNextParameterHint',\n precondition: ContextKeyExpr.and(Context.Visible, Context.MultipleSignatures),\n handler: x => x.next(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.focus,\n primary: 18 /* DownArrow */,\n secondary: [512 /* Alt */ | 18 /* DownArrow */],\n mac: { primary: 18 /* DownArrow */, secondary: [512 /* Alt */ | 18 /* DownArrow */, 256 /* WinCtrl */ | 44 /* KEY_N */] }\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport './renameInputField.css';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { Position } from '../../common/core/position.js';\nimport { localize } from '../../../nls.js';\nimport { IContextKeyService, RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nimport { inputBackground, inputBorder, inputForeground, widgetShadow, editorWidgetBackground } from '../../../platform/theme/common/colorRegistry.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nexport const CONTEXT_RENAME_INPUT_VISIBLE = new RawContextKey('renameInputVisible', false, localize('renameInputVisible', \"Whether the rename input widget is visible\"));\nlet RenameInputField = class RenameInputField {\n constructor(_editor, _acceptKeybindings, _themeService, _keybindingService, contextKeyService) {\n this._editor = _editor;\n this._acceptKeybindings = _acceptKeybindings;\n this._themeService = _themeService;\n this._keybindingService = _keybindingService;\n this._disposables = new DisposableStore();\n this.allowEditorOverflow = true;\n this._visibleContextKey = CONTEXT_RENAME_INPUT_VISIBLE.bindTo(contextKeyService);\n this._editor.addContentWidget(this);\n this._disposables.add(this._editor.onDidChangeConfiguration(e => {\n if (e.hasChanged(40 /* fontInfo */)) {\n this._updateFont();\n }\n }));\n this._disposables.add(_themeService.onDidColorThemeChange(this._updateStyles, this));\n }\n dispose() {\n this._disposables.dispose();\n this._editor.removeContentWidget(this);\n }\n getId() {\n return '__renameInputWidget';\n }\n getDomNode() {\n if (!this._domNode) {\n this._domNode = document.createElement('div');\n this._domNode.className = 'monaco-editor rename-box';\n this._input = document.createElement('input');\n this._input.className = 'rename-input';\n this._input.type = 'text';\n this._input.setAttribute('aria-label', localize('renameAriaLabel', \"Rename input. Type new name and press Enter to commit.\"));\n this._domNode.appendChild(this._input);\n this._label = document.createElement('div');\n this._label.className = 'rename-label';\n this._domNode.appendChild(this._label);\n const updateLabel = () => {\n var _a, _b;\n const [accept, preview] = this._acceptKeybindings;\n this._keybindingService.lookupKeybinding(accept);\n this._label.innerText = localize({ key: 'label', comment: ['placeholders are keybindings, e.g \"F2 to Rename, Shift+F2 to Preview\"'] }, \"{0} to Rename, {1} to Preview\", (_a = this._keybindingService.lookupKeybinding(accept)) === null || _a === void 0 ? void 0 : _a.getLabel(), (_b = this._keybindingService.lookupKeybinding(preview)) === null || _b === void 0 ? void 0 : _b.getLabel());\n };\n updateLabel();\n this._disposables.add(this._keybindingService.onDidUpdateKeybindings(updateLabel));\n this._updateFont();\n this._updateStyles(this._themeService.getColorTheme());\n }\n return this._domNode;\n }\n _updateStyles(theme) {\n var _a, _b, _c, _d;\n if (!this._input || !this._domNode) {\n return;\n }\n const widgetShadowColor = theme.getColor(widgetShadow);\n this._domNode.style.backgroundColor = String((_a = theme.getColor(editorWidgetBackground)) !== null && _a !== void 0 ? _a : '');\n this._domNode.style.boxShadow = widgetShadowColor ? ` 0 0 8px 2px ${widgetShadowColor}` : '';\n this._domNode.style.color = String((_b = theme.getColor(inputForeground)) !== null && _b !== void 0 ? _b : '');\n this._input.style.backgroundColor = String((_c = theme.getColor(inputBackground)) !== null && _c !== void 0 ? _c : '');\n // this._input.style.color = String(theme.getColor(inputForeground) ?? '');\n const border = theme.getColor(inputBorder);\n this._input.style.borderWidth = border ? '1px' : '0px';\n this._input.style.borderStyle = border ? 'solid' : 'none';\n this._input.style.borderColor = (_d = border === null || border === void 0 ? void 0 : border.toString()) !== null && _d !== void 0 ? _d : 'none';\n }\n _updateFont() {\n if (!this._input || !this._label) {\n return;\n }\n const fontInfo = this._editor.getOption(40 /* fontInfo */);\n this._input.style.fontFamily = fontInfo.fontFamily;\n this._input.style.fontWeight = fontInfo.fontWeight;\n this._input.style.fontSize = `${fontInfo.fontSize}px`;\n this._label.style.fontSize = `${fontInfo.fontSize * 0.8}px`;\n }\n getPosition() {\n if (!this._visible) {\n return null;\n }\n return {\n position: this._position,\n preference: [2 /* BELOW */, 1 /* ABOVE */]\n };\n }\n afterRender(position) {\n if (!position) {\n // cancel rename when input widget isn't rendered anymore\n this.cancelInput(true);\n }\n }\n acceptInput(wantsPreview) {\n if (this._currentAcceptInput) {\n this._currentAcceptInput(wantsPreview);\n }\n }\n cancelInput(focusEditor) {\n if (this._currentCancelInput) {\n this._currentCancelInput(focusEditor);\n }\n }\n getInput(where, value, selectionStart, selectionEnd, supportPreview, token) {\n this._domNode.classList.toggle('preview', supportPreview);\n this._position = new Position(where.startLineNumber, where.startColumn);\n this._input.value = value;\n this._input.setAttribute('selectionStart', selectionStart.toString());\n this._input.setAttribute('selectionEnd', selectionEnd.toString());\n this._input.size = Math.max((where.endColumn - where.startColumn) * 1.1, 20);\n const disposeOnDone = new DisposableStore();\n return new Promise(resolve => {\n this._currentCancelInput = (focusEditor) => {\n this._currentAcceptInput = undefined;\n this._currentCancelInput = undefined;\n resolve(focusEditor);\n return true;\n };\n this._currentAcceptInput = (wantsPreview) => {\n if (this._input.value.trim().length === 0 || this._input.value === value) {\n // empty or whitespace only or not changed\n this.cancelInput(true);\n return;\n }\n this._currentAcceptInput = undefined;\n this._currentCancelInput = undefined;\n resolve({\n newName: this._input.value,\n wantsPreview: supportPreview && wantsPreview\n });\n };\n token.onCancellationRequested(() => this.cancelInput(true));\n disposeOnDone.add(this._editor.onDidBlurEditorWidget(() => this.cancelInput(false)));\n this._show();\n }).finally(() => {\n disposeOnDone.dispose();\n this._hide();\n });\n }\n _show() {\n this._editor.revealLineInCenterIfOutsideViewport(this._position.lineNumber, 0 /* Smooth */);\n this._visible = true;\n this._visibleContextKey.set(true);\n this._editor.layoutContentWidget(this);\n setTimeout(() => {\n this._input.focus();\n this._input.setSelectionRange(parseInt(this._input.getAttribute('selectionStart')), parseInt(this._input.getAttribute('selectionEnd')));\n }, 100);\n }\n _hide() {\n this._visible = false;\n this._visibleContextKey.reset();\n this._editor.layoutContentWidget(this);\n }\n};\nRenameInputField = __decorate([\n __param(2, IThemeService),\n __param(3, IKeybindingService),\n __param(4, IContextKeyService)\n], RenameInputField);\nexport { RenameInputField };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../../nls.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\nimport { IEditorProgressService } from '../../../platform/progress/common/progress.js';\nimport { registerEditorAction, registerEditorContribution, EditorAction, EditorCommand, registerEditorCommand, registerModelAndPositionCommand } from '../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { RenameInputField, CONTEXT_RENAME_INPUT_VISIBLE } from './renameInputField.js';\nimport { RenameProviderRegistry } from '../../common/modes.js';\nimport { Position } from '../../common/core/position.js';\nimport { alert } from '../../../base/browser/ui/aria/aria.js';\nimport { Range } from '../../common/core/range.js';\nimport { MessageController } from '../message/messageController.js';\nimport { EditorStateCancellationTokenSource } from '../../browser/core/editorState.js';\nimport { INotificationService } from '../../../platform/notification/common/notification.js';\nimport { IBulkEditService, ResourceEdit } from '../../browser/services/bulkEditService.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { CancellationToken, CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { IdleValue, raceCancellation } from '../../../base/common/async.js';\nimport { ILogService } from '../../../platform/log/common/log.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { Registry } from '../../../platform/registry/common/platform.js';\nimport { Extensions } from '../../../platform/configuration/common/configurationRegistry.js';\nimport { ITextResourceConfigurationService } from '../../common/services/textResourceConfigurationService.js';\nimport { assertType } from '../../../base/common/types.js';\nclass RenameSkeleton {\n constructor(model, position) {\n this.model = model;\n this.position = position;\n this._providerRenameIdx = 0;\n this._providers = RenameProviderRegistry.ordered(model);\n }\n hasProvider() {\n return this._providers.length > 0;\n }\n resolveRenameLocation(token) {\n return __awaiter(this, void 0, void 0, function* () {\n const rejects = [];\n for (this._providerRenameIdx = 0; this._providerRenameIdx < this._providers.length; this._providerRenameIdx++) {\n const provider = this._providers[this._providerRenameIdx];\n if (!provider.resolveRenameLocation) {\n break;\n }\n let res = yield provider.resolveRenameLocation(this.model, this.position, token);\n if (!res) {\n continue;\n }\n if (res.rejectReason) {\n rejects.push(res.rejectReason);\n continue;\n }\n return res;\n }\n const word = this.model.getWordAtPosition(this.position);\n if (!word) {\n return {\n range: Range.fromPositions(this.position),\n text: '',\n rejectReason: rejects.length > 0 ? rejects.join('\\n') : undefined\n };\n }\n return {\n range: new Range(this.position.lineNumber, word.startColumn, this.position.lineNumber, word.endColumn),\n text: word.word,\n rejectReason: rejects.length > 0 ? rejects.join('\\n') : undefined\n };\n });\n }\n provideRenameEdits(newName, token) {\n return __awaiter(this, void 0, void 0, function* () {\n return this._provideRenameEdits(newName, this._providerRenameIdx, [], token);\n });\n }\n _provideRenameEdits(newName, i, rejects, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const provider = this._providers[i];\n if (!provider) {\n return {\n edits: [],\n rejectReason: rejects.join('\\n')\n };\n }\n const result = yield provider.provideRenameEdits(this.model, this.position, newName, token);\n if (!result) {\n return this._provideRenameEdits(newName, i + 1, rejects.concat(nls.localize('no result', \"No result.\")), token);\n }\n else if (result.rejectReason) {\n return this._provideRenameEdits(newName, i + 1, rejects.concat(result.rejectReason), token);\n }\n return result;\n });\n }\n}\nexport function rename(model, position, newName) {\n return __awaiter(this, void 0, void 0, function* () {\n const skeleton = new RenameSkeleton(model, position);\n const loc = yield skeleton.resolveRenameLocation(CancellationToken.None);\n if (loc === null || loc === void 0 ? void 0 : loc.rejectReason) {\n return { edits: [], rejectReason: loc.rejectReason };\n }\n return skeleton.provideRenameEdits(newName, CancellationToken.None);\n });\n}\n// --- register actions and commands\nlet RenameController = class RenameController {\n constructor(editor, _instaService, _notificationService, _bulkEditService, _progressService, _logService, _configService) {\n this.editor = editor;\n this._instaService = _instaService;\n this._notificationService = _notificationService;\n this._bulkEditService = _bulkEditService;\n this._progressService = _progressService;\n this._logService = _logService;\n this._configService = _configService;\n this._dispoableStore = new DisposableStore();\n this._cts = new CancellationTokenSource();\n this._renameInputField = this._dispoableStore.add(new IdleValue(() => this._dispoableStore.add(this._instaService.createInstance(RenameInputField, this.editor, ['acceptRenameInput', 'acceptRenameInputWithPreview']))));\n }\n static get(editor) {\n return editor.getContribution(RenameController.ID);\n }\n dispose() {\n this._dispoableStore.dispose();\n this._cts.dispose(true);\n }\n run() {\n return __awaiter(this, void 0, void 0, function* () {\n this._cts.dispose(true);\n if (!this.editor.hasModel()) {\n return undefined;\n }\n const position = this.editor.getPosition();\n const skeleton = new RenameSkeleton(this.editor.getModel(), position);\n if (!skeleton.hasProvider()) {\n return undefined;\n }\n this._cts = new EditorStateCancellationTokenSource(this.editor, 4 /* Position */ | 1 /* Value */);\n // resolve rename location\n let loc;\n try {\n const resolveLocationOperation = skeleton.resolveRenameLocation(this._cts.token);\n this._progressService.showWhile(resolveLocationOperation, 250);\n loc = yield resolveLocationOperation;\n }\n catch (e) {\n MessageController.get(this.editor).showMessage(e || nls.localize('resolveRenameLocationFailed', \"An unknown error occurred while resolving rename location\"), position);\n return undefined;\n }\n if (!loc) {\n return undefined;\n }\n if (loc.rejectReason) {\n MessageController.get(this.editor).showMessage(loc.rejectReason, position);\n return undefined;\n }\n if (this._cts.token.isCancellationRequested) {\n return undefined;\n }\n this._cts.dispose();\n this._cts = new EditorStateCancellationTokenSource(this.editor, 4 /* Position */ | 1 /* Value */, loc.range);\n // do rename at location\n let selection = this.editor.getSelection();\n let selectionStart = 0;\n let selectionEnd = loc.text.length;\n if (!Range.isEmpty(selection) && !Range.spansMultipleLines(selection) && Range.containsRange(loc.range, selection)) {\n selectionStart = Math.max(0, selection.startColumn - loc.range.startColumn);\n selectionEnd = Math.min(loc.range.endColumn, selection.endColumn) - loc.range.startColumn;\n }\n const supportPreview = this._bulkEditService.hasPreviewHandler() && this._configService.getValue(this.editor.getModel().uri, 'editor.rename.enablePreview');\n const inputFieldResult = yield this._renameInputField.value.getInput(loc.range, loc.text, selectionStart, selectionEnd, supportPreview, this._cts.token);\n // no result, only hint to focus the editor or not\n if (typeof inputFieldResult === 'boolean') {\n if (inputFieldResult) {\n this.editor.focus();\n }\n return undefined;\n }\n this.editor.focus();\n const renameOperation = raceCancellation(skeleton.provideRenameEdits(inputFieldResult.newName, this._cts.token), this._cts.token).then((renameResult) => __awaiter(this, void 0, void 0, function* () {\n if (!renameResult || !this.editor.hasModel()) {\n return;\n }\n if (renameResult.rejectReason) {\n this._notificationService.info(renameResult.rejectReason);\n return;\n }\n this._bulkEditService.apply(ResourceEdit.convert(renameResult), {\n editor: this.editor,\n showPreview: inputFieldResult.wantsPreview,\n label: nls.localize('label', \"Renaming '{0}'\", loc === null || loc === void 0 ? void 0 : loc.text),\n quotableLabel: nls.localize('quotableLabel', \"Renaming {0}\", loc === null || loc === void 0 ? void 0 : loc.text),\n }).then(result => {\n if (result.ariaSummary) {\n alert(nls.localize('aria', \"Successfully renamed '{0}' to '{1}'. Summary: {2}\", loc.text, inputFieldResult.newName, result.ariaSummary));\n }\n }).catch(err => {\n this._notificationService.error(nls.localize('rename.failedApply', \"Rename failed to apply edits\"));\n this._logService.error(err);\n });\n }), err => {\n this._notificationService.error(nls.localize('rename.failed', \"Rename failed to compute edits\"));\n this._logService.error(err);\n });\n this._progressService.showWhile(renameOperation, 250);\n return renameOperation;\n });\n }\n acceptRenameInput(wantsPreview) {\n this._renameInputField.value.acceptInput(wantsPreview);\n }\n cancelRenameInput() {\n this._renameInputField.value.cancelInput(true);\n }\n};\nRenameController.ID = 'editor.contrib.renameController';\nRenameController = __decorate([\n __param(1, IInstantiationService),\n __param(2, INotificationService),\n __param(3, IBulkEditService),\n __param(4, IEditorProgressService),\n __param(5, ILogService),\n __param(6, ITextResourceConfigurationService)\n], RenameController);\n// ---- action implementation\nexport class RenameAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.rename',\n label: nls.localize('rename.label', \"Rename Symbol\"),\n alias: 'Rename Symbol',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasRenameProvider),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 60 /* F2 */,\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n group: '1_modification',\n order: 1.1\n }\n });\n }\n runCommand(accessor, args) {\n const editorService = accessor.get(ICodeEditorService);\n const [uri, pos] = Array.isArray(args) && args || [undefined, undefined];\n if (URI.isUri(uri) && Position.isIPosition(pos)) {\n return editorService.openCodeEditor({ resource: uri }, editorService.getActiveCodeEditor()).then(editor => {\n if (!editor) {\n return;\n }\n editor.setPosition(pos);\n editor.invokeWithinContext(accessor => {\n this.reportTelemetry(accessor, editor);\n return this.run(accessor, editor);\n });\n }, onUnexpectedError);\n }\n return super.runCommand(accessor, args);\n }\n run(accessor, editor) {\n const controller = RenameController.get(editor);\n if (controller) {\n return controller.run();\n }\n return Promise.resolve();\n }\n}\nregisterEditorContribution(RenameController.ID, RenameController);\nregisterEditorAction(RenameAction);\nconst RenameCommand = EditorCommand.bindToContribution(RenameController.get);\nregisterEditorCommand(new RenameCommand({\n id: 'acceptRenameInput',\n precondition: CONTEXT_RENAME_INPUT_VISIBLE,\n handler: x => x.acceptRenameInput(false),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 99,\n kbExpr: EditorContextKeys.focus,\n primary: 3 /* Enter */\n }\n}));\nregisterEditorCommand(new RenameCommand({\n id: 'acceptRenameInputWithPreview',\n precondition: ContextKeyExpr.and(CONTEXT_RENAME_INPUT_VISIBLE, ContextKeyExpr.has('config.editor.rename.enablePreview')),\n handler: x => x.acceptRenameInput(true),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 99,\n kbExpr: EditorContextKeys.focus,\n primary: 1024 /* Shift */ + 3 /* Enter */\n }\n}));\nregisterEditorCommand(new RenameCommand({\n id: 'cancelRenameInput',\n precondition: CONTEXT_RENAME_INPUT_VISIBLE,\n handler: x => x.cancelRenameInput(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 99,\n kbExpr: EditorContextKeys.focus,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\n}));\n// ---- api bridge command\nregisterModelAndPositionCommand('_executeDocumentRenameProvider', function (model, position, ...args) {\n const [newName] = args;\n assertType(typeof newName === 'string');\n return rename(model, position, newName);\n});\n//todo@jrieken use editor options world\nRegistry.as(Extensions.Configuration).registerConfiguration({\n id: 'editor',\n properties: {\n 'editor.rename.enablePreview': {\n scope: 5 /* LANGUAGE_OVERRIDABLE */,\n description: nls.localize('enablePreview', \"Enable/disable the ability to preview changes before renaming\"),\n default: true,\n type: 'boolean'\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nexport class BracketSelectionRangeProvider {\n provideSelectionRanges(model, positions) {\n return __awaiter(this, void 0, void 0, function* () {\n const result = [];\n for (const position of positions) {\n const bucket = [];\n result.push(bucket);\n const ranges = new Map();\n yield new Promise(resolve => BracketSelectionRangeProvider._bracketsRightYield(resolve, 0, model, position, ranges));\n yield new Promise(resolve => BracketSelectionRangeProvider._bracketsLeftYield(resolve, 0, model, position, ranges, bucket));\n }\n return result;\n });\n }\n static _bracketsRightYield(resolve, round, model, pos, ranges) {\n const counts = new Map();\n const t1 = Date.now();\n while (true) {\n if (round >= BracketSelectionRangeProvider._maxRounds) {\n resolve();\n break;\n }\n if (!pos) {\n resolve();\n break;\n }\n let bracket = model.findNextBracket(pos);\n if (!bracket) {\n resolve();\n break;\n }\n let d = Date.now() - t1;\n if (d > BracketSelectionRangeProvider._maxDuration) {\n setTimeout(() => BracketSelectionRangeProvider._bracketsRightYield(resolve, round + 1, model, pos, ranges));\n break;\n }\n const key = bracket.close[0];\n if (bracket.isOpen) {\n // wait for closing\n let val = counts.has(key) ? counts.get(key) : 0;\n counts.set(key, val + 1);\n }\n else {\n // process closing\n let val = counts.has(key) ? counts.get(key) : 0;\n val -= 1;\n counts.set(key, Math.max(0, val));\n if (val < 0) {\n let list = ranges.get(key);\n if (!list) {\n list = new LinkedList();\n ranges.set(key, list);\n }\n list.push(bracket.range);\n }\n }\n pos = bracket.range.getEndPosition();\n }\n }\n static _bracketsLeftYield(resolve, round, model, pos, ranges, bucket) {\n const counts = new Map();\n const t1 = Date.now();\n while (true) {\n if (round >= BracketSelectionRangeProvider._maxRounds && ranges.size === 0) {\n resolve();\n break;\n }\n if (!pos) {\n resolve();\n break;\n }\n let bracket = model.findPrevBracket(pos);\n if (!bracket) {\n resolve();\n break;\n }\n let d = Date.now() - t1;\n if (d > BracketSelectionRangeProvider._maxDuration) {\n setTimeout(() => BracketSelectionRangeProvider._bracketsLeftYield(resolve, round + 1, model, pos, ranges, bucket));\n break;\n }\n const key = bracket.close[0];\n if (!bracket.isOpen) {\n // wait for opening\n let val = counts.has(key) ? counts.get(key) : 0;\n counts.set(key, val + 1);\n }\n else {\n // opening\n let val = counts.has(key) ? counts.get(key) : 0;\n val -= 1;\n counts.set(key, Math.max(0, val));\n if (val < 0) {\n let list = ranges.get(key);\n if (list) {\n let closing = list.shift();\n if (list.size === 0) {\n ranges.delete(key);\n }\n const innerBracket = Range.fromPositions(bracket.range.getEndPosition(), closing.getStartPosition());\n const outerBracket = Range.fromPositions(bracket.range.getStartPosition(), closing.getEndPosition());\n bucket.push({ range: innerBracket });\n bucket.push({ range: outerBracket });\n BracketSelectionRangeProvider._addBracketLeading(model, outerBracket, bucket);\n }\n }\n }\n pos = bracket.range.getStartPosition();\n }\n }\n static _addBracketLeading(model, bracket, bucket) {\n if (bracket.startLineNumber === bracket.endLineNumber) {\n return;\n }\n // xxxxxxxx {\n //\n // }\n const startLine = bracket.startLineNumber;\n const column = model.getLineFirstNonWhitespaceColumn(startLine);\n if (column !== 0 && column !== bracket.startColumn) {\n bucket.push({ range: Range.fromPositions(new Position(startLine, column), bracket.getEndPosition()) });\n bucket.push({ range: Range.fromPositions(new Position(startLine, 1), bracket.getEndPosition()) });\n }\n // xxxxxxxx\n // {\n //\n // }\n const aboveLine = startLine - 1;\n if (aboveLine > 0) {\n const column = model.getLineFirstNonWhitespaceColumn(aboveLine);\n if (column === bracket.startColumn && column !== model.getLineLastNonWhitespaceColumn(aboveLine)) {\n bucket.push({ range: Range.fromPositions(new Position(aboveLine, column), bracket.getEndPosition()) });\n bucket.push({ range: Range.fromPositions(new Position(aboveLine, 1), bracket.getEndPosition()) });\n }\n }\n }\n}\nBracketSelectionRangeProvider._maxDuration = 30;\nBracketSelectionRangeProvider._maxRounds = 2;\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as arrays from '../../../base/common/arrays.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution, registerModelCommand } from '../../browser/editorExtensions.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport * as modes from '../../common/modes.js';\nimport * as nls from '../../../nls.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { WordSelectionRangeProvider } from './wordSelections.js';\nimport { BracketSelectionRangeProvider } from './bracketSelections.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { onUnexpectedExternalError } from '../../../base/common/errors.js';\nclass SelectionRanges {\n constructor(index, ranges) {\n this.index = index;\n this.ranges = ranges;\n }\n mov(fwd) {\n let index = this.index + (fwd ? 1 : -1);\n if (index < 0 || index >= this.ranges.length) {\n return this;\n }\n const res = new SelectionRanges(index, this.ranges);\n if (res.ranges[index].equalsRange(this.ranges[this.index])) {\n // next range equals this range, retry with next-next\n return res.mov(fwd);\n }\n return res;\n }\n}\nclass SmartSelectController {\n constructor(_editor) {\n this._editor = _editor;\n this._ignoreSelection = false;\n }\n static get(editor) {\n return editor.getContribution(SmartSelectController.ID);\n }\n dispose() {\n var _a;\n (_a = this._selectionListener) === null || _a === void 0 ? void 0 : _a.dispose();\n }\n run(forward) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._editor.hasModel()) {\n return;\n }\n const selections = this._editor.getSelections();\n const model = this._editor.getModel();\n if (!modes.SelectionRangeRegistry.has(model)) {\n return;\n }\n if (!this._state) {\n yield provideSelectionRanges(model, selections.map(s => s.getPosition()), this._editor.getOption(99 /* smartSelect */), CancellationToken.None).then(ranges => {\n var _a;\n if (!arrays.isNonEmptyArray(ranges) || ranges.length !== selections.length) {\n // invalid result\n return;\n }\n if (!this._editor.hasModel() || !arrays.equals(this._editor.getSelections(), selections, (a, b) => a.equalsSelection(b))) {\n // invalid editor state\n return;\n }\n for (let i = 0; i < ranges.length; i++) {\n ranges[i] = ranges[i].filter(range => {\n // filter ranges inside the selection\n return range.containsPosition(selections[i].getStartPosition()) && range.containsPosition(selections[i].getEndPosition());\n });\n // prepend current selection\n ranges[i].unshift(selections[i]);\n }\n this._state = ranges.map(ranges => new SelectionRanges(0, ranges));\n // listen to caret move and forget about state\n (_a = this._selectionListener) === null || _a === void 0 ? void 0 : _a.dispose();\n this._selectionListener = this._editor.onDidChangeCursorPosition(() => {\n var _a;\n if (!this._ignoreSelection) {\n (_a = this._selectionListener) === null || _a === void 0 ? void 0 : _a.dispose();\n this._state = undefined;\n }\n });\n });\n }\n if (!this._state) {\n // no state\n return;\n }\n this._state = this._state.map(state => state.mov(forward));\n const newSelections = this._state.map(state => Selection.fromPositions(state.ranges[state.index].getStartPosition(), state.ranges[state.index].getEndPosition()));\n this._ignoreSelection = true;\n try {\n this._editor.setSelections(newSelections);\n }\n finally {\n this._ignoreSelection = false;\n }\n });\n }\n}\nSmartSelectController.ID = 'editor.contrib.smartSelectController';\nclass AbstractSmartSelect extends EditorAction {\n constructor(forward, opts) {\n super(opts);\n this._forward = forward;\n }\n run(_accessor, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n let controller = SmartSelectController.get(editor);\n if (controller) {\n yield controller.run(this._forward);\n }\n });\n }\n}\nclass GrowSelectionAction extends AbstractSmartSelect {\n constructor() {\n super(true, {\n id: 'editor.action.smartSelect.expand',\n label: nls.localize('smartSelect.expand', \"Expand Selection\"),\n alias: 'Expand Selection',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 1024 /* Shift */ | 512 /* Alt */ | 17 /* RightArrow */,\n mac: {\n primary: 2048 /* CtrlCmd */ | 256 /* WinCtrl */ | 1024 /* Shift */ | 17 /* RightArrow */,\n secondary: [256 /* WinCtrl */ | 1024 /* Shift */ | 17 /* RightArrow */],\n },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '1_basic',\n title: nls.localize({ key: 'miSmartSelectGrow', comment: ['&& denotes a mnemonic'] }, \"&&Expand Selection\"),\n order: 2\n }\n });\n }\n}\n// renamed command id\nCommandsRegistry.registerCommandAlias('editor.action.smartSelect.grow', 'editor.action.smartSelect.expand');\nclass ShrinkSelectionAction extends AbstractSmartSelect {\n constructor() {\n super(false, {\n id: 'editor.action.smartSelect.shrink',\n label: nls.localize('smartSelect.shrink', \"Shrink Selection\"),\n alias: 'Shrink Selection',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 1024 /* Shift */ | 512 /* Alt */ | 15 /* LeftArrow */,\n mac: {\n primary: 2048 /* CtrlCmd */ | 256 /* WinCtrl */ | 1024 /* Shift */ | 15 /* LeftArrow */,\n secondary: [256 /* WinCtrl */ | 1024 /* Shift */ | 15 /* LeftArrow */],\n },\n weight: 100 /* EditorContrib */\n },\n menuOpts: {\n menuId: MenuId.MenubarSelectionMenu,\n group: '1_basic',\n title: nls.localize({ key: 'miSmartSelectShrink', comment: ['&& denotes a mnemonic'] }, \"&&Shrink Selection\"),\n order: 3\n }\n });\n }\n}\nregisterEditorContribution(SmartSelectController.ID, SmartSelectController);\nregisterEditorAction(GrowSelectionAction);\nregisterEditorAction(ShrinkSelectionAction);\n// word selection\nmodes.SelectionRangeRegistry.register('*', new WordSelectionRangeProvider());\nexport function provideSelectionRanges(model, positions, options, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const providers = modes.SelectionRangeRegistry.all(model);\n if (providers.length === 1) {\n // add word selection and bracket selection when no provider exists\n providers.unshift(new BracketSelectionRangeProvider());\n }\n let work = [];\n let allRawRanges = [];\n for (const provider of providers) {\n work.push(Promise.resolve(provider.provideSelectionRanges(model, positions, token)).then(allProviderRanges => {\n if (arrays.isNonEmptyArray(allProviderRanges) && allProviderRanges.length === positions.length) {\n for (let i = 0; i < positions.length; i++) {\n if (!allRawRanges[i]) {\n allRawRanges[i] = [];\n }\n for (const oneProviderRanges of allProviderRanges[i]) {\n if (Range.isIRange(oneProviderRanges.range) && Range.containsPosition(oneProviderRanges.range, positions[i])) {\n allRawRanges[i].push(Range.lift(oneProviderRanges.range));\n }\n }\n }\n }\n }, onUnexpectedExternalError));\n }\n yield Promise.all(work);\n return allRawRanges.map(oneRawRanges => {\n if (oneRawRanges.length === 0) {\n return [];\n }\n // sort all by start/end position\n oneRawRanges.sort((a, b) => {\n if (Position.isBefore(a.getStartPosition(), b.getStartPosition())) {\n return 1;\n }\n else if (Position.isBefore(b.getStartPosition(), a.getStartPosition())) {\n return -1;\n }\n else if (Position.isBefore(a.getEndPosition(), b.getEndPosition())) {\n return -1;\n }\n else if (Position.isBefore(b.getEndPosition(), a.getEndPosition())) {\n return 1;\n }\n else {\n return 0;\n }\n });\n // remove ranges that don't contain the former range or that are equal to the\n // former range\n let oneRanges = [];\n let last;\n for (const range of oneRawRanges) {\n if (!last || (Range.containsRange(range, last) && !Range.equalsRange(range, last))) {\n oneRanges.push(range);\n last = range;\n }\n }\n if (!options.selectLeadingAndTrailingWhitespace) {\n return oneRanges;\n }\n // add ranges that expand trivia at line starts and ends whenever a range\n // wraps onto the a new line\n let oneRangesWithTrivia = [oneRanges[0]];\n for (let i = 1; i < oneRanges.length; i++) {\n const prev = oneRanges[i - 1];\n const cur = oneRanges[i];\n if (cur.startLineNumber !== prev.startLineNumber || cur.endLineNumber !== prev.endLineNumber) {\n // add line/block range without leading/failing whitespace\n const rangeNoWhitespace = new Range(prev.startLineNumber, model.getLineFirstNonWhitespaceColumn(prev.startLineNumber), prev.endLineNumber, model.getLineLastNonWhitespaceColumn(prev.endLineNumber));\n if (rangeNoWhitespace.containsRange(prev) && !rangeNoWhitespace.equalsRange(prev) && cur.containsRange(rangeNoWhitespace) && !cur.equalsRange(rangeNoWhitespace)) {\n oneRangesWithTrivia.push(rangeNoWhitespace);\n }\n // add line/block range\n const rangeFull = new Range(prev.startLineNumber, 1, prev.endLineNumber, model.getLineMaxColumn(prev.endLineNumber));\n if (rangeFull.containsRange(prev) && !rangeFull.equalsRange(rangeNoWhitespace) && cur.containsRange(rangeFull) && !cur.equalsRange(rangeFull)) {\n oneRangesWithTrivia.push(rangeFull);\n }\n }\n oneRangesWithTrivia.push(cur);\n }\n return oneRangesWithTrivia;\n });\n });\n}\nregisterModelCommand('_executeSelectionRangeProvider', function (model, ...args) {\n const [positions] = args;\n return provideSelectionRanges(model, positions, { selectLeadingAndTrailingWhitespace: true }, CancellationToken.None);\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 *--------------------------------------------------------------------------------------------*/\nimport { Range } from '../../common/core/range.js';\nimport { isUpperAsciiLetter, isLowerAsciiLetter } from '../../../base/common/strings.js';\nexport class WordSelectionRangeProvider {\n provideSelectionRanges(model, positions) {\n const result = [];\n for (const position of positions) {\n const bucket = [];\n result.push(bucket);\n this._addInWordRanges(bucket, model, position);\n this._addWordRanges(bucket, model, position);\n this._addWhitespaceLine(bucket, model, position);\n bucket.push({ range: model.getFullModelRange() });\n }\n return result;\n }\n _addInWordRanges(bucket, model, pos) {\n const obj = model.getWordAtPosition(pos);\n if (!obj) {\n return;\n }\n let { word, startColumn } = obj;\n let offset = pos.column - startColumn;\n let start = offset;\n let end = offset;\n let lastCh = 0;\n // LEFT anchor (start)\n for (; start >= 0; start--) {\n let ch = word.charCodeAt(start);\n if ((start !== offset) && (ch === 95 /* Underline */ || ch === 45 /* Dash */)) {\n // foo-bar OR foo_bar\n break;\n }\n else if (isLowerAsciiLetter(ch) && isUpperAsciiLetter(lastCh)) {\n // fooBar\n break;\n }\n lastCh = ch;\n }\n start += 1;\n // RIGHT anchor (end)\n for (; end < word.length; end++) {\n let ch = word.charCodeAt(end);\n if (isUpperAsciiLetter(ch) && isLowerAsciiLetter(lastCh)) {\n // fooBar\n break;\n }\n else if (ch === 95 /* Underline */ || ch === 45 /* Dash */) {\n // foo-bar OR foo_bar\n break;\n }\n lastCh = ch;\n }\n if (start < end) {\n bucket.push({ range: new Range(pos.lineNumber, startColumn + start, pos.lineNumber, startColumn + end) });\n }\n }\n _addWordRanges(bucket, model, pos) {\n const word = model.getWordAtPosition(pos);\n if (word) {\n bucket.push({ range: new Range(pos.lineNumber, word.startColumn, pos.lineNumber, word.endColumn) });\n }\n }\n _addWhitespaceLine(bucket, model, pos) {\n if (model.getLineLength(pos.lineNumber) > 0\n && model.getLineFirstNonWhitespaceColumn(pos.lineNumber) === 0\n && model.getLineLastNonWhitespaceColumn(pos.lineNumber) === 0) {\n bucket.push({ range: new Range(pos.lineNumber, 1, pos.lineNumber, model.getLineMaxColumn(pos.lineNumber)) });\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nexport class Scanner {\n constructor() {\n this.value = '';\n this.pos = 0;\n }\n static isDigitCharacter(ch) {\n return ch >= 48 /* Digit0 */ && ch <= 57 /* Digit9 */;\n }\n static isVariableCharacter(ch) {\n return ch === 95 /* Underline */\n || (ch >= 97 /* a */ && ch <= 122 /* z */)\n || (ch >= 65 /* A */ && ch <= 90 /* Z */);\n }\n text(value) {\n this.value = value;\n this.pos = 0;\n }\n tokenText(token) {\n return this.value.substr(token.pos, token.len);\n }\n next() {\n if (this.pos >= this.value.length) {\n return { type: 14 /* EOF */, pos: this.pos, len: 0 };\n }\n let pos = this.pos;\n let len = 0;\n let ch = this.value.charCodeAt(pos);\n let type;\n // static types\n type = Scanner._table[ch];\n if (typeof type === 'number') {\n this.pos += 1;\n return { type, pos, len: 1 };\n }\n // number\n if (Scanner.isDigitCharacter(ch)) {\n type = 8 /* Int */;\n do {\n len += 1;\n ch = this.value.charCodeAt(pos + len);\n } while (Scanner.isDigitCharacter(ch));\n this.pos += len;\n return { type, pos, len };\n }\n // variable name\n if (Scanner.isVariableCharacter(ch)) {\n type = 9 /* VariableName */;\n do {\n ch = this.value.charCodeAt(pos + (++len));\n } while (Scanner.isVariableCharacter(ch) || Scanner.isDigitCharacter(ch));\n this.pos += len;\n return { type, pos, len };\n }\n // format\n type = 10 /* Format */;\n do {\n len += 1;\n ch = this.value.charCodeAt(pos + len);\n } while (!isNaN(ch)\n && typeof Scanner._table[ch] === 'undefined' // not static token\n && !Scanner.isDigitCharacter(ch) // not number\n && !Scanner.isVariableCharacter(ch) // not variable\n );\n this.pos += len;\n return { type, pos, len };\n }\n}\nScanner._table = {\n [36 /* DollarSign */]: 0 /* Dollar */,\n [58 /* Colon */]: 1 /* Colon */,\n [44 /* Comma */]: 2 /* Comma */,\n [123 /* OpenCurlyBrace */]: 3 /* CurlyOpen */,\n [125 /* CloseCurlyBrace */]: 4 /* CurlyClose */,\n [92 /* Backslash */]: 5 /* Backslash */,\n [47 /* Slash */]: 6 /* Forwardslash */,\n [124 /* Pipe */]: 7 /* Pipe */,\n [43 /* Plus */]: 11 /* Plus */,\n [45 /* Dash */]: 12 /* Dash */,\n [63 /* QuestionMark */]: 13 /* QuestionMark */,\n};\nexport class Marker {\n constructor() {\n this._children = [];\n }\n appendChild(child) {\n if (child instanceof Text && this._children[this._children.length - 1] instanceof Text) {\n // this and previous child are text -> merge them\n this._children[this._children.length - 1].value += child.value;\n }\n else {\n // normal adoption of child\n child.parent = this;\n this._children.push(child);\n }\n return this;\n }\n replace(child, others) {\n const { parent } = child;\n const idx = parent.children.indexOf(child);\n const newChildren = parent.children.slice(0);\n newChildren.splice(idx, 1, ...others);\n parent._children = newChildren;\n (function _fixParent(children, parent) {\n for (const child of children) {\n child.parent = parent;\n _fixParent(child.children, child);\n }\n })(others, parent);\n }\n get children() {\n return this._children;\n }\n get snippet() {\n let candidate = this;\n while (true) {\n if (!candidate) {\n return undefined;\n }\n if (candidate instanceof TextmateSnippet) {\n return candidate;\n }\n candidate = candidate.parent;\n }\n }\n toString() {\n return this.children.reduce((prev, cur) => prev + cur.toString(), '');\n }\n len() {\n return 0;\n }\n}\nexport class Text extends Marker {\n constructor(value) {\n super();\n this.value = value;\n }\n toString() {\n return this.value;\n }\n len() {\n return this.value.length;\n }\n clone() {\n return new Text(this.value);\n }\n}\nexport class TransformableMarker extends Marker {\n}\nexport class Placeholder extends TransformableMarker {\n constructor(index) {\n super();\n this.index = index;\n }\n static compareByIndex(a, b) {\n if (a.index === b.index) {\n return 0;\n }\n else if (a.isFinalTabstop) {\n return 1;\n }\n else if (b.isFinalTabstop) {\n return -1;\n }\n else if (a.index < b.index) {\n return -1;\n }\n else if (a.index > b.index) {\n return 1;\n }\n else {\n return 0;\n }\n }\n get isFinalTabstop() {\n return this.index === 0;\n }\n get choice() {\n return this._children.length === 1 && this._children[0] instanceof Choice\n ? this._children[0]\n : undefined;\n }\n clone() {\n let ret = new Placeholder(this.index);\n if (this.transform) {\n ret.transform = this.transform.clone();\n }\n ret._children = this.children.map(child => child.clone());\n return ret;\n }\n}\nexport class Choice extends Marker {\n constructor() {\n super(...arguments);\n this.options = [];\n }\n appendChild(marker) {\n if (marker instanceof Text) {\n marker.parent = this;\n this.options.push(marker);\n }\n return this;\n }\n toString() {\n return this.options[0].value;\n }\n len() {\n return this.options[0].len();\n }\n clone() {\n let ret = new Choice();\n this.options.forEach(ret.appendChild, ret);\n return ret;\n }\n}\nexport class Transform extends Marker {\n constructor() {\n super(...arguments);\n this.regexp = new RegExp('');\n }\n resolve(value) {\n const _this = this;\n let didMatch = false;\n let ret = value.replace(this.regexp, function () {\n didMatch = true;\n return _this._replace(Array.prototype.slice.call(arguments, 0, -2));\n });\n // when the regex didn't match and when the transform has\n // else branches, then run those\n if (!didMatch && this._children.some(child => child instanceof FormatString && Boolean(child.elseValue))) {\n ret = this._replace([]);\n }\n return ret;\n }\n _replace(groups) {\n let ret = '';\n for (const marker of this._children) {\n if (marker instanceof FormatString) {\n let value = groups[marker.index] || '';\n value = marker.resolve(value);\n ret += value;\n }\n else {\n ret += marker.toString();\n }\n }\n return ret;\n }\n toString() {\n return '';\n }\n clone() {\n let ret = new Transform();\n ret.regexp = new RegExp(this.regexp.source, '' + (this.regexp.ignoreCase ? 'i' : '') + (this.regexp.global ? 'g' : ''));\n ret._children = this.children.map(child => child.clone());\n return ret;\n }\n}\nexport class FormatString extends Marker {\n constructor(index, shorthandName, ifValue, elseValue) {\n super();\n this.index = index;\n this.shorthandName = shorthandName;\n this.ifValue = ifValue;\n this.elseValue = elseValue;\n }\n resolve(value) {\n if (this.shorthandName === 'upcase') {\n return !value ? '' : value.toLocaleUpperCase();\n }\n else if (this.shorthandName === 'downcase') {\n return !value ? '' : value.toLocaleLowerCase();\n }\n else if (this.shorthandName === 'capitalize') {\n return !value ? '' : (value[0].toLocaleUpperCase() + value.substr(1));\n }\n else if (this.shorthandName === 'pascalcase') {\n return !value ? '' : this._toPascalCase(value);\n }\n else if (Boolean(value) && typeof this.ifValue === 'string') {\n return this.ifValue;\n }\n else if (!Boolean(value) && typeof this.elseValue === 'string') {\n return this.elseValue;\n }\n else {\n return value || '';\n }\n }\n _toPascalCase(value) {\n const match = value.match(/[a-z]+/gi);\n if (!match) {\n return value;\n }\n return match.map(function (word) {\n return word.charAt(0).toUpperCase()\n + word.substr(1).toLowerCase();\n })\n .join('');\n }\n clone() {\n let ret = new FormatString(this.index, this.shorthandName, this.ifValue, this.elseValue);\n return ret;\n }\n}\nexport class Variable extends TransformableMarker {\n constructor(name) {\n super();\n this.name = name;\n }\n resolve(resolver) {\n let value = resolver.resolve(this);\n if (this.transform) {\n value = this.transform.resolve(value || '');\n }\n if (value !== undefined) {\n this._children = [new Text(value)];\n return true;\n }\n return false;\n }\n clone() {\n const ret = new Variable(this.name);\n if (this.transform) {\n ret.transform = this.transform.clone();\n }\n ret._children = this.children.map(child => child.clone());\n return ret;\n }\n}\nfunction walk(marker, visitor) {\n const stack = [...marker];\n while (stack.length > 0) {\n const marker = stack.shift();\n const recurse = visitor(marker);\n if (!recurse) {\n break;\n }\n stack.unshift(...marker.children);\n }\n}\nexport class TextmateSnippet extends Marker {\n get placeholderInfo() {\n if (!this._placeholders) {\n // fill in placeholders\n let all = [];\n let last;\n this.walk(function (candidate) {\n if (candidate instanceof Placeholder) {\n all.push(candidate);\n last = !last || last.index < candidate.index ? candidate : last;\n }\n return true;\n });\n this._placeholders = { all, last };\n }\n return this._placeholders;\n }\n get placeholders() {\n const { all } = this.placeholderInfo;\n return all;\n }\n offset(marker) {\n let pos = 0;\n let found = false;\n this.walk(candidate => {\n if (candidate === marker) {\n found = true;\n return false;\n }\n pos += candidate.len();\n return true;\n });\n if (!found) {\n return -1;\n }\n return pos;\n }\n fullLen(marker) {\n let ret = 0;\n walk([marker], marker => {\n ret += marker.len();\n return true;\n });\n return ret;\n }\n enclosingPlaceholders(placeholder) {\n let ret = [];\n let { parent } = placeholder;\n while (parent) {\n if (parent instanceof Placeholder) {\n ret.push(parent);\n }\n parent = parent.parent;\n }\n return ret;\n }\n resolveVariables(resolver) {\n this.walk(candidate => {\n if (candidate instanceof Variable) {\n if (candidate.resolve(resolver)) {\n this._placeholders = undefined;\n }\n }\n return true;\n });\n return this;\n }\n appendChild(child) {\n this._placeholders = undefined;\n return super.appendChild(child);\n }\n replace(child, others) {\n this._placeholders = undefined;\n return super.replace(child, others);\n }\n clone() {\n let ret = new TextmateSnippet();\n this._children = this.children.map(child => child.clone());\n return ret;\n }\n walk(visitor) {\n walk(this.children, visitor);\n }\n}\nexport class SnippetParser {\n constructor() {\n this._scanner = new Scanner();\n this._token = { type: 14 /* EOF */, pos: 0, len: 0 };\n }\n static escape(value) {\n return value.replace(/\\$|}|\\\\/g, '\\\\$&');\n }\n static guessNeedsClipboard(template) {\n return /\\${?CLIPBOARD/.test(template);\n }\n parse(value, insertFinalTabstop, enforceFinalTabstop) {\n this._scanner.text(value);\n this._token = this._scanner.next();\n const snippet = new TextmateSnippet();\n while (this._parse(snippet)) {\n // nothing\n }\n // fill in values for placeholders. the first placeholder of an index\n // that has a value defines the value for all placeholders with that index\n const placeholderDefaultValues = new Map();\n const incompletePlaceholders = [];\n let placeholderCount = 0;\n snippet.walk(marker => {\n if (marker instanceof Placeholder) {\n placeholderCount += 1;\n if (marker.isFinalTabstop) {\n placeholderDefaultValues.set(0, undefined);\n }\n else if (!placeholderDefaultValues.has(marker.index) && marker.children.length > 0) {\n placeholderDefaultValues.set(marker.index, marker.children);\n }\n else {\n incompletePlaceholders.push(marker);\n }\n }\n return true;\n });\n for (const placeholder of incompletePlaceholders) {\n const defaultValues = placeholderDefaultValues.get(placeholder.index);\n if (defaultValues) {\n const clone = new Placeholder(placeholder.index);\n clone.transform = placeholder.transform;\n for (const child of defaultValues) {\n clone.appendChild(child.clone());\n }\n snippet.replace(placeholder, [clone]);\n }\n }\n if (!enforceFinalTabstop) {\n enforceFinalTabstop = placeholderCount > 0 && insertFinalTabstop;\n }\n if (!placeholderDefaultValues.has(0) && enforceFinalTabstop) {\n // the snippet uses placeholders but has no\n // final tabstop defined -> insert at the end\n snippet.appendChild(new Placeholder(0));\n }\n return snippet;\n }\n _accept(type, value) {\n if (type === undefined || this._token.type === type) {\n let ret = !value ? true : this._scanner.tokenText(this._token);\n this._token = this._scanner.next();\n return ret;\n }\n return false;\n }\n _backTo(token) {\n this._scanner.pos = token.pos + token.len;\n this._token = token;\n return false;\n }\n _until(type) {\n const start = this._token;\n while (this._token.type !== type) {\n if (this._token.type === 14 /* EOF */) {\n return false;\n }\n else if (this._token.type === 5 /* Backslash */) {\n const nextToken = this._scanner.next();\n if (nextToken.type !== 0 /* Dollar */\n && nextToken.type !== 4 /* CurlyClose */\n && nextToken.type !== 5 /* Backslash */) {\n return false;\n }\n }\n this._token = this._scanner.next();\n }\n const value = this._scanner.value.substring(start.pos, this._token.pos).replace(/\\\\(\\$|}|\\\\)/g, '$1');\n this._token = this._scanner.next();\n return value;\n }\n _parse(marker) {\n return this._parseEscaped(marker)\n || this._parseTabstopOrVariableName(marker)\n || this._parseComplexPlaceholder(marker)\n || this._parseComplexVariable(marker)\n || this._parseAnything(marker);\n }\n // \\$, \\\\, \\} -> just text\n _parseEscaped(marker) {\n let value;\n if (value = this._accept(5 /* Backslash */, true)) {\n // saw a backslash, append escaped token or that backslash\n value = this._accept(0 /* Dollar */, true)\n || this._accept(4 /* CurlyClose */, true)\n || this._accept(5 /* Backslash */, true)\n || value;\n marker.appendChild(new Text(value));\n return true;\n }\n return false;\n }\n // $foo -> variable, $1 -> tabstop\n _parseTabstopOrVariableName(parent) {\n let value;\n const token = this._token;\n const match = this._accept(0 /* Dollar */)\n && (value = this._accept(9 /* VariableName */, true) || this._accept(8 /* Int */, true));\n if (!match) {\n return this._backTo(token);\n }\n parent.appendChild(/^\\d+$/.test(value)\n ? new Placeholder(Number(value))\n : new Variable(value));\n return true;\n }\n // ${1:<children>}, ${1} -> placeholder\n _parseComplexPlaceholder(parent) {\n let index;\n const token = this._token;\n const match = this._accept(0 /* Dollar */)\n && this._accept(3 /* CurlyOpen */)\n && (index = this._accept(8 /* Int */, true));\n if (!match) {\n return this._backTo(token);\n }\n const placeholder = new Placeholder(Number(index));\n if (this._accept(1 /* Colon */)) {\n // ${1:<children>}\n while (true) {\n // ...} -> done\n if (this._accept(4 /* CurlyClose */)) {\n parent.appendChild(placeholder);\n return true;\n }\n if (this._parse(placeholder)) {\n continue;\n }\n // fallback\n parent.appendChild(new Text('${' + index + ':'));\n placeholder.children.forEach(parent.appendChild, parent);\n return true;\n }\n }\n else if (placeholder.index > 0 && this._accept(7 /* Pipe */)) {\n // ${1|one,two,three|}\n const choice = new Choice();\n while (true) {\n if (this._parseChoiceElement(choice)) {\n if (this._accept(2 /* Comma */)) {\n // opt, -> more\n continue;\n }\n if (this._accept(7 /* Pipe */)) {\n placeholder.appendChild(choice);\n if (this._accept(4 /* CurlyClose */)) {\n // ..|} -> done\n parent.appendChild(placeholder);\n return true;\n }\n }\n }\n this._backTo(token);\n return false;\n }\n }\n else if (this._accept(6 /* Forwardslash */)) {\n // ${1/<regex>/<format>/<options>}\n if (this._parseTransform(placeholder)) {\n parent.appendChild(placeholder);\n return true;\n }\n this._backTo(token);\n return false;\n }\n else if (this._accept(4 /* CurlyClose */)) {\n // ${1}\n parent.appendChild(placeholder);\n return true;\n }\n else {\n // ${1 <- missing curly or colon\n return this._backTo(token);\n }\n }\n _parseChoiceElement(parent) {\n const token = this._token;\n const values = [];\n while (true) {\n if (this._token.type === 2 /* Comma */ || this._token.type === 7 /* Pipe */) {\n break;\n }\n let value;\n if (value = this._accept(5 /* Backslash */, true)) {\n // \\, \\|, or \\\\\n value = this._accept(2 /* Comma */, true)\n || this._accept(7 /* Pipe */, true)\n || this._accept(5 /* Backslash */, true)\n || value;\n }\n else {\n value = this._accept(undefined, true);\n }\n if (!value) {\n // EOF\n this._backTo(token);\n return false;\n }\n values.push(value);\n }\n if (values.length === 0) {\n this._backTo(token);\n return false;\n }\n parent.appendChild(new Text(values.join('')));\n return true;\n }\n // ${foo:<children>}, ${foo} -> variable\n _parseComplexVariable(parent) {\n let name;\n const token = this._token;\n const match = this._accept(0 /* Dollar */)\n && this._accept(3 /* CurlyOpen */)\n && (name = this._accept(9 /* VariableName */, true));\n if (!match) {\n return this._backTo(token);\n }\n const variable = new Variable(name);\n if (this._accept(1 /* Colon */)) {\n // ${foo:<children>}\n while (true) {\n // ...} -> done\n if (this._accept(4 /* CurlyClose */)) {\n parent.appendChild(variable);\n return true;\n }\n if (this._parse(variable)) {\n continue;\n }\n // fallback\n parent.appendChild(new Text('${' + name + ':'));\n variable.children.forEach(parent.appendChild, parent);\n return true;\n }\n }\n else if (this._accept(6 /* Forwardslash */)) {\n // ${foo/<regex>/<format>/<options>}\n if (this._parseTransform(variable)) {\n parent.appendChild(variable);\n return true;\n }\n this._backTo(token);\n return false;\n }\n else if (this._accept(4 /* CurlyClose */)) {\n // ${foo}\n parent.appendChild(variable);\n return true;\n }\n else {\n // ${foo <- missing curly or colon\n return this._backTo(token);\n }\n }\n _parseTransform(parent) {\n // ...<regex>/<format>/<options>}\n let transform = new Transform();\n let regexValue = '';\n let regexOptions = '';\n // (1) /regex\n while (true) {\n if (this._accept(6 /* Forwardslash */)) {\n break;\n }\n let escaped;\n if (escaped = this._accept(5 /* Backslash */, true)) {\n escaped = this._accept(6 /* Forwardslash */, true) || escaped;\n regexValue += escaped;\n continue;\n }\n if (this._token.type !== 14 /* EOF */) {\n regexValue += this._accept(undefined, true);\n continue;\n }\n return false;\n }\n // (2) /format\n while (true) {\n if (this._accept(6 /* Forwardslash */)) {\n break;\n }\n let escaped;\n if (escaped = this._accept(5 /* Backslash */, true)) {\n escaped = this._accept(5 /* Backslash */, true) || this._accept(6 /* Forwardslash */, true) || escaped;\n transform.appendChild(new Text(escaped));\n continue;\n }\n if (this._parseFormatString(transform) || this._parseAnything(transform)) {\n continue;\n }\n return false;\n }\n // (3) /option\n while (true) {\n if (this._accept(4 /* CurlyClose */)) {\n break;\n }\n if (this._token.type !== 14 /* EOF */) {\n regexOptions += this._accept(undefined, true);\n continue;\n }\n return false;\n }\n try {\n transform.regexp = new RegExp(regexValue, regexOptions);\n }\n catch (e) {\n // invalid regexp\n return false;\n }\n parent.transform = transform;\n return true;\n }\n _parseFormatString(parent) {\n const token = this._token;\n if (!this._accept(0 /* Dollar */)) {\n return false;\n }\n let complex = false;\n if (this._accept(3 /* CurlyOpen */)) {\n complex = true;\n }\n let index = this._accept(8 /* Int */, true);\n if (!index) {\n this._backTo(token);\n return false;\n }\n else if (!complex) {\n // $1\n parent.appendChild(new FormatString(Number(index)));\n return true;\n }\n else if (this._accept(4 /* CurlyClose */)) {\n // ${1}\n parent.appendChild(new FormatString(Number(index)));\n return true;\n }\n else if (!this._accept(1 /* Colon */)) {\n this._backTo(token);\n return false;\n }\n if (this._accept(6 /* Forwardslash */)) {\n // ${1:/upcase}\n let shorthand = this._accept(9 /* VariableName */, true);\n if (!shorthand || !this._accept(4 /* CurlyClose */)) {\n this._backTo(token);\n return false;\n }\n else {\n parent.appendChild(new FormatString(Number(index), shorthand));\n return true;\n }\n }\n else if (this._accept(11 /* Plus */)) {\n // ${1:+<if>}\n let ifValue = this._until(4 /* CurlyClose */);\n if (ifValue) {\n parent.appendChild(new FormatString(Number(index), undefined, ifValue, undefined));\n return true;\n }\n }\n else if (this._accept(12 /* Dash */)) {\n // ${2:-<else>}\n let elseValue = this._until(4 /* CurlyClose */);\n if (elseValue) {\n parent.appendChild(new FormatString(Number(index), undefined, undefined, elseValue));\n return true;\n }\n }\n else if (this._accept(13 /* QuestionMark */)) {\n // ${2:?<if>:<else>}\n let ifValue = this._until(1 /* Colon */);\n if (ifValue) {\n let elseValue = this._until(4 /* CurlyClose */);\n if (elseValue) {\n parent.appendChild(new FormatString(Number(index), undefined, ifValue, elseValue));\n return true;\n }\n }\n }\n else {\n // ${1:<else>}\n let elseValue = this._until(4 /* CurlyClose */);\n if (elseValue) {\n parent.appendChild(new FormatString(Number(index), undefined, undefined, elseValue));\n return true;\n }\n }\n this._backTo(token);\n return false;\n }\n _parseAnything(marker) {\n if (this._token.type !== 14 /* EOF */) {\n marker.appendChild(new Text(this._scanner.tokenText(this._token)));\n this._accept(undefined);\n return true;\n }\n return false;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { onUnexpectedExternalError, canceled, isPromiseCanceledError } from '../../../base/common/errors.js';\nimport * as modes from '../../common/modes.js';\nimport { Position } from '../../common/core/position.js';\nimport { RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { Range } from '../../common/core/range.js';\nimport { FuzzyScore } from '../../../base/common/filters.js';\nimport { isDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { SnippetParser } from '../snippet/snippetParser.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { assertType } from '../../../base/common/types.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { ITextModelService } from '../../common/services/resolverService.js';\nimport { localize } from '../../../nls.js';\nexport const Context = {\n Visible: new RawContextKey('suggestWidgetVisible', false, localize('suggestWidgetVisible', \"Whether suggestion are visible\")),\n DetailsVisible: new RawContextKey('suggestWidgetDetailsVisible', false, localize('suggestWidgetDetailsVisible', \"Whether suggestion details are visible\")),\n MultipleSuggestions: new RawContextKey('suggestWidgetMultipleSuggestions', false, localize('suggestWidgetMultipleSuggestions', \"Whether there are multiple suggestions to pick from\")),\n MakesTextEdit: new RawContextKey('suggestionMakesTextEdit', true, localize('suggestionMakesTextEdit', \"Whether inserting the current suggestion yields in a change or has everything already been typed\")),\n AcceptSuggestionsOnEnter: new RawContextKey('acceptSuggestionOnEnter', true, localize('acceptSuggestionOnEnter', \"Whether suggestions are inserted when pressing Enter\")),\n HasInsertAndReplaceRange: new RawContextKey('suggestionHasInsertAndReplaceRange', false, localize('suggestionHasInsertAndReplaceRange', \"Whether the current suggestion has insert and replace behaviour\")),\n InsertMode: new RawContextKey('suggestionInsertMode', undefined, { type: 'string', description: localize('suggestionInsertMode', \"Whether the default behaviour is to insert or replace\") }),\n CanResolve: new RawContextKey('suggestionCanResolve', false, localize('suggestionCanResolve', \"Whether the current suggestion supports to resolve further details\")),\n};\nexport const suggestWidgetStatusbarMenu = new MenuId('suggestWidgetStatusBar');\nexport class CompletionItem {\n constructor(position, completion, container, provider) {\n this.position = position;\n this.completion = completion;\n this.container = container;\n this.provider = provider;\n // validation\n this.isInvalid = false;\n // sorting, filtering\n this.score = FuzzyScore.Default;\n this.distance = 0;\n this.textLabel = typeof completion.label === 'string'\n ? completion.label\n : completion.label.name;\n // ensure lower-variants (perf)\n this.labelLow = this.textLabel.toLowerCase();\n // validate label\n this.isInvalid = !this.textLabel;\n this.sortTextLow = completion.sortText && completion.sortText.toLowerCase();\n this.filterTextLow = completion.filterText && completion.filterText.toLowerCase();\n // normalize ranges\n if (Range.isIRange(completion.range)) {\n this.editStart = new Position(completion.range.startLineNumber, completion.range.startColumn);\n this.editInsertEnd = new Position(completion.range.endLineNumber, completion.range.endColumn);\n this.editReplaceEnd = new Position(completion.range.endLineNumber, completion.range.endColumn);\n // validate range\n this.isInvalid = this.isInvalid\n || Range.spansMultipleLines(completion.range) || completion.range.startLineNumber !== position.lineNumber;\n }\n else {\n this.editStart = new Position(completion.range.insert.startLineNumber, completion.range.insert.startColumn);\n this.editInsertEnd = new Position(completion.range.insert.endLineNumber, completion.range.insert.endColumn);\n this.editReplaceEnd = new Position(completion.range.replace.endLineNumber, completion.range.replace.endColumn);\n // validate ranges\n this.isInvalid = this.isInvalid\n || Range.spansMultipleLines(completion.range.insert) || Range.spansMultipleLines(completion.range.replace)\n || completion.range.insert.startLineNumber !== position.lineNumber || completion.range.replace.startLineNumber !== position.lineNumber\n || completion.range.insert.startColumn !== completion.range.replace.startColumn;\n }\n // create the suggestion resolver\n if (typeof provider.resolveCompletionItem !== 'function') {\n this._resolveCache = Promise.resolve();\n this._isResolved = true;\n }\n }\n // ---- resolving\n get isResolved() {\n return !!this._isResolved;\n }\n resolve(token) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this._resolveCache) {\n const sub = token.onCancellationRequested(() => {\n this._resolveCache = undefined;\n this._isResolved = false;\n });\n this._resolveCache = Promise.resolve(this.provider.resolveCompletionItem(this.completion, token)).then(value => {\n Object.assign(this.completion, value);\n this._isResolved = true;\n sub.dispose();\n }, err => {\n if (isPromiseCanceledError(err)) {\n // the IPC queue will reject the request with the\n // cancellation error -> reset cached\n this._resolveCache = undefined;\n this._isResolved = false;\n }\n });\n }\n return this._resolveCache;\n });\n }\n}\nexport class CompletionOptions {\n constructor(snippetSortOrder = 2 /* Bottom */, kindFilter = new Set(), providerFilter = new Set()) {\n this.snippetSortOrder = snippetSortOrder;\n this.kindFilter = kindFilter;\n this.providerFilter = providerFilter;\n }\n}\nCompletionOptions.default = new CompletionOptions();\nlet _snippetSuggestSupport;\nexport function getSnippetSuggestSupport() {\n return _snippetSuggestSupport;\n}\nexport class CompletionItemModel {\n constructor(items, needsClipboard, durations, disposable) {\n this.items = items;\n this.needsClipboard = needsClipboard;\n this.durations = durations;\n this.disposable = disposable;\n }\n}\nexport function provideSuggestionItems(model, position, options = CompletionOptions.default, context = { triggerKind: 0 /* Invoke */ }, token = CancellationToken.None) {\n return __awaiter(this, void 0, void 0, function* () {\n const sw = new StopWatch(true);\n position = position.clone();\n const word = model.getWordAtPosition(position);\n const defaultReplaceRange = word ? new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn) : Range.fromPositions(position);\n const defaultRange = { replace: defaultReplaceRange, insert: defaultReplaceRange.setEndPosition(position.lineNumber, position.column) };\n const result = [];\n const disposables = new DisposableStore();\n const durations = [];\n let needsClipboard = false;\n const onCompletionList = (provider, container, sw) => {\n var _a, _b;\n if (!container) {\n return;\n }\n for (let suggestion of container.suggestions) {\n if (!options.kindFilter.has(suggestion.kind)) {\n // fill in default range when missing\n if (!suggestion.range) {\n suggestion.range = defaultRange;\n }\n // fill in default sortText when missing\n if (!suggestion.sortText) {\n suggestion.sortText = typeof suggestion.label === 'string' ? suggestion.label : suggestion.label.name;\n }\n if (!needsClipboard && suggestion.insertTextRules && suggestion.insertTextRules & 4 /* InsertAsSnippet */) {\n needsClipboard = SnippetParser.guessNeedsClipboard(suggestion.insertText);\n }\n result.push(new CompletionItem(position, suggestion, container, provider));\n }\n }\n if (isDisposable(container)) {\n disposables.add(container);\n }\n durations.push({\n providerName: (_a = provider._debugDisplayName) !== null && _a !== void 0 ? _a : 'unkown_provider', elapsedProvider: (_b = container.duration) !== null && _b !== void 0 ? _b : -1, elapsedOverall: sw.elapsed()\n });\n };\n // ask for snippets in parallel to asking \"real\" providers. Only do something if configured to\n // do so - no snippet filter, no special-providers-only request\n const snippetCompletions = (() => __awaiter(this, void 0, void 0, function* () {\n if (!_snippetSuggestSupport || options.kindFilter.has(27 /* Snippet */)) {\n return;\n }\n if (options.providerFilter.size > 0 && !options.providerFilter.has(_snippetSuggestSupport)) {\n return;\n }\n const sw = new StopWatch(true);\n const list = yield _snippetSuggestSupport.provideCompletionItems(model, position, context, token);\n onCompletionList(_snippetSuggestSupport, list, sw);\n }))();\n // add suggestions from contributed providers - providers are ordered in groups of\n // equal score and once a group produces a result the process stops\n // get provider groups, always add snippet suggestion provider\n for (let providerGroup of modes.CompletionProviderRegistry.orderedGroups(model)) {\n // for each support in the group ask for suggestions\n let lenBefore = result.length;\n yield Promise.all(providerGroup.map((provider) => __awaiter(this, void 0, void 0, function* () {\n if (options.providerFilter.size > 0 && !options.providerFilter.has(provider)) {\n return;\n }\n try {\n const sw = new StopWatch(true);\n const list = yield provider.provideCompletionItems(model, position, context, token);\n onCompletionList(provider, list, sw);\n }\n catch (err) {\n onUnexpectedExternalError(err);\n }\n })));\n if (lenBefore !== result.length || token.isCancellationRequested) {\n break;\n }\n }\n yield snippetCompletions;\n if (token.isCancellationRequested) {\n disposables.dispose();\n return Promise.reject(canceled());\n }\n return new CompletionItemModel(result.sort(getSuggestionComparator(options.snippetSortOrder)), needsClipboard, { entries: durations, elapsed: sw.elapsed() }, disposables);\n });\n}\nfunction defaultComparator(a, b) {\n // check with 'sortText'\n if (a.sortTextLow && b.sortTextLow) {\n if (a.sortTextLow < b.sortTextLow) {\n return -1;\n }\n else if (a.sortTextLow > b.sortTextLow) {\n return 1;\n }\n }\n // check with 'label'\n if (a.completion.label < b.completion.label) {\n return -1;\n }\n else if (a.completion.label > b.completion.label) {\n return 1;\n }\n // check with 'type'\n return a.completion.kind - b.completion.kind;\n}\nfunction snippetUpComparator(a, b) {\n if (a.completion.kind !== b.completion.kind) {\n if (a.completion.kind === 27 /* Snippet */) {\n return -1;\n }\n else if (b.completion.kind === 27 /* Snippet */) {\n return 1;\n }\n }\n return defaultComparator(a, b);\n}\nfunction snippetDownComparator(a, b) {\n if (a.completion.kind !== b.completion.kind) {\n if (a.completion.kind === 27 /* Snippet */) {\n return 1;\n }\n else if (b.completion.kind === 27 /* Snippet */) {\n return -1;\n }\n }\n return defaultComparator(a, b);\n}\nconst _snippetComparators = new Map();\n_snippetComparators.set(0 /* Top */, snippetUpComparator);\n_snippetComparators.set(2 /* Bottom */, snippetDownComparator);\n_snippetComparators.set(1 /* Inline */, defaultComparator);\nexport function getSuggestionComparator(snippetConfig) {\n return _snippetComparators.get(snippetConfig);\n}\nCommandsRegistry.registerCommand('_executeCompletionItemProvider', (accessor, ...args) => __awaiter(void 0, void 0, void 0, function* () {\n const [uri, position, triggerCharacter, maxItemsToResolve] = args;\n assertType(URI.isUri(uri));\n assertType(Position.isIPosition(position));\n assertType(typeof triggerCharacter === 'string' || !triggerCharacter);\n assertType(typeof maxItemsToResolve === 'number' || !maxItemsToResolve);\n const ref = yield accessor.get(ITextModelService).createModelReference(uri);\n try {\n const result = {\n incomplete: false,\n suggestions: []\n };\n const resolving = [];\n const completions = yield provideSuggestionItems(ref.object.textEditorModel, Position.lift(position), undefined, { triggerCharacter, triggerKind: triggerCharacter ? 1 /* TriggerCharacter */ : 0 /* Invoke */ });\n for (const item of completions.items) {\n if (resolving.length < (maxItemsToResolve !== null && maxItemsToResolve !== void 0 ? maxItemsToResolve : 0)) {\n resolving.push(item.resolve(CancellationToken.None));\n }\n result.incomplete = result.incomplete || item.container.incomplete;\n result.suggestions.push(item.completion);\n }\n try {\n yield Promise.all(resolving);\n return result;\n }\n finally {\n setTimeout(() => completions.disposable.dispose(), 100);\n }\n }\n finally {\n ref.dispose();\n }\n}));\nconst _provider = new class {\n constructor() {\n this.onlyOnceSuggestions = [];\n }\n provideCompletionItems() {\n let suggestions = this.onlyOnceSuggestions.slice(0);\n let result = { suggestions };\n this.onlyOnceSuggestions.length = 0;\n return result;\n }\n};\nmodes.CompletionProviderRegistry.register('*', _provider);\nexport function showSimpleSuggestions(editor, suggestions) {\n setTimeout(() => {\n _provider.onlyOnceSuggestions.push(...suggestions);\n editor.getContribution('editor.contrib.suggestController').triggerSuggest(new Set().add(_provider));\n }, 0);\n}\n","import { URI } from '../../../base/common/uri.js';\nexport const WORKSPACE_EXTENSION = 'code-workspace';\nexport function isSingleFolderWorkspaceIdentifier(obj) {\n const singleFolderIdentifier = obj;\n return typeof (singleFolderIdentifier === null || singleFolderIdentifier === void 0 ? void 0 : singleFolderIdentifier.id) === 'string' && URI.isUri(singleFolderIdentifier.uri);\n}\nexport function toWorkspaceIdentifier(workspace) {\n // Multi root\n if (workspace.configuration) {\n return {\n id: workspace.id,\n configPath: workspace.configuration\n };\n }\n // Single folder\n if (workspace.folders.length === 1) {\n return {\n id: workspace.id,\n uri: workspace.folders[0].uri\n };\n }\n // Empty workspace\n return undefined;\n}\n//#endregion\n","// prep-work\nconst _data = new Uint8Array(16);\nconst _hex = [];\nfor (let i = 0; i < 256; i++) {\n _hex.push(i.toString(16).padStart(2, '0'));\n}\n// todo@jrieken\n// 1. node nodejs use`crypto#randomBytes`, see: https://nodejs.org/docs/latest/api/crypto.html#crypto_crypto_randombytes_size_callback\nlet _fillRandomValues;\nif (typeof crypto === 'object' && typeof crypto.getRandomValues === 'function') {\n // browser\n _fillRandomValues = crypto.getRandomValues.bind(crypto);\n}\nelse {\n _fillRandomValues = function (bucket) {\n for (let i = 0; i < bucket.length; i++) {\n bucket[i] = Math.floor(Math.random() * 256);\n }\n return bucket;\n };\n}\nexport function generateUuid() {\n // get data\n _fillRandomValues(_data);\n // set version bits\n _data[6] = (_data[6] & 0x0f) | 0x40;\n _data[8] = (_data[8] & 0x3f) | 0x80;\n // print as string\n let i = 0;\n let result = '';\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n result += '-';\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n result += '-';\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n result += '-';\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n result += '-';\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n result += _hex[_data[i++]];\n return result;\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport * as path from '../../../base/common/path.js';\nimport { dirname } from '../../../base/common/resources.js';\nimport { Text } from './snippetParser.js';\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\nimport { getLeadingWhitespace, commonPrefixLength, isFalsyOrWhitespace, splitLines } from '../../../base/common/strings.js';\nimport { toWorkspaceIdentifier, WORKSPACE_EXTENSION, isSingleFolderWorkspaceIdentifier } from '../../../platform/workspaces/common/workspaces.js';\nimport { normalizeDriveLetter } from '../../../base/common/labels.js';\nimport { generateUuid } from '../../../base/common/uuid.js';\nexport class CompositeSnippetVariableResolver {\n constructor(_delegates) {\n this._delegates = _delegates;\n //\n }\n resolve(variable) {\n for (const delegate of this._delegates) {\n let value = delegate.resolve(variable);\n if (value !== undefined) {\n return value;\n }\n }\n return undefined;\n }\n}\nexport class SelectionBasedVariableResolver {\n constructor(_model, _selection, _selectionIdx, _overtypingCapturer) {\n this._model = _model;\n this._selection = _selection;\n this._selectionIdx = _selectionIdx;\n this._overtypingCapturer = _overtypingCapturer;\n //\n }\n resolve(variable) {\n const { name } = variable;\n if (name === 'SELECTION' || name === 'TM_SELECTED_TEXT') {\n let value = this._model.getValueInRange(this._selection) || undefined;\n let isMultiline = this._selection.startLineNumber !== this._selection.endLineNumber;\n // If there was no selected text, try to get last overtyped text\n if (!value && this._overtypingCapturer) {\n const info = this._overtypingCapturer.getLastOvertypedInfo(this._selectionIdx);\n if (info) {\n value = info.value;\n isMultiline = info.multiline;\n }\n }\n if (value && isMultiline && variable.snippet) {\n // Selection is a multiline string which we indentation we now\n // need to adjust. We compare the indentation of this variable\n // with the indentation at the editor position and add potential\n // extra indentation to the value\n const line = this._model.getLineContent(this._selection.startLineNumber);\n const lineLeadingWhitespace = getLeadingWhitespace(line, 0, this._selection.startColumn - 1);\n let varLeadingWhitespace = lineLeadingWhitespace;\n variable.snippet.walk(marker => {\n if (marker === variable) {\n return false;\n }\n if (marker instanceof Text) {\n varLeadingWhitespace = getLeadingWhitespace(splitLines(marker.value).pop());\n }\n return true;\n });\n const whitespaceCommonLength = commonPrefixLength(varLeadingWhitespace, lineLeadingWhitespace);\n value = value.replace(/(\\r\\n|\\r|\\n)(.*)/g, (m, newline, rest) => `${newline}${varLeadingWhitespace.substr(whitespaceCommonLength)}${rest}`);\n }\n return value;\n }\n else if (name === 'TM_CURRENT_LINE') {\n return this._model.getLineContent(this._selection.positionLineNumber);\n }\n else if (name === 'TM_CURRENT_WORD') {\n const info = this._model.getWordAtPosition({\n lineNumber: this._selection.positionLineNumber,\n column: this._selection.positionColumn\n });\n return info && info.word || undefined;\n }\n else if (name === 'TM_LINE_INDEX') {\n return String(this._selection.positionLineNumber - 1);\n }\n else if (name === 'TM_LINE_NUMBER') {\n return String(this._selection.positionLineNumber);\n }\n return undefined;\n }\n}\nexport class ModelBasedVariableResolver {\n constructor(_labelService, _model) {\n this._labelService = _labelService;\n this._model = _model;\n //\n }\n resolve(variable) {\n const { name } = variable;\n if (name === 'TM_FILENAME') {\n return path.basename(this._model.uri.fsPath);\n }\n else if (name === 'TM_FILENAME_BASE') {\n const name = path.basename(this._model.uri.fsPath);\n const idx = name.lastIndexOf('.');\n if (idx <= 0) {\n return name;\n }\n else {\n return name.slice(0, idx);\n }\n }\n else if (name === 'TM_DIRECTORY' && this._labelService) {\n if (path.dirname(this._model.uri.fsPath) === '.') {\n return '';\n }\n return this._labelService.getUriLabel(dirname(this._model.uri));\n }\n else if (name === 'TM_FILEPATH' && this._labelService) {\n return this._labelService.getUriLabel(this._model.uri);\n }\n else if (name === 'RELATIVE_FILEPATH' && this._labelService) {\n return this._labelService.getUriLabel(this._model.uri, { relative: true, noPrefix: true });\n }\n return undefined;\n }\n}\nexport class ClipboardBasedVariableResolver {\n constructor(_readClipboardText, _selectionIdx, _selectionCount, _spread) {\n this._readClipboardText = _readClipboardText;\n this._selectionIdx = _selectionIdx;\n this._selectionCount = _selectionCount;\n this._spread = _spread;\n //\n }\n resolve(variable) {\n if (variable.name !== 'CLIPBOARD') {\n return undefined;\n }\n const clipboardText = this._readClipboardText();\n if (!clipboardText) {\n return undefined;\n }\n // `spread` is assigning each cursor a line of the clipboard\n // text whenever there the line count equals the cursor count\n // and when enabled\n if (this._spread) {\n const lines = clipboardText.split(/\\r\\n|\\n|\\r/).filter(s => !isFalsyOrWhitespace(s));\n if (lines.length === this._selectionCount) {\n return lines[this._selectionIdx];\n }\n }\n return clipboardText;\n }\n}\nexport class CommentBasedVariableResolver {\n constructor(_model, _selection) {\n this._model = _model;\n this._selection = _selection;\n //\n }\n resolve(variable) {\n const { name } = variable;\n const langId = this._model.getLanguageIdAtPosition(this._selection.selectionStartLineNumber, this._selection.selectionStartColumn);\n const config = LanguageConfigurationRegistry.getComments(langId);\n if (!config) {\n return undefined;\n }\n if (name === 'LINE_COMMENT') {\n return config.lineCommentToken || undefined;\n }\n else if (name === 'BLOCK_COMMENT_START') {\n return config.blockCommentStartToken || undefined;\n }\n else if (name === 'BLOCK_COMMENT_END') {\n return config.blockCommentEndToken || undefined;\n }\n return undefined;\n }\n}\nexport class TimeBasedVariableResolver {\n resolve(variable) {\n const { name } = variable;\n if (name === 'CURRENT_YEAR') {\n return String(new Date().getFullYear());\n }\n else if (name === 'CURRENT_YEAR_SHORT') {\n return String(new Date().getFullYear()).slice(-2);\n }\n else if (name === 'CURRENT_MONTH') {\n return String(new Date().getMonth().valueOf() + 1).padStart(2, '0');\n }\n else if (name === 'CURRENT_DATE') {\n return String(new Date().getDate().valueOf()).padStart(2, '0');\n }\n else if (name === 'CURRENT_HOUR') {\n return String(new Date().getHours().valueOf()).padStart(2, '0');\n }\n else if (name === 'CURRENT_MINUTE') {\n return String(new Date().getMinutes().valueOf()).padStart(2, '0');\n }\n else if (name === 'CURRENT_SECOND') {\n return String(new Date().getSeconds().valueOf()).padStart(2, '0');\n }\n else if (name === 'CURRENT_DAY_NAME') {\n return TimeBasedVariableResolver.dayNames[new Date().getDay()];\n }\n else if (name === 'CURRENT_DAY_NAME_SHORT') {\n return TimeBasedVariableResolver.dayNamesShort[new Date().getDay()];\n }\n else if (name === 'CURRENT_MONTH_NAME') {\n return TimeBasedVariableResolver.monthNames[new Date().getMonth()];\n }\n else if (name === 'CURRENT_MONTH_NAME_SHORT') {\n return TimeBasedVariableResolver.monthNamesShort[new Date().getMonth()];\n }\n else if (name === 'CURRENT_SECONDS_UNIX') {\n return String(Math.floor(Date.now() / 1000));\n }\n return undefined;\n }\n}\nTimeBasedVariableResolver.dayNames = [nls.localize('Sunday', \"Sunday\"), nls.localize('Monday', \"Monday\"), nls.localize('Tuesday', \"Tuesday\"), nls.localize('Wednesday', \"Wednesday\"), nls.localize('Thursday', \"Thursday\"), nls.localize('Friday', \"Friday\"), nls.localize('Saturday', \"Saturday\")];\nTimeBasedVariableResolver.dayNamesShort = [nls.localize('SundayShort', \"Sun\"), nls.localize('MondayShort', \"Mon\"), nls.localize('TuesdayShort', \"Tue\"), nls.localize('WednesdayShort', \"Wed\"), nls.localize('ThursdayShort', \"Thu\"), nls.localize('FridayShort', \"Fri\"), nls.localize('SaturdayShort', \"Sat\")];\nTimeBasedVariableResolver.monthNames = [nls.localize('January', \"January\"), nls.localize('February', \"February\"), nls.localize('March', \"March\"), nls.localize('April', \"April\"), nls.localize('May', \"May\"), nls.localize('June', \"June\"), nls.localize('July', \"July\"), nls.localize('August', \"August\"), nls.localize('September', \"September\"), nls.localize('October', \"October\"), nls.localize('November', \"November\"), nls.localize('December', \"December\")];\nTimeBasedVariableResolver.monthNamesShort = [nls.localize('JanuaryShort', \"Jan\"), nls.localize('FebruaryShort', \"Feb\"), nls.localize('MarchShort', \"Mar\"), nls.localize('AprilShort', \"Apr\"), nls.localize('MayShort', \"May\"), nls.localize('JuneShort', \"Jun\"), nls.localize('JulyShort', \"Jul\"), nls.localize('AugustShort', \"Aug\"), nls.localize('SeptemberShort', \"Sep\"), nls.localize('OctoberShort', \"Oct\"), nls.localize('NovemberShort', \"Nov\"), nls.localize('DecemberShort', \"Dec\")];\nexport class WorkspaceBasedVariableResolver {\n constructor(_workspaceService) {\n this._workspaceService = _workspaceService;\n //\n }\n resolve(variable) {\n if (!this._workspaceService) {\n return undefined;\n }\n const workspaceIdentifier = toWorkspaceIdentifier(this._workspaceService.getWorkspace());\n if (!workspaceIdentifier) {\n return undefined;\n }\n if (variable.name === 'WORKSPACE_NAME') {\n return this._resolveWorkspaceName(workspaceIdentifier);\n }\n else if (variable.name === 'WORKSPACE_FOLDER') {\n return this._resoveWorkspacePath(workspaceIdentifier);\n }\n return undefined;\n }\n _resolveWorkspaceName(workspaceIdentifier) {\n if (isSingleFolderWorkspaceIdentifier(workspaceIdentifier)) {\n return path.basename(workspaceIdentifier.uri.path);\n }\n let filename = path.basename(workspaceIdentifier.configPath.path);\n if (filename.endsWith(WORKSPACE_EXTENSION)) {\n filename = filename.substr(0, filename.length - WORKSPACE_EXTENSION.length - 1);\n }\n return filename;\n }\n _resoveWorkspacePath(workspaceIdentifier) {\n if (isSingleFolderWorkspaceIdentifier(workspaceIdentifier)) {\n return normalizeDriveLetter(workspaceIdentifier.uri.fsPath);\n }\n let filename = path.basename(workspaceIdentifier.configPath.path);\n let folderpath = workspaceIdentifier.configPath.fsPath;\n if (folderpath.endsWith(filename)) {\n folderpath = folderpath.substr(0, folderpath.length - filename.length - 1);\n }\n return (folderpath ? normalizeDriveLetter(folderpath) : '/');\n }\n}\nexport class RandomBasedVariableResolver {\n resolve(variable) {\n const { name } = variable;\n if (name === 'RANDOM') {\n return Math.random().toString().slice(-6);\n }\n else if (name === 'RANDOM_HEX') {\n return Math.random().toString(16).slice(-6);\n }\n else if (name === 'UUID') {\n return generateUuid();\n }\n return undefined;\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { groupBy } from '../../../base/common/arrays.js';\nimport { dispose } from '../../../base/common/lifecycle.js';\nimport { getLeadingWhitespace } from '../../../base/common/strings.js';\nimport './snippetSession.css';\nimport { EditOperation } from '../../common/core/editOperation.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { IWorkspaceContextService } from '../../../platform/workspace/common/workspace.js';\nimport { optional } from '../../../platform/instantiation/common/instantiation.js';\nimport { Choice, Placeholder, SnippetParser, Text } from './snippetParser.js';\nimport { ClipboardBasedVariableResolver, CompositeSnippetVariableResolver, ModelBasedVariableResolver, SelectionBasedVariableResolver, TimeBasedVariableResolver, CommentBasedVariableResolver, WorkspaceBasedVariableResolver, RandomBasedVariableResolver } from './snippetVariables.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport * as colors from '../../../platform/theme/common/colorRegistry.js';\nimport { ILabelService } from '../../../platform/label/common/label.js';\nregisterThemingParticipant((theme, collector) => {\n function getColorGraceful(name) {\n const color = theme.getColor(name);\n return color ? color.toString() : 'transparent';\n }\n collector.addRule(`.monaco-editor .snippet-placeholder { background-color: ${getColorGraceful(colors.snippetTabstopHighlightBackground)}; outline-color: ${getColorGraceful(colors.snippetTabstopHighlightBorder)}; }`);\n collector.addRule(`.monaco-editor .finish-snippet-placeholder { background-color: ${getColorGraceful(colors.snippetFinalTabstopHighlightBackground)}; outline-color: ${getColorGraceful(colors.snippetFinalTabstopHighlightBorder)}; }`);\n});\nexport class OneSnippet {\n constructor(_editor, _snippet, _offset, _snippetLineLeadingWhitespace) {\n this._editor = _editor;\n this._snippet = _snippet;\n this._offset = _offset;\n this._snippetLineLeadingWhitespace = _snippetLineLeadingWhitespace;\n this._nestingLevel = 1;\n this._placeholderGroups = groupBy(_snippet.placeholders, Placeholder.compareByIndex);\n this._placeholderGroupsIdx = -1;\n }\n dispose() {\n if (this._placeholderDecorations) {\n this._editor.deltaDecorations([...this._placeholderDecorations.values()], []);\n }\n this._placeholderGroups.length = 0;\n }\n _initDecorations() {\n if (this._placeholderDecorations) {\n // already initialized\n return;\n }\n this._placeholderDecorations = new Map();\n const model = this._editor.getModel();\n this._editor.changeDecorations(accessor => {\n // create a decoration for each placeholder\n for (const placeholder of this._snippet.placeholders) {\n const placeholderOffset = this._snippet.offset(placeholder);\n const placeholderLen = this._snippet.fullLen(placeholder);\n const range = Range.fromPositions(model.getPositionAt(this._offset + placeholderOffset), model.getPositionAt(this._offset + placeholderOffset + placeholderLen));\n const options = placeholder.isFinalTabstop ? OneSnippet._decor.inactiveFinal : OneSnippet._decor.inactive;\n const handle = accessor.addDecoration(range, options);\n this._placeholderDecorations.set(placeholder, handle);\n }\n });\n }\n move(fwd) {\n if (!this._editor.hasModel()) {\n return [];\n }\n this._initDecorations();\n // Transform placeholder text if necessary\n if (this._placeholderGroupsIdx >= 0) {\n let operations = [];\n for (const placeholder of this._placeholderGroups[this._placeholderGroupsIdx]) {\n // Check if the placeholder has a transformation\n if (placeholder.transform) {\n const id = this._placeholderDecorations.get(placeholder);\n const range = this._editor.getModel().getDecorationRange(id);\n const currentValue = this._editor.getModel().getValueInRange(range);\n const transformedValueLines = placeholder.transform.resolve(currentValue).split(/\\r\\n|\\r|\\n/);\n // fix indentation for transformed lines\n for (let i = 1; i < transformedValueLines.length; i++) {\n transformedValueLines[i] = this._editor.getModel().normalizeIndentation(this._snippetLineLeadingWhitespace + transformedValueLines[i]);\n }\n operations.push(EditOperation.replace(range, transformedValueLines.join(this._editor.getModel().getEOL())));\n }\n }\n if (operations.length > 0) {\n this._editor.executeEdits('snippet.placeholderTransform', operations);\n }\n }\n let couldSkipThisPlaceholder = false;\n if (fwd === true && this._placeholderGroupsIdx < this._placeholderGroups.length - 1) {\n this._placeholderGroupsIdx += 1;\n couldSkipThisPlaceholder = true;\n }\n else if (fwd === false && this._placeholderGroupsIdx > 0) {\n this._placeholderGroupsIdx -= 1;\n couldSkipThisPlaceholder = true;\n }\n else {\n // the selection of the current placeholder might\n // not acurate any more -> simply restore it\n }\n const newSelections = this._editor.getModel().changeDecorations(accessor => {\n const activePlaceholders = new Set();\n // change stickiness to always grow when typing at its edges\n // because these decorations represent the currently active\n // tabstop.\n // Special case #1: reaching the final tabstop\n // Special case #2: placeholders enclosing active placeholders\n const selections = [];\n for (const placeholder of this._placeholderGroups[this._placeholderGroupsIdx]) {\n const id = this._placeholderDecorations.get(placeholder);\n const range = this._editor.getModel().getDecorationRange(id);\n selections.push(new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn));\n // consider to skip this placeholder index when the decoration\n // range is empty but when the placeholder wasn't. that's a strong\n // hint that the placeholder has been deleted. (all placeholder must match this)\n couldSkipThisPlaceholder = couldSkipThisPlaceholder && this._hasPlaceholderBeenCollapsed(placeholder);\n accessor.changeDecorationOptions(id, placeholder.isFinalTabstop ? OneSnippet._decor.activeFinal : OneSnippet._decor.active);\n activePlaceholders.add(placeholder);\n for (const enclosingPlaceholder of this._snippet.enclosingPlaceholders(placeholder)) {\n const id = this._placeholderDecorations.get(enclosingPlaceholder);\n accessor.changeDecorationOptions(id, enclosingPlaceholder.isFinalTabstop ? OneSnippet._decor.activeFinal : OneSnippet._decor.active);\n activePlaceholders.add(enclosingPlaceholder);\n }\n }\n // change stickness to never grow when typing at its edges\n // so that in-active tabstops never grow\n for (const [placeholder, id] of this._placeholderDecorations) {\n if (!activePlaceholders.has(placeholder)) {\n accessor.changeDecorationOptions(id, placeholder.isFinalTabstop ? OneSnippet._decor.inactiveFinal : OneSnippet._decor.inactive);\n }\n }\n return selections;\n });\n return !couldSkipThisPlaceholder ? newSelections !== null && newSelections !== void 0 ? newSelections : [] : this.move(fwd);\n }\n _hasPlaceholderBeenCollapsed(placeholder) {\n // A placeholder is empty when it wasn't empty when authored but\n // when its tracking decoration is empty. This also applies to all\n // potential parent placeholders\n let marker = placeholder;\n while (marker) {\n if (marker instanceof Placeholder) {\n const id = this._placeholderDecorations.get(marker);\n const range = this._editor.getModel().getDecorationRange(id);\n if (range.isEmpty() && marker.toString().length > 0) {\n return true;\n }\n }\n marker = marker.parent;\n }\n return false;\n }\n get isAtFirstPlaceholder() {\n return this._placeholderGroupsIdx <= 0 || this._placeholderGroups.length === 0;\n }\n get isAtLastPlaceholder() {\n return this._placeholderGroupsIdx === this._placeholderGroups.length - 1;\n }\n get hasPlaceholder() {\n return this._snippet.placeholders.length > 0;\n }\n computePossibleSelections() {\n const result = new Map();\n for (const placeholdersWithEqualIndex of this._placeholderGroups) {\n let ranges;\n for (const placeholder of placeholdersWithEqualIndex) {\n if (placeholder.isFinalTabstop) {\n // ignore those\n break;\n }\n if (!ranges) {\n ranges = [];\n result.set(placeholder.index, ranges);\n }\n const id = this._placeholderDecorations.get(placeholder);\n const range = this._editor.getModel().getDecorationRange(id);\n if (!range) {\n // one of the placeholder lost its decoration and\n // therefore we bail out and pretend the placeholder\n // (with its mirrors) doesn't exist anymore.\n result.delete(placeholder.index);\n break;\n }\n ranges.push(range);\n }\n }\n return result;\n }\n get choice() {\n return this._placeholderGroups[this._placeholderGroupsIdx][0].choice;\n }\n merge(others) {\n const model = this._editor.getModel();\n this._nestingLevel *= 10;\n this._editor.changeDecorations(accessor => {\n // For each active placeholder take one snippet and merge it\n // in that the placeholder (can be many for `$1foo$1foo`). Because\n // everything is sorted by editor selection we can simply remove\n // elements from the beginning of the array\n for (const placeholder of this._placeholderGroups[this._placeholderGroupsIdx]) {\n const nested = others.shift();\n console.assert(!nested._placeholderDecorations);\n // Massage placeholder-indicies of the nested snippet to be\n // sorted right after the insertion point. This ensures we move\n // through the placeholders in the correct order\n const indexLastPlaceholder = nested._snippet.placeholderInfo.last.index;\n for (const nestedPlaceholder of nested._snippet.placeholderInfo.all) {\n if (nestedPlaceholder.isFinalTabstop) {\n nestedPlaceholder.index = placeholder.index + ((indexLastPlaceholder + 1) / this._nestingLevel);\n }\n else {\n nestedPlaceholder.index = placeholder.index + (nestedPlaceholder.index / this._nestingLevel);\n }\n }\n this._snippet.replace(placeholder, nested._snippet.children);\n // Remove the placeholder at which position are inserting\n // the snippet and also remove its decoration.\n const id = this._placeholderDecorations.get(placeholder);\n accessor.removeDecoration(id);\n this._placeholderDecorations.delete(placeholder);\n // For each *new* placeholder we create decoration to monitor\n // how and if it grows/shrinks.\n for (const placeholder of nested._snippet.placeholders) {\n const placeholderOffset = nested._snippet.offset(placeholder);\n const placeholderLen = nested._snippet.fullLen(placeholder);\n const range = Range.fromPositions(model.getPositionAt(nested._offset + placeholderOffset), model.getPositionAt(nested._offset + placeholderOffset + placeholderLen));\n const handle = accessor.addDecoration(range, OneSnippet._decor.inactive);\n this._placeholderDecorations.set(placeholder, handle);\n }\n }\n // Last, re-create the placeholder groups by sorting placeholders by their index.\n this._placeholderGroups = groupBy(this._snippet.placeholders, Placeholder.compareByIndex);\n });\n }\n}\nOneSnippet._decor = {\n active: ModelDecorationOptions.register({ stickiness: 0 /* AlwaysGrowsWhenTypingAtEdges */, className: 'snippet-placeholder' }),\n inactive: ModelDecorationOptions.register({ stickiness: 1 /* NeverGrowsWhenTypingAtEdges */, className: 'snippet-placeholder' }),\n activeFinal: ModelDecorationOptions.register({ stickiness: 1 /* NeverGrowsWhenTypingAtEdges */, className: 'finish-snippet-placeholder' }),\n inactiveFinal: ModelDecorationOptions.register({ stickiness: 1 /* NeverGrowsWhenTypingAtEdges */, className: 'finish-snippet-placeholder' }),\n};\nconst _defaultOptions = {\n overwriteBefore: 0,\n overwriteAfter: 0,\n adjustWhitespace: true,\n clipboardText: undefined,\n overtypingCapturer: undefined\n};\nexport class SnippetSession {\n constructor(editor, template, options = _defaultOptions) {\n this._templateMerges = [];\n this._snippets = [];\n this._editor = editor;\n this._template = template;\n this._options = options;\n }\n static adjustWhitespace(model, position, snippet, adjustIndentation, adjustNewlines) {\n const line = model.getLineContent(position.lineNumber);\n const lineLeadingWhitespace = getLeadingWhitespace(line, 0, position.column - 1);\n // the snippet as inserted\n let snippetTextString;\n snippet.walk(marker => {\n // all text elements that are not inside choice\n if (!(marker instanceof Text) || marker.parent instanceof Choice) {\n return true;\n }\n const lines = marker.value.split(/\\r\\n|\\r|\\n/);\n if (adjustIndentation) {\n // adjust indentation of snippet test\n // -the snippet-start doesn't get extra-indented (lineLeadingWhitespace), only normalized\n // -all N+1 lines get extra-indented and normalized\n // -the text start get extra-indented and normalized when following a linebreak\n const offset = snippet.offset(marker);\n if (offset === 0) {\n // snippet start\n lines[0] = model.normalizeIndentation(lines[0]);\n }\n else {\n // check if text start is after a linebreak\n snippetTextString = snippetTextString !== null && snippetTextString !== void 0 ? snippetTextString : snippet.toString();\n let prevChar = snippetTextString.charCodeAt(offset - 1);\n if (prevChar === 10 /* LineFeed */ || prevChar === 13 /* CarriageReturn */) {\n lines[0] = model.normalizeIndentation(lineLeadingWhitespace + lines[0]);\n }\n }\n for (let i = 1; i < lines.length; i++) {\n lines[i] = model.normalizeIndentation(lineLeadingWhitespace + lines[i]);\n }\n }\n const newValue = lines.join(model.getEOL());\n if (newValue !== marker.value) {\n marker.parent.replace(marker, [new Text(newValue)]);\n snippetTextString = undefined;\n }\n return true;\n });\n return lineLeadingWhitespace;\n }\n static adjustSelection(model, selection, overwriteBefore, overwriteAfter) {\n if (overwriteBefore !== 0 || overwriteAfter !== 0) {\n // overwrite[Before|After] is compute using the position, not the whole\n // selection. therefore we adjust the selection around that position\n const { positionLineNumber, positionColumn } = selection;\n const positionColumnBefore = positionColumn - overwriteBefore;\n const positionColumnAfter = positionColumn + overwriteAfter;\n const range = model.validateRange({\n startLineNumber: positionLineNumber,\n startColumn: positionColumnBefore,\n endLineNumber: positionLineNumber,\n endColumn: positionColumnAfter\n });\n selection = Selection.createWithDirection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn, selection.getDirection());\n }\n return selection;\n }\n static createEditsAndSnippets(editor, template, overwriteBefore, overwriteAfter, enforceFinalTabstop, adjustWhitespace, clipboardText, overtypingCapturer) {\n const edits = [];\n const snippets = [];\n if (!editor.hasModel()) {\n return { edits, snippets };\n }\n const model = editor.getModel();\n const workspaceService = editor.invokeWithinContext(accessor => accessor.get(IWorkspaceContextService, optional));\n const modelBasedVariableResolver = editor.invokeWithinContext(accessor => new ModelBasedVariableResolver(accessor.get(ILabelService, optional), model));\n const readClipboardText = () => clipboardText;\n let delta = 0;\n // know what text the overwrite[Before|After] extensions\n // of the primary curser have selected because only when\n // secondary selections extend to the same text we can grow them\n let firstBeforeText = model.getValueInRange(SnippetSession.adjustSelection(model, editor.getSelection(), overwriteBefore, 0));\n let firstAfterText = model.getValueInRange(SnippetSession.adjustSelection(model, editor.getSelection(), 0, overwriteAfter));\n // remember the first non-whitespace column to decide if\n // `keepWhitespace` should be overruled for secondary selections\n let firstLineFirstNonWhitespace = model.getLineFirstNonWhitespaceColumn(editor.getSelection().positionLineNumber);\n // sort selections by their start position but remeber\n // the original index. that allows you to create correct\n // offset-based selection logic without changing the\n // primary selection\n const indexedSelections = editor.getSelections()\n .map((selection, idx) => ({ selection, idx }))\n .sort((a, b) => Range.compareRangesUsingStarts(a.selection, b.selection));\n for (const { selection, idx } of indexedSelections) {\n // extend selection with the `overwriteBefore` and `overwriteAfter` and then\n // compare if this matches the extensions of the primary selection\n let extensionBefore = SnippetSession.adjustSelection(model, selection, overwriteBefore, 0);\n let extensionAfter = SnippetSession.adjustSelection(model, selection, 0, overwriteAfter);\n if (firstBeforeText !== model.getValueInRange(extensionBefore)) {\n extensionBefore = selection;\n }\n if (firstAfterText !== model.getValueInRange(extensionAfter)) {\n extensionAfter = selection;\n }\n // merge the before and after selection into one\n const snippetSelection = selection\n .setStartPosition(extensionBefore.startLineNumber, extensionBefore.startColumn)\n .setEndPosition(extensionAfter.endLineNumber, extensionAfter.endColumn);\n const snippet = new SnippetParser().parse(template, true, enforceFinalTabstop);\n // adjust the template string to match the indentation and\n // whitespace rules of this insert location (can be different for each cursor)\n // happens when being asked for (default) or when this is a secondary\n // cursor and the leading whitespace is different\n const start = snippetSelection.getStartPosition();\n const snippetLineLeadingWhitespace = SnippetSession.adjustWhitespace(model, start, snippet, adjustWhitespace || (idx > 0 && firstLineFirstNonWhitespace !== model.getLineFirstNonWhitespaceColumn(selection.positionLineNumber)), true);\n snippet.resolveVariables(new CompositeSnippetVariableResolver([\n modelBasedVariableResolver,\n new ClipboardBasedVariableResolver(readClipboardText, idx, indexedSelections.length, editor.getOption(67 /* multiCursorPaste */) === 'spread'),\n new SelectionBasedVariableResolver(model, selection, idx, overtypingCapturer),\n new CommentBasedVariableResolver(model, selection),\n new TimeBasedVariableResolver,\n new WorkspaceBasedVariableResolver(workspaceService),\n new RandomBasedVariableResolver,\n ]));\n const offset = model.getOffsetAt(start) + delta;\n delta += snippet.toString().length - model.getValueLengthInRange(snippetSelection);\n // store snippets with the index of their originating selection.\n // that ensures the primiary cursor stays primary despite not being\n // the one with lowest start position\n edits[idx] = EditOperation.replace(snippetSelection, snippet.toString());\n edits[idx].identifier = { major: idx, minor: 0 }; // mark the edit so only our undo edits will be used to generate end cursors\n snippets[idx] = new OneSnippet(editor, snippet, offset, snippetLineLeadingWhitespace);\n }\n return { edits, snippets };\n }\n dispose() {\n dispose(this._snippets);\n }\n _logInfo() {\n return `template=\"${this._template}\", merged_templates=\"${this._templateMerges.join(' -> ')}\"`;\n }\n insert() {\n if (!this._editor.hasModel()) {\n return;\n }\n // make insert edit and start with first selections\n const { edits, snippets } = SnippetSession.createEditsAndSnippets(this._editor, this._template, this._options.overwriteBefore, this._options.overwriteAfter, false, this._options.adjustWhitespace, this._options.clipboardText, this._options.overtypingCapturer);\n this._snippets = snippets;\n this._editor.executeEdits('snippet', edits, undoEdits => {\n if (this._snippets[0].hasPlaceholder) {\n return this._move(true);\n }\n else {\n return undoEdits\n .filter(edit => !!edit.identifier) // only use our undo edits\n .map(edit => Selection.fromPositions(edit.range.getEndPosition()));\n }\n });\n this._editor.revealRange(this._editor.getSelections()[0]);\n }\n merge(template, options = _defaultOptions) {\n if (!this._editor.hasModel()) {\n return;\n }\n this._templateMerges.push([this._snippets[0]._nestingLevel, this._snippets[0]._placeholderGroupsIdx, template]);\n const { edits, snippets } = SnippetSession.createEditsAndSnippets(this._editor, template, options.overwriteBefore, options.overwriteAfter, true, options.adjustWhitespace, options.clipboardText, options.overtypingCapturer);\n this._editor.executeEdits('snippet', edits, undoEdits => {\n for (const snippet of this._snippets) {\n snippet.merge(snippets);\n }\n console.assert(snippets.length === 0);\n if (this._snippets[0].hasPlaceholder) {\n return this._move(undefined);\n }\n else {\n return (undoEdits\n .filter(edit => !!edit.identifier) // only use our undo edits\n .map(edit => Selection.fromPositions(edit.range.getEndPosition())));\n }\n });\n }\n next() {\n const newSelections = this._move(true);\n this._editor.setSelections(newSelections);\n this._editor.revealPositionInCenterIfOutsideViewport(newSelections[0].getPosition());\n }\n prev() {\n const newSelections = this._move(false);\n this._editor.setSelections(newSelections);\n this._editor.revealPositionInCenterIfOutsideViewport(newSelections[0].getPosition());\n }\n _move(fwd) {\n const selections = [];\n for (const snippet of this._snippets) {\n const oneSelection = snippet.move(fwd);\n selections.push(...oneSelection);\n }\n return selections;\n }\n get isAtFirstPlaceholder() {\n return this._snippets[0].isAtFirstPlaceholder;\n }\n get isAtLastPlaceholder() {\n return this._snippets[0].isAtLastPlaceholder;\n }\n get hasPlaceholder() {\n return this._snippets[0].hasPlaceholder;\n }\n get choice() {\n return this._snippets[0].choice;\n }\n isSelectionWithinPlaceholders() {\n if (!this.hasPlaceholder) {\n return false;\n }\n const selections = this._editor.getSelections();\n if (selections.length < this._snippets.length) {\n // this means we started snippet mode with N\n // selections and have M (N > M) selections.\n // So one snippet is without selection -> cancel\n return false;\n }\n let allPossibleSelections = new Map();\n for (const snippet of this._snippets) {\n const possibleSelections = snippet.computePossibleSelections();\n // for the first snippet find the placeholder (and its ranges)\n // that contain at least one selection. for all remaining snippets\n // the same placeholder (and their ranges) must be used.\n if (allPossibleSelections.size === 0) {\n for (const [index, ranges] of possibleSelections) {\n ranges.sort(Range.compareRangesUsingStarts);\n for (const selection of selections) {\n if (ranges[0].containsRange(selection)) {\n allPossibleSelections.set(index, []);\n break;\n }\n }\n }\n }\n if (allPossibleSelections.size === 0) {\n // return false if we couldn't associate a selection to\n // this (the first) snippet\n return false;\n }\n // add selections from 'this' snippet so that we know all\n // selections for this placeholder\n allPossibleSelections.forEach((array, index) => {\n array.push(...possibleSelections.get(index));\n });\n }\n // sort selections (and later placeholder-ranges). then walk both\n // arrays and make sure the placeholder-ranges contain the corresponding\n // selection\n selections.sort(Range.compareRangesUsingStarts);\n for (let [index, ranges] of allPossibleSelections) {\n if (ranges.length !== selections.length) {\n allPossibleSelections.delete(index);\n continue;\n }\n ranges.sort(Range.compareRangesUsingStarts);\n for (let i = 0; i < ranges.length; i++) {\n if (!ranges[i].containsRange(selections[i])) {\n allPossibleSelections.delete(index);\n continue;\n }\n }\n }\n // from all possible selections we have deleted those\n // that don't match with the current selection. if we don't\n // have any left, we don't have a selection anymore\n return allPossibleSelections.size > 0;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { EditorCommand, registerEditorCommand, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { showSimpleSuggestions } from '../suggest/suggest.js';\nimport { ContextKeyExpr, IContextKeyService, RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nimport { ILogService } from '../../../platform/log/common/log.js';\nimport { SnippetSession } from './snippetSession.js';\nimport { localize } from '../../../nls.js';\nconst _defaultOptions = {\n overwriteBefore: 0,\n overwriteAfter: 0,\n undoStopBefore: true,\n undoStopAfter: true,\n adjustWhitespace: true,\n clipboardText: undefined,\n overtypingCapturer: undefined\n};\nlet SnippetController2 = class SnippetController2 {\n constructor(_editor, _logService, contextKeyService) {\n this._editor = _editor;\n this._logService = _logService;\n this._snippetListener = new DisposableStore();\n this._modelVersionId = -1;\n this._inSnippet = SnippetController2.InSnippetMode.bindTo(contextKeyService);\n this._hasNextTabstop = SnippetController2.HasNextTabstop.bindTo(contextKeyService);\n this._hasPrevTabstop = SnippetController2.HasPrevTabstop.bindTo(contextKeyService);\n }\n static get(editor) {\n return editor.getContribution(SnippetController2.ID);\n }\n dispose() {\n var _a;\n this._inSnippet.reset();\n this._hasPrevTabstop.reset();\n this._hasNextTabstop.reset();\n (_a = this._session) === null || _a === void 0 ? void 0 : _a.dispose();\n this._snippetListener.dispose();\n }\n insert(template, opts) {\n // this is here to find out more about the yet-not-understood\n // error that sometimes happens when we fail to inserted a nested\n // snippet\n try {\n this._doInsert(template, typeof opts === 'undefined' ? _defaultOptions : Object.assign(Object.assign({}, _defaultOptions), opts));\n }\n catch (e) {\n this.cancel();\n this._logService.error(e);\n this._logService.error('snippet_error');\n this._logService.error('insert_template=', template);\n this._logService.error('existing_template=', this._session ? this._session._logInfo() : '<no_session>');\n }\n }\n _doInsert(template, opts) {\n if (!this._editor.hasModel()) {\n return;\n }\n // don't listen while inserting the snippet\n // as that is the inflight state causing cancelation\n this._snippetListener.clear();\n if (opts.undoStopBefore) {\n this._editor.getModel().pushStackElement();\n }\n if (!this._session) {\n this._modelVersionId = this._editor.getModel().getAlternativeVersionId();\n this._session = new SnippetSession(this._editor, template, opts);\n this._session.insert();\n }\n else {\n this._session.merge(template, opts);\n }\n if (opts.undoStopAfter) {\n this._editor.getModel().pushStackElement();\n }\n this._updateState();\n this._snippetListener.add(this._editor.onDidChangeModelContent(e => e.isFlush && this.cancel()));\n this._snippetListener.add(this._editor.onDidChangeModel(() => this.cancel()));\n this._snippetListener.add(this._editor.onDidChangeCursorSelection(() => this._updateState()));\n }\n _updateState() {\n if (!this._session || !this._editor.hasModel()) {\n // canceled in the meanwhile\n return;\n }\n if (this._modelVersionId === this._editor.getModel().getAlternativeVersionId()) {\n // undo until the 'before' state happened\n // and makes use cancel snippet mode\n return this.cancel();\n }\n if (!this._session.hasPlaceholder) {\n // don't listen for selection changes and don't\n // update context keys when the snippet is plain text\n return this.cancel();\n }\n if (this._session.isAtLastPlaceholder || !this._session.isSelectionWithinPlaceholders()) {\n return this.cancel();\n }\n this._inSnippet.set(true);\n this._hasPrevTabstop.set(!this._session.isAtFirstPlaceholder);\n this._hasNextTabstop.set(!this._session.isAtLastPlaceholder);\n this._handleChoice();\n }\n _handleChoice() {\n if (!this._session || !this._editor.hasModel()) {\n this._currentChoice = undefined;\n return;\n }\n const { choice } = this._session;\n if (!choice) {\n this._currentChoice = undefined;\n return;\n }\n if (this._currentChoice !== choice) {\n this._currentChoice = choice;\n this._editor.setSelections(this._editor.getSelections()\n .map(s => Selection.fromPositions(s.getStartPosition())));\n const [first] = choice.options;\n showSimpleSuggestions(this._editor, choice.options.map((option, i) => {\n // let before = choice.options.slice(0, i);\n // let after = choice.options.slice(i);\n return {\n kind: 13 /* Value */,\n label: option.value,\n insertText: option.value,\n // insertText: `\\${1|${after.concat(before).join(',')}|}$0`,\n // snippetType: 'textmate',\n sortText: 'a'.repeat(i + 1),\n range: Range.fromPositions(this._editor.getPosition(), this._editor.getPosition().delta(0, first.value.length))\n };\n }));\n }\n }\n finish() {\n while (this._inSnippet.get()) {\n this.next();\n }\n }\n cancel(resetSelection = false) {\n var _a;\n this._inSnippet.reset();\n this._hasPrevTabstop.reset();\n this._hasNextTabstop.reset();\n this._snippetListener.clear();\n (_a = this._session) === null || _a === void 0 ? void 0 : _a.dispose();\n this._session = undefined;\n this._modelVersionId = -1;\n if (resetSelection) {\n // reset selection to the primary cursor when being asked\n // for. this happens when explicitly cancelling snippet mode,\n // e.g. when pressing ESC\n this._editor.setSelections([this._editor.getSelection()]);\n }\n }\n prev() {\n if (this._session) {\n this._session.prev();\n }\n this._updateState();\n }\n next() {\n if (this._session) {\n this._session.next();\n }\n this._updateState();\n }\n isInSnippet() {\n return Boolean(this._inSnippet.get());\n }\n};\nSnippetController2.ID = 'snippetController2';\nSnippetController2.InSnippetMode = new RawContextKey('inSnippetMode', false, localize('inSnippetMode', \"Whether the editor in current in snippet mode\"));\nSnippetController2.HasNextTabstop = new RawContextKey('hasNextTabstop', false, localize('hasNextTabstop', \"Whether there is a next tab stop when in snippet mode\"));\nSnippetController2.HasPrevTabstop = new RawContextKey('hasPrevTabstop', false, localize('hasPrevTabstop', \"Whether there is a previous tab stop when in snippet mode\"));\nSnippetController2 = __decorate([\n __param(1, ILogService),\n __param(2, IContextKeyService)\n], SnippetController2);\nexport { SnippetController2 };\nregisterEditorContribution(SnippetController2.ID, SnippetController2);\nconst CommandCtor = EditorCommand.bindToContribution(SnippetController2.get);\nregisterEditorCommand(new CommandCtor({\n id: 'jumpToNextSnippetPlaceholder',\n precondition: ContextKeyExpr.and(SnippetController2.InSnippetMode, SnippetController2.HasNextTabstop),\n handler: ctrl => ctrl.next(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 30,\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 2 /* Tab */\n }\n}));\nregisterEditorCommand(new CommandCtor({\n id: 'jumpToPrevSnippetPlaceholder',\n precondition: ContextKeyExpr.and(SnippetController2.InSnippetMode, SnippetController2.HasPrevTabstop),\n handler: ctrl => ctrl.prev(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 30,\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 1024 /* Shift */ | 2 /* Tab */\n }\n}));\nregisterEditorCommand(new CommandCtor({\n id: 'leaveSnippet',\n precondition: SnippetController2.InSnippetMode,\n handler: ctrl => ctrl.cancel(true),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 30,\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\n}));\nregisterEditorCommand(new CommandCtor({\n id: 'acceptSnippet',\n precondition: SnippetController2.InSnippetMode,\n handler: ctrl => ctrl.finish(),\n // kbOpts: {\n // \tweight: KeybindingWeight.EditorContrib + 30,\n // \tkbExpr: EditorContextKeys.textFocus,\n // \tprimary: KeyCode.Enter,\n // }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { LRUCache, TernarySearchTree } from '../../../base/common/map.js';\nimport { IStorageService, WillSaveStateReason } from '../../../platform/storage/common/storage.js';\nimport { completionKindFromString } from '../../common/modes.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { IModeService } from '../../common/services/modeService.js';\nexport class Memory {\n constructor(name) {\n this.name = name;\n }\n select(model, pos, items) {\n if (items.length === 0) {\n return 0;\n }\n let topScore = items[0].score[0];\n for (let i = 0; i < items.length; i++) {\n const { score, completion: suggestion } = items[i];\n if (score[0] !== topScore) {\n // stop when leaving the group of top matches\n break;\n }\n if (suggestion.preselect) {\n // stop when seeing an auto-select-item\n return i;\n }\n }\n return 0;\n }\n}\nexport class NoMemory extends Memory {\n constructor() {\n super('first');\n }\n memorize(model, pos, item) {\n // no-op\n }\n toJSON() {\n return undefined;\n }\n fromJSON() {\n //\n }\n}\nexport class LRUMemory extends Memory {\n constructor() {\n super('recentlyUsed');\n this._cache = new LRUCache(300, 0.66);\n this._seq = 0;\n }\n memorize(model, pos, item) {\n const key = `${model.getLanguageIdentifier().language}/${item.textLabel}`;\n this._cache.set(key, {\n touch: this._seq++,\n type: item.completion.kind,\n insertText: item.completion.insertText\n });\n }\n select(model, pos, items) {\n if (items.length === 0) {\n return 0;\n }\n const lineSuffix = model.getLineContent(pos.lineNumber).substr(pos.column - 10, pos.column - 1);\n if (/\\s$/.test(lineSuffix)) {\n return super.select(model, pos, items);\n }\n let topScore = items[0].score[0];\n let indexPreselect = -1;\n let indexRecency = -1;\n let seq = -1;\n for (let i = 0; i < items.length; i++) {\n if (items[i].score[0] !== topScore) {\n // consider only top items\n break;\n }\n const key = `${model.getLanguageIdentifier().language}/${items[i].textLabel}`;\n const item = this._cache.peek(key);\n if (item && item.touch > seq && item.type === items[i].completion.kind && item.insertText === items[i].completion.insertText) {\n seq = item.touch;\n indexRecency = i;\n }\n if (items[i].completion.preselect && indexPreselect === -1) {\n // stop when seeing an auto-select-item\n return indexPreselect = i;\n }\n }\n if (indexRecency !== -1) {\n return indexRecency;\n }\n else if (indexPreselect !== -1) {\n return indexPreselect;\n }\n else {\n return 0;\n }\n }\n toJSON() {\n return this._cache.toJSON();\n }\n fromJSON(data) {\n this._cache.clear();\n let seq = 0;\n for (const [key, value] of data) {\n value.touch = seq;\n value.type = typeof value.type === 'number' ? value.type : completionKindFromString(value.type);\n this._cache.set(key, value);\n }\n this._seq = this._cache.size;\n }\n}\nexport class PrefixMemory extends Memory {\n constructor() {\n super('recentlyUsedByPrefix');\n this._trie = TernarySearchTree.forStrings();\n this._seq = 0;\n }\n memorize(model, pos, item) {\n const { word } = model.getWordUntilPosition(pos);\n const key = `${model.getLanguageIdentifier().language}/${word}`;\n this._trie.set(key, {\n type: item.completion.kind,\n insertText: item.completion.insertText,\n touch: this._seq++\n });\n }\n select(model, pos, items) {\n let { word } = model.getWordUntilPosition(pos);\n if (!word) {\n return super.select(model, pos, items);\n }\n let key = `${model.getLanguageIdentifier().language}/${word}`;\n let item = this._trie.get(key);\n if (!item) {\n item = this._trie.findSubstr(key);\n }\n if (item) {\n for (let i = 0; i < items.length; i++) {\n let { kind, insertText } = items[i].completion;\n if (kind === item.type && insertText === item.insertText) {\n return i;\n }\n }\n }\n return super.select(model, pos, items);\n }\n toJSON() {\n let entries = [];\n this._trie.forEach((value, key) => entries.push([key, value]));\n // sort by last recently used (touch), then\n // take the top 200 item and normalize their\n // touch\n entries\n .sort((a, b) => -(a[1].touch - b[1].touch))\n .forEach((value, i) => value[1].touch = i);\n return entries.slice(0, 200);\n }\n fromJSON(data) {\n this._trie.clear();\n if (data.length > 0) {\n this._seq = data[0][1].touch + 1;\n for (const [key, value] of data) {\n value.type = typeof value.type === 'number' ? value.type : completionKindFromString(value.type);\n this._trie.set(key, value);\n }\n }\n }\n}\nlet SuggestMemoryService = class SuggestMemoryService {\n constructor(_storageService, _modeService, _configService) {\n this._storageService = _storageService;\n this._modeService = _modeService;\n this._configService = _configService;\n this._disposables = new DisposableStore();\n this._persistSoon = new RunOnceScheduler(() => this._saveState(), 500);\n this._disposables.add(_storageService.onWillSaveState(e => {\n if (e.reason === WillSaveStateReason.SHUTDOWN) {\n this._saveState();\n }\n }));\n }\n dispose() {\n this._disposables.dispose();\n this._persistSoon.dispose();\n }\n memorize(model, pos, item) {\n this._withStrategy(model, pos).memorize(model, pos, item);\n this._persistSoon.schedule();\n }\n select(model, pos, items) {\n return this._withStrategy(model, pos).select(model, pos, items);\n }\n _withStrategy(model, pos) {\n var _a, _b;\n const mode = this._configService.getValue('editor.suggestSelection', {\n overrideIdentifier: (_a = this._modeService.getLanguageIdentifier(model.getLanguageIdAtPosition(pos.lineNumber, pos.column))) === null || _a === void 0 ? void 0 : _a.language,\n resource: model.uri\n });\n if (((_b = this._strategy) === null || _b === void 0 ? void 0 : _b.name) !== mode) {\n this._saveState();\n const ctor = SuggestMemoryService._strategyCtors.get(mode) || NoMemory;\n this._strategy = new ctor();\n try {\n const share = this._configService.getValue('editor.suggest.shareSuggestSelections');\n const scope = share ? 0 /* GLOBAL */ : 1 /* WORKSPACE */;\n const raw = this._storageService.get(`${SuggestMemoryService._storagePrefix}/${mode}`, scope);\n if (raw) {\n this._strategy.fromJSON(JSON.parse(raw));\n }\n }\n catch (e) {\n // things can go wrong with JSON...\n }\n }\n return this._strategy;\n }\n _saveState() {\n if (this._strategy) {\n const share = this._configService.getValue('editor.suggest.shareSuggestSelections');\n const scope = share ? 0 /* GLOBAL */ : 1 /* WORKSPACE */;\n const raw = JSON.stringify(this._strategy);\n this._storageService.store(`${SuggestMemoryService._storagePrefix}/${this._strategy.name}`, raw, scope, 1 /* MACHINE */);\n }\n }\n};\nSuggestMemoryService._strategyCtors = new Map([\n ['recentlyUsedByPrefix', PrefixMemory],\n ['recentlyUsed', LRUMemory],\n ['first', NoMemory]\n]);\nSuggestMemoryService._storagePrefix = 'suggest/memories';\nSuggestMemoryService = __decorate([\n __param(0, IStorageService),\n __param(1, IModeService),\n __param(2, IConfigurationService)\n], SuggestMemoryService);\nexport { SuggestMemoryService };\nexport const ISuggestMemoryService = createDecorator('ISuggestMemories');\nregisterSingleton(ISuggestMemoryService, SuggestMemoryService, true);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { IContextKeyService, RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nlet SuggestAlternatives = class SuggestAlternatives {\n constructor(_editor, contextKeyService) {\n this._editor = _editor;\n this._index = 0;\n this._ckOtherSuggestions = SuggestAlternatives.OtherSuggestions.bindTo(contextKeyService);\n }\n dispose() {\n this.reset();\n }\n reset() {\n var _a;\n this._ckOtherSuggestions.reset();\n (_a = this._listener) === null || _a === void 0 ? void 0 : _a.dispose();\n this._model = undefined;\n this._acceptNext = undefined;\n this._ignore = false;\n }\n set({ model, index }, acceptNext) {\n // no suggestions -> nothing to do\n if (model.items.length === 0) {\n this.reset();\n return;\n }\n // no alternative suggestions -> nothing to do\n let nextIndex = SuggestAlternatives._moveIndex(true, model, index);\n if (nextIndex === index) {\n this.reset();\n return;\n }\n this._acceptNext = acceptNext;\n this._model = model;\n this._index = index;\n this._listener = this._editor.onDidChangeCursorPosition(() => {\n if (!this._ignore) {\n this.reset();\n }\n });\n this._ckOtherSuggestions.set(true);\n }\n static _moveIndex(fwd, model, index) {\n let newIndex = index;\n while (true) {\n newIndex = (newIndex + model.items.length + (fwd ? +1 : -1)) % model.items.length;\n if (newIndex === index) {\n break;\n }\n if (!model.items[newIndex].completion.additionalTextEdits) {\n break;\n }\n }\n return newIndex;\n }\n next() {\n this._move(true);\n }\n prev() {\n this._move(false);\n }\n _move(fwd) {\n if (!this._model) {\n // nothing to reason about\n return;\n }\n try {\n this._ignore = true;\n this._index = SuggestAlternatives._moveIndex(fwd, this._model, this._index);\n this._acceptNext({ index: this._index, item: this._model.items[this._index], model: this._model });\n }\n finally {\n this._ignore = false;\n }\n }\n};\nSuggestAlternatives.OtherSuggestions = new RawContextKey('hasOtherSuggestions', false);\nSuggestAlternatives = __decorate([\n __param(1, IContextKeyService)\n], SuggestAlternatives);\nexport { SuggestAlternatives };\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 *--------------------------------------------------------------------------------------------*/\nimport { fuzzyScore, fuzzyScoreGracefulAggressive, FuzzyScore, anyScore } from '../../../base/common/filters.js';\nimport { compareIgnoreCase } from '../../../base/common/strings.js';\nimport { quickSelect } from '../../../base/common/arrays.js';\nexport class LineContext {\n constructor(leadingLineContent, characterCountDelta) {\n this.leadingLineContent = leadingLineContent;\n this.characterCountDelta = characterCountDelta;\n }\n}\n/**\n * Sorted, filtered completion view model\n * */\nexport class CompletionModel {\n constructor(items, column, lineContext, wordDistance, options, snippetSuggestions, clipboardText) {\n this.clipboardText = clipboardText;\n this._snippetCompareFn = CompletionModel._compareCompletionItems;\n this._items = items;\n this._column = column;\n this._wordDistance = wordDistance;\n this._options = options;\n this._refilterKind = 1 /* All */;\n this._lineContext = lineContext;\n if (snippetSuggestions === 'top') {\n this._snippetCompareFn = CompletionModel._compareCompletionItemsSnippetsUp;\n }\n else if (snippetSuggestions === 'bottom') {\n this._snippetCompareFn = CompletionModel._compareCompletionItemsSnippetsDown;\n }\n }\n get lineContext() {\n return this._lineContext;\n }\n set lineContext(value) {\n if (this._lineContext.leadingLineContent !== value.leadingLineContent\n || this._lineContext.characterCountDelta !== value.characterCountDelta) {\n this._refilterKind = this._lineContext.characterCountDelta < value.characterCountDelta && this._filteredItems ? 2 /* Incr */ : 1 /* All */;\n this._lineContext = value;\n }\n }\n get items() {\n this._ensureCachedState();\n return this._filteredItems;\n }\n get allProvider() {\n this._ensureCachedState();\n return this._providerInfo.keys();\n }\n get incomplete() {\n this._ensureCachedState();\n const result = new Set();\n for (let [provider, incomplete] of this._providerInfo) {\n if (incomplete) {\n result.add(provider);\n }\n }\n return result;\n }\n adopt(except) {\n let res = [];\n for (let i = 0; i < this._items.length;) {\n if (!except.has(this._items[i].provider)) {\n res.push(this._items[i]);\n // unordered removed\n this._items[i] = this._items[this._items.length - 1];\n this._items.pop();\n }\n else {\n // continue with next item\n i++;\n }\n }\n this._refilterKind = 1 /* All */;\n return res;\n }\n get stats() {\n this._ensureCachedState();\n return this._stats;\n }\n _ensureCachedState() {\n if (this._refilterKind !== 0 /* Nothing */) {\n this._createCachedState();\n }\n }\n _createCachedState() {\n this._providerInfo = new Map();\n const labelLengths = [];\n const { leadingLineContent, characterCountDelta } = this._lineContext;\n let word = '';\n let wordLow = '';\n // incrementally filter less\n const source = this._refilterKind === 1 /* All */ ? this._items : this._filteredItems;\n const target = [];\n // picks a score function based on the number of\n // items that we have to score/filter and based on the\n // user-configuration\n const scoreFn = (!this._options.filterGraceful || source.length > 2000) ? fuzzyScore : fuzzyScoreGracefulAggressive;\n for (let i = 0; i < source.length; i++) {\n const item = source[i];\n if (item.isInvalid) {\n continue; // SKIP invalid items\n }\n // collect all support, know if their result is incomplete\n this._providerInfo.set(item.provider, Boolean(item.container.incomplete));\n // 'word' is that remainder of the current line that we\n // filter and score against. In theory each suggestion uses a\n // different word, but in practice not - that's why we cache\n const overwriteBefore = item.position.column - item.editStart.column;\n const wordLen = overwriteBefore + characterCountDelta - (item.position.column - this._column);\n if (word.length !== wordLen) {\n word = wordLen === 0 ? '' : leadingLineContent.slice(-wordLen);\n wordLow = word.toLowerCase();\n }\n // remember the word against which this item was\n // scored\n item.word = word;\n if (wordLen === 0) {\n // when there is nothing to score against, don't\n // event try to do. Use a const rank and rely on\n // the fallback-sort using the initial sort order.\n // use a score of `-100` because that is out of the\n // bound of values `fuzzyScore` will return\n item.score = FuzzyScore.Default;\n }\n else {\n // skip word characters that are whitespace until\n // we have hit the replace range (overwriteBefore)\n let wordPos = 0;\n while (wordPos < overwriteBefore) {\n const ch = word.charCodeAt(wordPos);\n if (ch === 32 /* Space */ || ch === 9 /* Tab */) {\n wordPos += 1;\n }\n else {\n break;\n }\n }\n if (wordPos >= wordLen) {\n // the wordPos at which scoring starts is the whole word\n // and therefore the same rules as not having a word apply\n item.score = FuzzyScore.Default;\n }\n else if (typeof item.completion.filterText === 'string') {\n // when there is a `filterText` it must match the `word`.\n // if it matches we check with the label to compute highlights\n // and if that doesn't yield a result we have no highlights,\n // despite having the match\n let match = scoreFn(word, wordLow, wordPos, item.completion.filterText, item.filterTextLow, 0, false);\n if (!match) {\n continue; // NO match\n }\n if (compareIgnoreCase(item.completion.filterText, item.textLabel) === 0) {\n // filterText and label are actually the same -> use good highlights\n item.score = match;\n }\n else {\n // re-run the scorer on the label in the hope of a result BUT use the rank\n // of the filterText-match\n item.score = anyScore(word, wordLow, wordPos, item.textLabel, item.labelLow, 0);\n item.score[0] = match[0]; // use score from filterText\n }\n }\n else {\n // by default match `word` against the `label`\n let match = scoreFn(word, wordLow, wordPos, item.textLabel, item.labelLow, 0, false);\n if (!match) {\n continue; // NO match\n }\n item.score = match;\n }\n }\n item.idx = i;\n item.distance = this._wordDistance.distance(item.position, item.completion);\n target.push(item);\n // update stats\n labelLengths.push(item.textLabel.length);\n }\n this._filteredItems = target.sort(this._snippetCompareFn);\n this._refilterKind = 0 /* Nothing */;\n this._stats = {\n pLabelLen: labelLengths.length ?\n quickSelect(labelLengths.length - .85, labelLengths, (a, b) => a - b)\n : 0\n };\n }\n static _compareCompletionItems(a, b) {\n if (a.score[0] > b.score[0]) {\n return -1;\n }\n else if (a.score[0] < b.score[0]) {\n return 1;\n }\n else if (a.distance < b.distance) {\n return -1;\n }\n else if (a.distance > b.distance) {\n return 1;\n }\n else if (a.idx < b.idx) {\n return -1;\n }\n else if (a.idx > b.idx) {\n return 1;\n }\n else {\n return 0;\n }\n }\n static _compareCompletionItemsSnippetsDown(a, b) {\n if (a.completion.kind !== b.completion.kind) {\n if (a.completion.kind === 27 /* Snippet */) {\n return 1;\n }\n else if (b.completion.kind === 27 /* Snippet */) {\n return -1;\n }\n }\n return CompletionModel._compareCompletionItems(a, b);\n }\n static _compareCompletionItemsSnippetsUp(a, b) {\n if (a.completion.kind !== b.completion.kind) {\n if (a.completion.kind === 27 /* Snippet */) {\n return -1;\n }\n else if (b.completion.kind === 27 /* Snippet */) {\n return 1;\n }\n }\n return CompletionModel._compareCompletionItems(a, b);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { binarySearch, isFalsyOrEmpty } from '../../../base/common/arrays.js';\nimport { Range } from '../../common/core/range.js';\nimport { BracketSelectionRangeProvider } from '../smartSelect/bracketSelections.js';\nexport class WordDistance {\n static create(service, editor) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!editor.getOption(103 /* suggest */).localityBonus) {\n return WordDistance.None;\n }\n if (!editor.hasModel()) {\n return WordDistance.None;\n }\n const model = editor.getModel();\n const position = editor.getPosition();\n if (!service.canComputeWordRanges(model.uri)) {\n return WordDistance.None;\n }\n const [ranges] = yield new BracketSelectionRangeProvider().provideSelectionRanges(model, [position]);\n if (ranges.length === 0) {\n return WordDistance.None;\n }\n const wordRanges = yield service.computeWordRanges(model.uri, ranges[0].range);\n if (!wordRanges) {\n return WordDistance.None;\n }\n // remove current word\n const wordUntilPos = model.getWordUntilPosition(position);\n delete wordRanges[wordUntilPos.word];\n return new class extends WordDistance {\n distance(anchor, item) {\n if (!position.equals(editor.getPosition())) {\n return 0;\n }\n if (item.kind === 17 /* Keyword */) {\n return 2 << 20;\n }\n let word = typeof item.label === 'string' ? item.label : item.label.name;\n let wordLines = wordRanges[word];\n if (isFalsyOrEmpty(wordLines)) {\n return 2 << 20;\n }\n let idx = binarySearch(wordLines, Range.fromPositions(anchor), Range.compareRangesUsingStarts);\n let bestWordRange = idx >= 0 ? wordLines[idx] : wordLines[Math.max(0, ~idx - 1)];\n let blockDistance = ranges.length;\n for (const range of ranges) {\n if (!Range.containsRange(range.range, bestWordRange)) {\n break;\n }\n blockDistance -= 1;\n }\n return blockDistance;\n }\n };\n });\n }\n}\nWordDistance.None = new class extends WordDistance {\n distance() { return 0; }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { TimeoutTimer } from '../../../base/common/async.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { dispose, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { CompletionProviderRegistry } from '../../common/modes.js';\nimport { CompletionModel } from './completionModel.js';\nimport { getSuggestionComparator, provideSuggestionItems, getSnippetSuggestSupport, CompletionOptions } from './suggest.js';\nimport { SnippetController2 } from '../snippet/snippetController2.js';\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { IEditorWorkerService } from '../../common/services/editorWorkerService.js';\nimport { WordDistance } from './wordDistance.js';\nimport { isLowSurrogate, isHighSurrogate, getLeadingWhitespace } from '../../../base/common/strings.js';\nimport { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js';\nimport { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js';\nimport { ILogService } from '../../../platform/log/common/log.js';\nexport class LineContext {\n constructor(model, position, auto, shy) {\n this.leadingLineContent = model.getLineContent(position.lineNumber).substr(0, position.column - 1);\n this.leadingWord = model.getWordUntilPosition(position);\n this.lineNumber = position.lineNumber;\n this.column = position.column;\n this.auto = auto;\n this.shy = shy;\n }\n static shouldAutoTrigger(editor) {\n if (!editor.hasModel()) {\n return false;\n }\n const model = editor.getModel();\n const pos = editor.getPosition();\n model.tokenizeIfCheap(pos.lineNumber);\n const word = model.getWordAtPosition(pos);\n if (!word) {\n return false;\n }\n if (word.endColumn !== pos.column) {\n return false;\n }\n if (!isNaN(Number(word.word))) {\n return false;\n }\n return true;\n }\n}\nlet SuggestModel = class SuggestModel {\n constructor(_editor, _editorWorkerService, _clipboardService, _telemetryService, _logService) {\n this._editor = _editor;\n this._editorWorkerService = _editorWorkerService;\n this._clipboardService = _clipboardService;\n this._telemetryService = _telemetryService;\n this._logService = _logService;\n this._toDispose = new DisposableStore();\n this._quickSuggestDelay = 10;\n this._triggerCharacterListener = new DisposableStore();\n this._triggerQuickSuggest = new TimeoutTimer();\n this._state = 0 /* Idle */;\n this._completionDisposables = new DisposableStore();\n this._onDidCancel = new Emitter();\n this._onDidTrigger = new Emitter();\n this._onDidSuggest = new Emitter();\n this.onDidCancel = this._onDidCancel.event;\n this.onDidTrigger = this._onDidTrigger.event;\n this.onDidSuggest = this._onDidSuggest.event;\n this._telemetryGate = 0;\n this._currentSelection = this._editor.getSelection() || new Selection(1, 1, 1, 1);\n // wire up various listeners\n this._toDispose.add(this._editor.onDidChangeModel(() => {\n this._updateTriggerCharacters();\n this.cancel();\n }));\n this._toDispose.add(this._editor.onDidChangeModelLanguage(() => {\n this._updateTriggerCharacters();\n this.cancel();\n }));\n this._toDispose.add(this._editor.onDidChangeConfiguration(() => {\n this._updateTriggerCharacters();\n this._updateQuickSuggest();\n }));\n this._toDispose.add(CompletionProviderRegistry.onDidChange(() => {\n this._updateTriggerCharacters();\n this._updateActiveSuggestSession();\n }));\n this._toDispose.add(this._editor.onDidChangeCursorSelection(e => {\n this._onCursorChange(e);\n }));\n let editorIsComposing = false;\n this._toDispose.add(this._editor.onDidCompositionStart(() => {\n editorIsComposing = true;\n }));\n this._toDispose.add(this._editor.onDidCompositionEnd(() => {\n // refilter when composition ends\n editorIsComposing = false;\n this._refilterCompletionItems();\n }));\n this._toDispose.add(this._editor.onDidChangeModelContent(() => {\n // only filter completions when the editor isn't\n // composing a character, e.g. ¨ + u makes ü but just\n // ¨ cannot be used for filtering\n if (!editorIsComposing) {\n this._refilterCompletionItems();\n }\n }));\n this._updateTriggerCharacters();\n this._updateQuickSuggest();\n }\n dispose() {\n dispose(this._triggerCharacterListener);\n dispose([this._onDidCancel, this._onDidSuggest, this._onDidTrigger, this._triggerQuickSuggest]);\n this._toDispose.dispose();\n this._completionDisposables.dispose();\n this.cancel();\n }\n // --- handle configuration & precondition changes\n _updateQuickSuggest() {\n this._quickSuggestDelay = this._editor.getOption(76 /* quickSuggestionsDelay */);\n if (isNaN(this._quickSuggestDelay) || (!this._quickSuggestDelay && this._quickSuggestDelay !== 0) || this._quickSuggestDelay < 0) {\n this._quickSuggestDelay = 10;\n }\n }\n _updateTriggerCharacters() {\n this._triggerCharacterListener.clear();\n if (this._editor.getOption(77 /* readOnly */)\n || !this._editor.hasModel()\n || !this._editor.getOption(106 /* suggestOnTriggerCharacters */)) {\n return;\n }\n const supportsByTriggerCharacter = new Map();\n for (const support of CompletionProviderRegistry.all(this._editor.getModel())) {\n for (const ch of support.triggerCharacters || []) {\n let set = supportsByTriggerCharacter.get(ch);\n if (!set) {\n set = new Set();\n set.add(getSnippetSuggestSupport());\n supportsByTriggerCharacter.set(ch, set);\n }\n set.add(support);\n }\n }\n const checkTriggerCharacter = (text) => {\n if (!text) {\n // came here from the compositionEnd-event\n const position = this._editor.getPosition();\n const model = this._editor.getModel();\n text = model.getLineContent(position.lineNumber).substr(0, position.column - 1);\n }\n let lastChar = '';\n if (isLowSurrogate(text.charCodeAt(text.length - 1))) {\n if (isHighSurrogate(text.charCodeAt(text.length - 2))) {\n lastChar = text.substr(text.length - 2);\n }\n }\n else {\n lastChar = text.charAt(text.length - 1);\n }\n const supports = supportsByTriggerCharacter.get(lastChar);\n if (supports) {\n // keep existing items that where not computed by the\n // supports/providers that want to trigger now\n const existing = this._completionModel\n ? { items: this._completionModel.adopt(supports), clipboardText: this._completionModel.clipboardText }\n : undefined;\n this.trigger({ auto: true, shy: false, triggerCharacter: lastChar }, Boolean(this._completionModel), supports, existing);\n }\n };\n this._triggerCharacterListener.add(this._editor.onDidType(checkTriggerCharacter));\n this._triggerCharacterListener.add(this._editor.onDidCompositionEnd(checkTriggerCharacter));\n }\n // --- trigger/retrigger/cancel suggest\n get state() {\n return this._state;\n }\n cancel(retrigger = false) {\n var _a;\n if (this._state !== 0 /* Idle */) {\n this._triggerQuickSuggest.cancel();\n (_a = this._requestToken) === null || _a === void 0 ? void 0 : _a.cancel();\n this._requestToken = undefined;\n this._state = 0 /* Idle */;\n this._completionModel = undefined;\n this._context = undefined;\n this._onDidCancel.fire({ retrigger });\n }\n }\n clear() {\n this._completionDisposables.clear();\n }\n _updateActiveSuggestSession() {\n if (this._state !== 0 /* Idle */) {\n if (!this._editor.hasModel() || !CompletionProviderRegistry.has(this._editor.getModel())) {\n this.cancel();\n }\n else {\n this.trigger({ auto: this._state === 2 /* Auto */, shy: false }, true);\n }\n }\n }\n _onCursorChange(e) {\n if (!this._editor.hasModel()) {\n return;\n }\n const model = this._editor.getModel();\n const prevSelection = this._currentSelection;\n this._currentSelection = this._editor.getSelection();\n if (!e.selection.isEmpty()\n || (e.reason !== 0 /* NotSet */ && e.reason !== 3 /* Explicit */)\n || (e.source !== 'keyboard' && e.source !== 'deleteLeft')) {\n // Early exit if nothing needs to be done!\n // Leave some form of early exit check here if you wish to continue being a cursor position change listener ;)\n this.cancel();\n return;\n }\n if (!CompletionProviderRegistry.has(model)) {\n return;\n }\n if (this._state === 0 /* Idle */ && e.reason === 0 /* NotSet */) {\n if (this._editor.getOption(75 /* quickSuggestions */) === false) {\n // not enabled\n return;\n }\n if (!prevSelection.containsRange(this._currentSelection) && !prevSelection.getEndPosition().isBeforeOrEqual(this._currentSelection.getPosition())) {\n // cursor didn't move RIGHT\n return;\n }\n if (this._editor.getOption(103 /* suggest */).snippetsPreventQuickSuggestions && SnippetController2.get(this._editor).isInSnippet()) {\n // no quick suggestion when in snippet mode\n return;\n }\n this.cancel();\n this._triggerQuickSuggest.cancelAndSet(() => {\n if (this._state !== 0 /* Idle */) {\n return;\n }\n if (!LineContext.shouldAutoTrigger(this._editor)) {\n return;\n }\n if (!this._editor.hasModel()) {\n return;\n }\n const model = this._editor.getModel();\n const pos = this._editor.getPosition();\n // validate enabled now\n const quickSuggestions = this._editor.getOption(75 /* quickSuggestions */);\n if (quickSuggestions === false) {\n return;\n }\n else if (quickSuggestions === true) {\n // all good\n }\n else {\n // Check the type of the token that triggered this\n model.tokenizeIfCheap(pos.lineNumber);\n const lineTokens = model.getLineTokens(pos.lineNumber);\n const tokenType = lineTokens.getStandardTokenType(lineTokens.findTokenIndexAtOffset(Math.max(pos.column - 1 - 1, 0)));\n const inValidScope = quickSuggestions.other && tokenType === 0 /* Other */\n || quickSuggestions.comments && tokenType === 1 /* Comment */\n || quickSuggestions.strings && tokenType === 2 /* String */;\n if (!inValidScope) {\n return;\n }\n }\n // we made it till here -> trigger now\n this.trigger({ auto: true, shy: false });\n }, this._quickSuggestDelay);\n }\n else if (this._state !== 0 /* Idle */ && e.reason === 3 /* Explicit */) {\n // suggest is active and something like cursor keys are used to move\n // the cursor. this means we can refilter at the new position\n this._refilterCompletionItems();\n }\n }\n _refilterCompletionItems() {\n // Re-filter suggestions. This MUST run async because filtering/scoring\n // uses the model content AND the cursor position. The latter is NOT\n // updated when the document has changed (the event which drives this method)\n // and therefore a little pause (next mirco task) is needed. See:\n // https://stackoverflow.com/questions/25915634/difference-between-microtask-and-macrotask-within-an-event-loop-context#25933985\n Promise.resolve().then(() => {\n if (this._state === 0 /* Idle */) {\n return;\n }\n if (!this._editor.hasModel()) {\n return;\n }\n const model = this._editor.getModel();\n const position = this._editor.getPosition();\n const ctx = new LineContext(model, position, this._state === 2 /* Auto */, false);\n this._onNewContext(ctx);\n });\n }\n trigger(context, retrigger = false, onlyFrom, existing) {\n var _a;\n if (!this._editor.hasModel()) {\n return;\n }\n const model = this._editor.getModel();\n const auto = context.auto;\n const ctx = new LineContext(model, this._editor.getPosition(), auto, context.shy);\n // Cancel previous requests, change state & update UI\n this.cancel(retrigger);\n this._state = auto ? 2 /* Auto */ : 1 /* Manual */;\n this._onDidTrigger.fire({ auto, shy: context.shy, position: this._editor.getPosition() });\n // Capture context when request was sent\n this._context = ctx;\n // Build context for request\n let suggestCtx = { triggerKind: (_a = context.triggerKind) !== null && _a !== void 0 ? _a : 0 /* Invoke */ };\n if (context.triggerCharacter) {\n suggestCtx = {\n triggerKind: 1 /* TriggerCharacter */,\n triggerCharacter: context.triggerCharacter\n };\n }\n this._requestToken = new CancellationTokenSource();\n // kind filter and snippet sort rules\n const snippetSuggestions = this._editor.getOption(98 /* snippetSuggestions */);\n let snippetSortOrder = 1 /* Inline */;\n switch (snippetSuggestions) {\n case 'top':\n snippetSortOrder = 0 /* Top */;\n break;\n // \t↓ that's the default anyways...\n // case 'inline':\n // \tsnippetSortOrder = SnippetSortOrder.Inline;\n // \tbreak;\n case 'bottom':\n snippetSortOrder = 2 /* Bottom */;\n break;\n }\n const itemKindFilter = SuggestModel._createItemKindFilter(this._editor);\n const wordDistance = WordDistance.create(this._editorWorkerService, this._editor);\n const completions = provideSuggestionItems(model, this._editor.getPosition(), new CompletionOptions(snippetSortOrder, itemKindFilter, onlyFrom), suggestCtx, this._requestToken.token);\n Promise.all([completions, wordDistance]).then(([completions, wordDistance]) => __awaiter(this, void 0, void 0, function* () {\n var _b;\n (_b = this._requestToken) === null || _b === void 0 ? void 0 : _b.dispose();\n if (!this._editor.hasModel()) {\n return;\n }\n let clipboardText = existing === null || existing === void 0 ? void 0 : existing.clipboardText;\n if (!clipboardText && completions.needsClipboard) {\n clipboardText = yield this._clipboardService.readText();\n }\n if (this._state === 0 /* Idle */) {\n return;\n }\n const model = this._editor.getModel();\n let items = completions.items;\n if (existing) {\n const cmpFn = getSuggestionComparator(snippetSortOrder);\n items = items.concat(existing.items).sort(cmpFn);\n }\n const ctx = new LineContext(model, this._editor.getPosition(), auto, context.shy);\n this._completionModel = new CompletionModel(items, this._context.column, {\n leadingLineContent: ctx.leadingLineContent,\n characterCountDelta: ctx.column - this._context.column\n }, wordDistance, this._editor.getOption(103 /* suggest */), this._editor.getOption(98 /* snippetSuggestions */), clipboardText);\n // store containers so that they can be disposed later\n this._completionDisposables.add(completions.disposable);\n this._onNewContext(ctx);\n // finally report telemetry about durations\n this._reportDurationsTelemetry(completions.durations);\n })).catch(onUnexpectedError);\n }\n _reportDurationsTelemetry(durations) {\n if (this._telemetryGate++ % 230 !== 0) {\n return;\n }\n setTimeout(() => {\n this._telemetryService.publicLog2('suggest.durations.json', { data: JSON.stringify(durations) });\n this._logService.debug('suggest.durations.json', durations);\n });\n }\n static _createItemKindFilter(editor) {\n // kind filter and snippet sort rules\n const result = new Set();\n // snippet setting\n const snippetSuggestions = editor.getOption(98 /* snippetSuggestions */);\n if (snippetSuggestions === 'none') {\n result.add(27 /* Snippet */);\n }\n // type setting\n const suggestOptions = editor.getOption(103 /* suggest */);\n if (!suggestOptions.showMethods) {\n result.add(0 /* Method */);\n }\n if (!suggestOptions.showFunctions) {\n result.add(1 /* Function */);\n }\n if (!suggestOptions.showConstructors) {\n result.add(2 /* Constructor */);\n }\n if (!suggestOptions.showFields) {\n result.add(3 /* Field */);\n }\n if (!suggestOptions.showVariables) {\n result.add(4 /* Variable */);\n }\n if (!suggestOptions.showClasses) {\n result.add(5 /* Class */);\n }\n if (!suggestOptions.showStructs) {\n result.add(6 /* Struct */);\n }\n if (!suggestOptions.showInterfaces) {\n result.add(7 /* Interface */);\n }\n if (!suggestOptions.showModules) {\n result.add(8 /* Module */);\n }\n if (!suggestOptions.showProperties) {\n result.add(9 /* Property */);\n }\n if (!suggestOptions.showEvents) {\n result.add(10 /* Event */);\n }\n if (!suggestOptions.showOperators) {\n result.add(11 /* Operator */);\n }\n if (!suggestOptions.showUnits) {\n result.add(12 /* Unit */);\n }\n if (!suggestOptions.showValues) {\n result.add(13 /* Value */);\n }\n if (!suggestOptions.showConstants) {\n result.add(14 /* Constant */);\n }\n if (!suggestOptions.showEnums) {\n result.add(15 /* Enum */);\n }\n if (!suggestOptions.showEnumMembers) {\n result.add(16 /* EnumMember */);\n }\n if (!suggestOptions.showKeywords) {\n result.add(17 /* Keyword */);\n }\n if (!suggestOptions.showWords) {\n result.add(18 /* Text */);\n }\n if (!suggestOptions.showColors) {\n result.add(19 /* Color */);\n }\n if (!suggestOptions.showFiles) {\n result.add(20 /* File */);\n }\n if (!suggestOptions.showReferences) {\n result.add(21 /* Reference */);\n }\n if (!suggestOptions.showColors) {\n result.add(22 /* Customcolor */);\n }\n if (!suggestOptions.showFolders) {\n result.add(23 /* Folder */);\n }\n if (!suggestOptions.showTypeParameters) {\n result.add(24 /* TypeParameter */);\n }\n if (!suggestOptions.showSnippets) {\n result.add(27 /* Snippet */);\n }\n if (!suggestOptions.showUsers) {\n result.add(25 /* User */);\n }\n if (!suggestOptions.showIssues) {\n result.add(26 /* Issue */);\n }\n return result;\n }\n _onNewContext(ctx) {\n if (!this._context) {\n // happens when 24x7 IntelliSense is enabled and still in its delay\n return;\n }\n if (ctx.lineNumber !== this._context.lineNumber) {\n // e.g. happens when pressing Enter while IntelliSense is computed\n this.cancel();\n return;\n }\n if (getLeadingWhitespace(ctx.leadingLineContent) !== getLeadingWhitespace(this._context.leadingLineContent)) {\n // cancel IntelliSense when line start changes\n // happens when the current word gets outdented\n this.cancel();\n return;\n }\n if (ctx.column < this._context.column) {\n // typed -> moved cursor LEFT -> retrigger if still on a word\n if (ctx.leadingWord.word) {\n this.trigger({ auto: this._context.auto, shy: false }, true);\n }\n else {\n this.cancel();\n }\n return;\n }\n if (!this._completionModel) {\n // happens when IntelliSense is not yet computed\n return;\n }\n if (ctx.leadingWord.word.length !== 0 && ctx.leadingWord.startColumn > this._context.leadingWord.startColumn) {\n // started a new word while IntelliSense shows -> retrigger\n // Select those providers have not contributed to this completion model and re-trigger completions for\n // them. Also adopt the existing items and merge them into the new completion model\n const inactiveProvider = new Set(CompletionProviderRegistry.all(this._editor.getModel()));\n for (let provider of this._completionModel.allProvider) {\n inactiveProvider.delete(provider);\n }\n const items = this._completionModel.adopt(new Set());\n this.trigger({ auto: this._context.auto, shy: false }, true, inactiveProvider, { items, clipboardText: this._completionModel.clipboardText });\n return;\n }\n if (ctx.column > this._context.column && this._completionModel.incomplete.size > 0 && ctx.leadingWord.word.length !== 0) {\n // typed -> moved cursor RIGHT & incomple model & still on a word -> retrigger\n const { incomplete } = this._completionModel;\n const items = this._completionModel.adopt(incomplete);\n this.trigger({ auto: this._state === 2 /* Auto */, shy: false, triggerKind: 2 /* TriggerForIncompleteCompletions */ }, true, incomplete, { items, clipboardText: this._completionModel.clipboardText });\n }\n else {\n // typed -> moved cursor RIGHT -> update UI\n let oldLineContext = this._completionModel.lineContext;\n let isFrozen = false;\n this._completionModel.lineContext = {\n leadingLineContent: ctx.leadingLineContent,\n characterCountDelta: ctx.column - this._context.column\n };\n if (this._completionModel.items.length === 0) {\n if (LineContext.shouldAutoTrigger(this._editor) && this._context.leadingWord.endColumn < ctx.leadingWord.startColumn) {\n // retrigger when heading into a new word\n this.trigger({ auto: this._context.auto, shy: false }, true);\n return;\n }\n if (!this._context.auto) {\n // freeze when IntelliSense was manually requested\n this._completionModel.lineContext = oldLineContext;\n isFrozen = this._completionModel.items.length > 0;\n if (isFrozen && ctx.leadingWord.word.length === 0) {\n // there were results before but now there aren't\n // and also we are not on a word anymore -> cancel\n this.cancel();\n return;\n }\n }\n else {\n // nothing left\n this.cancel();\n return;\n }\n }\n this._onDidSuggest.fire({\n completionModel: this._completionModel,\n auto: this._context.auto,\n shy: this._context.shy,\n isFrozen,\n });\n }\n }\n};\nSuggestModel = __decorate([\n __param(1, IEditorWorkerService),\n __param(2, IClipboardService),\n __param(3, ITelemetryService),\n __param(4, ILogService)\n], SuggestModel);\nexport { SuggestModel };\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 *--------------------------------------------------------------------------------------------*/\nimport { localize } from '../../../nls.js';\nimport { registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { registerColor, foreground } from '../../../platform/theme/common/colorRegistry.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nexport const SYMBOL_ICON_ARRAY_FOREGROUND = registerColor('symbolIcon.arrayForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.arrayForeground', 'The foreground color for array symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_BOOLEAN_FOREGROUND = registerColor('symbolIcon.booleanForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.booleanForeground', 'The foreground color for boolean symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_CLASS_FOREGROUND = registerColor('symbolIcon.classForeground', {\n dark: '#EE9D28',\n light: '#D67E00',\n hc: '#EE9D28'\n}, localize('symbolIcon.classForeground', 'The foreground color for class symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_COLOR_FOREGROUND = registerColor('symbolIcon.colorForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.colorForeground', 'The foreground color for color symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_CONSTANT_FOREGROUND = registerColor('symbolIcon.constantForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.constantForeground', 'The foreground color for constant symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_CONSTRUCTOR_FOREGROUND = registerColor('symbolIcon.constructorForeground', {\n dark: '#B180D7',\n light: '#652D90',\n hc: '#B180D7'\n}, localize('symbolIcon.constructorForeground', 'The foreground color for constructor symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_ENUMERATOR_FOREGROUND = registerColor('symbolIcon.enumeratorForeground', {\n dark: '#EE9D28',\n light: '#D67E00',\n hc: '#EE9D28'\n}, localize('symbolIcon.enumeratorForeground', 'The foreground color for enumerator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND = registerColor('symbolIcon.enumeratorMemberForeground', {\n dark: '#75BEFF',\n light: '#007ACC',\n hc: '#75BEFF'\n}, localize('symbolIcon.enumeratorMemberForeground', 'The foreground color for enumerator member symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_EVENT_FOREGROUND = registerColor('symbolIcon.eventForeground', {\n dark: '#EE9D28',\n light: '#D67E00',\n hc: '#EE9D28'\n}, localize('symbolIcon.eventForeground', 'The foreground color for event symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_FIELD_FOREGROUND = registerColor('symbolIcon.fieldForeground', {\n dark: '#75BEFF',\n light: '#007ACC',\n hc: '#75BEFF'\n}, localize('symbolIcon.fieldForeground', 'The foreground color for field symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_FILE_FOREGROUND = registerColor('symbolIcon.fileForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.fileForeground', 'The foreground color for file symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_FOLDER_FOREGROUND = registerColor('symbolIcon.folderForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.folderForeground', 'The foreground color for folder symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_FUNCTION_FOREGROUND = registerColor('symbolIcon.functionForeground', {\n dark: '#B180D7',\n light: '#652D90',\n hc: '#B180D7'\n}, localize('symbolIcon.functionForeground', 'The foreground color for function symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_INTERFACE_FOREGROUND = registerColor('symbolIcon.interfaceForeground', {\n dark: '#75BEFF',\n light: '#007ACC',\n hc: '#75BEFF'\n}, localize('symbolIcon.interfaceForeground', 'The foreground color for interface symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_KEY_FOREGROUND = registerColor('symbolIcon.keyForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.keyForeground', 'The foreground color for key symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_KEYWORD_FOREGROUND = registerColor('symbolIcon.keywordForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.keywordForeground', 'The foreground color for keyword symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_METHOD_FOREGROUND = registerColor('symbolIcon.methodForeground', {\n dark: '#B180D7',\n light: '#652D90',\n hc: '#B180D7'\n}, localize('symbolIcon.methodForeground', 'The foreground color for method symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_MODULE_FOREGROUND = registerColor('symbolIcon.moduleForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.moduleForeground', 'The foreground color for module symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_NAMESPACE_FOREGROUND = registerColor('symbolIcon.namespaceForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.namespaceForeground', 'The foreground color for namespace symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_NULL_FOREGROUND = registerColor('symbolIcon.nullForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.nullForeground', 'The foreground color for null symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_NUMBER_FOREGROUND = registerColor('symbolIcon.numberForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.numberForeground', 'The foreground color for number symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_OBJECT_FOREGROUND = registerColor('symbolIcon.objectForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.objectForeground', 'The foreground color for object symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_OPERATOR_FOREGROUND = registerColor('symbolIcon.operatorForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.operatorForeground', 'The foreground color for operator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_PACKAGE_FOREGROUND = registerColor('symbolIcon.packageForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.packageForeground', 'The foreground color for package symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_PROPERTY_FOREGROUND = registerColor('symbolIcon.propertyForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.propertyForeground', 'The foreground color for property symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_REFERENCE_FOREGROUND = registerColor('symbolIcon.referenceForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.referenceForeground', 'The foreground color for reference symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_SNIPPET_FOREGROUND = registerColor('symbolIcon.snippetForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.snippetForeground', 'The foreground color for snippet symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_STRING_FOREGROUND = registerColor('symbolIcon.stringForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.stringForeground', 'The foreground color for string symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_STRUCT_FOREGROUND = registerColor('symbolIcon.structForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.structForeground', 'The foreground color for struct symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_TEXT_FOREGROUND = registerColor('symbolIcon.textForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.textForeground', 'The foreground color for text symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_TYPEPARAMETER_FOREGROUND = registerColor('symbolIcon.typeParameterForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.typeParameterForeground', 'The foreground color for type parameter symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_UNIT_FOREGROUND = registerColor('symbolIcon.unitForeground', {\n dark: foreground,\n light: foreground,\n hc: foreground\n}, localize('symbolIcon.unitForeground', 'The foreground color for unit symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nexport const SYMBOL_ICON_VARIABLE_FOREGROUND = registerColor('symbolIcon.variableForeground', {\n dark: '#75BEFF',\n light: '#007ACC',\n hc: '#75BEFF'\n}, localize('symbolIcon.variableForeground', 'The foreground color for variable symbols. These symbols appear in the outline, breadcrumb, and suggest widget.'));\nregisterThemingParticipant((theme, collector) => {\n const symbolIconArrayColor = theme.getColor(SYMBOL_ICON_ARRAY_FOREGROUND);\n if (symbolIconArrayColor) {\n collector.addRule(`${Codicon.symbolArray.cssSelector} { color: ${symbolIconArrayColor}; }`);\n }\n const symbolIconBooleanColor = theme.getColor(SYMBOL_ICON_BOOLEAN_FOREGROUND);\n if (symbolIconBooleanColor) {\n collector.addRule(`${Codicon.symbolBoolean.cssSelector} { color: ${symbolIconBooleanColor}; }`);\n }\n const symbolIconClassColor = theme.getColor(SYMBOL_ICON_CLASS_FOREGROUND);\n if (symbolIconClassColor) {\n collector.addRule(`${Codicon.symbolClass.cssSelector} { color: ${symbolIconClassColor}; }`);\n }\n const symbolIconMethodColor = theme.getColor(SYMBOL_ICON_METHOD_FOREGROUND);\n if (symbolIconMethodColor) {\n collector.addRule(`${Codicon.symbolMethod.cssSelector} { color: ${symbolIconMethodColor}; }`);\n }\n const symbolIconColorColor = theme.getColor(SYMBOL_ICON_COLOR_FOREGROUND);\n if (symbolIconColorColor) {\n collector.addRule(`${Codicon.symbolColor.cssSelector} { color: ${symbolIconColorColor}; }`);\n }\n const symbolIconConstantColor = theme.getColor(SYMBOL_ICON_CONSTANT_FOREGROUND);\n if (symbolIconConstantColor) {\n collector.addRule(`${Codicon.symbolConstant.cssSelector} { color: ${symbolIconConstantColor}; }`);\n }\n const symbolIconConstructorColor = theme.getColor(SYMBOL_ICON_CONSTRUCTOR_FOREGROUND);\n if (symbolIconConstructorColor) {\n collector.addRule(`${Codicon.symbolConstructor.cssSelector} { color: ${symbolIconConstructorColor}; }`);\n }\n const symbolIconEnumeratorColor = theme.getColor(SYMBOL_ICON_ENUMERATOR_FOREGROUND);\n if (symbolIconEnumeratorColor) {\n collector.addRule(`\n\t\t\t${Codicon.symbolValue.cssSelector},${Codicon.symbolEnum.cssSelector} { color: ${symbolIconEnumeratorColor}; }`);\n }\n const symbolIconEnumeratorMemberColor = theme.getColor(SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND);\n if (symbolIconEnumeratorMemberColor) {\n collector.addRule(`${Codicon.symbolEnumMember.cssSelector} { color: ${symbolIconEnumeratorMemberColor}; }`);\n }\n const symbolIconEventColor = theme.getColor(SYMBOL_ICON_EVENT_FOREGROUND);\n if (symbolIconEventColor) {\n collector.addRule(`${Codicon.symbolEvent.cssSelector} { color: ${symbolIconEventColor}; }`);\n }\n const symbolIconFieldColor = theme.getColor(SYMBOL_ICON_FIELD_FOREGROUND);\n if (symbolIconFieldColor) {\n collector.addRule(`${Codicon.symbolField.cssSelector} { color: ${symbolIconFieldColor}; }`);\n }\n const symbolIconFileColor = theme.getColor(SYMBOL_ICON_FILE_FOREGROUND);\n if (symbolIconFileColor) {\n collector.addRule(`${Codicon.symbolFile.cssSelector} { color: ${symbolIconFileColor}; }`);\n }\n const symbolIconFolderColor = theme.getColor(SYMBOL_ICON_FOLDER_FOREGROUND);\n if (symbolIconFolderColor) {\n collector.addRule(`${Codicon.symbolFolder.cssSelector} { color: ${symbolIconFolderColor}; }`);\n }\n const symbolIconFunctionColor = theme.getColor(SYMBOL_ICON_FUNCTION_FOREGROUND);\n if (symbolIconFunctionColor) {\n collector.addRule(`${Codicon.symbolFunction.cssSelector} { color: ${symbolIconFunctionColor}; }`);\n }\n const symbolIconInterfaceColor = theme.getColor(SYMBOL_ICON_INTERFACE_FOREGROUND);\n if (symbolIconInterfaceColor) {\n collector.addRule(`${Codicon.symbolInterface.cssSelector} { color: ${symbolIconInterfaceColor}; }`);\n }\n const symbolIconKeyColor = theme.getColor(SYMBOL_ICON_KEY_FOREGROUND);\n if (symbolIconKeyColor) {\n collector.addRule(`${Codicon.symbolKey.cssSelector} { color: ${symbolIconKeyColor}; }`);\n }\n const symbolIconKeywordColor = theme.getColor(SYMBOL_ICON_KEYWORD_FOREGROUND);\n if (symbolIconKeywordColor) {\n collector.addRule(`${Codicon.symbolKeyword.cssSelector} { color: ${symbolIconKeywordColor}; }`);\n }\n const symbolIconModuleColor = theme.getColor(SYMBOL_ICON_MODULE_FOREGROUND);\n if (symbolIconModuleColor) {\n collector.addRule(`${Codicon.symbolModule.cssSelector} { color: ${symbolIconModuleColor}; }`);\n }\n const outlineNamespaceColor = theme.getColor(SYMBOL_ICON_NAMESPACE_FOREGROUND);\n if (outlineNamespaceColor) {\n collector.addRule(`${Codicon.symbolNamespace.cssSelector} { color: ${outlineNamespaceColor}; }`);\n }\n const symbolIconNullColor = theme.getColor(SYMBOL_ICON_NULL_FOREGROUND);\n if (symbolIconNullColor) {\n collector.addRule(`${Codicon.symbolNull.cssSelector} { color: ${symbolIconNullColor}; }`);\n }\n const symbolIconNumberColor = theme.getColor(SYMBOL_ICON_NUMBER_FOREGROUND);\n if (symbolIconNumberColor) {\n collector.addRule(`${Codicon.symbolNumber.cssSelector} { color: ${symbolIconNumberColor}; }`);\n }\n const symbolIconObjectColor = theme.getColor(SYMBOL_ICON_OBJECT_FOREGROUND);\n if (symbolIconObjectColor) {\n collector.addRule(`${Codicon.symbolObject.cssSelector} { color: ${symbolIconObjectColor}; }`);\n }\n const symbolIconOperatorColor = theme.getColor(SYMBOL_ICON_OPERATOR_FOREGROUND);\n if (symbolIconOperatorColor) {\n collector.addRule(`${Codicon.symbolOperator.cssSelector} { color: ${symbolIconOperatorColor}; }`);\n }\n const symbolIconPackageColor = theme.getColor(SYMBOL_ICON_PACKAGE_FOREGROUND);\n if (symbolIconPackageColor) {\n collector.addRule(`${Codicon.symbolPackage.cssSelector} { color: ${symbolIconPackageColor}; }`);\n }\n const symbolIconPropertyColor = theme.getColor(SYMBOL_ICON_PROPERTY_FOREGROUND);\n if (symbolIconPropertyColor) {\n collector.addRule(`${Codicon.symbolProperty.cssSelector} { color: ${symbolIconPropertyColor}; }`);\n }\n const symbolIconReferenceColor = theme.getColor(SYMBOL_ICON_REFERENCE_FOREGROUND);\n if (symbolIconReferenceColor) {\n collector.addRule(`${Codicon.symbolReference.cssSelector} { color: ${symbolIconReferenceColor}; }`);\n }\n const symbolIconSnippetColor = theme.getColor(SYMBOL_ICON_SNIPPET_FOREGROUND);\n if (symbolIconSnippetColor) {\n collector.addRule(`${Codicon.symbolSnippet.cssSelector} { color: ${symbolIconSnippetColor}; }`);\n }\n const symbolIconStringColor = theme.getColor(SYMBOL_ICON_STRING_FOREGROUND);\n if (symbolIconStringColor) {\n collector.addRule(`${Codicon.symbolString.cssSelector} { color: ${symbolIconStringColor}; }`);\n }\n const symbolIconStructColor = theme.getColor(SYMBOL_ICON_STRUCT_FOREGROUND);\n if (symbolIconStructColor) {\n collector.addRule(`${Codicon.symbolStruct.cssSelector} { color: ${symbolIconStructColor}; }`);\n }\n const symbolIconTextColor = theme.getColor(SYMBOL_ICON_TEXT_FOREGROUND);\n if (symbolIconTextColor) {\n collector.addRule(`${Codicon.symbolText.cssSelector} { color: ${symbolIconTextColor}; }`);\n }\n const symbolIconTypeParameterColor = theme.getColor(SYMBOL_ICON_TYPEPARAMETER_FOREGROUND);\n if (symbolIconTypeParameterColor) {\n collector.addRule(`${Codicon.symbolTypeParameter.cssSelector} { color: ${symbolIconTypeParameterColor}; }`);\n }\n const symbolIconUnitColor = theme.getColor(SYMBOL_ICON_UNIT_FOREGROUND);\n if (symbolIconUnitColor) {\n collector.addRule(`${Codicon.symbolUnit.cssSelector} { color: ${symbolIconUnitColor}; }`);\n }\n const symbolIconVariableColor = theme.getColor(SYMBOL_ICON_VARIABLE_FOREGROUND);\n if (symbolIconVariableColor) {\n collector.addRule(`${Codicon.symbolVariable.cssSelector} { color: ${symbolIconVariableColor}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { Event, Emitter } from '../../../base/common/event.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { Dimension } from '../../../base/browser/dom.js';\nimport { OrthogonalEdge, Sash } from '../../../base/browser/ui/sash/sash.js';\nexport class ResizableHTMLElement {\n constructor() {\n this._onDidWillResize = new Emitter();\n this.onDidWillResize = this._onDidWillResize.event;\n this._onDidResize = new Emitter();\n this.onDidResize = this._onDidResize.event;\n this._sashListener = new DisposableStore();\n this._size = new Dimension(0, 0);\n this._minSize = new Dimension(0, 0);\n this._maxSize = new Dimension(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER);\n this.domNode = document.createElement('div');\n this._eastSash = new Sash(this.domNode, { getVerticalSashLeft: () => this._size.width }, { orientation: 0 /* VERTICAL */ });\n this._westSash = new Sash(this.domNode, { getVerticalSashLeft: () => 0 }, { orientation: 0 /* VERTICAL */ });\n this._northSash = new Sash(this.domNode, { getHorizontalSashTop: () => 0 }, { orientation: 1 /* HORIZONTAL */, orthogonalEdge: OrthogonalEdge.North });\n this._southSash = new Sash(this.domNode, { getHorizontalSashTop: () => this._size.height }, { orientation: 1 /* HORIZONTAL */, orthogonalEdge: OrthogonalEdge.South });\n this._northSash.orthogonalStartSash = this._westSash;\n this._northSash.orthogonalEndSash = this._eastSash;\n this._southSash.orthogonalStartSash = this._westSash;\n this._southSash.orthogonalEndSash = this._eastSash;\n let currentSize;\n let deltaY = 0;\n let deltaX = 0;\n this._sashListener.add(Event.any(this._northSash.onDidStart, this._eastSash.onDidStart, this._southSash.onDidStart, this._westSash.onDidStart)(() => {\n if (currentSize === undefined) {\n this._onDidWillResize.fire();\n currentSize = this._size;\n deltaY = 0;\n deltaX = 0;\n }\n }));\n this._sashListener.add(Event.any(this._northSash.onDidEnd, this._eastSash.onDidEnd, this._southSash.onDidEnd, this._westSash.onDidEnd)(() => {\n if (currentSize !== undefined) {\n currentSize = undefined;\n deltaY = 0;\n deltaX = 0;\n this._onDidResize.fire({ dimension: this._size, done: true });\n }\n }));\n this._sashListener.add(this._eastSash.onDidChange(e => {\n if (currentSize) {\n deltaX = e.currentX - e.startX;\n this.layout(currentSize.height + deltaY, currentSize.width + deltaX);\n this._onDidResize.fire({ dimension: this._size, done: false, east: true });\n }\n }));\n this._sashListener.add(this._westSash.onDidChange(e => {\n if (currentSize) {\n deltaX = -(e.currentX - e.startX);\n this.layout(currentSize.height + deltaY, currentSize.width + deltaX);\n this._onDidResize.fire({ dimension: this._size, done: false, west: true });\n }\n }));\n this._sashListener.add(this._northSash.onDidChange(e => {\n if (currentSize) {\n deltaY = -(e.currentY - e.startY);\n this.layout(currentSize.height + deltaY, currentSize.width + deltaX);\n this._onDidResize.fire({ dimension: this._size, done: false, north: true });\n }\n }));\n this._sashListener.add(this._southSash.onDidChange(e => {\n if (currentSize) {\n deltaY = e.currentY - e.startY;\n this.layout(currentSize.height + deltaY, currentSize.width + deltaX);\n this._onDidResize.fire({ dimension: this._size, done: false, south: true });\n }\n }));\n this._sashListener.add(Event.any(this._eastSash.onDidReset, this._westSash.onDidReset)(e => {\n if (this._preferredSize) {\n this.layout(this._size.height, this._preferredSize.width);\n this._onDidResize.fire({ dimension: this._size, done: true });\n }\n }));\n this._sashListener.add(Event.any(this._northSash.onDidReset, this._southSash.onDidReset)(e => {\n if (this._preferredSize) {\n this.layout(this._preferredSize.height, this._size.width);\n this._onDidResize.fire({ dimension: this._size, done: true });\n }\n }));\n }\n dispose() {\n this._northSash.dispose();\n this._southSash.dispose();\n this._eastSash.dispose();\n this._westSash.dispose();\n this._sashListener.dispose();\n this.domNode.remove();\n }\n enableSashes(north, east, south, west) {\n this._northSash.state = north ? 3 /* Enabled */ : 0 /* Disabled */;\n this._eastSash.state = east ? 3 /* Enabled */ : 0 /* Disabled */;\n this._southSash.state = south ? 3 /* Enabled */ : 0 /* Disabled */;\n this._westSash.state = west ? 3 /* Enabled */ : 0 /* Disabled */;\n }\n layout(height = this.size.height, width = this.size.width) {\n const { height: minHeight, width: minWidth } = this._minSize;\n const { height: maxHeight, width: maxWidth } = this._maxSize;\n height = Math.max(minHeight, Math.min(maxHeight, height));\n width = Math.max(minWidth, Math.min(maxWidth, width));\n const newSize = new Dimension(width, height);\n if (!Dimension.equals(newSize, this._size)) {\n this.domNode.style.height = height + 'px';\n this.domNode.style.width = width + 'px';\n this._size = newSize;\n this._northSash.layout();\n this._eastSash.layout();\n this._southSash.layout();\n this._westSash.layout();\n }\n }\n clearSashHoverState() {\n this._eastSash.clearSashHoverState();\n this._westSash.clearSashHoverState();\n this._northSash.clearSashHoverState();\n this._southSash.clearSashHoverState();\n }\n get size() {\n return this._size;\n }\n set maxSize(value) {\n this._maxSize = value;\n }\n get maxSize() {\n return this._maxSize;\n }\n set minSize(value) {\n this._minSize = value;\n }\n get minSize() {\n return this._minSize;\n }\n set preferredSize(value) {\n this._preferredSize = value;\n }\n get preferredSize() {\n return this._preferredSize;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as nls from '../../../nls.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { DomScrollableElement } from '../../../base/browser/ui/scrollbar/scrollableElement.js';\nimport { MarkdownRenderer } from '../../browser/core/markdownRenderer.js';\nimport { MarkdownString } from '../../../base/common/htmlContent.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { ResizableHTMLElement } from './resizable.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nexport function canExpandCompletionItem(item) {\n return !!item && Boolean(item.completion.documentation || item.completion.detail && item.completion.detail !== item.completion.label);\n}\nlet SuggestDetailsWidget = class SuggestDetailsWidget {\n constructor(_editor, instaService) {\n this._editor = _editor;\n this._onDidClose = new Emitter();\n this.onDidClose = this._onDidClose.event;\n this._onDidChangeContents = new Emitter();\n this.onDidChangeContents = this._onDidChangeContents.event;\n this._disposables = new DisposableStore();\n this._renderDisposeable = new DisposableStore();\n this._borderWidth = 1;\n this._size = new dom.Dimension(330, 0);\n this.domNode = dom.$('.suggest-details');\n this.domNode.classList.add('no-docs');\n this._markdownRenderer = instaService.createInstance(MarkdownRenderer, { editor: _editor });\n this._body = dom.$('.body');\n this._scrollbar = new DomScrollableElement(this._body, {});\n dom.append(this.domNode, this._scrollbar.getDomNode());\n this._disposables.add(this._scrollbar);\n this._header = dom.append(this._body, dom.$('.header'));\n this._close = dom.append(this._header, dom.$('span' + Codicon.close.cssSelector));\n this._close.title = nls.localize('details.close', \"Close\");\n this._type = dom.append(this._header, dom.$('p.type'));\n this._docs = dom.append(this._body, dom.$('p.docs'));\n this._configureFont();\n this._disposables.add(this._editor.onDidChangeConfiguration(e => {\n if (e.hasChanged(40 /* fontInfo */)) {\n this._configureFont();\n }\n }));\n }\n dispose() {\n this._disposables.dispose();\n this._renderDisposeable.dispose();\n }\n _configureFont() {\n const options = this._editor.getOptions();\n const fontInfo = options.get(40 /* fontInfo */);\n const fontFamily = fontInfo.fontFamily;\n const fontSize = options.get(104 /* suggestFontSize */) || fontInfo.fontSize;\n const lineHeight = options.get(105 /* suggestLineHeight */) || fontInfo.lineHeight;\n const fontWeight = fontInfo.fontWeight;\n const fontSizePx = `${fontSize}px`;\n const lineHeightPx = `${lineHeight}px`;\n this.domNode.style.fontSize = fontSizePx;\n this.domNode.style.lineHeight = lineHeightPx;\n this.domNode.style.fontWeight = fontWeight;\n this.domNode.style.fontFeatureSettings = fontInfo.fontFeatureSettings;\n this._type.style.fontFamily = fontFamily;\n this._close.style.height = lineHeightPx;\n this._close.style.width = lineHeightPx;\n }\n getLayoutInfo() {\n const lineHeight = this._editor.getOption(105 /* suggestLineHeight */) || this._editor.getOption(40 /* fontInfo */).lineHeight;\n const borderWidth = this._borderWidth;\n const borderHeight = borderWidth * 2;\n return {\n lineHeight,\n borderWidth,\n borderHeight,\n verticalPadding: 22,\n horizontalPadding: 14\n };\n }\n renderLoading() {\n this._type.textContent = nls.localize('loading', \"Loading...\");\n this._docs.textContent = '';\n this.domNode.classList.remove('no-docs', 'no-type');\n this.layout(this.size.width, this.getLayoutInfo().lineHeight * 2);\n this._onDidChangeContents.fire(this);\n }\n renderItem(item, explainMode) {\n var _a, _b;\n this._renderDisposeable.clear();\n let { detail, documentation } = item.completion;\n if (explainMode) {\n let md = '';\n md += `score: ${item.score[0]}\\n`;\n md += `prefix: ${(_a = item.word) !== null && _a !== void 0 ? _a : '(no prefix)'}\\n`;\n md += `word: ${item.completion.filterText ? item.completion.filterText + ' (filterText)' : item.textLabel}\\n`;\n md += `distance: ${item.distance} (localityBonus-setting)\\n`;\n md += `index: ${item.idx}, based on ${item.completion.sortText && `sortText: \"${item.completion.sortText}\"` || 'label'}\\n`;\n md += `commit_chars: ${(_b = item.completion.commitCharacters) === null || _b === void 0 ? void 0 : _b.join('')}\\n`;\n documentation = new MarkdownString().appendCodeblock('empty', md);\n detail = `Provider: ${item.provider._debugDisplayName}`;\n }\n if (!explainMode && !canExpandCompletionItem(item)) {\n this.clearContents();\n return;\n }\n this.domNode.classList.remove('no-docs', 'no-type');\n // --- details\n if (detail) {\n const cappedDetail = detail.length > 100000 ? `${detail.substr(0, 100000)}…` : detail;\n this._type.textContent = cappedDetail;\n this._type.title = cappedDetail;\n dom.show(this._type);\n this._type.classList.toggle('auto-wrap', !/\\r?\\n^\\s+/gmi.test(cappedDetail));\n }\n else {\n dom.clearNode(this._type);\n this._type.title = '';\n dom.hide(this._type);\n this.domNode.classList.add('no-type');\n }\n // --- documentation\n dom.clearNode(this._docs);\n if (typeof documentation === 'string') {\n this._docs.classList.remove('markdown-docs');\n this._docs.textContent = documentation;\n }\n else if (documentation) {\n this._docs.classList.add('markdown-docs');\n dom.clearNode(this._docs);\n const renderedContents = this._markdownRenderer.render(documentation);\n this._docs.appendChild(renderedContents.element);\n this._renderDisposeable.add(renderedContents);\n this._renderDisposeable.add(this._markdownRenderer.onDidRenderAsync(() => {\n this.layout(this._size.width, this._type.clientHeight + this._docs.clientHeight);\n this._onDidChangeContents.fire(this);\n }));\n }\n this.domNode.style.userSelect = 'text';\n this.domNode.tabIndex = -1;\n this._close.onmousedown = e => {\n e.preventDefault();\n e.stopPropagation();\n };\n this._close.onclick = e => {\n e.preventDefault();\n e.stopPropagation();\n this._onDidClose.fire();\n };\n this._body.scrollTop = 0;\n this.layout(this._size.width, this._type.clientHeight + this._docs.clientHeight);\n this._onDidChangeContents.fire(this);\n }\n clearContents() {\n this.domNode.classList.add('no-docs');\n this._type.textContent = '';\n this._docs.textContent = '';\n }\n get size() {\n return this._size;\n }\n layout(width, height) {\n const newSize = new dom.Dimension(width, height);\n if (!dom.Dimension.equals(newSize, this._size)) {\n this._size = newSize;\n dom.size(this.domNode, width, height);\n }\n this._scrollbar.scanDomNode();\n }\n scrollDown(much = 8) {\n this._body.scrollTop += much;\n }\n scrollUp(much = 8) {\n this._body.scrollTop -= much;\n }\n scrollTop() {\n this._body.scrollTop = 0;\n }\n scrollBottom() {\n this._body.scrollTop = this._body.scrollHeight;\n }\n pageDown() {\n this.scrollDown(80);\n }\n pageUp() {\n this.scrollUp(80);\n }\n set borderWidth(width) {\n this._borderWidth = width;\n }\n get borderWidth() {\n return this._borderWidth;\n }\n};\nSuggestDetailsWidget = __decorate([\n __param(1, IInstantiationService)\n], SuggestDetailsWidget);\nexport { SuggestDetailsWidget };\nexport class SuggestDetailsOverlay {\n constructor(widget, _editor) {\n this.widget = widget;\n this._editor = _editor;\n this._disposables = new DisposableStore();\n this._added = false;\n this._resizable = new ResizableHTMLElement();\n this._resizable.domNode.classList.add('suggest-details-container');\n this._resizable.domNode.appendChild(widget.domNode);\n this._resizable.enableSashes(false, true, true, false);\n let topLeftNow;\n let sizeNow;\n let deltaTop = 0;\n let deltaLeft = 0;\n this._disposables.add(this._resizable.onDidWillResize(() => {\n topLeftNow = this._topLeft;\n sizeNow = this._resizable.size;\n }));\n this._disposables.add(this._resizable.onDidResize(e => {\n if (topLeftNow && sizeNow) {\n this.widget.layout(e.dimension.width, e.dimension.height);\n let updateTopLeft = false;\n if (e.west) {\n deltaLeft = sizeNow.width - e.dimension.width;\n updateTopLeft = true;\n }\n if (e.north) {\n deltaTop = sizeNow.height - e.dimension.height;\n updateTopLeft = true;\n }\n if (updateTopLeft) {\n this._applyTopLeft({\n top: topLeftNow.top + deltaTop,\n left: topLeftNow.left + deltaLeft,\n });\n }\n }\n if (e.done) {\n topLeftNow = undefined;\n sizeNow = undefined;\n deltaTop = 0;\n deltaLeft = 0;\n this._userSize = e.dimension;\n }\n }));\n this._disposables.add(this.widget.onDidChangeContents(() => {\n var _a;\n if (this._anchorBox) {\n this._placeAtAnchor(this._anchorBox, (_a = this._userSize) !== null && _a !== void 0 ? _a : this.widget.size);\n }\n }));\n }\n dispose() {\n this._disposables.dispose();\n this.hide();\n }\n getId() {\n return 'suggest.details';\n }\n getDomNode() {\n return this._resizable.domNode;\n }\n getPosition() {\n return null;\n }\n show() {\n if (!this._added) {\n this._editor.addOverlayWidget(this);\n this.getDomNode().style.position = 'fixed';\n this._added = true;\n }\n }\n hide(sessionEnded = false) {\n this._resizable.clearSashHoverState();\n if (this._added) {\n this._editor.removeOverlayWidget(this);\n this._added = false;\n this._anchorBox = undefined;\n this._topLeft = undefined;\n }\n if (sessionEnded) {\n this._userSize = undefined;\n this.widget.clearContents();\n }\n }\n placeAtAnchor(anchor) {\n var _a;\n const anchorBox = dom.getDomNodePagePosition(anchor);\n this._anchorBox = anchorBox;\n this._placeAtAnchor(this._anchorBox, (_a = this._userSize) !== null && _a !== void 0 ? _a : this.widget.size);\n }\n _placeAtAnchor(anchorBox, size) {\n const bodyBox = dom.getClientArea(document.body);\n const info = this.widget.getLayoutInfo();\n let maxSizeTop;\n let maxSizeBottom;\n let minSize = new dom.Dimension(220, 2 * info.lineHeight);\n let left = 0;\n let top = anchorBox.top;\n let bottom = anchorBox.top + anchorBox.height - info.borderHeight;\n let alignAtTop;\n let alignEast;\n // position: EAST, west, south\n let width = bodyBox.width - (anchorBox.left + anchorBox.width + info.borderWidth + info.horizontalPadding);\n left = -info.borderWidth + anchorBox.left + anchorBox.width;\n alignEast = true;\n maxSizeTop = new dom.Dimension(width, bodyBox.height - anchorBox.top - info.borderHeight - info.verticalPadding);\n maxSizeBottom = maxSizeTop.with(undefined, anchorBox.top + anchorBox.height - info.borderHeight - info.verticalPadding);\n // find a better place if the widget is wider than there is space available\n if (size.width > width) {\n // position: east, WEST, south\n if (anchorBox.left > width) {\n // pos = SuggestDetailsPosition.West;\n width = anchorBox.left - info.borderWidth - info.horizontalPadding;\n alignEast = false;\n left = Math.max(info.horizontalPadding, anchorBox.left - size.width - info.borderWidth);\n maxSizeTop = maxSizeTop.with(width);\n maxSizeBottom = maxSizeTop.with(undefined, maxSizeBottom.height);\n }\n // position: east, west, SOUTH\n if (anchorBox.width > width * 1.3 && bodyBox.height - (anchorBox.top + anchorBox.height) > anchorBox.height) {\n width = anchorBox.width;\n left = anchorBox.left;\n top = -info.borderWidth + anchorBox.top + anchorBox.height;\n maxSizeTop = new dom.Dimension(anchorBox.width - info.borderHeight, bodyBox.height - anchorBox.top - anchorBox.height - info.verticalPadding);\n maxSizeBottom = maxSizeTop.with(undefined, anchorBox.top - info.verticalPadding);\n minSize = minSize.with(maxSizeTop.width);\n }\n }\n // top/bottom placement\n let height = size.height;\n let maxHeight = Math.max(maxSizeTop.height, maxSizeBottom.height);\n if (height > maxHeight) {\n height = maxHeight;\n }\n let maxSize;\n if (height <= maxSizeTop.height) {\n alignAtTop = true;\n maxSize = maxSizeTop;\n }\n else {\n alignAtTop = false;\n maxSize = maxSizeBottom;\n }\n this._applyTopLeft({ left, top: alignAtTop ? top : bottom - height });\n this.getDomNode().style.position = 'fixed';\n this._resizable.enableSashes(!alignAtTop, alignEast, alignAtTop, !alignEast);\n this._resizable.minSize = minSize;\n this._resizable.maxSize = maxSize;\n this._resizable.layout(height, Math.min(maxSize.width, size.width));\n this.widget.layout(this._resizable.size.width, this._resizable.size.height);\n }\n _applyTopLeft(topLeft) {\n this._topLeft = topLeft;\n this.getDomNode().style.left = `${this._topLeft.left}px`;\n this.getDomNode().style.top = `${this._topLeft.top}px`;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as dom from '../../../base/browser/dom.js';\nimport { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { suggestWidgetStatusbarMenu } from './suggest.js';\nimport { localize } from '../../../nls.js';\nimport { MenuEntryActionViewItem } from '../../../platform/actions/browser/menuEntryActionViewItem.js';\nimport { IMenuService, MenuItemAction } from '../../../platform/actions/common/actions.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nclass StatusBarViewItem extends MenuEntryActionViewItem {\n updateLabel() {\n const kb = this._keybindingService.lookupKeybinding(this._action.id);\n if (!kb) {\n return super.updateLabel();\n }\n if (this.label) {\n this.label.textContent = localize('ddd', '{0} ({1})', this._action.label, StatusBarViewItem.symbolPrintEnter(kb));\n }\n }\n static symbolPrintEnter(kb) {\n var _a;\n return (_a = kb.getLabel()) === null || _a === void 0 ? void 0 : _a.replace(/\\benter\\b/gi, '\\u23CE');\n }\n}\nlet SuggestWidgetStatus = class SuggestWidgetStatus {\n constructor(container, instantiationService, _menuService, _contextKeyService) {\n this._menuService = _menuService;\n this._contextKeyService = _contextKeyService;\n this._menuDisposables = new DisposableStore();\n this.element = dom.append(container, dom.$('.suggest-status-bar'));\n const actionViewItemProvider = (action => {\n return action instanceof MenuItemAction ? instantiationService.createInstance(StatusBarViewItem, action) : undefined;\n });\n this._leftActions = new ActionBar(this.element, { actionViewItemProvider });\n this._rightActions = new ActionBar(this.element, { actionViewItemProvider });\n this._leftActions.domNode.classList.add('left');\n this._rightActions.domNode.classList.add('right');\n }\n dispose() {\n this._menuDisposables.dispose();\n this.element.remove();\n }\n show() {\n const menu = this._menuService.createMenu(suggestWidgetStatusbarMenu, this._contextKeyService);\n const renderMenu = () => {\n const left = [];\n const right = [];\n for (let [group, actions] of menu.getActions()) {\n if (group === 'left') {\n left.push(...actions);\n }\n else {\n right.push(...actions);\n }\n }\n this._leftActions.clear();\n this._leftActions.push(left);\n this._rightActions.clear();\n this._rightActions.push(right);\n };\n this._menuDisposables.add(menu.onDidChange(() => renderMenu()));\n this._menuDisposables.add(menu);\n }\n hide() {\n this._menuDisposables.clear();\n }\n};\nSuggestWidgetStatus = __decorate([\n __param(1, IInstantiationService),\n __param(2, IMenuService),\n __param(3, IContextKeyService)\n], SuggestWidgetStatus);\nexport { SuggestWidgetStatus };\n","//#endregion\n//#region Utilities\nexport var FileKind;\n(function (FileKind) {\n FileKind[FileKind[\"FILE\"] = 0] = \"FILE\";\n FileKind[FileKind[\"FOLDER\"] = 1] = \"FOLDER\";\n FileKind[FileKind[\"ROOT_FOLDER\"] = 2] = \"ROOT_FOLDER\";\n})(FileKind || (FileKind = {}));\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\nimport { Schemas } from '../../../base/common/network.js';\nimport { DataUri, basenameOrAuthority } from '../../../base/common/resources.js';\nimport { PLAINTEXT_MODE_ID } from '../modes/modesRegistry.js';\nimport { FileKind } from '../../../platform/files/common/files.js';\nexport function getIconClasses(modelService, modeService, resource, fileKind) {\n // we always set these base classes even if we do not have a path\n const classes = fileKind === FileKind.ROOT_FOLDER ? ['rootfolder-icon'] : fileKind === FileKind.FOLDER ? ['folder-icon'] : ['file-icon'];\n if (resource) {\n // Get the path and name of the resource. For data-URIs, we need to parse specially\n let name;\n if (resource.scheme === Schemas.data) {\n const metadata = DataUri.parseMetaData(resource);\n name = metadata.get(DataUri.META_DATA_LABEL);\n }\n else {\n name = cssEscape(basenameOrAuthority(resource).toLowerCase());\n }\n // Folders\n if (fileKind === FileKind.FOLDER) {\n classes.push(`${name}-name-folder-icon`);\n }\n // Files\n else {\n // Name & Extension(s)\n if (name) {\n classes.push(`${name}-name-file-icon`);\n // Avoid doing an explosive combination of extensions for very long filenames\n // (most file systems do not allow files > 255 length) with lots of `.` characters\n // https://github.com/microsoft/vscode/issues/116199\n if (name.length <= 255) {\n const dotSegments = name.split('.');\n for (let i = 1; i < dotSegments.length; i++) {\n classes.push(`${dotSegments.slice(i).join('.')}-ext-file-icon`); // add each combination of all found extensions if more than one\n }\n }\n classes.push(`ext-file-icon`); // extra segment to increase file-ext score\n }\n // Detected Mode\n const detectedModeId = detectModeId(modelService, modeService, resource);\n if (detectedModeId) {\n classes.push(`${cssEscape(detectedModeId)}-lang-file-icon`);\n }\n }\n }\n return classes;\n}\nexport function detectModeId(modelService, modeService, resource) {\n if (!resource) {\n return null; // we need a resource at least\n }\n let modeId = null;\n // Data URI: check for encoded metadata\n if (resource.scheme === Schemas.data) {\n const metadata = DataUri.parseMetaData(resource);\n const mime = metadata.get(DataUri.META_DATA_MIME);\n if (mime) {\n modeId = modeService.getModeId(mime);\n }\n }\n // Any other URI: check for model if existing\n else {\n const model = modelService.getModel(resource);\n if (model) {\n modeId = model.getModeId();\n }\n }\n // only take if the mode is specific (aka no just plain text)\n if (modeId && modeId !== PLAINTEXT_MODE_ID) {\n return modeId;\n }\n // otherwise fallback to path based detection\n return modeService.getModeIdByFilepathOrFirstLine(resource);\n}\nexport function cssEscape(str) {\n return str.replace(/[\\11\\12\\14\\15\\40]/g, '/'); // HTML class names can not contain certain whitespace characters, use / instead, which doesn't exist in file names.\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar _a;\nimport * as nls from '../../../nls.js';\nimport { createMatches } from '../../../base/common/filters.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { append, $, hide, show } from '../../../base/browser/dom.js';\nimport { IThemeService, ThemeIcon } from '../../../platform/theme/common/themeService.js';\nimport { IModeService } from '../../common/services/modeService.js';\nimport { completionKindToCssClass } from '../../common/modes.js';\nimport { IconLabel } from '../../../base/browser/ui/iconLabel/iconLabel.js';\nimport { getIconClasses } from '../../common/services/getIconClasses.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { FileKind } from '../../../platform/files/common/files.js';\nimport { flatten } from '../../../base/common/arrays.js';\nimport { canExpandCompletionItem } from './suggestWidgetDetails.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { registerIcon } from '../../../platform/theme/common/iconRegistry.js';\nexport function getAriaId(index) {\n return `suggest-aria-id:${index}`;\n}\nexport const suggestMoreInfoIcon = registerIcon('suggest-more-info', Codicon.chevronRight, nls.localize('suggestMoreInfoIcon', 'Icon for more information in the suggest widget.'));\nconst _completionItemColor = new (_a = class ColorExtractor {\n extract(item, out) {\n if (item.textLabel.match(ColorExtractor._regexStrict)) {\n out[0] = item.textLabel;\n return true;\n }\n if (item.completion.detail && item.completion.detail.match(ColorExtractor._regexStrict)) {\n out[0] = item.completion.detail;\n return true;\n }\n if (typeof item.completion.documentation === 'string') {\n const match = ColorExtractor._regexRelaxed.exec(item.completion.documentation);\n if (match && (match.index === 0 || match.index + match[0].length === item.completion.documentation.length)) {\n out[0] = match[0];\n return true;\n }\n }\n return false;\n }\n },\n _a._regexRelaxed = /(#([\\da-fA-F]{3}){1,2}|(rgb|hsl)a\\(\\s*(\\d{1,3}%?\\s*,\\s*){3}(1|0?\\.\\d+)\\)|(rgb|hsl)\\(\\s*\\d{1,3}%?(\\s*,\\s*\\d{1,3}%?){2}\\s*\\))/,\n _a._regexStrict = new RegExp(`^${_a._regexRelaxed.source}$`, 'i'),\n _a);\nlet ItemRenderer = class ItemRenderer {\n constructor(_editor, _modelService, _modeService, _themeService) {\n this._editor = _editor;\n this._modelService = _modelService;\n this._modeService = _modeService;\n this._themeService = _themeService;\n this._onDidToggleDetails = new Emitter();\n this.onDidToggleDetails = this._onDidToggleDetails.event;\n this.templateId = 'suggestion';\n }\n dispose() {\n this._onDidToggleDetails.dispose();\n }\n renderTemplate(container) {\n const data = Object.create(null);\n data.disposables = new DisposableStore();\n data.root = container;\n data.root.classList.add('show-file-icons');\n data.icon = append(container, $('.icon'));\n data.colorspan = append(data.icon, $('span.colorspan'));\n const text = append(container, $('.contents'));\n const main = append(text, $('.main'));\n data.iconContainer = append(main, $('.icon-label.codicon'));\n data.left = append(main, $('span.left'));\n data.right = append(main, $('span.right'));\n data.iconLabel = new IconLabel(data.left, { supportHighlights: true, supportIcons: true });\n data.disposables.add(data.iconLabel);\n data.parametersLabel = append(data.left, $('span.signature-label'));\n data.qualifierLabel = append(data.left, $('span.qualifier-label'));\n data.detailsLabel = append(data.right, $('span.details-label'));\n data.readMore = append(data.right, $('span.readMore' + ThemeIcon.asCSSSelector(suggestMoreInfoIcon)));\n data.readMore.title = nls.localize('readMore', \"Read More\");\n const configureFont = () => {\n const options = this._editor.getOptions();\n const fontInfo = options.get(40 /* fontInfo */);\n const fontFamily = fontInfo.fontFamily;\n const fontFeatureSettings = fontInfo.fontFeatureSettings;\n const fontSize = options.get(104 /* suggestFontSize */) || fontInfo.fontSize;\n const lineHeight = options.get(105 /* suggestLineHeight */) || fontInfo.lineHeight;\n const fontWeight = fontInfo.fontWeight;\n const fontSizePx = `${fontSize}px`;\n const lineHeightPx = `${lineHeight}px`;\n data.root.style.fontSize = fontSizePx;\n data.root.style.fontWeight = fontWeight;\n main.style.fontFamily = fontFamily;\n main.style.fontFeatureSettings = fontFeatureSettings;\n main.style.lineHeight = lineHeightPx;\n data.icon.style.height = lineHeightPx;\n data.icon.style.width = lineHeightPx;\n data.readMore.style.height = lineHeightPx;\n data.readMore.style.width = lineHeightPx;\n };\n configureFont();\n data.disposables.add(this._editor.onDidChangeConfiguration(e => {\n if (e.hasChanged(40 /* fontInfo */) || e.hasChanged(104 /* suggestFontSize */) || e.hasChanged(105 /* suggestLineHeight */)) {\n configureFont();\n }\n }));\n return data;\n }\n renderElement(element, index, data) {\n var _b, _c, _d;\n const { completion } = element;\n data.root.id = getAriaId(index);\n data.colorspan.style.backgroundColor = '';\n const labelOptions = {\n labelEscapeNewLines: true,\n matches: createMatches(element.score)\n };\n let color = [];\n if (completion.kind === 19 /* Color */ && _completionItemColor.extract(element, color)) {\n // special logic for 'color' completion items\n data.icon.className = 'icon customcolor';\n data.iconContainer.className = 'icon hide';\n data.colorspan.style.backgroundColor = color[0];\n }\n else if (completion.kind === 20 /* File */ && this._themeService.getFileIconTheme().hasFileIcons) {\n // special logic for 'file' completion items\n data.icon.className = 'icon hide';\n data.iconContainer.className = 'icon hide';\n const labelClasses = getIconClasses(this._modelService, this._modeService, URI.from({ scheme: 'fake', path: element.textLabel }), FileKind.FILE);\n const detailClasses = getIconClasses(this._modelService, this._modeService, URI.from({ scheme: 'fake', path: completion.detail }), FileKind.FILE);\n labelOptions.extraClasses = labelClasses.length > detailClasses.length ? labelClasses : detailClasses;\n }\n else if (completion.kind === 23 /* Folder */ && this._themeService.getFileIconTheme().hasFolderIcons) {\n // special logic for 'folder' completion items\n data.icon.className = 'icon hide';\n data.iconContainer.className = 'icon hide';\n labelOptions.extraClasses = flatten([\n getIconClasses(this._modelService, this._modeService, URI.from({ scheme: 'fake', path: element.textLabel }), FileKind.FOLDER),\n getIconClasses(this._modelService, this._modeService, URI.from({ scheme: 'fake', path: completion.detail }), FileKind.FOLDER)\n ]);\n }\n else {\n // normal icon\n data.icon.className = 'icon hide';\n data.iconContainer.className = '';\n data.iconContainer.classList.add('suggest-icon', ...completionKindToCssClass(completion.kind).split(' '));\n }\n if (completion.tags && completion.tags.indexOf(1 /* Deprecated */) >= 0) {\n labelOptions.extraClasses = (labelOptions.extraClasses || []).concat(['deprecated']);\n labelOptions.matches = [];\n }\n data.iconLabel.setLabel(element.textLabel, undefined, labelOptions);\n if (typeof completion.label === 'string') {\n data.parametersLabel.textContent = '';\n data.qualifierLabel.textContent = '';\n data.detailsLabel.textContent = (completion.detail || '').replace(/\\n.*$/m, '');\n data.root.classList.add('string-label');\n data.root.title = '';\n }\n else {\n data.parametersLabel.textContent = (completion.label.parameters || '').replace(/\\n.*$/m, '');\n data.qualifierLabel.textContent = (completion.label.qualifier || '').replace(/\\n.*$/m, '');\n data.detailsLabel.textContent = (completion.label.type || '').replace(/\\n.*$/m, '');\n data.root.classList.remove('string-label');\n data.root.title = `${element.textLabel}${(_b = completion.label.parameters) !== null && _b !== void 0 ? _b : ''} ${(_c = completion.label.qualifier) !== null && _c !== void 0 ? _c : ''} ${(_d = completion.label.type) !== null && _d !== void 0 ? _d : ''}`;\n }\n if (this._editor.getOption(103 /* suggest */).showInlineDetails) {\n show(data.detailsLabel);\n }\n else {\n hide(data.detailsLabel);\n }\n if (canExpandCompletionItem(element)) {\n data.right.classList.add('can-expand-details');\n show(data.readMore);\n data.readMore.onmousedown = e => {\n e.stopPropagation();\n e.preventDefault();\n };\n data.readMore.onclick = e => {\n e.stopPropagation();\n e.preventDefault();\n this._onDidToggleDetails.fire();\n };\n }\n else {\n data.right.classList.remove('can-expand-details');\n hide(data.readMore);\n data.readMore.onmousedown = null;\n data.readMore.onclick = null;\n }\n }\n disposeTemplate(templateData) {\n templateData.disposables.dispose();\n }\n};\nItemRenderer = __decorate([\n __param(1, IModelService),\n __param(2, IModeService),\n __param(3, IThemeService)\n], ItemRenderer);\nexport { ItemRenderer };\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport './media/suggest.css';\nimport '../../../base/browser/ui/codicons/codiconStyles.js'; // The codicon symbol styles are defined here and must be loaded\nimport '../symbolIcons/symbolIcons.js'; // The codicon symbol colors are defined here and must be loaded to get colors\nimport * as nls from '../../../nls.js';\nimport * as strings from '../../../base/common/strings.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { List } from '../../../base/browser/ui/list/listWidget.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { Context as SuggestContext } from './suggest.js';\nimport { attachListStyler } from '../../../platform/theme/common/styler.js';\nimport { IThemeService, registerThemingParticipant } from '../../../platform/theme/common/themeService.js';\nimport { registerColor, editorWidgetBackground, quickInputListFocusBackground, activeContrastBorder, listHighlightForeground, editorForeground, editorWidgetBorder, focusBorder, textLinkForeground, textCodeBlockBackground } from '../../../platform/theme/common/colorRegistry.js';\nimport { IStorageService } from '../../../platform/storage/common/storage.js';\nimport { TimeoutTimer, createCancelablePromise, disposableTimeout } from '../../../base/common/async.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { SuggestDetailsWidget, canExpandCompletionItem, SuggestDetailsOverlay } from './suggestWidgetDetails.js';\nimport { SuggestWidgetStatus } from './suggestWidgetStatus.js';\nimport { getAriaId, ItemRenderer } from './suggestWidgetRenderer.js';\nimport { ResizableHTMLElement } from './resizable.js';\nimport { EmbeddedCodeEditorWidget } from '../../browser/widget/embeddedCodeEditorWidget.js';\nimport { clamp } from '../../../base/common/numbers.js';\n/**\n * Suggest widget colors\n */\nexport const editorSuggestWidgetBackground = registerColor('editorSuggestWidget.background', { dark: editorWidgetBackground, light: editorWidgetBackground, hc: editorWidgetBackground }, nls.localize('editorSuggestWidgetBackground', 'Background color of the suggest widget.'));\nexport const editorSuggestWidgetBorder = registerColor('editorSuggestWidget.border', { dark: editorWidgetBorder, light: editorWidgetBorder, hc: editorWidgetBorder }, nls.localize('editorSuggestWidgetBorder', 'Border color of the suggest widget.'));\nexport const editorSuggestWidgetForeground = registerColor('editorSuggestWidget.foreground', { dark: editorForeground, light: editorForeground, hc: editorForeground }, nls.localize('editorSuggestWidgetForeground', 'Foreground color of the suggest widget.'));\nexport const editorSuggestWidgetSelectedBackground = registerColor('editorSuggestWidget.selectedBackground', { dark: quickInputListFocusBackground, light: quickInputListFocusBackground, hc: quickInputListFocusBackground }, nls.localize('editorSuggestWidgetSelectedBackground', 'Background color of the selected entry in the suggest widget.'));\nexport const editorSuggestWidgetHighlightForeground = registerColor('editorSuggestWidget.highlightForeground', { dark: listHighlightForeground, light: listHighlightForeground, hc: listHighlightForeground }, nls.localize('editorSuggestWidgetHighlightForeground', 'Color of the match highlights in the suggest widget.'));\nclass PersistedWidgetSize {\n constructor(_service, editor) {\n this._service = _service;\n this._key = `suggestWidget.size/${editor.getEditorType()}/${editor instanceof EmbeddedCodeEditorWidget}`;\n }\n restore() {\n var _a;\n const raw = (_a = this._service.get(this._key, 0 /* GLOBAL */)) !== null && _a !== void 0 ? _a : '';\n try {\n const obj = JSON.parse(raw);\n if (dom.Dimension.is(obj)) {\n return dom.Dimension.lift(obj);\n }\n }\n catch (_b) {\n // ignore\n }\n return undefined;\n }\n store(size) {\n this._service.store(this._key, JSON.stringify(size), 0 /* GLOBAL */, 1 /* MACHINE */);\n }\n reset() {\n this._service.remove(this._key, 0 /* GLOBAL */);\n }\n}\nlet SuggestWidget = class SuggestWidget {\n constructor(editor, _storageService, _contextKeyService, _themeService, instantiationService) {\n this.editor = editor;\n this._storageService = _storageService;\n this._state = 0 /* Hidden */;\n this._isAuto = false;\n this._ignoreFocusEvents = false;\n this._explainMode = false;\n this._showTimeout = new TimeoutTimer();\n this._disposables = new DisposableStore();\n this._onDidSelect = new Emitter();\n this._onDidFocus = new Emitter();\n this._onDidHide = new Emitter();\n this._onDidShow = new Emitter();\n this.onDidSelect = this._onDidSelect.event;\n this.onDidFocus = this._onDidFocus.event;\n this.onDidHide = this._onDidHide.event;\n this.onDidShow = this._onDidShow.event;\n this._onDetailsKeydown = new Emitter();\n this.onDetailsKeyDown = this._onDetailsKeydown.event;\n this.element = new ResizableHTMLElement();\n this.element.domNode.classList.add('editor-widget', 'suggest-widget');\n this._contentWidget = new SuggestContentWidget(this, editor);\n this._persistedSize = new PersistedWidgetSize(_storageService, editor);\n class ResizeState {\n constructor(persistedSize, currentSize, persistHeight = false, persistWidth = false) {\n this.persistedSize = persistedSize;\n this.currentSize = currentSize;\n this.persistHeight = persistHeight;\n this.persistWidth = persistWidth;\n }\n }\n let state;\n this._disposables.add(this.element.onDidWillResize(() => {\n this._contentWidget.lockPreference();\n state = new ResizeState(this._persistedSize.restore(), this.element.size);\n }));\n this._disposables.add(this.element.onDidResize(e => {\n var _a, _b, _c, _d;\n this._resize(e.dimension.width, e.dimension.height);\n if (state) {\n state.persistHeight = state.persistHeight || !!e.north || !!e.south;\n state.persistWidth = state.persistWidth || !!e.east || !!e.west;\n }\n if (!e.done) {\n return;\n }\n if (state) {\n // only store width or height value that have changed and also\n // only store changes that are above a certain threshold\n const { itemHeight, defaultSize } = this.getLayoutInfo();\n const threshold = Math.round(itemHeight / 2);\n let { width, height } = this.element.size;\n if (!state.persistHeight || Math.abs(state.currentSize.height - height) <= threshold) {\n height = (_b = (_a = state.persistedSize) === null || _a === void 0 ? void 0 : _a.height) !== null && _b !== void 0 ? _b : defaultSize.height;\n }\n if (!state.persistWidth || Math.abs(state.currentSize.width - width) <= threshold) {\n width = (_d = (_c = state.persistedSize) === null || _c === void 0 ? void 0 : _c.width) !== null && _d !== void 0 ? _d : defaultSize.width;\n }\n this._persistedSize.store(new dom.Dimension(width, height));\n }\n // reset working state\n this._contentWidget.unlockPreference();\n state = undefined;\n }));\n this._messageElement = dom.append(this.element.domNode, dom.$('.message'));\n this._listElement = dom.append(this.element.domNode, dom.$('.tree'));\n const details = instantiationService.createInstance(SuggestDetailsWidget, this.editor);\n details.onDidClose(this.toggleDetails, this, this._disposables);\n this._details = new SuggestDetailsOverlay(details, this.editor);\n const applyIconStyle = () => this.element.domNode.classList.toggle('no-icons', !this.editor.getOption(103 /* suggest */).showIcons);\n applyIconStyle();\n const renderer = instantiationService.createInstance(ItemRenderer, this.editor);\n this._disposables.add(renderer);\n this._disposables.add(renderer.onDidToggleDetails(() => this.toggleDetails()));\n this._list = new List('SuggestWidget', this._listElement, {\n getHeight: (_element) => this.getLayoutInfo().itemHeight,\n getTemplateId: (_element) => 'suggestion'\n }, [renderer], {\n alwaysConsumeMouseWheel: true,\n useShadows: false,\n mouseSupport: false,\n accessibilityProvider: {\n getRole: () => 'option',\n getAriaLabel: (item) => {\n if (item.isResolved && this._isDetailsVisible()) {\n const { documentation, detail } = item.completion;\n const docs = strings.format('{0}{1}', detail || '', documentation ? (typeof documentation === 'string' ? documentation : documentation.value) : '');\n return nls.localize('ariaCurrenttSuggestionReadDetails', \"{0}, docs: {1}\", item.textLabel, docs);\n }\n else {\n return item.textLabel;\n }\n },\n getWidgetAriaLabel: () => nls.localize('suggest', \"Suggest\"),\n getWidgetRole: () => 'listbox'\n }\n });\n this._status = instantiationService.createInstance(SuggestWidgetStatus, this.element.domNode);\n const applyStatusBarStyle = () => this.element.domNode.classList.toggle('with-status-bar', this.editor.getOption(103 /* suggest */).showStatusBar);\n applyStatusBarStyle();\n this._disposables.add(attachListStyler(this._list, _themeService, {\n listInactiveFocusBackground: editorSuggestWidgetSelectedBackground,\n listInactiveFocusOutline: activeContrastBorder\n }));\n this._disposables.add(_themeService.onDidColorThemeChange(t => this._onThemeChange(t)));\n this._onThemeChange(_themeService.getColorTheme());\n this._disposables.add(this._list.onMouseDown(e => this._onListMouseDownOrTap(e)));\n this._disposables.add(this._list.onTap(e => this._onListMouseDownOrTap(e)));\n this._disposables.add(this._list.onDidChangeSelection(e => this._onListSelection(e)));\n this._disposables.add(this._list.onDidChangeFocus(e => this._onListFocus(e)));\n this._disposables.add(this.editor.onDidChangeCursorSelection(() => this._onCursorSelectionChanged()));\n this._disposables.add(this.editor.onDidChangeConfiguration(e => {\n if (e.hasChanged(103 /* suggest */)) {\n applyStatusBarStyle();\n applyIconStyle();\n }\n }));\n this._ctxSuggestWidgetVisible = SuggestContext.Visible.bindTo(_contextKeyService);\n this._ctxSuggestWidgetDetailsVisible = SuggestContext.DetailsVisible.bindTo(_contextKeyService);\n this._ctxSuggestWidgetMultipleSuggestions = SuggestContext.MultipleSuggestions.bindTo(_contextKeyService);\n this._disposables.add(dom.addStandardDisposableListener(this._details.widget.domNode, 'keydown', e => {\n this._onDetailsKeydown.fire(e);\n }));\n this._disposables.add(this.editor.onMouseDown((e) => this._onEditorMouseDown(e)));\n }\n dispose() {\n var _a;\n this._details.widget.dispose();\n this._details.dispose();\n this._list.dispose();\n this._status.dispose();\n this._disposables.dispose();\n (_a = this._loadingTimeout) === null || _a === void 0 ? void 0 : _a.dispose();\n this._showTimeout.dispose();\n this._contentWidget.dispose();\n this.element.dispose();\n }\n _onEditorMouseDown(mouseEvent) {\n if (this._details.widget.domNode.contains(mouseEvent.target.element)) {\n // Clicking inside details\n this._details.widget.domNode.focus();\n }\n else {\n // Clicking outside details and inside suggest\n if (this.element.domNode.contains(mouseEvent.target.element)) {\n this.editor.focus();\n }\n }\n }\n _onCursorSelectionChanged() {\n if (this._state !== 0 /* Hidden */) {\n this._contentWidget.layout();\n }\n }\n _onListMouseDownOrTap(e) {\n if (typeof e.element === 'undefined' || typeof e.index === 'undefined') {\n return;\n }\n // prevent stealing browser focus from the editor\n e.browserEvent.preventDefault();\n e.browserEvent.stopPropagation();\n this._select(e.element, e.index);\n }\n _onListSelection(e) {\n if (e.elements.length) {\n this._select(e.elements[0], e.indexes[0]);\n }\n }\n _select(item, index) {\n const completionModel = this._completionModel;\n if (completionModel) {\n this._onDidSelect.fire({ item, index, model: completionModel });\n this.editor.focus();\n }\n }\n _onThemeChange(theme) {\n const backgroundColor = theme.getColor(editorSuggestWidgetBackground);\n if (backgroundColor) {\n this.element.domNode.style.backgroundColor = backgroundColor.toString();\n this._messageElement.style.backgroundColor = backgroundColor.toString();\n this._details.widget.domNode.style.backgroundColor = backgroundColor.toString();\n }\n const borderColor = theme.getColor(editorSuggestWidgetBorder);\n if (borderColor) {\n this.element.domNode.style.borderColor = borderColor.toString();\n this._messageElement.style.borderColor = borderColor.toString();\n this._status.element.style.borderTopColor = borderColor.toString();\n this._details.widget.domNode.style.borderColor = borderColor.toString();\n this._detailsBorderColor = borderColor.toString();\n }\n const focusBorderColor = theme.getColor(focusBorder);\n if (focusBorderColor) {\n this._detailsFocusBorderColor = focusBorderColor.toString();\n }\n this._details.widget.borderWidth = theme.type === 'hc' ? 2 : 1;\n }\n _onListFocus(e) {\n var _a;\n if (this._ignoreFocusEvents) {\n return;\n }\n if (!e.elements.length) {\n if (this._currentSuggestionDetails) {\n this._currentSuggestionDetails.cancel();\n this._currentSuggestionDetails = undefined;\n this._focusedItem = undefined;\n }\n this.editor.setAriaOptions({ activeDescendant: undefined });\n return;\n }\n if (!this._completionModel) {\n return;\n }\n const item = e.elements[0];\n const index = e.indexes[0];\n if (item !== this._focusedItem) {\n (_a = this._currentSuggestionDetails) === null || _a === void 0 ? void 0 : _a.cancel();\n this._currentSuggestionDetails = undefined;\n this._focusedItem = item;\n this._list.reveal(index);\n this._currentSuggestionDetails = createCancelablePromise((token) => __awaiter(this, void 0, void 0, function* () {\n const loading = disposableTimeout(() => {\n if (this._isDetailsVisible()) {\n this.showDetails(true);\n }\n }, 250);\n token.onCancellationRequested(() => loading.dispose());\n const result = yield item.resolve(token);\n loading.dispose();\n return result;\n }));\n this._currentSuggestionDetails.then(() => {\n if (index >= this._list.length || item !== this._list.element(index)) {\n return;\n }\n // item can have extra information, so re-render\n this._ignoreFocusEvents = true;\n this._list.splice(index, 1, [item]);\n this._list.setFocus([index]);\n this._ignoreFocusEvents = false;\n if (this._isDetailsVisible()) {\n this.showDetails(false);\n }\n else {\n this.element.domNode.classList.remove('docs-side');\n }\n this.editor.setAriaOptions({ activeDescendant: getAriaId(index) });\n }).catch(onUnexpectedError);\n }\n // emit an event\n this._onDidFocus.fire({ item, index, model: this._completionModel });\n }\n _setState(state) {\n if (this._state === state) {\n return;\n }\n this._state = state;\n this.element.domNode.classList.toggle('frozen', state === 4 /* Frozen */);\n this.element.domNode.classList.remove('message');\n switch (state) {\n case 0 /* Hidden */:\n dom.hide(this._messageElement, this._listElement, this._status.element);\n this._details.hide(true);\n this._status.hide();\n this._contentWidget.hide();\n this._ctxSuggestWidgetVisible.reset();\n this._ctxSuggestWidgetMultipleSuggestions.reset();\n this._showTimeout.cancel();\n this.element.domNode.classList.remove('visible');\n this._list.splice(0, this._list.length);\n this._focusedItem = undefined;\n this._cappedHeight = undefined;\n this._explainMode = false;\n break;\n case 1 /* Loading */:\n this.element.domNode.classList.add('message');\n this._messageElement.textContent = SuggestWidget.LOADING_MESSAGE;\n dom.hide(this._listElement, this._status.element);\n dom.show(this._messageElement);\n this._details.hide();\n this._show();\n this._focusedItem = undefined;\n break;\n case 2 /* Empty */:\n this.element.domNode.classList.add('message');\n this._messageElement.textContent = SuggestWidget.NO_SUGGESTIONS_MESSAGE;\n dom.hide(this._listElement, this._status.element);\n dom.show(this._messageElement);\n this._details.hide();\n this._show();\n this._focusedItem = undefined;\n break;\n case 3 /* Open */:\n dom.hide(this._messageElement);\n dom.show(this._listElement, this._status.element);\n this._show();\n break;\n case 4 /* Frozen */:\n dom.hide(this._messageElement);\n dom.show(this._listElement, this._status.element);\n this._show();\n break;\n case 5 /* Details */:\n dom.hide(this._messageElement);\n dom.show(this._listElement, this._status.element);\n this._details.show();\n this._show();\n break;\n }\n }\n _show() {\n this._status.show();\n this._contentWidget.show();\n this._layout(this._persistedSize.restore());\n this._ctxSuggestWidgetVisible.set(true);\n this._showTimeout.cancelAndSet(() => {\n this.element.domNode.classList.add('visible');\n this._onDidShow.fire(this);\n }, 100);\n }\n showTriggered(auto, delay) {\n if (this._state !== 0 /* Hidden */) {\n return;\n }\n this._contentWidget.setPosition(this.editor.getPosition());\n this._isAuto = !!auto;\n if (!this._isAuto) {\n this._loadingTimeout = disposableTimeout(() => this._setState(1 /* Loading */), delay);\n }\n }\n showSuggestions(completionModel, selectionIndex, isFrozen, isAuto) {\n var _a, _b;\n this._contentWidget.setPosition(this.editor.getPosition());\n (_a = this._loadingTimeout) === null || _a === void 0 ? void 0 : _a.dispose();\n (_b = this._currentSuggestionDetails) === null || _b === void 0 ? void 0 : _b.cancel();\n this._currentSuggestionDetails = undefined;\n if (this._completionModel !== completionModel) {\n this._completionModel = completionModel;\n }\n if (isFrozen && this._state !== 2 /* Empty */ && this._state !== 0 /* Hidden */) {\n this._setState(4 /* Frozen */);\n return;\n }\n const visibleCount = this._completionModel.items.length;\n const isEmpty = visibleCount === 0;\n this._ctxSuggestWidgetMultipleSuggestions.set(visibleCount > 1);\n if (isEmpty) {\n this._setState(isAuto ? 0 /* Hidden */ : 2 /* Empty */);\n this._completionModel = undefined;\n return;\n }\n this._focusedItem = undefined;\n this._list.splice(0, this._list.length, this._completionModel.items);\n this._setState(isFrozen ? 4 /* Frozen */ : 3 /* Open */);\n this._list.reveal(selectionIndex, 0);\n this._list.setFocus([selectionIndex]);\n this._layout(this.element.size);\n // Reset focus border\n if (this._detailsBorderColor) {\n this._details.widget.domNode.style.borderColor = this._detailsBorderColor;\n }\n }\n selectNextPage() {\n switch (this._state) {\n case 0 /* Hidden */:\n return false;\n case 5 /* Details */:\n this._details.widget.pageDown();\n return true;\n case 1 /* Loading */:\n return !this._isAuto;\n default:\n this._list.focusNextPage();\n return true;\n }\n }\n selectNext() {\n switch (this._state) {\n case 0 /* Hidden */:\n return false;\n case 1 /* Loading */:\n return !this._isAuto;\n default:\n this._list.focusNext(1, true);\n return true;\n }\n }\n selectLast() {\n switch (this._state) {\n case 0 /* Hidden */:\n return false;\n case 5 /* Details */:\n this._details.widget.scrollBottom();\n return true;\n case 1 /* Loading */:\n return !this._isAuto;\n default:\n this._list.focusLast();\n return true;\n }\n }\n selectPreviousPage() {\n switch (this._state) {\n case 0 /* Hidden */:\n return false;\n case 5 /* Details */:\n this._details.widget.pageUp();\n return true;\n case 1 /* Loading */:\n return !this._isAuto;\n default:\n this._list.focusPreviousPage();\n return true;\n }\n }\n selectPrevious() {\n switch (this._state) {\n case 0 /* Hidden */:\n return false;\n case 1 /* Loading */:\n return !this._isAuto;\n default:\n this._list.focusPrevious(1, true);\n return false;\n }\n }\n selectFirst() {\n switch (this._state) {\n case 0 /* Hidden */:\n return false;\n case 5 /* Details */:\n this._details.widget.scrollTop();\n return true;\n case 1 /* Loading */:\n return !this._isAuto;\n default:\n this._list.focusFirst();\n return true;\n }\n }\n getFocusedItem() {\n if (this._state !== 0 /* Hidden */\n && this._state !== 2 /* Empty */\n && this._state !== 1 /* Loading */\n && this._completionModel) {\n return {\n item: this._list.getFocusedElements()[0],\n index: this._list.getFocus()[0],\n model: this._completionModel\n };\n }\n return undefined;\n }\n toggleDetailsFocus() {\n if (this._state === 5 /* Details */) {\n this._setState(3 /* Open */);\n if (this._detailsBorderColor) {\n this._details.widget.domNode.style.borderColor = this._detailsBorderColor;\n }\n }\n else if (this._state === 3 /* Open */ && this._isDetailsVisible()) {\n this._setState(5 /* Details */);\n if (this._detailsFocusBorderColor) {\n this._details.widget.domNode.style.borderColor = this._detailsFocusBorderColor;\n }\n }\n }\n toggleDetails() {\n if (this._isDetailsVisible()) {\n // hide details widget\n this._ctxSuggestWidgetDetailsVisible.set(false);\n this._setDetailsVisible(false);\n this._details.hide();\n this.element.domNode.classList.remove('shows-details');\n }\n else if ((canExpandCompletionItem(this._list.getFocusedElements()[0]) || this._explainMode) && (this._state === 3 /* Open */ || this._state === 5 /* Details */ || this._state === 4 /* Frozen */)) {\n // show details widget (iff possible)\n this._ctxSuggestWidgetDetailsVisible.set(true);\n this._setDetailsVisible(true);\n this.showDetails(false);\n }\n }\n showDetails(loading) {\n this._details.show();\n if (loading) {\n this._details.widget.renderLoading();\n }\n else {\n this._details.widget.renderItem(this._list.getFocusedElements()[0], this._explainMode);\n }\n this._positionDetails();\n this.editor.focus();\n this.element.domNode.classList.add('shows-details');\n }\n toggleExplainMode() {\n if (this._list.getFocusedElements()[0]) {\n this._explainMode = !this._explainMode;\n if (!this._isDetailsVisible()) {\n this.toggleDetails();\n }\n else {\n this.showDetails(false);\n }\n }\n }\n resetPersistedSize() {\n this._persistedSize.reset();\n }\n hideWidget() {\n var _a;\n (_a = this._loadingTimeout) === null || _a === void 0 ? void 0 : _a.dispose();\n this._setState(0 /* Hidden */);\n this._onDidHide.fire(this);\n this.element.clearSashHoverState();\n // ensure that a reasonable widget height is persisted so that\n // accidential \"resize-to-single-items\" cases aren't happening\n const dim = this._persistedSize.restore();\n const minPersistedHeight = Math.ceil(this.getLayoutInfo().itemHeight * 4.3);\n if (dim && dim.height < minPersistedHeight) {\n this._persistedSize.store(dim.with(undefined, minPersistedHeight));\n }\n }\n isFrozen() {\n return this._state === 4 /* Frozen */;\n }\n _afterRender(position) {\n if (position === null) {\n if (this._isDetailsVisible()) {\n this._details.hide(); //todo@jrieken soft-hide\n }\n return;\n }\n if (this._state === 2 /* Empty */ || this._state === 1 /* Loading */) {\n // no special positioning when widget isn't showing list\n return;\n }\n if (this._isDetailsVisible()) {\n this._details.show();\n }\n this._positionDetails();\n }\n _layout(size) {\n var _a, _b, _c;\n if (!this.editor.hasModel()) {\n return;\n }\n if (!this.editor.getDomNode()) {\n // happens when running tests\n return;\n }\n const bodyBox = dom.getClientArea(document.body);\n const info = this.getLayoutInfo();\n if (!size) {\n size = info.defaultSize;\n }\n let height = size.height;\n let width = size.width;\n // status bar\n this._status.element.style.lineHeight = `${info.itemHeight}px`;\n if (this._state === 2 /* Empty */ || this._state === 1 /* Loading */) {\n // showing a message only\n height = info.itemHeight + info.borderHeight;\n width = info.defaultSize.width / 2;\n this.element.enableSashes(false, false, false, false);\n this.element.minSize = this.element.maxSize = new dom.Dimension(width, height);\n this._contentWidget.setPreference(2 /* BELOW */);\n }\n else {\n // showing items\n // width math\n const maxWidth = bodyBox.width - info.borderHeight - 2 * info.horizontalPadding;\n if (width > maxWidth) {\n width = maxWidth;\n }\n const preferredWidth = this._completionModel ? this._completionModel.stats.pLabelLen * info.typicalHalfwidthCharacterWidth : width;\n // height math\n const fullHeight = info.statusBarHeight + this._list.contentHeight + info.borderHeight;\n const minHeight = info.itemHeight + info.statusBarHeight;\n const editorBox = dom.getDomNodePagePosition(this.editor.getDomNode());\n const cursorBox = this.editor.getScrolledVisiblePosition(this.editor.getPosition());\n const cursorBottom = editorBox.top + cursorBox.top + cursorBox.height;\n const maxHeightBelow = Math.min(bodyBox.height - cursorBottom - info.verticalPadding, fullHeight);\n const maxHeightAbove = Math.min(editorBox.top + cursorBox.top - info.verticalPadding, fullHeight);\n let maxHeight = Math.min(Math.max(maxHeightAbove, maxHeightBelow) + info.borderHeight, fullHeight);\n if (height === ((_a = this._cappedHeight) === null || _a === void 0 ? void 0 : _a.capped)) {\n // Restore the old (wanted) height when the current\n // height is capped to fit\n height = this._cappedHeight.wanted;\n }\n if (height < minHeight) {\n height = minHeight;\n }\n if (height > maxHeight) {\n height = maxHeight;\n }\n if (height > maxHeightBelow) {\n this._contentWidget.setPreference(1 /* ABOVE */);\n this.element.enableSashes(true, true, false, false);\n maxHeight = maxHeightAbove;\n }\n else {\n this._contentWidget.setPreference(2 /* BELOW */);\n this.element.enableSashes(false, true, true, false);\n maxHeight = maxHeightBelow;\n }\n this.element.preferredSize = new dom.Dimension(preferredWidth, info.defaultSize.height);\n this.element.maxSize = new dom.Dimension(maxWidth, maxHeight);\n this.element.minSize = new dom.Dimension(220, minHeight);\n // Know when the height was capped to fit and remember\n // the wanted height for later. This is required when going\n // left to widen suggestions.\n this._cappedHeight = height === fullHeight\n ? { wanted: (_c = (_b = this._cappedHeight) === null || _b === void 0 ? void 0 : _b.wanted) !== null && _c !== void 0 ? _c : size.height, capped: height }\n : undefined;\n }\n this._resize(width, height);\n }\n _resize(width, height) {\n const { width: maxWidth, height: maxHeight } = this.element.maxSize;\n width = Math.min(maxWidth, width);\n height = Math.min(maxHeight, height);\n const { statusBarHeight } = this.getLayoutInfo();\n this._list.layout(height - statusBarHeight, width);\n this._listElement.style.height = `${height - statusBarHeight}px`;\n this.element.layout(height, width);\n this._contentWidget.layout();\n this._positionDetails();\n }\n _positionDetails() {\n if (this._isDetailsVisible()) {\n this._details.placeAtAnchor(this.element.domNode);\n }\n }\n getLayoutInfo() {\n const fontInfo = this.editor.getOption(40 /* fontInfo */);\n const itemHeight = clamp(this.editor.getOption(105 /* suggestLineHeight */) || fontInfo.lineHeight, 8, 1000);\n const statusBarHeight = !this.editor.getOption(103 /* suggest */).showStatusBar || this._state === 2 /* Empty */ || this._state === 1 /* Loading */ ? 0 : itemHeight;\n const borderWidth = this._details.widget.borderWidth;\n const borderHeight = 2 * borderWidth;\n return {\n itemHeight,\n statusBarHeight,\n borderWidth,\n borderHeight,\n typicalHalfwidthCharacterWidth: fontInfo.typicalHalfwidthCharacterWidth,\n verticalPadding: 22,\n horizontalPadding: 14,\n defaultSize: new dom.Dimension(430, statusBarHeight + 12 * itemHeight + borderHeight)\n };\n }\n _isDetailsVisible() {\n return this._storageService.getBoolean('expandSuggestionDocs', 0 /* GLOBAL */, false);\n }\n _setDetailsVisible(value) {\n this._storageService.store('expandSuggestionDocs', value, 0 /* GLOBAL */, 0 /* USER */);\n }\n};\nSuggestWidget.LOADING_MESSAGE = nls.localize('suggestWidget.loading', \"Loading...\");\nSuggestWidget.NO_SUGGESTIONS_MESSAGE = nls.localize('suggestWidget.noSuggestions', \"No suggestions.\");\nSuggestWidget = __decorate([\n __param(1, IStorageService),\n __param(2, IContextKeyService),\n __param(3, IThemeService),\n __param(4, IInstantiationService)\n], SuggestWidget);\nexport { SuggestWidget };\nexport class SuggestContentWidget {\n constructor(_widget, _editor) {\n this._widget = _widget;\n this._editor = _editor;\n this.allowEditorOverflow = true;\n this.suppressMouseDown = false;\n this._preferenceLocked = false;\n this._added = false;\n this._hidden = false;\n }\n dispose() {\n if (this._added) {\n this._added = false;\n this._editor.removeContentWidget(this);\n }\n }\n getId() {\n return 'editor.widget.suggestWidget';\n }\n getDomNode() {\n return this._widget.element.domNode;\n }\n show() {\n this._hidden = false;\n if (!this._added) {\n this._added = true;\n this._editor.addContentWidget(this);\n }\n }\n hide() {\n if (!this._hidden) {\n this._hidden = true;\n this.layout();\n }\n }\n layout() {\n this._editor.layoutContentWidget(this);\n }\n getPosition() {\n if (this._hidden || !this._position || !this._preference) {\n return null;\n }\n return {\n position: this._position,\n preference: [this._preference]\n };\n }\n beforeRender() {\n const { height, width } = this._widget.element.size;\n const { borderWidth, horizontalPadding } = this._widget.getLayoutInfo();\n return new dom.Dimension(width + 2 * borderWidth + horizontalPadding, height + 2 * borderWidth);\n }\n afterRender(position) {\n this._widget._afterRender(position);\n }\n setPreference(preference) {\n if (!this._preferenceLocked) {\n this._preference = preference;\n }\n }\n lockPreference() {\n this._preferenceLocked = true;\n }\n unlockPreference() {\n this._preferenceLocked = false;\n }\n setPosition(position) {\n this._position = position;\n }\n}\nregisterThemingParticipant((theme, collector) => {\n const matchHighlight = theme.getColor(editorSuggestWidgetHighlightForeground);\n if (matchHighlight) {\n collector.addRule(`.monaco-editor .suggest-widget .monaco-list .monaco-list-row .monaco-highlighted-label .highlight { color: ${matchHighlight}; }`);\n }\n const foreground = theme.getColor(editorSuggestWidgetForeground);\n if (foreground) {\n collector.addRule(`.monaco-editor .suggest-widget, .monaco-editor .suggest-details { color: ${foreground}; }`);\n }\n const link = theme.getColor(textLinkForeground);\n if (link) {\n collector.addRule(`.monaco-editor .suggest-details a { color: ${link}; }`);\n }\n const codeBackground = theme.getColor(textCodeBlockBackground);\n if (codeBackground) {\n collector.addRule(`.monaco-editor .suggest-details code { background-color: ${codeBackground}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { RawContextKey, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nlet WordContextKey = class WordContextKey {\n constructor(_editor, contextKeyService) {\n this._editor = _editor;\n this._enabled = false;\n this._ckAtEnd = WordContextKey.AtEnd.bindTo(contextKeyService);\n this._configListener = this._editor.onDidChangeConfiguration(e => e.hasChanged(108 /* tabCompletion */) && this._update());\n this._update();\n }\n dispose() {\n var _a;\n this._configListener.dispose();\n (_a = this._selectionListener) === null || _a === void 0 ? void 0 : _a.dispose();\n this._ckAtEnd.reset();\n }\n _update() {\n // only update this when tab completions are enabled\n const enabled = this._editor.getOption(108 /* tabCompletion */) === 'on';\n if (this._enabled === enabled) {\n return;\n }\n this._enabled = enabled;\n if (this._enabled) {\n const checkForWordEnd = () => {\n if (!this._editor.hasModel()) {\n this._ckAtEnd.set(false);\n return;\n }\n const model = this._editor.getModel();\n const selection = this._editor.getSelection();\n const word = model.getWordAtPosition(selection.getStartPosition());\n if (!word) {\n this._ckAtEnd.set(false);\n return;\n }\n this._ckAtEnd.set(word.endColumn === selection.getStartPosition().column);\n };\n this._selectionListener = this._editor.onDidChangeCursorSelection(checkForWordEnd);\n checkForWordEnd();\n }\n else if (this._selectionListener) {\n this._ckAtEnd.reset();\n this._selectionListener.dispose();\n this._selectionListener = undefined;\n }\n }\n};\nWordContextKey.AtEnd = new RawContextKey('atEndOfWord', false);\nWordContextKey = __decorate([\n __param(1, IContextKeyService)\n], WordContextKey);\nexport { WordContextKey };\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 *--------------------------------------------------------------------------------------------*/\nimport { isNonEmptyArray } from '../../../base/common/arrays.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { CharacterSet } from '../../common/core/characterClassifier.js';\nexport class CommitCharacterController {\n constructor(editor, widget, accept) {\n this._disposables = new DisposableStore();\n this._disposables.add(widget.onDidShow(() => this._onItem(widget.getFocusedItem())));\n this._disposables.add(widget.onDidFocus(this._onItem, this));\n this._disposables.add(widget.onDidHide(this.reset, this));\n this._disposables.add(editor.onWillType(text => {\n if (this._active && !widget.isFrozen()) {\n const ch = text.charCodeAt(text.length - 1);\n if (this._active.acceptCharacters.has(ch) && editor.getOption(0 /* acceptSuggestionOnCommitCharacter */)) {\n accept(this._active.item);\n }\n }\n }));\n }\n _onItem(selected) {\n if (!selected || !isNonEmptyArray(selected.item.completion.commitCharacters)) {\n // no item or no commit characters\n this.reset();\n return;\n }\n if (this._active && this._active.item.item === selected.item) {\n // still the same item\n return;\n }\n // keep item and its commit characters\n const acceptCharacters = new CharacterSet();\n for (const ch of selected.item.completion.commitCharacters) {\n if (ch.length > 0) {\n acceptCharacters.add(ch.charCodeAt(0));\n }\n }\n this._active = { acceptCharacters, item: selected };\n }\n reset() {\n this._active = undefined;\n }\n dispose() {\n this._disposables.dispose();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nexport class OvertypingCapturer {\n constructor(editor, suggestModel) {\n this._disposables = new DisposableStore();\n this._lastOvertyped = [];\n this._empty = true;\n this._disposables.add(editor.onWillType(() => {\n if (!this._empty) {\n return;\n }\n if (!editor.hasModel()) {\n return;\n }\n const selections = editor.getSelections();\n const selectionsLength = selections.length;\n // Check if it will overtype any selections\n let willOvertype = false;\n for (let i = 0; i < selectionsLength; i++) {\n if (!selections[i].isEmpty()) {\n willOvertype = true;\n break;\n }\n }\n if (!willOvertype) {\n return;\n }\n this._lastOvertyped = [];\n const model = editor.getModel();\n for (let i = 0; i < selectionsLength; i++) {\n const selection = selections[i];\n // Check for overtyping capturer restrictions\n if (model.getValueLengthInRange(selection) > OvertypingCapturer._maxSelectionLength) {\n return;\n }\n this._lastOvertyped[i] = { value: model.getValueInRange(selection), multiline: selection.startLineNumber !== selection.endLineNumber };\n }\n this._empty = false;\n }));\n this._disposables.add(suggestModel.onDidCancel(e => {\n if (!this._empty && !e.retrigger) {\n this._empty = true;\n }\n }));\n }\n getLastOvertypedInfo(idx) {\n if (!this._empty && idx >= 0 && idx < this._lastOvertyped.length) {\n return this._lastOvertyped[idx];\n }\n return undefined;\n }\n dispose() {\n this._disposables.dispose();\n }\n}\nOvertypingCapturer._maxSelectionLength = 51200;\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { alert } from '../../../base/browser/ui/aria/aria.js';\nimport { isNonEmptyArray } from '../../../base/common/arrays.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { SimpleKeybinding } from '../../../base/common/keyCodes.js';\nimport { dispose, DisposableStore, toDisposable, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { StableEditorScrollState } from '../../browser/core/editorState.js';\nimport { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { EditOperation } from '../../common/core/editOperation.js';\nimport { Range } from '../../common/core/range.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { SnippetController2 } from '../snippet/snippetController2.js';\nimport { SnippetParser } from '../snippet/snippetParser.js';\nimport { ISuggestMemoryService } from './suggestMemory.js';\nimport * as nls from '../../../nls.js';\nimport { ICommandService, CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { ContextKeyExpr, IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { KeybindingsRegistry } from '../../../platform/keybinding/common/keybindingsRegistry.js';\nimport { Context as SuggestContext, suggestWidgetStatusbarMenu } from './suggest.js';\nimport { SuggestAlternatives } from './suggestAlternatives.js';\nimport { SuggestModel } from './suggestModel.js';\nimport { SuggestWidget } from './suggestWidget.js';\nimport { WordContextKey } from './wordContextKey.js';\nimport { Event } from '../../../base/common/event.js';\nimport { IdleValue } from '../../../base/common/async.js';\nimport { isObject, assertType } from '../../../base/common/types.js';\nimport { CommitCharacterController } from './suggestCommitCharacters.js';\nimport { OvertypingCapturer } from './suggestOvertypingCapturer.js';\nimport { Position } from '../../common/core/position.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { MenuRegistry } from '../../../platform/actions/common/actions.js';\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { ILogService } from '../../../platform/log/common/log.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\n// sticky suggest widget which doesn't disappear on focus out and such\nlet _sticky = false;\n// _sticky = Boolean(\"true\"); // done \"weirdly\" so that a lint warning prevents you from pushing this\nclass LineSuffix {\n constructor(_model, _position) {\n this._model = _model;\n this._position = _position;\n // spy on what's happening right of the cursor. two cases:\n // 1. end of line -> check that it's still end of line\n // 2. mid of line -> add a marker and compute the delta\n const maxColumn = _model.getLineMaxColumn(_position.lineNumber);\n if (maxColumn !== _position.column) {\n const offset = _model.getOffsetAt(_position);\n const end = _model.getPositionAt(offset + 1);\n this._marker = _model.deltaDecorations([], [{\n range: Range.fromPositions(_position, end),\n options: { stickiness: 1 /* NeverGrowsWhenTypingAtEdges */ }\n }]);\n }\n }\n dispose() {\n if (this._marker && !this._model.isDisposed()) {\n this._model.deltaDecorations(this._marker, []);\n }\n }\n delta(position) {\n if (this._model.isDisposed() || this._position.lineNumber !== position.lineNumber) {\n // bail out early if things seems fishy\n return 0;\n }\n // read the marker (in case suggest was triggered at line end) or compare\n // the cursor to the line end.\n if (this._marker) {\n const range = this._model.getDecorationRange(this._marker[0]);\n const end = this._model.getOffsetAt(range.getStartPosition());\n return end - this._model.getOffsetAt(position);\n }\n else {\n return this._model.getLineMaxColumn(position.lineNumber) - position.column;\n }\n }\n}\nlet SuggestController = class SuggestController {\n constructor(editor, _memoryService, _commandService, _contextKeyService, _instantiationService, _logService) {\n this._memoryService = _memoryService;\n this._commandService = _commandService;\n this._contextKeyService = _contextKeyService;\n this._instantiationService = _instantiationService;\n this._logService = _logService;\n this._lineSuffix = new MutableDisposable();\n this._toDispose = new DisposableStore();\n this.editor = editor;\n this.model = _instantiationService.createInstance(SuggestModel, this.editor);\n // context key: update insert/replace mode\n const ctxInsertMode = SuggestContext.InsertMode.bindTo(_contextKeyService);\n ctxInsertMode.set(editor.getOption(103 /* suggest */).insertMode);\n this.model.onDidTrigger(() => ctxInsertMode.set(editor.getOption(103 /* suggest */).insertMode));\n this.widget = this._toDispose.add(new IdleValue(() => {\n const widget = this._instantiationService.createInstance(SuggestWidget, this.editor);\n this._toDispose.add(widget);\n this._toDispose.add(widget.onDidSelect(item => this._insertSuggestion(item, 0), this));\n // Wire up logic to accept a suggestion on certain characters\n const commitCharacterController = new CommitCharacterController(this.editor, widget, item => this._insertSuggestion(item, 2 /* NoAfterUndoStop */));\n this._toDispose.add(commitCharacterController);\n this._toDispose.add(this.model.onDidSuggest(e => {\n if (e.completionModel.items.length === 0) {\n commitCharacterController.reset();\n }\n }));\n // Wire up makes text edit context key\n const ctxMakesTextEdit = SuggestContext.MakesTextEdit.bindTo(this._contextKeyService);\n const ctxHasInsertAndReplace = SuggestContext.HasInsertAndReplaceRange.bindTo(this._contextKeyService);\n const ctxCanResolve = SuggestContext.CanResolve.bindTo(this._contextKeyService);\n this._toDispose.add(toDisposable(() => {\n ctxMakesTextEdit.reset();\n ctxHasInsertAndReplace.reset();\n ctxCanResolve.reset();\n }));\n this._toDispose.add(widget.onDidFocus(({ item }) => {\n // (ctx: makesTextEdit)\n const position = this.editor.getPosition();\n const startColumn = item.editStart.column;\n const endColumn = position.column;\n let value = true;\n if (this.editor.getOption(1 /* acceptSuggestionOnEnter */) === 'smart'\n && this.model.state === 2 /* Auto */\n && !item.completion.command\n && !item.completion.additionalTextEdits\n && !(item.completion.insertTextRules & 4 /* InsertAsSnippet */)\n && endColumn - startColumn === item.completion.insertText.length) {\n const oldText = this.editor.getModel().getValueInRange({\n startLineNumber: position.lineNumber,\n startColumn,\n endLineNumber: position.lineNumber,\n endColumn\n });\n value = oldText !== item.completion.insertText;\n }\n ctxMakesTextEdit.set(value);\n // (ctx: hasInsertAndReplaceRange)\n ctxHasInsertAndReplace.set(!Position.equals(item.editInsertEnd, item.editReplaceEnd));\n // (ctx: canResolve)\n ctxCanResolve.set(Boolean(item.provider.resolveCompletionItem) || Boolean(item.completion.documentation) || item.completion.detail !== item.completion.label);\n }));\n this._toDispose.add(widget.onDetailsKeyDown(e => {\n // cmd + c on macOS, ctrl + c on Win / Linux\n if (e.toKeybinding().equals(new SimpleKeybinding(true, false, false, false, 33 /* KEY_C */)) ||\n (platform.isMacintosh && e.toKeybinding().equals(new SimpleKeybinding(false, false, false, true, 33 /* KEY_C */)))) {\n e.stopPropagation();\n return;\n }\n if (!e.toKeybinding().isModifierKey()) {\n this.editor.focus();\n }\n }));\n return widget;\n }));\n // Wire up text overtyping capture\n this._overtypingCapturer = this._toDispose.add(new IdleValue(() => {\n return this._toDispose.add(new OvertypingCapturer(this.editor, this.model));\n }));\n this._alternatives = this._toDispose.add(new IdleValue(() => {\n return this._toDispose.add(new SuggestAlternatives(this.editor, this._contextKeyService));\n }));\n this._toDispose.add(_instantiationService.createInstance(WordContextKey, editor));\n this._toDispose.add(this.model.onDidTrigger(e => {\n this.widget.value.showTriggered(e.auto, e.shy ? 250 : 50);\n this._lineSuffix.value = new LineSuffix(this.editor.getModel(), e.position);\n }));\n this._toDispose.add(this.model.onDidSuggest(e => {\n if (!e.shy) {\n let index = this._memoryService.select(this.editor.getModel(), this.editor.getPosition(), e.completionModel.items);\n this.widget.value.showSuggestions(e.completionModel, index, e.isFrozen, e.auto);\n }\n }));\n this._toDispose.add(this.model.onDidCancel(e => {\n if (!e.retrigger) {\n this.widget.value.hideWidget();\n }\n }));\n this._toDispose.add(this.editor.onDidBlurEditorWidget(() => {\n if (!_sticky) {\n this.model.cancel();\n this.model.clear();\n }\n }));\n // Manage the acceptSuggestionsOnEnter context key\n let acceptSuggestionsOnEnter = SuggestContext.AcceptSuggestionsOnEnter.bindTo(_contextKeyService);\n let updateFromConfig = () => {\n const acceptSuggestionOnEnter = this.editor.getOption(1 /* acceptSuggestionOnEnter */);\n acceptSuggestionsOnEnter.set(acceptSuggestionOnEnter === 'on' || acceptSuggestionOnEnter === 'smart');\n };\n this._toDispose.add(this.editor.onDidChangeConfiguration(() => updateFromConfig()));\n updateFromConfig();\n }\n static get(editor) {\n return editor.getContribution(SuggestController.ID);\n }\n dispose() {\n this._alternatives.dispose();\n this._toDispose.dispose();\n this.widget.dispose();\n this.model.dispose();\n this._lineSuffix.dispose();\n }\n _insertSuggestion(event, flags) {\n if (!event || !event.item) {\n this._alternatives.value.reset();\n this.model.cancel();\n this.model.clear();\n return;\n }\n if (!this.editor.hasModel()) {\n return;\n }\n const model = this.editor.getModel();\n const modelVersionNow = model.getAlternativeVersionId();\n const { item } = event;\n //\n const tasks = [];\n const cts = new CancellationTokenSource();\n // pushing undo stops *before* additional text edits and\n // *after* the main edit\n if (!(flags & 1 /* NoBeforeUndoStop */)) {\n this.editor.pushUndoStop();\n }\n // compute overwrite[Before|After] deltas BEFORE applying extra edits\n const info = this.getOverwriteInfo(item, Boolean(flags & 8 /* AlternativeOverwriteConfig */));\n // keep item in memory\n this._memoryService.memorize(model, this.editor.getPosition(), item);\n if (Array.isArray(item.completion.additionalTextEdits)) {\n // sync additional edits\n const scrollState = StableEditorScrollState.capture(this.editor);\n this.editor.executeEdits('suggestController.additionalTextEdits.sync', item.completion.additionalTextEdits.map(edit => EditOperation.replace(Range.lift(edit.range), edit.text)));\n scrollState.restoreRelativeVerticalPositionOfCursor(this.editor);\n }\n else if (!item.isResolved) {\n // async additional edits\n const sw = new StopWatch(true);\n let position;\n const docListener = model.onDidChangeContent(e => {\n if (e.isFlush) {\n cts.cancel();\n docListener.dispose();\n return;\n }\n for (let change of e.changes) {\n const thisPosition = Range.getEndPosition(change.range);\n if (!position || Position.isBefore(thisPosition, position)) {\n position = thisPosition;\n }\n }\n });\n let oldFlags = flags;\n flags |= 2 /* NoAfterUndoStop */;\n let didType = false;\n let typeListener = this.editor.onWillType(() => {\n typeListener.dispose();\n didType = true;\n if (!(oldFlags & 2 /* NoAfterUndoStop */)) {\n this.editor.pushUndoStop();\n }\n });\n tasks.push(item.resolve(cts.token).then(() => {\n if (!item.completion.additionalTextEdits || cts.token.isCancellationRequested) {\n return false;\n }\n if (position && item.completion.additionalTextEdits.some(edit => Position.isBefore(position, Range.getStartPosition(edit.range)))) {\n return false;\n }\n if (didType) {\n this.editor.pushUndoStop();\n }\n const scrollState = StableEditorScrollState.capture(this.editor);\n this.editor.executeEdits('suggestController.additionalTextEdits.async', item.completion.additionalTextEdits.map(edit => EditOperation.replace(Range.lift(edit.range), edit.text)));\n scrollState.restoreRelativeVerticalPositionOfCursor(this.editor);\n if (didType || !(oldFlags & 2 /* NoAfterUndoStop */)) {\n this.editor.pushUndoStop();\n }\n return true;\n }).then(applied => {\n this._logService.trace('[suggest] async resolving of edits DONE (ms, applied?)', sw.elapsed(), applied);\n docListener.dispose();\n typeListener.dispose();\n }));\n }\n let { insertText } = item.completion;\n if (!(item.completion.insertTextRules & 4 /* InsertAsSnippet */)) {\n insertText = SnippetParser.escape(insertText);\n }\n SnippetController2.get(this.editor).insert(insertText, {\n overwriteBefore: info.overwriteBefore,\n overwriteAfter: info.overwriteAfter,\n undoStopBefore: false,\n undoStopAfter: false,\n adjustWhitespace: !(item.completion.insertTextRules & 1 /* KeepWhitespace */),\n clipboardText: event.model.clipboardText,\n overtypingCapturer: this._overtypingCapturer.value\n });\n if (!(flags & 2 /* NoAfterUndoStop */)) {\n this.editor.pushUndoStop();\n }\n if (!item.completion.command) {\n // done\n this.model.cancel();\n }\n else if (item.completion.command.id === TriggerSuggestAction.id) {\n // retigger\n this.model.trigger({ auto: true, shy: false }, true);\n }\n else {\n // exec command, done\n tasks.push(this._commandService.executeCommand(item.completion.command.id, ...(item.completion.command.arguments ? [...item.completion.command.arguments] : [])).catch(onUnexpectedError));\n this.model.cancel();\n }\n if (flags & 4 /* KeepAlternativeSuggestions */) {\n this._alternatives.value.set(event, next => {\n // cancel resolving of additional edits\n cts.cancel();\n // this is not so pretty. when inserting the 'next'\n // suggestion we undo until we are at the state at\n // which we were before inserting the previous suggestion...\n while (model.canUndo()) {\n if (modelVersionNow !== model.getAlternativeVersionId()) {\n model.undo();\n }\n this._insertSuggestion(next, 1 /* NoBeforeUndoStop */ | 2 /* NoAfterUndoStop */ | (flags & 8 /* AlternativeOverwriteConfig */ ? 8 /* AlternativeOverwriteConfig */ : 0));\n break;\n }\n });\n }\n this._alertCompletionItem(item);\n // clear only now - after all tasks are done\n Promise.all(tasks).finally(() => {\n this.model.clear();\n cts.dispose();\n });\n }\n getOverwriteInfo(item, toggleMode) {\n assertType(this.editor.hasModel());\n let replace = this.editor.getOption(103 /* suggest */).insertMode === 'replace';\n if (toggleMode) {\n replace = !replace;\n }\n const overwriteBefore = item.position.column - item.editStart.column;\n const overwriteAfter = (replace ? item.editReplaceEnd.column : item.editInsertEnd.column) - item.position.column;\n const columnDelta = this.editor.getPosition().column - item.position.column;\n const suffixDelta = this._lineSuffix.value ? this._lineSuffix.value.delta(this.editor.getPosition()) : 0;\n return {\n overwriteBefore: overwriteBefore + columnDelta,\n overwriteAfter: overwriteAfter + suffixDelta\n };\n }\n _alertCompletionItem(item) {\n if (isNonEmptyArray(item.completion.additionalTextEdits)) {\n let msg = nls.localize('aria.alert.snippet', \"Accepting '{0}' made {1} additional edits\", item.textLabel, item.completion.additionalTextEdits.length);\n alert(msg);\n }\n }\n triggerSuggest(onlyFrom) {\n if (this.editor.hasModel()) {\n this.model.trigger({ auto: false, shy: false }, false, onlyFrom);\n this.editor.revealLine(this.editor.getPosition().lineNumber, 0 /* Smooth */);\n this.editor.focus();\n }\n }\n triggerSuggestAndAcceptBest(arg) {\n if (!this.editor.hasModel()) {\n return;\n }\n const positionNow = this.editor.getPosition();\n const fallback = () => {\n if (positionNow.equals(this.editor.getPosition())) {\n this._commandService.executeCommand(arg.fallback);\n }\n };\n const makesTextEdit = (item) => {\n if (item.completion.insertTextRules & 4 /* InsertAsSnippet */ || item.completion.additionalTextEdits) {\n // snippet, other editor -> makes edit\n return true;\n }\n const position = this.editor.getPosition();\n const startColumn = item.editStart.column;\n const endColumn = position.column;\n if (endColumn - startColumn !== item.completion.insertText.length) {\n // unequal lengths -> makes edit\n return true;\n }\n const textNow = this.editor.getModel().getValueInRange({\n startLineNumber: position.lineNumber,\n startColumn,\n endLineNumber: position.lineNumber,\n endColumn\n });\n // unequal text -> makes edit\n return textNow !== item.completion.insertText;\n };\n Event.once(this.model.onDidTrigger)(_ => {\n // wait for trigger because only then the cancel-event is trustworthy\n let listener = [];\n Event.any(this.model.onDidTrigger, this.model.onDidCancel)(() => {\n // retrigger or cancel -> try to type default text\n dispose(listener);\n fallback();\n }, undefined, listener);\n this.model.onDidSuggest(({ completionModel }) => {\n dispose(listener);\n if (completionModel.items.length === 0) {\n fallback();\n return;\n }\n const index = this._memoryService.select(this.editor.getModel(), this.editor.getPosition(), completionModel.items);\n const item = completionModel.items[index];\n if (!makesTextEdit(item)) {\n fallback();\n return;\n }\n this.editor.pushUndoStop();\n this._insertSuggestion({ index, item, model: completionModel }, 4 /* KeepAlternativeSuggestions */ | 1 /* NoBeforeUndoStop */ | 2 /* NoAfterUndoStop */);\n }, undefined, listener);\n });\n this.model.trigger({ auto: false, shy: true });\n this.editor.revealLine(positionNow.lineNumber, 0 /* Smooth */);\n this.editor.focus();\n }\n acceptSelectedSuggestion(keepAlternativeSuggestions, alternativeOverwriteConfig) {\n const item = this.widget.value.getFocusedItem();\n let flags = 0;\n if (keepAlternativeSuggestions) {\n flags |= 4 /* KeepAlternativeSuggestions */;\n }\n if (alternativeOverwriteConfig) {\n flags |= 8 /* AlternativeOverwriteConfig */;\n }\n this._insertSuggestion(item, flags);\n }\n acceptNextSuggestion() {\n this._alternatives.value.next();\n }\n acceptPrevSuggestion() {\n this._alternatives.value.prev();\n }\n cancelSuggestWidget() {\n this.model.cancel();\n this.model.clear();\n this.widget.value.hideWidget();\n }\n selectNextSuggestion() {\n this.widget.value.selectNext();\n }\n selectNextPageSuggestion() {\n this.widget.value.selectNextPage();\n }\n selectLastSuggestion() {\n this.widget.value.selectLast();\n }\n selectPrevSuggestion() {\n this.widget.value.selectPrevious();\n }\n selectPrevPageSuggestion() {\n this.widget.value.selectPreviousPage();\n }\n selectFirstSuggestion() {\n this.widget.value.selectFirst();\n }\n toggleSuggestionDetails() {\n this.widget.value.toggleDetails();\n }\n toggleExplainMode() {\n this.widget.value.toggleExplainMode();\n }\n toggleSuggestionFocus() {\n this.widget.value.toggleDetailsFocus();\n }\n resetWidgetSize() {\n this.widget.value.resetPersistedSize();\n }\n};\nSuggestController.ID = 'editor.contrib.suggestController';\nSuggestController = __decorate([\n __param(1, ISuggestMemoryService),\n __param(2, ICommandService),\n __param(3, IContextKeyService),\n __param(4, IInstantiationService),\n __param(5, ILogService)\n], SuggestController);\nexport { SuggestController };\nexport class TriggerSuggestAction extends EditorAction {\n constructor() {\n super({\n id: TriggerSuggestAction.id,\n label: nls.localize('suggest.trigger.label', \"Trigger Suggest\"),\n alias: 'Trigger Suggest',\n precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.hasCompletionItemProvider),\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 10 /* Space */,\n secondary: [2048 /* CtrlCmd */ | 39 /* KEY_I */],\n mac: { primary: 256 /* WinCtrl */ | 10 /* Space */, secondary: [512 /* Alt */ | 9 /* Escape */, 2048 /* CtrlCmd */ | 39 /* KEY_I */] },\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n const controller = SuggestController.get(editor);\n if (!controller) {\n return;\n }\n controller.triggerSuggest();\n }\n}\nTriggerSuggestAction.id = 'editor.action.triggerSuggest';\nregisterEditorContribution(SuggestController.ID, SuggestController);\nregisterEditorAction(TriggerSuggestAction);\nconst weight = 100 /* EditorContrib */ + 90;\nconst SuggestCommand = EditorCommand.bindToContribution(SuggestController.get);\nregisterEditorCommand(new SuggestCommand({\n id: 'acceptSelectedSuggestion',\n precondition: SuggestContext.Visible,\n handler(x) {\n x.acceptSelectedSuggestion(true, false);\n }\n}));\n// normal tab\nKeybindingsRegistry.registerKeybindingRule({\n id: 'acceptSelectedSuggestion',\n when: ContextKeyExpr.and(SuggestContext.Visible, EditorContextKeys.textInputFocus),\n primary: 2 /* Tab */,\n weight\n});\n// accept on enter has special rules\nKeybindingsRegistry.registerKeybindingRule({\n id: 'acceptSelectedSuggestion',\n when: ContextKeyExpr.and(SuggestContext.Visible, EditorContextKeys.textInputFocus, SuggestContext.AcceptSuggestionsOnEnter, SuggestContext.MakesTextEdit),\n primary: 3 /* Enter */,\n weight,\n});\nMenuRegistry.appendMenuItem(suggestWidgetStatusbarMenu, {\n command: { id: 'acceptSelectedSuggestion', title: nls.localize('accept.insert', \"Insert\") },\n group: 'left',\n order: 1,\n when: SuggestContext.HasInsertAndReplaceRange.toNegated()\n});\nMenuRegistry.appendMenuItem(suggestWidgetStatusbarMenu, {\n command: { id: 'acceptSelectedSuggestion', title: nls.localize('accept.insert', \"Insert\") },\n group: 'left',\n order: 1,\n when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('insert'))\n});\nMenuRegistry.appendMenuItem(suggestWidgetStatusbarMenu, {\n command: { id: 'acceptSelectedSuggestion', title: nls.localize('accept.replace', \"Replace\") },\n group: 'left',\n order: 1,\n when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('replace'))\n});\nregisterEditorCommand(new SuggestCommand({\n id: 'acceptAlternativeSelectedSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, EditorContextKeys.textInputFocus),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 3 /* Enter */,\n secondary: [1024 /* Shift */ | 2 /* Tab */],\n },\n handler(x) {\n x.acceptSelectedSuggestion(false, true);\n },\n menuOpts: [{\n menuId: suggestWidgetStatusbarMenu,\n group: 'left',\n order: 2,\n when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('insert')),\n title: nls.localize('accept.replace', \"Replace\")\n }, {\n menuId: suggestWidgetStatusbarMenu,\n group: 'left',\n order: 2,\n when: ContextKeyExpr.and(SuggestContext.HasInsertAndReplaceRange, SuggestContext.InsertMode.isEqualTo('replace')),\n title: nls.localize('accept.insert', \"Insert\")\n }]\n}));\n// continue to support the old command\nCommandsRegistry.registerCommandAlias('acceptSelectedSuggestionOnEnter', 'acceptSelectedSuggestion');\nregisterEditorCommand(new SuggestCommand({\n id: 'hideSuggestWidget',\n precondition: SuggestContext.Visible,\n handler: x => x.cancelSuggestWidget(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectNextSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n handler: c => c.selectNextSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 18 /* DownArrow */,\n secondary: [2048 /* CtrlCmd */ | 18 /* DownArrow */],\n mac: { primary: 18 /* DownArrow */, secondary: [2048 /* CtrlCmd */ | 18 /* DownArrow */, 256 /* WinCtrl */ | 44 /* KEY_N */] }\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectNextPageSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n handler: c => c.selectNextPageSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 12 /* PageDown */,\n secondary: [2048 /* CtrlCmd */ | 12 /* PageDown */]\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectLastSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n handler: c => c.selectLastSuggestion()\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectPrevSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n handler: c => c.selectPrevSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 16 /* UpArrow */,\n secondary: [2048 /* CtrlCmd */ | 16 /* UpArrow */],\n mac: { primary: 16 /* UpArrow */, secondary: [2048 /* CtrlCmd */ | 16 /* UpArrow */, 256 /* WinCtrl */ | 46 /* KEY_P */] }\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectPrevPageSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n handler: c => c.selectPrevPageSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 11 /* PageUp */,\n secondary: [2048 /* CtrlCmd */ | 11 /* PageUp */]\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'selectFirstSuggestion',\n precondition: ContextKeyExpr.and(SuggestContext.Visible, SuggestContext.MultipleSuggestions),\n handler: c => c.selectFirstSuggestion()\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'toggleSuggestionDetails',\n precondition: SuggestContext.Visible,\n handler: x => x.toggleSuggestionDetails(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 10 /* Space */,\n mac: { primary: 256 /* WinCtrl */ | 10 /* Space */ }\n },\n menuOpts: [{\n menuId: suggestWidgetStatusbarMenu,\n group: 'right',\n order: 1,\n when: ContextKeyExpr.and(SuggestContext.DetailsVisible, SuggestContext.CanResolve),\n title: nls.localize('detail.more', \"show less\")\n }, {\n menuId: suggestWidgetStatusbarMenu,\n group: 'right',\n order: 1,\n when: ContextKeyExpr.and(SuggestContext.DetailsVisible.toNegated(), SuggestContext.CanResolve),\n title: nls.localize('detail.less', \"show more\")\n }]\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'toggleExplainMode',\n precondition: SuggestContext.Visible,\n handler: x => x.toggleExplainMode(),\n kbOpts: {\n weight: 100 /* EditorContrib */,\n primary: 2048 /* CtrlCmd */ | 85 /* US_SLASH */,\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'toggleSuggestionFocus',\n precondition: SuggestContext.Visible,\n handler: x => x.toggleSuggestionFocus(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 512 /* Alt */ | 10 /* Space */,\n mac: { primary: 256 /* WinCtrl */ | 512 /* Alt */ | 10 /* Space */ }\n }\n}));\n//#region tab completions\nregisterEditorCommand(new SuggestCommand({\n id: 'insertBestCompletion',\n precondition: ContextKeyExpr.and(EditorContextKeys.textInputFocus, ContextKeyExpr.equals('config.editor.tabCompletion', 'on'), WordContextKey.AtEnd, SuggestContext.Visible.toNegated(), SuggestAlternatives.OtherSuggestions.toNegated(), SnippetController2.InSnippetMode.toNegated()),\n handler: (x, arg) => {\n x.triggerSuggestAndAcceptBest(isObject(arg) ? Object.assign({ fallback: 'tab' }, arg) : { fallback: 'tab' });\n },\n kbOpts: {\n weight,\n primary: 2 /* Tab */\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'insertNextSuggestion',\n precondition: ContextKeyExpr.and(EditorContextKeys.textInputFocus, ContextKeyExpr.equals('config.editor.tabCompletion', 'on'), SuggestAlternatives.OtherSuggestions, SuggestContext.Visible.toNegated(), SnippetController2.InSnippetMode.toNegated()),\n handler: x => x.acceptNextSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2 /* Tab */\n }\n}));\nregisterEditorCommand(new SuggestCommand({\n id: 'insertPrevSuggestion',\n precondition: ContextKeyExpr.and(EditorContextKeys.textInputFocus, ContextKeyExpr.equals('config.editor.tabCompletion', 'on'), SuggestAlternatives.OtherSuggestions, SuggestContext.Visible.toNegated(), SnippetController2.InSnippetMode.toNegated()),\n handler: x => x.acceptPrevSuggestion(),\n kbOpts: {\n weight: weight,\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 1024 /* Shift */ | 2 /* Tab */\n }\n}));\nregisterEditorAction(class extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.resetSuggestSize',\n label: nls.localize('suggest.reset.label', \"Reset Suggest Widget Size\"),\n alias: 'Reset Suggest Widget Size',\n precondition: undefined\n });\n }\n run(_accessor, editor) {\n SuggestController.get(editor).resetWidgetSize();\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { alert } from '../../../base/browser/ui/aria/aria.js';\nimport { EditorAction, registerEditorAction } from '../../browser/editorExtensions.js';\nimport { TabFocus } from '../../common/config/commonEditorConfig.js';\nexport class ToggleTabFocusModeAction extends EditorAction {\n constructor() {\n super({\n id: ToggleTabFocusModeAction.ID,\n label: nls.localize({ key: 'toggle.tabMovesFocus', comment: ['Turn on/off use of tab key for moving focus around VS Code'] }, \"Toggle Tab Key Moves Focus\"),\n alias: 'Toggle Tab Key Moves Focus',\n precondition: undefined,\n kbOpts: {\n kbExpr: null,\n primary: 2048 /* CtrlCmd */ | 43 /* KEY_M */,\n mac: { primary: 256 /* WinCtrl */ | 1024 /* Shift */ | 43 /* KEY_M */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor) {\n const oldValue = TabFocus.getTabFocusMode();\n const newValue = !oldValue;\n TabFocus.setTabFocusMode(newValue);\n if (newValue) {\n alert(nls.localize('toggle.tabMovesFocus.on', \"Pressing Tab will now move focus to the next focusable element\"));\n }\n else {\n alert(nls.localize('toggle.tabMovesFocus.off', \"Pressing Tab will now insert the tab character\"));\n }\n }\n}\nToggleTabFocusModeAction.ID = 'editor.action.toggleTabFocusMode';\nregisterEditorAction(ToggleTabFocusModeAction);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport * as nls from '../../../nls.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { IDialogService } from '../../../platform/dialogs/common/dialogs.js';\nconst ignoreUnusualLineTerminators = 'ignoreUnusualLineTerminators';\nfunction writeIgnoreState(codeEditorService, model, state) {\n codeEditorService.setModelProperty(model.uri, ignoreUnusualLineTerminators, state);\n}\nfunction readIgnoreState(codeEditorService, model) {\n return codeEditorService.getModelProperty(model.uri, ignoreUnusualLineTerminators);\n}\nlet UnusualLineTerminatorsDetector = class UnusualLineTerminatorsDetector extends Disposable {\n constructor(_editor, _dialogService, _codeEditorService) {\n super();\n this._editor = _editor;\n this._dialogService = _dialogService;\n this._codeEditorService = _codeEditorService;\n this._config = this._editor.getOption(110 /* unusualLineTerminators */);\n this._register(this._editor.onDidChangeConfiguration((e) => {\n if (e.hasChanged(110 /* unusualLineTerminators */)) {\n this._config = this._editor.getOption(110 /* unusualLineTerminators */);\n this._checkForUnusualLineTerminators();\n }\n }));\n this._register(this._editor.onDidChangeModel(() => {\n this._checkForUnusualLineTerminators();\n }));\n this._register(this._editor.onDidChangeModelContent((e) => {\n if (e.isUndoing) {\n // skip checking in case of undoing\n return;\n }\n this._checkForUnusualLineTerminators();\n }));\n }\n _checkForUnusualLineTerminators() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this._config === 'off') {\n return;\n }\n if (!this._editor.hasModel()) {\n return;\n }\n const model = this._editor.getModel();\n if (!model.mightContainUnusualLineTerminators()) {\n return;\n }\n const ignoreState = readIgnoreState(this._codeEditorService, model);\n if (ignoreState === true) {\n // this model should be ignored\n return;\n }\n if (this._editor.getOption(77 /* readOnly */)) {\n // read only editor => sorry!\n return;\n }\n if (this._config === 'auto') {\n // just do it!\n model.removeUnusualLineTerminators(this._editor.getSelections());\n return;\n }\n const result = yield this._dialogService.confirm({\n title: nls.localize('unusualLineTerminators.title', \"Unusual Line Terminators\"),\n message: nls.localize('unusualLineTerminators.message', \"Detected unusual line terminators\"),\n detail: nls.localize('unusualLineTerminators.detail', \"This file contains one or more unusual line terminator characters, like Line Separator (LS) or Paragraph Separator (PS).\\n\\nIt is recommended to remove them from the file. This can be configured via `editor.unusualLineTerminators`.\"),\n primaryButton: nls.localize('unusualLineTerminators.fix', \"Fix this file\"),\n secondaryButton: nls.localize('unusualLineTerminators.ignore', \"Ignore problem for this file\")\n });\n if (!result.confirmed) {\n // this model should be ignored\n writeIgnoreState(this._codeEditorService, model, true);\n return;\n }\n model.removeUnusualLineTerminators(this._editor.getSelections());\n });\n }\n};\nUnusualLineTerminatorsDetector.ID = 'editor.contrib.unusualLineTerminatorsDetector';\nUnusualLineTerminatorsDetector = __decorate([\n __param(1, IDialogService),\n __param(2, ICodeEditorService)\n], UnusualLineTerminatorsDetector);\nregisterEditorContribution(UnusualLineTerminatorsDetector.ID, UnusualLineTerminatorsDetector);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { RunOnceScheduler, createCancelablePromise } from '../../../base/common/async.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { registerEditorContribution } from '../../browser/editorExtensions.js';\nimport { DocumentRangeSemanticTokensProviderRegistry } from '../../common/modes.js';\nimport { IModelService } from '../../common/services/modelService.js';\nimport { toMultilineTokens2 } from '../../common/services/semanticTokensProviderStyling.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { isSemanticColoringEnabled, SEMANTIC_HIGHLIGHTING_SETTING_ID } from '../../common/services/modelServiceImpl.js';\nimport { getDocumentRangeSemanticTokensProvider } from '../../common/services/getSemanticTokens.js';\nlet ViewportSemanticTokensContribution = class ViewportSemanticTokensContribution extends Disposable {\n constructor(editor, _modelService, _themeService, _configurationService) {\n super();\n this._modelService = _modelService;\n this._themeService = _themeService;\n this._configurationService = _configurationService;\n this._editor = editor;\n this._tokenizeViewport = new RunOnceScheduler(() => this._tokenizeViewportNow(), 100);\n this._outstandingRequests = [];\n this._register(this._editor.onDidScrollChange(() => {\n this._tokenizeViewport.schedule();\n }));\n this._register(this._editor.onDidChangeModel(() => {\n this._cancelAll();\n this._tokenizeViewport.schedule();\n }));\n this._register(this._editor.onDidChangeModelContent((e) => {\n this._cancelAll();\n this._tokenizeViewport.schedule();\n }));\n this._register(DocumentRangeSemanticTokensProviderRegistry.onDidChange(() => {\n this._cancelAll();\n this._tokenizeViewport.schedule();\n }));\n this._register(this._configurationService.onDidChangeConfiguration(e => {\n if (e.affectsConfiguration(SEMANTIC_HIGHLIGHTING_SETTING_ID)) {\n this._cancelAll();\n this._tokenizeViewport.schedule();\n }\n }));\n this._register(this._themeService.onDidColorThemeChange(() => {\n this._cancelAll();\n this._tokenizeViewport.schedule();\n }));\n }\n _cancelAll() {\n for (const request of this._outstandingRequests) {\n request.cancel();\n }\n this._outstandingRequests = [];\n }\n _removeOutstandingRequest(req) {\n for (let i = 0, len = this._outstandingRequests.length; i < len; i++) {\n if (this._outstandingRequests[i] === req) {\n this._outstandingRequests.splice(i, 1);\n return;\n }\n }\n }\n _tokenizeViewportNow() {\n if (!this._editor.hasModel()) {\n return;\n }\n const model = this._editor.getModel();\n if (model.hasCompleteSemanticTokens()) {\n return;\n }\n if (!isSemanticColoringEnabled(model, this._themeService, this._configurationService)) {\n if (model.hasSomeSemanticTokens()) {\n model.setSemanticTokens(null, false);\n }\n return;\n }\n const provider = getDocumentRangeSemanticTokensProvider(model);\n if (!provider) {\n if (model.hasSomeSemanticTokens()) {\n model.setSemanticTokens(null, false);\n }\n return;\n }\n const styling = this._modelService.getSemanticTokensProviderStyling(provider);\n const visibleRanges = this._editor.getVisibleRangesPlusViewportAboveBelow();\n this._outstandingRequests = this._outstandingRequests.concat(visibleRanges.map(range => this._requestRange(model, range, provider, styling)));\n }\n _requestRange(model, range, provider, styling) {\n const requestVersionId = model.getVersionId();\n const request = createCancelablePromise(token => Promise.resolve(provider.provideDocumentRangeSemanticTokens(model, range, token)));\n request.then((r) => {\n if (!r || model.isDisposed() || model.getVersionId() !== requestVersionId) {\n return;\n }\n model.setPartialSemanticTokens(range, toMultilineTokens2(r, styling, model.getLanguageIdentifier()));\n }).then(() => this._removeOutstandingRequest(request), () => this._removeOutstandingRequest(request));\n return request;\n }\n};\nViewportSemanticTokensContribution.ID = 'editor.contrib.viewportSemanticTokens';\nViewportSemanticTokensContribution = __decorate([\n __param(1, IModelService),\n __param(2, IThemeService),\n __param(3, IConfigurationService)\n], ViewportSemanticTokensContribution);\nregisterEditorContribution(ViewportSemanticTokensContribution.ID, ViewportSemanticTokensContribution);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport * as nls from '../../../nls.js';\nimport * as arrays from '../../../base/common/arrays.js';\nimport { createCancelablePromise, first, timeout } from '../../../base/common/async.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { onUnexpectedError, onUnexpectedExternalError } from '../../../base/common/errors.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution, registerModelAndPositionCommand } from '../../browser/editorExtensions.js';\nimport { Range } from '../../common/core/range.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { OverviewRulerLane } from '../../common/model.js';\nimport { ModelDecorationOptions } from '../../common/model/textModel.js';\nimport { DocumentHighlightKind, DocumentHighlightProviderRegistry } from '../../common/modes.js';\nimport { IContextKeyService, RawContextKey } from '../../../platform/contextkey/common/contextkey.js';\nimport { activeContrastBorder, editorSelectionHighlight, editorSelectionHighlightBorder, overviewRulerSelectionHighlightForeground, registerColor } from '../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant, themeColorFromId } from '../../../platform/theme/common/themeService.js';\nimport { alert } from '../../../base/browser/ui/aria/aria.js';\nconst editorWordHighlight = registerColor('editor.wordHighlightBackground', { dark: '#575757B8', light: '#57575740', hc: null }, nls.localize('wordHighlight', 'Background color of a symbol during read-access, like reading a variable. The color must not be opaque so as not to hide underlying decorations.'), true);\nconst editorWordHighlightStrong = registerColor('editor.wordHighlightStrongBackground', { dark: '#004972B8', light: '#0e639c40', hc: null }, nls.localize('wordHighlightStrong', 'Background color of a symbol during write-access, like writing to a variable. The color must not be opaque so as not to hide underlying decorations.'), true);\nconst editorWordHighlightBorder = registerColor('editor.wordHighlightBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('wordHighlightBorder', 'Border color of a symbol during read-access, like reading a variable.'));\nconst editorWordHighlightStrongBorder = registerColor('editor.wordHighlightStrongBorder', { light: null, dark: null, hc: activeContrastBorder }, nls.localize('wordHighlightStrongBorder', 'Border color of a symbol during write-access, like writing to a variable.'));\nconst overviewRulerWordHighlightForeground = registerColor('editorOverviewRuler.wordHighlightForeground', { dark: '#A0A0A0CC', light: '#A0A0A0CC', hc: '#A0A0A0CC' }, nls.localize('overviewRulerWordHighlightForeground', 'Overview ruler marker color for symbol highlights. The color must not be opaque so as not to hide underlying decorations.'), true);\nconst overviewRulerWordHighlightStrongForeground = registerColor('editorOverviewRuler.wordHighlightStrongForeground', { dark: '#C0A0C0CC', light: '#C0A0C0CC', hc: '#C0A0C0CC' }, nls.localize('overviewRulerWordHighlightStrongForeground', 'Overview ruler marker color for write-access symbol highlights. The color must not be opaque so as not to hide underlying decorations.'), true);\nconst ctxHasWordHighlights = new RawContextKey('hasWordHighlights', false);\nexport function getOccurrencesAtPosition(model, position, token) {\n const orderedByScore = DocumentHighlightProviderRegistry.ordered(model);\n // in order of score ask the occurrences provider\n // until someone response with a good result\n // (good = none empty array)\n return first(orderedByScore.map(provider => () => {\n return Promise.resolve(provider.provideDocumentHighlights(model, position, token))\n .then(undefined, onUnexpectedExternalError);\n }), arrays.isNonEmptyArray);\n}\nclass OccurenceAtPositionRequest {\n constructor(model, selection, wordSeparators) {\n this._wordRange = this._getCurrentWordRange(model, selection);\n this.result = createCancelablePromise(token => this._compute(model, selection, wordSeparators, token));\n }\n _getCurrentWordRange(model, selection) {\n const word = model.getWordAtPosition(selection.getPosition());\n if (word) {\n return new Range(selection.startLineNumber, word.startColumn, selection.startLineNumber, word.endColumn);\n }\n return null;\n }\n isValid(model, selection, decorationIds) {\n const lineNumber = selection.startLineNumber;\n const startColumn = selection.startColumn;\n const endColumn = selection.endColumn;\n const currentWordRange = this._getCurrentWordRange(model, selection);\n let requestIsValid = Boolean(this._wordRange && this._wordRange.equalsRange(currentWordRange));\n // Even if we are on a different word, if that word is in the decorations ranges, the request is still valid\n // (Same symbol)\n for (let i = 0, len = decorationIds.length; !requestIsValid && i < len; i++) {\n let range = model.getDecorationRange(decorationIds[i]);\n if (range && range.startLineNumber === lineNumber) {\n if (range.startColumn <= startColumn && range.endColumn >= endColumn) {\n requestIsValid = true;\n }\n }\n }\n return requestIsValid;\n }\n cancel() {\n this.result.cancel();\n }\n}\nclass SemanticOccurenceAtPositionRequest extends OccurenceAtPositionRequest {\n _compute(model, selection, wordSeparators, token) {\n return getOccurrencesAtPosition(model, selection.getPosition(), token).then(value => value || []);\n }\n}\nclass TextualOccurenceAtPositionRequest extends OccurenceAtPositionRequest {\n constructor(model, selection, wordSeparators) {\n super(model, selection, wordSeparators);\n this._selectionIsEmpty = selection.isEmpty();\n }\n _compute(model, selection, wordSeparators, token) {\n return timeout(250, token).then(() => {\n if (!selection.isEmpty()) {\n return [];\n }\n const word = model.getWordAtPosition(selection.getPosition());\n if (!word || word.word.length > 1000) {\n return [];\n }\n const matches = model.findMatches(word.word, true, false, true, wordSeparators, false);\n return matches.map(m => {\n return {\n range: m.range,\n kind: DocumentHighlightKind.Text\n };\n });\n });\n }\n isValid(model, selection, decorationIds) {\n const currentSelectionIsEmpty = selection.isEmpty();\n if (this._selectionIsEmpty !== currentSelectionIsEmpty) {\n return false;\n }\n return super.isValid(model, selection, decorationIds);\n }\n}\nfunction computeOccurencesAtPosition(model, selection, wordSeparators) {\n if (DocumentHighlightProviderRegistry.has(model)) {\n return new SemanticOccurenceAtPositionRequest(model, selection, wordSeparators);\n }\n return new TextualOccurenceAtPositionRequest(model, selection, wordSeparators);\n}\nregisterModelAndPositionCommand('_executeDocumentHighlights', (model, position) => getOccurrencesAtPosition(model, position, CancellationToken.None));\nclass WordHighlighter {\n constructor(editor, contextKeyService) {\n this.toUnhook = new DisposableStore();\n this.workerRequestTokenId = 0;\n this.workerRequestCompleted = false;\n this.workerRequestValue = [];\n this.lastCursorPositionChangeTime = 0;\n this.renderDecorationsTimer = -1;\n this.editor = editor;\n this._hasWordHighlights = ctxHasWordHighlights.bindTo(contextKeyService);\n this._ignorePositionChangeEvent = false;\n this.occurrencesHighlight = this.editor.getOption(68 /* occurrencesHighlight */);\n this.model = this.editor.getModel();\n this.toUnhook.add(editor.onDidChangeCursorPosition((e) => {\n if (this._ignorePositionChangeEvent) {\n // We are changing the position => ignore this event\n return;\n }\n if (!this.occurrencesHighlight) {\n // Early exit if nothing needs to be done!\n // Leave some form of early exit check here if you wish to continue being a cursor position change listener ;)\n return;\n }\n this._onPositionChanged(e);\n }));\n this.toUnhook.add(editor.onDidChangeModelContent((e) => {\n this._stopAll();\n }));\n this.toUnhook.add(editor.onDidChangeConfiguration((e) => {\n let newValue = this.editor.getOption(68 /* occurrencesHighlight */);\n if (this.occurrencesHighlight !== newValue) {\n this.occurrencesHighlight = newValue;\n this._stopAll();\n }\n }));\n this._decorationIds = [];\n this.workerRequestTokenId = 0;\n this.workerRequest = null;\n this.workerRequestCompleted = false;\n this.lastCursorPositionChangeTime = 0;\n this.renderDecorationsTimer = -1;\n }\n hasDecorations() {\n return (this._decorationIds.length > 0);\n }\n restore() {\n if (!this.occurrencesHighlight) {\n return;\n }\n this._run();\n }\n _getSortedHighlights() {\n return arrays.coalesce(this._decorationIds\n .map((id) => this.model.getDecorationRange(id))\n .sort(Range.compareRangesUsingStarts));\n }\n moveNext() {\n let highlights = this._getSortedHighlights();\n let index = highlights.findIndex((range) => range.containsPosition(this.editor.getPosition()));\n let newIndex = ((index + 1) % highlights.length);\n let dest = highlights[newIndex];\n try {\n this._ignorePositionChangeEvent = true;\n this.editor.setPosition(dest.getStartPosition());\n this.editor.revealRangeInCenterIfOutsideViewport(dest);\n const word = this._getWord();\n if (word) {\n const lineContent = this.editor.getModel().getLineContent(dest.startLineNumber);\n alert(`${lineContent}, ${newIndex + 1} of ${highlights.length} for '${word.word}'`);\n }\n }\n finally {\n this._ignorePositionChangeEvent = false;\n }\n }\n moveBack() {\n let highlights = this._getSortedHighlights();\n let index = highlights.findIndex((range) => range.containsPosition(this.editor.getPosition()));\n let newIndex = ((index - 1 + highlights.length) % highlights.length);\n let dest = highlights[newIndex];\n try {\n this._ignorePositionChangeEvent = true;\n this.editor.setPosition(dest.getStartPosition());\n this.editor.revealRangeInCenterIfOutsideViewport(dest);\n const word = this._getWord();\n if (word) {\n const lineContent = this.editor.getModel().getLineContent(dest.startLineNumber);\n alert(`${lineContent}, ${newIndex + 1} of ${highlights.length} for '${word.word}'`);\n }\n }\n finally {\n this._ignorePositionChangeEvent = false;\n }\n }\n _removeDecorations() {\n if (this._decorationIds.length > 0) {\n // remove decorations\n this._decorationIds = this.editor.deltaDecorations(this._decorationIds, []);\n this._hasWordHighlights.set(false);\n }\n }\n _stopAll() {\n // Remove any existing decorations\n this._removeDecorations();\n // Cancel any renderDecorationsTimer\n if (this.renderDecorationsTimer !== -1) {\n clearTimeout(this.renderDecorationsTimer);\n this.renderDecorationsTimer = -1;\n }\n // Cancel any worker request\n if (this.workerRequest !== null) {\n this.workerRequest.cancel();\n this.workerRequest = null;\n }\n // Invalidate any worker request callback\n if (!this.workerRequestCompleted) {\n this.workerRequestTokenId++;\n this.workerRequestCompleted = true;\n }\n }\n _onPositionChanged(e) {\n // disabled\n if (!this.occurrencesHighlight) {\n this._stopAll();\n return;\n }\n // ignore typing & other\n if (e.reason !== 3 /* Explicit */) {\n this._stopAll();\n return;\n }\n this._run();\n }\n _getWord() {\n let editorSelection = this.editor.getSelection();\n let lineNumber = editorSelection.startLineNumber;\n let startColumn = editorSelection.startColumn;\n return this.model.getWordAtPosition({\n lineNumber: lineNumber,\n column: startColumn\n });\n }\n _run() {\n let editorSelection = this.editor.getSelection();\n // ignore multiline selection\n if (editorSelection.startLineNumber !== editorSelection.endLineNumber) {\n this._stopAll();\n return;\n }\n let startColumn = editorSelection.startColumn;\n let endColumn = editorSelection.endColumn;\n const word = this._getWord();\n // The selection must be inside a word or surround one word at most\n if (!word || word.startColumn > startColumn || word.endColumn < endColumn) {\n this._stopAll();\n return;\n }\n // All the effort below is trying to achieve this:\n // - when cursor is moved to a word, trigger immediately a findOccurrences request\n // - 250ms later after the last cursor move event, render the occurrences\n // - no flickering!\n const workerRequestIsValid = (this.workerRequest && this.workerRequest.isValid(this.model, editorSelection, this._decorationIds));\n // There are 4 cases:\n // a) old workerRequest is valid & completed, renderDecorationsTimer fired\n // b) old workerRequest is valid & completed, renderDecorationsTimer not fired\n // c) old workerRequest is valid, but not completed\n // d) old workerRequest is not valid\n // For a) no action is needed\n // For c), member 'lastCursorPositionChangeTime' will be used when installing the timer so no action is needed\n this.lastCursorPositionChangeTime = (new Date()).getTime();\n if (workerRequestIsValid) {\n if (this.workerRequestCompleted && this.renderDecorationsTimer !== -1) {\n // case b)\n // Delay the firing of renderDecorationsTimer by an extra 250 ms\n clearTimeout(this.renderDecorationsTimer);\n this.renderDecorationsTimer = -1;\n this._beginRenderDecorations();\n }\n }\n else {\n // case d)\n // Stop all previous actions and start fresh\n this._stopAll();\n let myRequestId = ++this.workerRequestTokenId;\n this.workerRequestCompleted = false;\n this.workerRequest = computeOccurencesAtPosition(this.model, this.editor.getSelection(), this.editor.getOption(113 /* wordSeparators */));\n this.workerRequest.result.then(data => {\n if (myRequestId === this.workerRequestTokenId) {\n this.workerRequestCompleted = true;\n this.workerRequestValue = data || [];\n this._beginRenderDecorations();\n }\n }, onUnexpectedError);\n }\n }\n _beginRenderDecorations() {\n let currentTime = (new Date()).getTime();\n let minimumRenderTime = this.lastCursorPositionChangeTime + 250;\n if (currentTime >= minimumRenderTime) {\n // Synchronous\n this.renderDecorationsTimer = -1;\n this.renderDecorations();\n }\n else {\n // Asynchronous\n this.renderDecorationsTimer = setTimeout(() => {\n this.renderDecorations();\n }, (minimumRenderTime - currentTime));\n }\n }\n renderDecorations() {\n this.renderDecorationsTimer = -1;\n let decorations = [];\n for (const info of this.workerRequestValue) {\n if (info.range) {\n decorations.push({\n range: info.range,\n options: WordHighlighter._getDecorationOptions(info.kind)\n });\n }\n }\n this._decorationIds = this.editor.deltaDecorations(this._decorationIds, decorations);\n this._hasWordHighlights.set(this.hasDecorations());\n }\n static _getDecorationOptions(kind) {\n if (kind === DocumentHighlightKind.Write) {\n return this._WRITE_OPTIONS;\n }\n else if (kind === DocumentHighlightKind.Text) {\n return this._TEXT_OPTIONS;\n }\n else {\n return this._REGULAR_OPTIONS;\n }\n }\n dispose() {\n this._stopAll();\n this.toUnhook.dispose();\n }\n}\nWordHighlighter._WRITE_OPTIONS = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'wordHighlightStrong',\n overviewRuler: {\n color: themeColorFromId(overviewRulerWordHighlightStrongForeground),\n position: OverviewRulerLane.Center\n }\n});\nWordHighlighter._TEXT_OPTIONS = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'selectionHighlight',\n overviewRuler: {\n color: themeColorFromId(overviewRulerSelectionHighlightForeground),\n position: OverviewRulerLane.Center\n }\n});\nWordHighlighter._REGULAR_OPTIONS = ModelDecorationOptions.register({\n stickiness: 1 /* NeverGrowsWhenTypingAtEdges */,\n className: 'wordHighlight',\n overviewRuler: {\n color: themeColorFromId(overviewRulerWordHighlightForeground),\n position: OverviewRulerLane.Center\n }\n});\nlet WordHighlighterContribution = class WordHighlighterContribution extends Disposable {\n constructor(editor, contextKeyService) {\n super();\n this.wordHighlighter = null;\n const createWordHighlighterIfPossible = () => {\n if (editor.hasModel()) {\n this.wordHighlighter = new WordHighlighter(editor, contextKeyService);\n }\n };\n this._register(editor.onDidChangeModel((e) => {\n if (this.wordHighlighter) {\n this.wordHighlighter.dispose();\n this.wordHighlighter = null;\n }\n createWordHighlighterIfPossible();\n }));\n createWordHighlighterIfPossible();\n }\n static get(editor) {\n return editor.getContribution(WordHighlighterContribution.ID);\n }\n saveViewState() {\n if (this.wordHighlighter && this.wordHighlighter.hasDecorations()) {\n return true;\n }\n return false;\n }\n moveNext() {\n if (this.wordHighlighter) {\n this.wordHighlighter.moveNext();\n }\n }\n moveBack() {\n if (this.wordHighlighter) {\n this.wordHighlighter.moveBack();\n }\n }\n restoreViewState(state) {\n if (this.wordHighlighter && state) {\n this.wordHighlighter.restore();\n }\n }\n dispose() {\n if (this.wordHighlighter) {\n this.wordHighlighter.dispose();\n this.wordHighlighter = null;\n }\n super.dispose();\n }\n};\nWordHighlighterContribution.ID = 'editor.contrib.wordHighlighter';\nWordHighlighterContribution = __decorate([\n __param(1, IContextKeyService)\n], WordHighlighterContribution);\nclass WordHighlightNavigationAction extends EditorAction {\n constructor(next, opts) {\n super(opts);\n this._isNext = next;\n }\n run(accessor, editor) {\n const controller = WordHighlighterContribution.get(editor);\n if (!controller) {\n return;\n }\n if (this._isNext) {\n controller.moveNext();\n }\n else {\n controller.moveBack();\n }\n }\n}\nclass NextWordHighlightAction extends WordHighlightNavigationAction {\n constructor() {\n super(true, {\n id: 'editor.action.wordHighlight.next',\n label: nls.localize('wordHighlight.next.label', \"Go to Next Symbol Highlight\"),\n alias: 'Go to Next Symbol Highlight',\n precondition: ctxHasWordHighlights,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 65 /* F7 */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nclass PrevWordHighlightAction extends WordHighlightNavigationAction {\n constructor() {\n super(false, {\n id: 'editor.action.wordHighlight.prev',\n label: nls.localize('wordHighlight.previous.label', \"Go to Previous Symbol Highlight\"),\n alias: 'Go to Previous Symbol Highlight',\n precondition: ctxHasWordHighlights,\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 1024 /* Shift */ | 65 /* F7 */,\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nclass TriggerWordHighlightAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.wordHighlight.trigger',\n label: nls.localize('wordHighlight.trigger.label', \"Trigger Symbol Highlight\"),\n alias: 'Trigger Symbol Highlight',\n precondition: ctxHasWordHighlights.toNegated(),\n kbOpts: {\n kbExpr: EditorContextKeys.editorTextFocus,\n primary: 0,\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor, editor, args) {\n const controller = WordHighlighterContribution.get(editor);\n if (!controller) {\n return;\n }\n controller.restoreViewState(true);\n }\n}\nregisterEditorContribution(WordHighlighterContribution.ID, WordHighlighterContribution);\nregisterEditorAction(NextWordHighlightAction);\nregisterEditorAction(PrevWordHighlightAction);\nregisterEditorAction(TriggerWordHighlightAction);\nregisterThemingParticipant((theme, collector) => {\n const selectionHighlight = theme.getColor(editorSelectionHighlight);\n if (selectionHighlight) {\n collector.addRule(`.monaco-editor .focused .selectionHighlight { background-color: ${selectionHighlight}; }`);\n collector.addRule(`.monaco-editor .selectionHighlight { background-color: ${selectionHighlight.transparent(0.5)}; }`);\n }\n const wordHighlight = theme.getColor(editorWordHighlight);\n if (wordHighlight) {\n collector.addRule(`.monaco-editor .wordHighlight { background-color: ${wordHighlight}; }`);\n }\n const wordHighlightStrong = theme.getColor(editorWordHighlightStrong);\n if (wordHighlightStrong) {\n collector.addRule(`.monaco-editor .wordHighlightStrong { background-color: ${wordHighlightStrong}; }`);\n }\n const selectionHighlightBorder = theme.getColor(editorSelectionHighlightBorder);\n if (selectionHighlightBorder) {\n collector.addRule(`.monaco-editor .selectionHighlight { border: 1px ${theme.type === 'hc' ? 'dotted' : 'solid'} ${selectionHighlightBorder}; box-sizing: border-box; }`);\n }\n const wordHighlightBorder = theme.getColor(editorWordHighlightBorder);\n if (wordHighlightBorder) {\n collector.addRule(`.monaco-editor .wordHighlight { border: 1px ${theme.type === 'hc' ? 'dashed' : 'solid'} ${wordHighlightBorder}; box-sizing: border-box; }`);\n }\n const wordHighlightStrongBorder = theme.getColor(editorWordHighlightStrongBorder);\n if (wordHighlightStrongBorder) {\n collector.addRule(`.monaco-editor .wordHighlightStrong { border: 1px ${theme.type === 'hc' ? 'dashed' : 'solid'} ${wordHighlightStrongBorder}; box-sizing: border-box; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport { EditorCommand, registerEditorCommand, EditorAction, registerEditorAction } from '../../browser/editorExtensions.js';\nimport { ReplaceCommand } from '../../common/commands/replaceCommand.js';\nimport { CursorState } from '../../common/controller/cursorCommon.js';\nimport { WordOperations } from '../../common/controller/cursorWordOperations.js';\nimport { getMapForWordSeparators } from '../../common/controller/wordCharacterClassifier.js';\nimport { Position } from '../../common/core/position.js';\nimport { Range } from '../../common/core/range.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from '../../../platform/accessibility/common/accessibility.js';\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\nimport { EditorOptions } from '../../common/config/editorOptions.js';\nimport { LanguageConfigurationRegistry } from '../../common/modes/languageConfigurationRegistry.js';\nimport { IsWindowsContext } from '../../../platform/contextkey/common/contextkeys.js';\nexport class MoveWordCommand extends EditorCommand {\n constructor(opts) {\n super(opts);\n this._inSelectionMode = opts.inSelectionMode;\n this._wordNavigationType = opts.wordNavigationType;\n }\n runEditorCommand(accessor, editor, args) {\n if (!editor.hasModel()) {\n return;\n }\n const wordSeparators = getMapForWordSeparators(editor.getOption(113 /* wordSeparators */));\n const model = editor.getModel();\n const selections = editor.getSelections();\n const result = selections.map((sel) => {\n const inPosition = new Position(sel.positionLineNumber, sel.positionColumn);\n const outPosition = this._move(wordSeparators, model, inPosition, this._wordNavigationType);\n return this._moveTo(sel, outPosition, this._inSelectionMode);\n });\n model.pushStackElement();\n editor._getViewModel().setCursorStates('moveWordCommand', 3 /* Explicit */, result.map(r => CursorState.fromModelSelection(r)));\n if (result.length === 1) {\n const pos = new Position(result[0].positionLineNumber, result[0].positionColumn);\n editor.revealPosition(pos, 0 /* Smooth */);\n }\n }\n _moveTo(from, to, inSelectionMode) {\n if (inSelectionMode) {\n // move just position\n return new Selection(from.selectionStartLineNumber, from.selectionStartColumn, to.lineNumber, to.column);\n }\n else {\n // move everything\n return new Selection(to.lineNumber, to.column, to.lineNumber, to.column);\n }\n }\n}\nexport class WordLeftCommand extends MoveWordCommand {\n _move(wordSeparators, model, position, wordNavigationType) {\n return WordOperations.moveWordLeft(wordSeparators, model, position, wordNavigationType);\n }\n}\nexport class WordRightCommand extends MoveWordCommand {\n _move(wordSeparators, model, position, wordNavigationType) {\n return WordOperations.moveWordRight(wordSeparators, model, position, wordNavigationType);\n }\n}\nexport class CursorWordStartLeft extends WordLeftCommand {\n constructor() {\n super({\n inSelectionMode: false,\n wordNavigationType: 0 /* WordStart */,\n id: 'cursorWordStartLeft',\n precondition: undefined\n });\n }\n}\nexport class CursorWordEndLeft extends WordLeftCommand {\n constructor() {\n super({\n inSelectionMode: false,\n wordNavigationType: 2 /* WordEnd */,\n id: 'cursorWordEndLeft',\n precondition: undefined\n });\n }\n}\nexport class CursorWordLeft extends WordLeftCommand {\n constructor() {\n var _a;\n super({\n inSelectionMode: false,\n wordNavigationType: 1 /* WordStartFast */,\n id: 'cursorWordLeft',\n precondition: undefined,\n kbOpts: {\n kbExpr: ContextKeyExpr.and(EditorContextKeys.textInputFocus, (_a = ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, IsWindowsContext)) === null || _a === void 0 ? void 0 : _a.negate()),\n primary: 2048 /* CtrlCmd */ | 15 /* LeftArrow */,\n mac: { primary: 512 /* Alt */ | 15 /* LeftArrow */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nexport class CursorWordStartLeftSelect extends WordLeftCommand {\n constructor() {\n super({\n inSelectionMode: true,\n wordNavigationType: 0 /* WordStart */,\n id: 'cursorWordStartLeftSelect',\n precondition: undefined\n });\n }\n}\nexport class CursorWordEndLeftSelect extends WordLeftCommand {\n constructor() {\n super({\n inSelectionMode: true,\n wordNavigationType: 2 /* WordEnd */,\n id: 'cursorWordEndLeftSelect',\n precondition: undefined\n });\n }\n}\nexport class CursorWordLeftSelect extends WordLeftCommand {\n constructor() {\n var _a;\n super({\n inSelectionMode: true,\n wordNavigationType: 1 /* WordStartFast */,\n id: 'cursorWordLeftSelect',\n precondition: undefined,\n kbOpts: {\n kbExpr: ContextKeyExpr.and(EditorContextKeys.textInputFocus, (_a = ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, IsWindowsContext)) === null || _a === void 0 ? void 0 : _a.negate()),\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 15 /* LeftArrow */,\n mac: { primary: 512 /* Alt */ | 1024 /* Shift */ | 15 /* LeftArrow */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\n// Accessibility navigation commands should only be enabled on windows since they are tuned to what NVDA expects\nexport class CursorWordAccessibilityLeft extends WordLeftCommand {\n constructor() {\n super({\n inSelectionMode: false,\n wordNavigationType: 3 /* WordAccessibility */,\n id: 'cursorWordAccessibilityLeft',\n precondition: undefined\n });\n }\n _move(_, model, position, wordNavigationType) {\n return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType);\n }\n}\nexport class CursorWordAccessibilityLeftSelect extends WordLeftCommand {\n constructor() {\n super({\n inSelectionMode: true,\n wordNavigationType: 3 /* WordAccessibility */,\n id: 'cursorWordAccessibilityLeftSelect',\n precondition: undefined\n });\n }\n _move(_, model, position, wordNavigationType) {\n return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType);\n }\n}\nexport class CursorWordStartRight extends WordRightCommand {\n constructor() {\n super({\n inSelectionMode: false,\n wordNavigationType: 0 /* WordStart */,\n id: 'cursorWordStartRight',\n precondition: undefined\n });\n }\n}\nexport class CursorWordEndRight extends WordRightCommand {\n constructor() {\n var _a;\n super({\n inSelectionMode: false,\n wordNavigationType: 2 /* WordEnd */,\n id: 'cursorWordEndRight',\n precondition: undefined,\n kbOpts: {\n kbExpr: ContextKeyExpr.and(EditorContextKeys.textInputFocus, (_a = ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, IsWindowsContext)) === null || _a === void 0 ? void 0 : _a.negate()),\n primary: 2048 /* CtrlCmd */ | 17 /* RightArrow */,\n mac: { primary: 512 /* Alt */ | 17 /* RightArrow */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nexport class CursorWordRight extends WordRightCommand {\n constructor() {\n super({\n inSelectionMode: false,\n wordNavigationType: 2 /* WordEnd */,\n id: 'cursorWordRight',\n precondition: undefined\n });\n }\n}\nexport class CursorWordStartRightSelect extends WordRightCommand {\n constructor() {\n super({\n inSelectionMode: true,\n wordNavigationType: 0 /* WordStart */,\n id: 'cursorWordStartRightSelect',\n precondition: undefined\n });\n }\n}\nexport class CursorWordEndRightSelect extends WordRightCommand {\n constructor() {\n var _a;\n super({\n inSelectionMode: true,\n wordNavigationType: 2 /* WordEnd */,\n id: 'cursorWordEndRightSelect',\n precondition: undefined,\n kbOpts: {\n kbExpr: ContextKeyExpr.and(EditorContextKeys.textInputFocus, (_a = ContextKeyExpr.and(CONTEXT_ACCESSIBILITY_MODE_ENABLED, IsWindowsContext)) === null || _a === void 0 ? void 0 : _a.negate()),\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 17 /* RightArrow */,\n mac: { primary: 512 /* Alt */ | 1024 /* Shift */ | 17 /* RightArrow */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nexport class CursorWordRightSelect extends WordRightCommand {\n constructor() {\n super({\n inSelectionMode: true,\n wordNavigationType: 2 /* WordEnd */,\n id: 'cursorWordRightSelect',\n precondition: undefined\n });\n }\n}\nexport class CursorWordAccessibilityRight extends WordRightCommand {\n constructor() {\n super({\n inSelectionMode: false,\n wordNavigationType: 3 /* WordAccessibility */,\n id: 'cursorWordAccessibilityRight',\n precondition: undefined\n });\n }\n _move(_, model, position, wordNavigationType) {\n return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType);\n }\n}\nexport class CursorWordAccessibilityRightSelect extends WordRightCommand {\n constructor() {\n super({\n inSelectionMode: true,\n wordNavigationType: 3 /* WordAccessibility */,\n id: 'cursorWordAccessibilityRightSelect',\n precondition: undefined\n });\n }\n _move(_, model, position, wordNavigationType) {\n return super._move(getMapForWordSeparators(EditorOptions.wordSeparators.defaultValue), model, position, wordNavigationType);\n }\n}\nexport class DeleteWordCommand extends EditorCommand {\n constructor(opts) {\n super(opts);\n this._whitespaceHeuristics = opts.whitespaceHeuristics;\n this._wordNavigationType = opts.wordNavigationType;\n }\n runEditorCommand(accessor, editor, args) {\n if (!editor.hasModel()) {\n return;\n }\n const wordSeparators = getMapForWordSeparators(editor.getOption(113 /* wordSeparators */));\n const model = editor.getModel();\n const selections = editor.getSelections();\n const autoClosingBrackets = editor.getOption(5 /* autoClosingBrackets */);\n const autoClosingQuotes = editor.getOption(8 /* autoClosingQuotes */);\n const autoClosingPairs = LanguageConfigurationRegistry.getAutoClosingPairs(model.getLanguageIdentifier().id);\n const viewModel = editor._getViewModel();\n const commands = selections.map((sel) => {\n const deleteRange = this._delete({\n wordSeparators,\n model,\n selection: sel,\n whitespaceHeuristics: this._whitespaceHeuristics,\n autoClosingDelete: editor.getOption(6 /* autoClosingDelete */),\n autoClosingBrackets,\n autoClosingQuotes,\n autoClosingPairs,\n autoClosedCharacters: viewModel.getCursorAutoClosedCharacters()\n }, this._wordNavigationType);\n return new ReplaceCommand(deleteRange, '');\n });\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n}\nexport class DeleteWordLeftCommand extends DeleteWordCommand {\n _delete(ctx, wordNavigationType) {\n let r = WordOperations.deleteWordLeft(ctx, wordNavigationType);\n if (r) {\n return r;\n }\n return new Range(1, 1, 1, 1);\n }\n}\nexport class DeleteWordRightCommand extends DeleteWordCommand {\n _delete(ctx, wordNavigationType) {\n let r = WordOperations.deleteWordRight(ctx, wordNavigationType);\n if (r) {\n return r;\n }\n const lineCount = ctx.model.getLineCount();\n const maxColumn = ctx.model.getLineMaxColumn(lineCount);\n return new Range(lineCount, maxColumn, lineCount, maxColumn);\n }\n}\nexport class DeleteWordStartLeft extends DeleteWordLeftCommand {\n constructor() {\n super({\n whitespaceHeuristics: false,\n wordNavigationType: 0 /* WordStart */,\n id: 'deleteWordStartLeft',\n precondition: EditorContextKeys.writable\n });\n }\n}\nexport class DeleteWordEndLeft extends DeleteWordLeftCommand {\n constructor() {\n super({\n whitespaceHeuristics: false,\n wordNavigationType: 2 /* WordEnd */,\n id: 'deleteWordEndLeft',\n precondition: EditorContextKeys.writable\n });\n }\n}\nexport class DeleteWordLeft extends DeleteWordLeftCommand {\n constructor() {\n super({\n whitespaceHeuristics: true,\n wordNavigationType: 0 /* WordStart */,\n id: 'deleteWordLeft',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 1 /* Backspace */,\n mac: { primary: 512 /* Alt */ | 1 /* Backspace */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nexport class DeleteWordStartRight extends DeleteWordRightCommand {\n constructor() {\n super({\n whitespaceHeuristics: false,\n wordNavigationType: 0 /* WordStart */,\n id: 'deleteWordStartRight',\n precondition: EditorContextKeys.writable\n });\n }\n}\nexport class DeleteWordEndRight extends DeleteWordRightCommand {\n constructor() {\n super({\n whitespaceHeuristics: false,\n wordNavigationType: 2 /* WordEnd */,\n id: 'deleteWordEndRight',\n precondition: EditorContextKeys.writable\n });\n }\n}\nexport class DeleteWordRight extends DeleteWordRightCommand {\n constructor() {\n super({\n whitespaceHeuristics: true,\n wordNavigationType: 2 /* WordEnd */,\n id: 'deleteWordRight',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 2048 /* CtrlCmd */ | 20 /* Delete */,\n mac: { primary: 512 /* Alt */ | 20 /* Delete */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nexport class DeleteInsideWord extends EditorAction {\n constructor() {\n super({\n id: 'deleteInsideWord',\n precondition: EditorContextKeys.writable,\n label: nls.localize('deleteInsideWord', \"Delete Word\"),\n alias: 'Delete Word'\n });\n }\n run(accessor, editor, args) {\n if (!editor.hasModel()) {\n return;\n }\n const wordSeparators = getMapForWordSeparators(editor.getOption(113 /* wordSeparators */));\n const model = editor.getModel();\n const selections = editor.getSelections();\n const commands = selections.map((sel) => {\n const deleteRange = WordOperations.deleteInsideWord(wordSeparators, model, sel);\n return new ReplaceCommand(deleteRange, '');\n });\n editor.pushUndoStop();\n editor.executeCommands(this.id, commands);\n editor.pushUndoStop();\n }\n}\nregisterEditorCommand(new CursorWordStartLeft());\nregisterEditorCommand(new CursorWordEndLeft());\nregisterEditorCommand(new CursorWordLeft());\nregisterEditorCommand(new CursorWordStartLeftSelect());\nregisterEditorCommand(new CursorWordEndLeftSelect());\nregisterEditorCommand(new CursorWordLeftSelect());\nregisterEditorCommand(new CursorWordStartRight());\nregisterEditorCommand(new CursorWordEndRight());\nregisterEditorCommand(new CursorWordRight());\nregisterEditorCommand(new CursorWordStartRightSelect());\nregisterEditorCommand(new CursorWordEndRightSelect());\nregisterEditorCommand(new CursorWordRightSelect());\nregisterEditorCommand(new CursorWordAccessibilityLeft());\nregisterEditorCommand(new CursorWordAccessibilityLeftSelect());\nregisterEditorCommand(new CursorWordAccessibilityRight());\nregisterEditorCommand(new CursorWordAccessibilityRightSelect());\nregisterEditorCommand(new DeleteWordStartLeft());\nregisterEditorCommand(new DeleteWordEndLeft());\nregisterEditorCommand(new DeleteWordLeft());\nregisterEditorCommand(new DeleteWordStartRight());\nregisterEditorCommand(new DeleteWordEndRight());\nregisterEditorCommand(new DeleteWordRight());\nregisterEditorAction(DeleteInsideWord);\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 *--------------------------------------------------------------------------------------------*/\nimport { registerEditorCommand } from '../../browser/editorExtensions.js';\nimport { WordPartOperations } from '../../common/controller/cursorWordOperations.js';\nimport { Range } from '../../common/core/range.js';\nimport { EditorContextKeys } from '../../common/editorContextKeys.js';\nimport { DeleteWordCommand, MoveWordCommand } from '../wordOperations/wordOperations.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nexport class DeleteWordPartLeft extends DeleteWordCommand {\n constructor() {\n super({\n whitespaceHeuristics: true,\n wordNavigationType: 0 /* WordStart */,\n id: 'deleteWordPartLeft',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 512 /* Alt */ | 1 /* Backspace */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n _delete(ctx, wordNavigationType) {\n let r = WordPartOperations.deleteWordPartLeft(ctx);\n if (r) {\n return r;\n }\n return new Range(1, 1, 1, 1);\n }\n}\nexport class DeleteWordPartRight extends DeleteWordCommand {\n constructor() {\n super({\n whitespaceHeuristics: true,\n wordNavigationType: 2 /* WordEnd */,\n id: 'deleteWordPartRight',\n precondition: EditorContextKeys.writable,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 512 /* Alt */ | 20 /* Delete */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n _delete(ctx, wordNavigationType) {\n let r = WordPartOperations.deleteWordPartRight(ctx);\n if (r) {\n return r;\n }\n const lineCount = ctx.model.getLineCount();\n const maxColumn = ctx.model.getLineMaxColumn(lineCount);\n return new Range(lineCount, maxColumn, lineCount, maxColumn);\n }\n}\nexport class WordPartLeftCommand extends MoveWordCommand {\n _move(wordSeparators, model, position, wordNavigationType) {\n return WordPartOperations.moveWordPartLeft(wordSeparators, model, position);\n }\n}\nexport class CursorWordPartLeft extends WordPartLeftCommand {\n constructor() {\n super({\n inSelectionMode: false,\n wordNavigationType: 0 /* WordStart */,\n id: 'cursorWordPartLeft',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 512 /* Alt */ | 15 /* LeftArrow */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\n// Register previous id for compatibility purposes\nCommandsRegistry.registerCommandAlias('cursorWordPartStartLeft', 'cursorWordPartLeft');\nexport class CursorWordPartLeftSelect extends WordPartLeftCommand {\n constructor() {\n super({\n inSelectionMode: true,\n wordNavigationType: 0 /* WordStart */,\n id: 'cursorWordPartLeftSelect',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 512 /* Alt */ | 1024 /* Shift */ | 15 /* LeftArrow */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\n// Register previous id for compatibility purposes\nCommandsRegistry.registerCommandAlias('cursorWordPartStartLeftSelect', 'cursorWordPartLeftSelect');\nexport class WordPartRightCommand extends MoveWordCommand {\n _move(wordSeparators, model, position, wordNavigationType) {\n return WordPartOperations.moveWordPartRight(wordSeparators, model, position);\n }\n}\nexport class CursorWordPartRight extends WordPartRightCommand {\n constructor() {\n super({\n inSelectionMode: false,\n wordNavigationType: 2 /* WordEnd */,\n id: 'cursorWordPartRight',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 512 /* Alt */ | 17 /* RightArrow */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nexport class CursorWordPartRightSelect extends WordPartRightCommand {\n constructor() {\n super({\n inSelectionMode: true,\n wordNavigationType: 2 /* WordEnd */,\n id: 'cursorWordPartRightSelect',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.textInputFocus,\n primary: 0,\n mac: { primary: 256 /* WinCtrl */ | 512 /* Alt */ | 1024 /* Shift */ | 17 /* RightArrow */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n}\nregisterEditorCommand(new DeleteWordPartLeft());\nregisterEditorCommand(new DeleteWordPartRight());\nregisterEditorCommand(new CursorWordPartLeft());\nregisterEditorCommand(new CursorWordPartLeftSelect());\nregisterEditorCommand(new CursorWordPartRight());\nregisterEditorCommand(new CursorWordPartRightSelect());\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport './accessibilityHelp.css';\nimport * as dom from '../../../../base/browser/dom.js';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { renderFormattedText } from '../../../../base/browser/formattedTextRenderer.js';\nimport { alert } from '../../../../base/browser/ui/aria/aria.js';\nimport { Widget } from '../../../../base/browser/ui/widget.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { EditorAction, EditorCommand, registerEditorAction, registerEditorCommand, registerEditorContribution } from '../../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { ToggleTabFocusModeAction } from '../../../contrib/toggleTabFocusMode/toggleTabFocusMode.js';\nimport { IContextKeyService, RawContextKey } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js';\nimport { IOpenerService } from '../../../../platform/opener/common/opener.js';\nimport { contrastBorder, editorWidgetBackground, widgetShadow, editorWidgetForeground } from '../../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { AccessibilityHelpNLS } from '../../../common/standaloneStrings.js';\nconst CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE = new RawContextKey('accessibilityHelpWidgetVisible', false);\nlet AccessibilityHelpController = class AccessibilityHelpController extends Disposable {\n constructor(editor, instantiationService) {\n super();\n this._editor = editor;\n this._widget = this._register(instantiationService.createInstance(AccessibilityHelpWidget, this._editor));\n }\n static get(editor) {\n return editor.getContribution(AccessibilityHelpController.ID);\n }\n show() {\n this._widget.show();\n }\n hide() {\n this._widget.hide();\n }\n};\nAccessibilityHelpController.ID = 'editor.contrib.accessibilityHelpController';\nAccessibilityHelpController = __decorate([\n __param(1, IInstantiationService)\n], AccessibilityHelpController);\nfunction getSelectionLabel(selections, charactersSelected) {\n if (!selections || selections.length === 0) {\n return AccessibilityHelpNLS.noSelection;\n }\n if (selections.length === 1) {\n if (charactersSelected) {\n return strings.format(AccessibilityHelpNLS.singleSelectionRange, selections[0].positionLineNumber, selections[0].positionColumn, charactersSelected);\n }\n return strings.format(AccessibilityHelpNLS.singleSelection, selections[0].positionLineNumber, selections[0].positionColumn);\n }\n if (charactersSelected) {\n return strings.format(AccessibilityHelpNLS.multiSelectionRange, selections.length, charactersSelected);\n }\n if (selections.length > 0) {\n return strings.format(AccessibilityHelpNLS.multiSelection, selections.length);\n }\n return '';\n}\nlet AccessibilityHelpWidget = class AccessibilityHelpWidget extends Widget {\n constructor(editor, _contextKeyService, _keybindingService, _openerService) {\n super();\n this._contextKeyService = _contextKeyService;\n this._keybindingService = _keybindingService;\n this._openerService = _openerService;\n this._editor = editor;\n this._isVisibleKey = CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE.bindTo(this._contextKeyService);\n this._domNode = createFastDomNode(document.createElement('div'));\n this._domNode.setClassName('accessibilityHelpWidget');\n this._domNode.setDisplay('none');\n this._domNode.setAttribute('role', 'dialog');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._contentDomNode = createFastDomNode(document.createElement('div'));\n this._contentDomNode.setAttribute('role', 'document');\n this._domNode.appendChild(this._contentDomNode);\n this._isVisible = false;\n this._register(this._editor.onDidLayoutChange(() => {\n if (this._isVisible) {\n this._layout();\n }\n }));\n // Intentionally not configurable!\n this._register(dom.addStandardDisposableListener(this._contentDomNode.domNode, 'keydown', (e) => {\n if (!this._isVisible) {\n return;\n }\n if (e.equals(2048 /* CtrlCmd */ | 35 /* KEY_E */)) {\n alert(AccessibilityHelpNLS.emergencyConfOn);\n this._editor.updateOptions({\n accessibilitySupport: 'on'\n });\n dom.clearNode(this._contentDomNode.domNode);\n this._buildContent();\n this._contentDomNode.domNode.focus();\n e.preventDefault();\n e.stopPropagation();\n }\n if (e.equals(2048 /* CtrlCmd */ | 38 /* KEY_H */)) {\n alert(AccessibilityHelpNLS.openingDocs);\n let url = this._editor.getRawOptions().accessibilityHelpUrl;\n if (typeof url === 'undefined') {\n url = 'https://go.microsoft.com/fwlink/?linkid=852450';\n }\n this._openerService.open(URI.parse(url));\n e.preventDefault();\n e.stopPropagation();\n }\n }));\n this.onblur(this._contentDomNode.domNode, () => {\n this.hide();\n });\n this._editor.addOverlayWidget(this);\n }\n dispose() {\n this._editor.removeOverlayWidget(this);\n super.dispose();\n }\n getId() {\n return AccessibilityHelpWidget.ID;\n }\n getDomNode() {\n return this._domNode.domNode;\n }\n getPosition() {\n return {\n preference: null\n };\n }\n show() {\n if (this._isVisible) {\n return;\n }\n this._isVisible = true;\n this._isVisibleKey.set(true);\n this._layout();\n this._domNode.setDisplay('block');\n this._domNode.setAttribute('aria-hidden', 'false');\n this._contentDomNode.domNode.tabIndex = 0;\n this._buildContent();\n this._contentDomNode.domNode.focus();\n }\n _descriptionForCommand(commandId, msg, noKbMsg) {\n let kb = this._keybindingService.lookupKeybinding(commandId);\n if (kb) {\n return strings.format(msg, kb.getAriaLabel());\n }\n return strings.format(noKbMsg, commandId);\n }\n _buildContent() {\n const options = this._editor.getOptions();\n const selections = this._editor.getSelections();\n let charactersSelected = 0;\n if (selections) {\n const model = this._editor.getModel();\n if (model) {\n selections.forEach((selection) => {\n charactersSelected += model.getValueLengthInRange(selection);\n });\n }\n }\n let text = getSelectionLabel(selections, charactersSelected);\n if (options.get(51 /* inDiffEditor */)) {\n if (options.get(77 /* readOnly */)) {\n text += AccessibilityHelpNLS.readonlyDiffEditor;\n }\n else {\n text += AccessibilityHelpNLS.editableDiffEditor;\n }\n }\n else {\n if (options.get(77 /* readOnly */)) {\n text += AccessibilityHelpNLS.readonlyEditor;\n }\n else {\n text += AccessibilityHelpNLS.editableEditor;\n }\n }\n const turnOnMessage = (platform.isMacintosh\n ? AccessibilityHelpNLS.changeConfigToOnMac\n : AccessibilityHelpNLS.changeConfigToOnWinLinux);\n switch (options.get(2 /* accessibilitySupport */)) {\n case 0 /* Unknown */:\n text += '\\n\\n - ' + turnOnMessage;\n break;\n case 2 /* Enabled */:\n text += '\\n\\n - ' + AccessibilityHelpNLS.auto_on;\n break;\n case 1 /* Disabled */:\n text += '\\n\\n - ' + AccessibilityHelpNLS.auto_off;\n text += ' ' + turnOnMessage;\n break;\n }\n if (options.get(126 /* tabFocusMode */)) {\n text += '\\n\\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, AccessibilityHelpNLS.tabFocusModeOnMsg, AccessibilityHelpNLS.tabFocusModeOnMsgNoKb);\n }\n else {\n text += '\\n\\n - ' + this._descriptionForCommand(ToggleTabFocusModeAction.ID, AccessibilityHelpNLS.tabFocusModeOffMsg, AccessibilityHelpNLS.tabFocusModeOffMsgNoKb);\n }\n const openDocMessage = (platform.isMacintosh\n ? AccessibilityHelpNLS.openDocMac\n : AccessibilityHelpNLS.openDocWinLinux);\n text += '\\n\\n - ' + openDocMessage;\n text += '\\n\\n' + AccessibilityHelpNLS.outroMsg;\n this._contentDomNode.domNode.appendChild(renderFormattedText(text));\n // Per https://www.w3.org/TR/wai-aria/roles#document, Authors SHOULD provide a title or label for documents\n this._contentDomNode.domNode.setAttribute('aria-label', text);\n }\n hide() {\n if (!this._isVisible) {\n return;\n }\n this._isVisible = false;\n this._isVisibleKey.reset();\n this._domNode.setDisplay('none');\n this._domNode.setAttribute('aria-hidden', 'true');\n this._contentDomNode.domNode.tabIndex = -1;\n dom.clearNode(this._contentDomNode.domNode);\n this._editor.focus();\n }\n _layout() {\n let editorLayout = this._editor.getLayoutInfo();\n let w = Math.max(5, Math.min(AccessibilityHelpWidget.WIDTH, editorLayout.width - 40));\n let h = Math.max(5, Math.min(AccessibilityHelpWidget.HEIGHT, editorLayout.height - 40));\n this._domNode.setWidth(w);\n this._domNode.setHeight(h);\n let top = Math.round((editorLayout.height - h) / 2);\n this._domNode.setTop(top);\n let left = Math.round((editorLayout.width - w) / 2);\n this._domNode.setLeft(left);\n }\n};\nAccessibilityHelpWidget.ID = 'editor.contrib.accessibilityHelpWidget';\nAccessibilityHelpWidget.WIDTH = 500;\nAccessibilityHelpWidget.HEIGHT = 300;\nAccessibilityHelpWidget = __decorate([\n __param(1, IContextKeyService),\n __param(2, IKeybindingService),\n __param(3, IOpenerService)\n], AccessibilityHelpWidget);\nclass ShowAccessibilityHelpAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.showAccessibilityHelp',\n label: AccessibilityHelpNLS.showAccessibilityHelpAction,\n alias: 'Show Accessibility Help',\n precondition: undefined,\n kbOpts: {\n primary: 512 /* Alt */ | 59 /* F1 */,\n weight: 100 /* EditorContrib */,\n linux: {\n primary: 512 /* Alt */ | 1024 /* Shift */ | 59 /* F1 */,\n secondary: [512 /* Alt */ | 59 /* F1 */]\n }\n }\n });\n }\n run(accessor, editor) {\n let controller = AccessibilityHelpController.get(editor);\n if (controller) {\n controller.show();\n }\n }\n}\nregisterEditorContribution(AccessibilityHelpController.ID, AccessibilityHelpController);\nregisterEditorAction(ShowAccessibilityHelpAction);\nconst AccessibilityHelpCommand = EditorCommand.bindToContribution(AccessibilityHelpController.get);\nregisterEditorCommand(new AccessibilityHelpCommand({\n id: 'closeAccessibilityHelp',\n precondition: CONTEXT_ACCESSIBILITY_WIDGET_VISIBLE,\n handler: x => x.hide(),\n kbOpts: {\n weight: 100 /* EditorContrib */ + 100,\n kbExpr: EditorContextKeys.focus,\n primary: 9 /* Escape */,\n secondary: [1024 /* Shift */ | 9 /* Escape */]\n }\n}));\nregisterThemingParticipant((theme, collector) => {\n const widgetBackground = theme.getColor(editorWidgetBackground);\n if (widgetBackground) {\n collector.addRule(`.monaco-editor .accessibilityHelpWidget { background-color: ${widgetBackground}; }`);\n }\n const widgetForeground = theme.getColor(editorWidgetForeground);\n if (widgetForeground) {\n collector.addRule(`.monaco-editor .accessibilityHelpWidget { color: ${widgetForeground}; }`);\n }\n const widgetShadowColor = theme.getColor(widgetShadow);\n if (widgetShadowColor) {\n collector.addRule(`.monaco-editor .accessibilityHelpWidget { box-shadow: 0 2px 8px ${widgetShadowColor}; }`);\n }\n const hcBorder = theme.getColor(contrastBorder);\n if (hcBorder) {\n collector.addRule(`.monaco-editor .accessibilityHelpWidget { border: 2px solid ${hcBorder}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nimport './iPadShowKeyboard.css';\nimport * as browser from '../../../../base/browser/browser.js';\nimport * as dom from '../../../../base/browser/dom.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport { registerEditorContribution } from '../../../browser/editorExtensions.js';\nexport class IPadShowKeyboard extends Disposable {\n constructor(editor) {\n super();\n this.editor = editor;\n this.widget = null;\n if (browser.isIPad) {\n this._register(editor.onDidChangeConfiguration(() => this.update()));\n this.update();\n }\n }\n update() {\n const shouldHaveWidget = (!this.editor.getOption(77 /* readOnly */));\n if (!this.widget && shouldHaveWidget) {\n this.widget = new ShowKeyboardWidget(this.editor);\n }\n else if (this.widget && !shouldHaveWidget) {\n this.widget.dispose();\n this.widget = null;\n }\n }\n dispose() {\n super.dispose();\n if (this.widget) {\n this.widget.dispose();\n this.widget = null;\n }\n }\n}\nIPadShowKeyboard.ID = 'editor.contrib.iPadShowKeyboard';\nclass ShowKeyboardWidget extends Disposable {\n constructor(editor) {\n super();\n this.editor = editor;\n this._domNode = document.createElement('textarea');\n this._domNode.className = 'iPadShowKeyboard';\n this._register(dom.addDisposableListener(this._domNode, 'touchstart', (e) => {\n this.editor.focus();\n }));\n this._register(dom.addDisposableListener(this._domNode, 'focus', (e) => {\n this.editor.focus();\n }));\n this.editor.addOverlayWidget(this);\n }\n dispose() {\n this.editor.removeOverlayWidget(this);\n super.dispose();\n }\n // ----- IOverlayWidget API\n getId() {\n return ShowKeyboardWidget.ID;\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n return {\n preference: 1 /* BOTTOM_RIGHT_CORNER */\n };\n }\n}\nShowKeyboardWidget.ID = 'editor.contrib.ShowKeyboardWidget';\nregisterEditorContribution(IPadShowKeyboard.ID, IPadShowKeyboard);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport './inspectTokens.css';\nimport { $, append, reset } from '../../../../base/browser/dom.js';\nimport { Color } from '../../../../base/common/color.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport { EditorAction, registerEditorAction, registerEditorContribution } from '../../../browser/editorExtensions.js';\nimport { TokenMetadata, TokenizationRegistry } from '../../../common/modes.js';\nimport { NULL_STATE, nullTokenize, nullTokenize2 } from '../../../common/modes/nullMode.js';\nimport { IModeService } from '../../../common/services/modeService.js';\nimport { IStandaloneThemeService } from '../../common/standaloneThemeService.js';\nimport { editorHoverBackground, editorHoverBorder, editorHoverForeground } from '../../../../platform/theme/common/colorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { InspectTokensNLS } from '../../../common/standaloneStrings.js';\nimport { ColorScheme } from '../../../../platform/theme/common/theme.js';\nlet InspectTokensController = class InspectTokensController extends Disposable {\n constructor(editor, standaloneColorService, modeService) {\n super();\n this._editor = editor;\n this._modeService = modeService;\n this._widget = null;\n this._register(this._editor.onDidChangeModel((e) => this.stop()));\n this._register(this._editor.onDidChangeModelLanguage((e) => this.stop()));\n this._register(TokenizationRegistry.onDidChange((e) => this.stop()));\n this._register(this._editor.onKeyUp((e) => e.keyCode === 9 /* Escape */ && this.stop()));\n }\n static get(editor) {\n return editor.getContribution(InspectTokensController.ID);\n }\n dispose() {\n this.stop();\n super.dispose();\n }\n launch() {\n if (this._widget) {\n return;\n }\n if (!this._editor.hasModel()) {\n return;\n }\n this._widget = new InspectTokensWidget(this._editor, this._modeService);\n }\n stop() {\n if (this._widget) {\n this._widget.dispose();\n this._widget = null;\n }\n }\n};\nInspectTokensController.ID = 'editor.contrib.inspectTokens';\nInspectTokensController = __decorate([\n __param(1, IStandaloneThemeService),\n __param(2, IModeService)\n], InspectTokensController);\nclass InspectTokens extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.inspectTokens',\n label: InspectTokensNLS.inspectTokensAction,\n alias: 'Developer: Inspect Tokens',\n precondition: undefined\n });\n }\n run(accessor, editor) {\n let controller = InspectTokensController.get(editor);\n if (controller) {\n controller.launch();\n }\n }\n}\nfunction renderTokenText(tokenText) {\n let result = '';\n for (let charIndex = 0, len = tokenText.length; charIndex < len; charIndex++) {\n let charCode = tokenText.charCodeAt(charIndex);\n switch (charCode) {\n case 9 /* Tab */:\n result += '\\u2192'; // &rarr;\n break;\n case 32 /* Space */:\n result += '\\u00B7'; // &middot;\n break;\n default:\n result += String.fromCharCode(charCode);\n }\n }\n return result;\n}\nfunction getSafeTokenizationSupport(languageIdentifier) {\n let tokenizationSupport = TokenizationRegistry.get(languageIdentifier.language);\n if (tokenizationSupport) {\n return tokenizationSupport;\n }\n return {\n getInitialState: () => NULL_STATE,\n tokenize: (line, hasEOL, state, deltaOffset) => nullTokenize(languageIdentifier.language, line, state, deltaOffset),\n tokenize2: (line, hasEOL, state, deltaOffset) => nullTokenize2(languageIdentifier.id, line, state, deltaOffset)\n };\n}\nclass InspectTokensWidget extends Disposable {\n constructor(editor, modeService) {\n super();\n // Editor.IContentWidget.allowEditorOverflow\n this.allowEditorOverflow = true;\n this._editor = editor;\n this._modeService = modeService;\n this._model = this._editor.getModel();\n this._domNode = document.createElement('div');\n this._domNode.className = 'tokens-inspect-widget';\n this._tokenizationSupport = getSafeTokenizationSupport(this._model.getLanguageIdentifier());\n this._compute(this._editor.getPosition());\n this._register(this._editor.onDidChangeCursorPosition((e) => this._compute(this._editor.getPosition())));\n this._editor.addContentWidget(this);\n }\n dispose() {\n this._editor.removeContentWidget(this);\n super.dispose();\n }\n getId() {\n return InspectTokensWidget._ID;\n }\n _compute(position) {\n let data = this._getTokensAtLine(position.lineNumber);\n let token1Index = 0;\n for (let i = data.tokens1.length - 1; i >= 0; i--) {\n let t = data.tokens1[i];\n if (position.column - 1 >= t.offset) {\n token1Index = i;\n break;\n }\n }\n let token2Index = 0;\n for (let i = (data.tokens2.length >>> 1); i >= 0; i--) {\n if (position.column - 1 >= data.tokens2[(i << 1)]) {\n token2Index = i;\n break;\n }\n }\n let lineContent = this._model.getLineContent(position.lineNumber);\n let tokenText = '';\n if (token1Index < data.tokens1.length) {\n let tokenStartIndex = data.tokens1[token1Index].offset;\n let tokenEndIndex = token1Index + 1 < data.tokens1.length ? data.tokens1[token1Index + 1].offset : lineContent.length;\n tokenText = lineContent.substring(tokenStartIndex, tokenEndIndex);\n }\n reset(this._domNode, $('h2.tm-token', undefined, renderTokenText(tokenText), $('span.tm-token-length', undefined, `${tokenText.length} ${tokenText.length === 1 ? 'char' : 'chars'}`)));\n append(this._domNode, $('hr.tokens-inspect-separator', { 'style': 'clear:both' }));\n const metadata = (token2Index << 1) + 1 < data.tokens2.length ? this._decodeMetadata(data.tokens2[(token2Index << 1) + 1]) : null;\n append(this._domNode, $('table.tm-metadata-table', undefined, $('tbody', undefined, $('tr', undefined, $('td.tm-metadata-key', undefined, 'language'), $('td.tm-metadata-value', undefined, `${metadata ? metadata.languageIdentifier.language : '-?-'}`)), $('tr', undefined, $('td.tm-metadata-key', undefined, 'token type'), $('td.tm-metadata-value', undefined, `${metadata ? this._tokenTypeToString(metadata.tokenType) : '-?-'}`)), $('tr', undefined, $('td.tm-metadata-key', undefined, 'font style'), $('td.tm-metadata-value', undefined, `${metadata ? this._fontStyleToString(metadata.fontStyle) : '-?-'}`)), $('tr', undefined, $('td.tm-metadata-key', undefined, 'foreground'), $('td.tm-metadata-value', undefined, `${metadata ? Color.Format.CSS.formatHex(metadata.foreground) : '-?-'}`)), $('tr', undefined, $('td.tm-metadata-key', undefined, 'background'), $('td.tm-metadata-value', undefined, `${metadata ? Color.Format.CSS.formatHex(metadata.background) : '-?-'}`)))));\n append(this._domNode, $('hr.tokens-inspect-separator'));\n if (token1Index < data.tokens1.length) {\n append(this._domNode, $('span.tm-token-type', undefined, data.tokens1[token1Index].type));\n }\n this._editor.layoutContentWidget(this);\n }\n _decodeMetadata(metadata) {\n let colorMap = TokenizationRegistry.getColorMap();\n let languageId = TokenMetadata.getLanguageId(metadata);\n let tokenType = TokenMetadata.getTokenType(metadata);\n let fontStyle = TokenMetadata.getFontStyle(metadata);\n let foreground = TokenMetadata.getForeground(metadata);\n let background = TokenMetadata.getBackground(metadata);\n return {\n languageIdentifier: this._modeService.getLanguageIdentifier(languageId),\n tokenType: tokenType,\n fontStyle: fontStyle,\n foreground: colorMap[foreground],\n background: colorMap[background]\n };\n }\n _tokenTypeToString(tokenType) {\n switch (tokenType) {\n case 0 /* Other */: return 'Other';\n case 1 /* Comment */: return 'Comment';\n case 2 /* String */: return 'String';\n case 4 /* RegEx */: return 'RegEx';\n default: return '??';\n }\n }\n _fontStyleToString(fontStyle) {\n let r = '';\n if (fontStyle & 1 /* Italic */) {\n r += 'italic ';\n }\n if (fontStyle & 2 /* Bold */) {\n r += 'bold ';\n }\n if (fontStyle & 4 /* Underline */) {\n r += 'underline ';\n }\n if (r.length === 0) {\n r = '---';\n }\n return r;\n }\n _getTokensAtLine(lineNumber) {\n let stateBeforeLine = this._getStateBeforeLine(lineNumber);\n let tokenizationResult1 = this._tokenizationSupport.tokenize(this._model.getLineContent(lineNumber), true, stateBeforeLine, 0);\n let tokenizationResult2 = this._tokenizationSupport.tokenize2(this._model.getLineContent(lineNumber), true, stateBeforeLine, 0);\n return {\n startState: stateBeforeLine,\n tokens1: tokenizationResult1.tokens,\n tokens2: tokenizationResult2.tokens,\n endState: tokenizationResult1.endState\n };\n }\n _getStateBeforeLine(lineNumber) {\n let state = this._tokenizationSupport.getInitialState();\n for (let i = 1; i < lineNumber; i++) {\n let tokenizationResult = this._tokenizationSupport.tokenize(this._model.getLineContent(i), true, state, 0);\n state = tokenizationResult.endState;\n }\n return state;\n }\n getDomNode() {\n return this._domNode;\n }\n getPosition() {\n return {\n position: this._editor.getPosition(),\n preference: [2 /* BELOW */, 1 /* ABOVE */]\n };\n }\n}\nInspectTokensWidget._ID = 'editor.contrib.inspectTokensWidget';\nregisterEditorContribution(InspectTokensController.ID, InspectTokensController);\nregisterEditorAction(InspectTokens);\nregisterThemingParticipant((theme, collector) => {\n const border = theme.getColor(editorHoverBorder);\n if (border) {\n let borderWidth = theme.type === ColorScheme.HIGH_CONTRAST ? 2 : 1;\n collector.addRule(`.monaco-editor .tokens-inspect-widget { border: ${borderWidth}px solid ${border}; }`);\n collector.addRule(`.monaco-editor .tokens-inspect-widget .tokens-inspect-separator { background-color: ${border}; }`);\n }\n const background = theme.getColor(editorHoverBackground);\n if (background) {\n collector.addRule(`.monaco-editor .tokens-inspect-widget { background-color: ${background}; }`);\n }\n const foreground = theme.getColor(editorHoverForeground);\n if (foreground) {\n collector.addRule(`.monaco-editor .tokens-inspect-widget { color: ${foreground}; }`);\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { DisposableStore, Disposable, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { timeout } from '../../../base/common/async.js';\nexport var TriggerAction;\n(function (TriggerAction) {\n /**\n * Do nothing after the button was clicked.\n */\n TriggerAction[TriggerAction[\"NO_ACTION\"] = 0] = \"NO_ACTION\";\n /**\n * Close the picker.\n */\n TriggerAction[TriggerAction[\"CLOSE_PICKER\"] = 1] = \"CLOSE_PICKER\";\n /**\n * Update the results of the picker.\n */\n TriggerAction[TriggerAction[\"REFRESH_PICKER\"] = 2] = \"REFRESH_PICKER\";\n /**\n * Remove the item from the picker.\n */\n TriggerAction[TriggerAction[\"REMOVE_ITEM\"] = 3] = \"REMOVE_ITEM\";\n})(TriggerAction || (TriggerAction = {}));\nfunction isPicksWithActive(obj) {\n const candidate = obj;\n return Array.isArray(candidate.items);\n}\nfunction isFastAndSlowPicks(obj) {\n const candidate = obj;\n return !!candidate.picks && candidate.additionalPicks instanceof Promise;\n}\nexport class PickerQuickAccessProvider extends Disposable {\n constructor(prefix, options) {\n super();\n this.prefix = prefix;\n this.options = options;\n }\n provide(picker, token) {\n var _a;\n const disposables = new DisposableStore();\n // Apply options if any\n picker.canAcceptInBackground = !!((_a = this.options) === null || _a === void 0 ? void 0 : _a.canAcceptInBackground);\n // Disable filtering & sorting, we control the results\n picker.matchOnLabel = picker.matchOnDescription = picker.matchOnDetail = picker.sortByLabel = false;\n // Set initial picks and update on type\n let picksCts = undefined;\n const picksDisposable = disposables.add(new MutableDisposable());\n const updatePickerItems = () => __awaiter(this, void 0, void 0, function* () {\n const picksDisposables = picksDisposable.value = new DisposableStore();\n // Cancel any previous ask for picks and busy\n picksCts === null || picksCts === void 0 ? void 0 : picksCts.dispose(true);\n picker.busy = false;\n // Create new cancellation source for this run\n picksCts = new CancellationTokenSource(token);\n // Collect picks and support both long running and short or combined\n const picksToken = picksCts.token;\n const picksFilter = picker.value.substr(this.prefix.length).trim();\n const providedPicks = this.getPicks(picksFilter, picksDisposables, picksToken);\n const applyPicks = (picks, skipEmpty) => {\n var _a;\n let items;\n let activeItem = undefined;\n if (isPicksWithActive(picks)) {\n items = picks.items;\n activeItem = picks.active;\n }\n else {\n items = picks;\n }\n if (items.length === 0) {\n if (skipEmpty) {\n return false;\n }\n if (picksFilter.length > 0 && ((_a = this.options) === null || _a === void 0 ? void 0 : _a.noResultsPick)) {\n items = [this.options.noResultsPick];\n }\n }\n picker.items = items;\n if (activeItem) {\n picker.activeItems = [activeItem];\n }\n return true;\n };\n // No Picks\n if (providedPicks === null) {\n // Ignore\n }\n // Fast and Slow Picks\n else if (isFastAndSlowPicks(providedPicks)) {\n let fastPicksApplied = false;\n let slowPicksApplied = false;\n yield Promise.all([\n // Fast Picks: to reduce amount of flicker, we race against\n // the slow picks over 500ms and then set the fast picks.\n // If the slow picks are faster, we reduce the flicker by\n // only setting the items once.\n (() => __awaiter(this, void 0, void 0, function* () {\n yield timeout(PickerQuickAccessProvider.FAST_PICKS_RACE_DELAY);\n if (picksToken.isCancellationRequested) {\n return;\n }\n if (!slowPicksApplied) {\n fastPicksApplied = applyPicks(providedPicks.picks, true /* skip over empty to reduce flicker */);\n }\n }))(),\n // Slow Picks: we await the slow picks and then set them at\n // once together with the fast picks, but only if we actually\n // have additional results.\n (() => __awaiter(this, void 0, void 0, function* () {\n picker.busy = true;\n try {\n const awaitedAdditionalPicks = yield providedPicks.additionalPicks;\n if (picksToken.isCancellationRequested) {\n return;\n }\n let picks;\n let activePick = undefined;\n if (isPicksWithActive(providedPicks.picks)) {\n picks = providedPicks.picks.items;\n activePick = providedPicks.picks.active;\n }\n else {\n picks = providedPicks.picks;\n }\n let additionalPicks;\n let additionalActivePick = undefined;\n if (isPicksWithActive(awaitedAdditionalPicks)) {\n additionalPicks = awaitedAdditionalPicks.items;\n additionalActivePick = awaitedAdditionalPicks.active;\n }\n else {\n additionalPicks = awaitedAdditionalPicks;\n }\n if (additionalPicks.length > 0 || !fastPicksApplied) {\n // If we do not have any activePick or additionalActivePick\n // we try to preserve the currently active pick from the\n // fast results. This fixes an issue where the user might\n // have made a pick active before the additional results\n // kick in.\n // See https://github.com/microsoft/vscode/issues/102480\n let fallbackActivePick = undefined;\n if (!activePick && !additionalActivePick) {\n const fallbackActivePickCandidate = picker.activeItems[0];\n if (fallbackActivePickCandidate && picks.indexOf(fallbackActivePickCandidate) !== -1) {\n fallbackActivePick = fallbackActivePickCandidate;\n }\n }\n applyPicks({\n items: [...picks, ...additionalPicks],\n active: activePick || additionalActivePick || fallbackActivePick\n });\n }\n }\n finally {\n if (!picksToken.isCancellationRequested) {\n picker.busy = false;\n }\n slowPicksApplied = true;\n }\n }))()\n ]);\n }\n // Fast Picks\n else if (!(providedPicks instanceof Promise)) {\n applyPicks(providedPicks);\n }\n // Slow Picks\n else {\n picker.busy = true;\n try {\n const awaitedPicks = yield providedPicks;\n if (picksToken.isCancellationRequested) {\n return;\n }\n applyPicks(awaitedPicks);\n }\n finally {\n if (!picksToken.isCancellationRequested) {\n picker.busy = false;\n }\n }\n }\n });\n disposables.add(picker.onDidChangeValue(() => updatePickerItems()));\n updatePickerItems();\n // Accept the pick on accept and hide picker\n disposables.add(picker.onDidAccept(event => {\n const [item] = picker.selectedItems;\n if (typeof (item === null || item === void 0 ? void 0 : item.accept) === 'function') {\n if (!event.inBackground) {\n picker.hide(); // hide picker unless we accept in background\n }\n item.accept(picker.keyMods, event);\n }\n }));\n // Trigger the pick with button index if button triggered\n disposables.add(picker.onDidTriggerItemButton(({ button, item }) => __awaiter(this, void 0, void 0, function* () {\n var _b, _c;\n if (typeof item.trigger === 'function') {\n const buttonIndex = (_c = (_b = item.buttons) === null || _b === void 0 ? void 0 : _b.indexOf(button)) !== null && _c !== void 0 ? _c : -1;\n if (buttonIndex >= 0) {\n const result = item.trigger(buttonIndex, picker.keyMods);\n const action = (typeof result === 'number') ? result : yield result;\n if (token.isCancellationRequested) {\n return;\n }\n switch (action) {\n case TriggerAction.NO_ACTION:\n break;\n case TriggerAction.CLOSE_PICKER:\n picker.hide();\n break;\n case TriggerAction.REFRESH_PICKER:\n updatePickerItems();\n break;\n case TriggerAction.REMOVE_ITEM:\n const index = picker.items.indexOf(item);\n if (index !== -1) {\n const items = picker.items.slice();\n items.splice(index, 1);\n picker.items = items;\n }\n break;\n }\n }\n }\n })));\n return disposables;\n }\n}\nPickerQuickAccessProvider.FAST_PICKS_RACE_DELAY = 200; // timeout before we accept fast results before slow results are present\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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../nls.js';\nimport * as types from './types.js';\nimport * as arrays from './arrays.js';\nfunction exceptionToErrorMessage(exception, verbose) {\n if (verbose && (exception.stack || exception.stacktrace)) {\n return nls.localize('stackTrace.format', \"{0}: {1}\", detectSystemErrorMessage(exception), stackToString(exception.stack) || stackToString(exception.stacktrace));\n }\n return detectSystemErrorMessage(exception);\n}\nfunction stackToString(stack) {\n if (Array.isArray(stack)) {\n return stack.join('\\n');\n }\n return stack;\n}\nfunction detectSystemErrorMessage(exception) {\n // See https://nodejs.org/api/errors.html#errors_class_system_error\n if (typeof exception.code === 'string' && typeof exception.errno === 'number' && typeof exception.syscall === 'string') {\n return nls.localize('nodeExceptionMessage', \"A system error occurred ({0})\", exception.message);\n }\n return exception.message || nls.localize('error.defaultMessage', \"An unknown error occurred. Please consult the log for more details.\");\n}\n/**\n * Tries to generate a human readable error message out of the error. If the verbose parameter\n * is set to true, the error message will include stacktrace details if provided.\n *\n * @returns A string containing the error message.\n */\nexport function toErrorMessage(error = null, verbose = false) {\n if (!error) {\n return nls.localize('error.defaultMessage', \"An unknown error occurred. Please consult the log for more details.\");\n }\n if (Array.isArray(error)) {\n const errors = arrays.coalesce(error);\n const msg = toErrorMessage(errors[0], verbose);\n if (errors.length > 1) {\n return nls.localize('error.moreErrors', \"{0} ({1} errors in total)\", msg, errors.length);\n }\n return msg;\n }\n if (types.isString(error)) {\n return error;\n }\n if (error.detail) {\n const detail = error.detail;\n if (detail.error) {\n return exceptionToErrorMessage(detail.error, verbose);\n }\n if (detail.exception) {\n return exceptionToErrorMessage(detail.exception, verbose);\n }\n }\n if (error.stack) {\n return exceptionToErrorMessage(error, verbose);\n }\n if (error.message) {\n return error.message;\n }\n return nls.localize('error.defaultMessage', \"An unknown error occurred. Please consult the log for more details.\");\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { localize } from '../../../nls.js';\nimport { PickerQuickAccessProvider } from './pickerQuickAccess.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { or, matchesPrefix, matchesWords, matchesContiguousSubString } from '../../../base/common/filters.js';\nimport { withNullAsUndefined } from '../../../base/common/types.js';\nimport { LRUCache } from '../../../base/common/map.js';\nimport { IStorageService } from '../../storage/common/storage.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { ICommandService } from '../../commands/common/commands.js';\nimport { ITelemetryService } from '../../telemetry/common/telemetry.js';\nimport { isPromiseCanceledError } from '../../../base/common/errors.js';\nimport { INotificationService } from '../../notification/common/notification.js';\nimport { toErrorMessage } from '../../../base/common/errorMessage.js';\nlet AbstractCommandsQuickAccessProvider = class AbstractCommandsQuickAccessProvider extends PickerQuickAccessProvider {\n constructor(options, instantiationService, keybindingService, commandService, telemetryService, notificationService) {\n super(AbstractCommandsQuickAccessProvider.PREFIX, options);\n this.instantiationService = instantiationService;\n this.keybindingService = keybindingService;\n this.commandService = commandService;\n this.telemetryService = telemetryService;\n this.notificationService = notificationService;\n this.commandsHistory = this._register(this.instantiationService.createInstance(CommandsHistory));\n this.options = options;\n }\n getPicks(filter, disposables, token) {\n return __awaiter(this, void 0, void 0, function* () {\n // Ask subclass for all command picks\n const allCommandPicks = yield this.getCommandPicks(disposables, token);\n if (token.isCancellationRequested) {\n return [];\n }\n // Filter\n const filteredCommandPicks = [];\n for (const commandPick of allCommandPicks) {\n const labelHighlights = withNullAsUndefined(AbstractCommandsQuickAccessProvider.WORD_FILTER(filter, commandPick.label));\n const aliasHighlights = commandPick.commandAlias ? withNullAsUndefined(AbstractCommandsQuickAccessProvider.WORD_FILTER(filter, commandPick.commandAlias)) : undefined;\n // Add if matching in label or alias\n if (labelHighlights || aliasHighlights) {\n commandPick.highlights = {\n label: labelHighlights,\n detail: this.options.showAlias ? aliasHighlights : undefined\n };\n filteredCommandPicks.push(commandPick);\n }\n // Also add if we have a 100% command ID match\n else if (filter === commandPick.commandId) {\n filteredCommandPicks.push(commandPick);\n }\n }\n // Add description to commands that have duplicate labels\n const mapLabelToCommand = new Map();\n for (const commandPick of filteredCommandPicks) {\n const existingCommandForLabel = mapLabelToCommand.get(commandPick.label);\n if (existingCommandForLabel) {\n commandPick.description = commandPick.commandId;\n existingCommandForLabel.description = existingCommandForLabel.commandId;\n }\n else {\n mapLabelToCommand.set(commandPick.label, commandPick);\n }\n }\n // Sort by MRU order and fallback to name otherwise\n filteredCommandPicks.sort((commandPickA, commandPickB) => {\n const commandACounter = this.commandsHistory.peek(commandPickA.commandId);\n const commandBCounter = this.commandsHistory.peek(commandPickB.commandId);\n if (commandACounter && commandBCounter) {\n return commandACounter > commandBCounter ? -1 : 1; // use more recently used command before older\n }\n if (commandACounter) {\n return -1; // first command was used, so it wins over the non used one\n }\n if (commandBCounter) {\n return 1; // other command was used so it wins over the command\n }\n // both commands were never used, so we sort by name\n return commandPickA.label.localeCompare(commandPickB.label);\n });\n const commandPicks = [];\n let addSeparator = false;\n for (let i = 0; i < filteredCommandPicks.length; i++) {\n const commandPick = filteredCommandPicks[i];\n const keybinding = this.keybindingService.lookupKeybinding(commandPick.commandId);\n const ariaLabel = keybinding ?\n localize('commandPickAriaLabelWithKeybinding', \"{0}, {1}\", commandPick.label, keybinding.getAriaLabel()) :\n commandPick.label;\n // Separator: recently used\n if (i === 0 && this.commandsHistory.peek(commandPick.commandId)) {\n commandPicks.push({ type: 'separator', label: localize('recentlyUsed', \"recently used\") });\n addSeparator = true;\n }\n // Separator: other commands\n if (i !== 0 && addSeparator && !this.commandsHistory.peek(commandPick.commandId)) {\n commandPicks.push({ type: 'separator', label: localize('morecCommands', \"other commands\") });\n addSeparator = false; // only once\n }\n // Command\n commandPicks.push(Object.assign(Object.assign({}, commandPick), { ariaLabel, detail: this.options.showAlias && commandPick.commandAlias !== commandPick.label ? commandPick.commandAlias : undefined, keybinding, accept: () => __awaiter(this, void 0, void 0, function* () {\n // Add to history\n this.commandsHistory.push(commandPick.commandId);\n // Telementry\n this.telemetryService.publicLog2('workbenchActionExecuted', {\n id: commandPick.commandId,\n from: 'quick open'\n });\n // Run\n try {\n yield this.commandService.executeCommand(commandPick.commandId);\n }\n catch (error) {\n if (!isPromiseCanceledError(error)) {\n this.notificationService.error(localize('canNotRun', \"Command '{0}' resulted in an error ({1})\", commandPick.label, toErrorMessage(error)));\n }\n }\n }) }));\n }\n return commandPicks;\n });\n }\n};\nAbstractCommandsQuickAccessProvider.PREFIX = '>';\nAbstractCommandsQuickAccessProvider.WORD_FILTER = or(matchesPrefix, matchesWords, matchesContiguousSubString);\nAbstractCommandsQuickAccessProvider = __decorate([\n __param(1, IInstantiationService),\n __param(2, IKeybindingService),\n __param(3, ICommandService),\n __param(4, ITelemetryService),\n __param(5, INotificationService)\n], AbstractCommandsQuickAccessProvider);\nexport { AbstractCommandsQuickAccessProvider };\nlet CommandsHistory = class CommandsHistory extends Disposable {\n constructor(storageService, configurationService) {\n super();\n this.storageService = storageService;\n this.configurationService = configurationService;\n this.configuredCommandsHistoryLength = 0;\n this.updateConfiguration();\n this.load();\n this.registerListeners();\n }\n registerListeners() {\n this._register(this.configurationService.onDidChangeConfiguration(() => this.updateConfiguration()));\n }\n updateConfiguration() {\n this.configuredCommandsHistoryLength = CommandsHistory.getConfiguredCommandHistoryLength(this.configurationService);\n if (CommandsHistory.cache && CommandsHistory.cache.limit !== this.configuredCommandsHistoryLength) {\n CommandsHistory.cache.limit = this.configuredCommandsHistoryLength;\n CommandsHistory.saveState(this.storageService);\n }\n }\n load() {\n const raw = this.storageService.get(CommandsHistory.PREF_KEY_CACHE, 0 /* GLOBAL */);\n let serializedCache;\n if (raw) {\n try {\n serializedCache = JSON.parse(raw);\n }\n catch (error) {\n // invalid data\n }\n }\n const cache = CommandsHistory.cache = new LRUCache(this.configuredCommandsHistoryLength, 1);\n if (serializedCache) {\n let entries;\n if (serializedCache.usesLRU) {\n entries = serializedCache.entries;\n }\n else {\n entries = serializedCache.entries.sort((a, b) => a.value - b.value);\n }\n entries.forEach(entry => cache.set(entry.key, entry.value));\n }\n CommandsHistory.counter = this.storageService.getNumber(CommandsHistory.PREF_KEY_COUNTER, 0 /* GLOBAL */, CommandsHistory.counter);\n }\n push(commandId) {\n if (!CommandsHistory.cache) {\n return;\n }\n CommandsHistory.cache.set(commandId, CommandsHistory.counter++); // set counter to command\n CommandsHistory.saveState(this.storageService);\n }\n peek(commandId) {\n var _a;\n return (_a = CommandsHistory.cache) === null || _a === void 0 ? void 0 : _a.peek(commandId);\n }\n static saveState(storageService) {\n if (!CommandsHistory.cache) {\n return;\n }\n const serializedCache = { usesLRU: true, entries: [] };\n CommandsHistory.cache.forEach((value, key) => serializedCache.entries.push({ key, value }));\n storageService.store(CommandsHistory.PREF_KEY_CACHE, JSON.stringify(serializedCache), 0 /* GLOBAL */, 0 /* USER */);\n storageService.store(CommandsHistory.PREF_KEY_COUNTER, CommandsHistory.counter, 0 /* GLOBAL */, 0 /* USER */);\n }\n static getConfiguredCommandHistoryLength(configurationService) {\n var _a, _b;\n const config = configurationService.getValue();\n const configuredCommandHistoryLength = (_b = (_a = config.workbench) === null || _a === void 0 ? void 0 : _a.commandPalette) === null || _b === void 0 ? void 0 : _b.history;\n if (typeof configuredCommandHistoryLength === 'number') {\n return configuredCommandHistoryLength;\n }\n return CommandsHistory.DEFAULT_COMMANDS_HISTORY_LENGTH;\n }\n};\nCommandsHistory.DEFAULT_COMMANDS_HISTORY_LENGTH = 50;\nCommandsHistory.PREF_KEY_CACHE = 'commandPalette.mru.cache';\nCommandsHistory.PREF_KEY_COUNTER = 'commandPalette.mru.counter';\nCommandsHistory.counter = 1;\nCommandsHistory = __decorate([\n __param(0, IStorageService),\n __param(1, IConfigurationService)\n], CommandsHistory);\nexport { CommandsHistory };\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 *--------------------------------------------------------------------------------------------*/\nimport { AbstractCommandsQuickAccessProvider } from '../../../platform/quickinput/browser/commandsQuickAccess.js';\nimport { stripIcons } from '../../../base/common/iconLabels.js';\nexport class AbstractEditorCommandsQuickAccessProvider extends AbstractCommandsQuickAccessProvider {\n constructor(options, instantiationService, keybindingService, commandService, telemetryService, notificationService) {\n super(options, instantiationService, keybindingService, commandService, telemetryService, notificationService);\n }\n getCodeEditorCommandPicks() {\n const activeTextEditorControl = this.activeTextEditorControl;\n if (!activeTextEditorControl) {\n return [];\n }\n const editorCommandPicks = [];\n for (const editorAction of activeTextEditorControl.getSupportedActions()) {\n editorCommandPicks.push({\n commandId: editorAction.id,\n commandAlias: editorAction.alias,\n label: stripIcons(editorAction.label) || editorAction.id,\n });\n }\n return editorCommandPicks;\n }\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Registry } from '../../../../platform/registry/common/platform.js';\nimport { Extensions } from '../../../../platform/quickinput/common/quickAccess.js';\nimport { QuickCommandNLS } from '../../../common/standaloneStrings.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { AbstractEditorCommandsQuickAccessProvider } from '../../../contrib/quickAccess/commandsQuickAccess.js';\nimport { withNullAsUndefined } from '../../../../base/common/types.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js';\nimport { ICommandService } from '../../../../platform/commands/common/commands.js';\nimport { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js';\nimport { INotificationService } from '../../../../platform/notification/common/notification.js';\nimport { EditorAction, registerEditorAction } from '../../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js';\nlet StandaloneCommandsQuickAccessProvider = class StandaloneCommandsQuickAccessProvider extends AbstractEditorCommandsQuickAccessProvider {\n constructor(instantiationService, codeEditorService, keybindingService, commandService, telemetryService, notificationService) {\n super({ showAlias: false }, instantiationService, keybindingService, commandService, telemetryService, notificationService);\n this.codeEditorService = codeEditorService;\n }\n get activeTextEditorControl() { return withNullAsUndefined(this.codeEditorService.getFocusedCodeEditor()); }\n getCommandPicks() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.getCodeEditorCommandPicks();\n });\n }\n};\nStandaloneCommandsQuickAccessProvider = __decorate([\n __param(0, IInstantiationService),\n __param(1, ICodeEditorService),\n __param(2, IKeybindingService),\n __param(3, ICommandService),\n __param(4, ITelemetryService),\n __param(5, INotificationService)\n], StandaloneCommandsQuickAccessProvider);\nexport { StandaloneCommandsQuickAccessProvider };\nRegistry.as(Extensions.Quickaccess).registerQuickAccessProvider({\n ctor: StandaloneCommandsQuickAccessProvider,\n prefix: StandaloneCommandsQuickAccessProvider.PREFIX,\n helpEntries: [{ description: QuickCommandNLS.quickCommandHelp, needsEditor: true }]\n});\nexport class GotoLineAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.quickCommand',\n label: QuickCommandNLS.quickCommandActionLabel,\n alias: 'Command Palette',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 59 /* F1 */,\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n group: 'z_commands',\n order: 1\n }\n });\n }\n run(accessor) {\n accessor.get(IQuickInputService).quickAccess.show(StandaloneCommandsQuickAccessProvider.PREFIX);\n }\n}\nregisterEditorAction(GotoLineAction);\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 *--------------------------------------------------------------------------------------------*/\nimport { OverviewRulerLane } from '../../common/model.js';\nimport { themeColorFromId } from '../../../platform/theme/common/themeService.js';\nimport { overviewRulerRangeHighlight } from '../../common/view/editorColorRegistry.js';\nimport { DisposableStore, toDisposable, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { isDiffEditor, getCodeEditor } from '../../browser/editorBrowser.js';\nimport { withNullAsUndefined } from '../../../base/common/types.js';\nimport { once } from '../../../base/common/functional.js';\n/**\n * A reusable quick access provider for the editor with support\n * for adding decorations for navigating in the currently active file\n * (for example \"Go to line\", \"Go to symbol\").\n */\nexport class AbstractEditorNavigationQuickAccessProvider {\n constructor(options) {\n this.options = options;\n //#endregion\n //#region Decorations Utils\n this.rangeHighlightDecorationId = undefined;\n }\n //#region Provider methods\n provide(picker, token) {\n var _a;\n const disposables = new DisposableStore();\n // Apply options if any\n picker.canAcceptInBackground = !!((_a = this.options) === null || _a === void 0 ? void 0 : _a.canAcceptInBackground);\n // Disable filtering & sorting, we control the results\n picker.matchOnLabel = picker.matchOnDescription = picker.matchOnDetail = picker.sortByLabel = false;\n // Provide based on current active editor\n const pickerDisposable = disposables.add(new MutableDisposable());\n pickerDisposable.value = this.doProvide(picker, token);\n // Re-create whenever the active editor changes\n disposables.add(this.onDidActiveTextEditorControlChange(() => {\n // Clear old\n pickerDisposable.value = undefined;\n // Add new\n pickerDisposable.value = this.doProvide(picker, token);\n }));\n return disposables;\n }\n doProvide(picker, token) {\n const disposables = new DisposableStore();\n // With text control\n const editor = this.activeTextEditorControl;\n if (editor && this.canProvideWithTextEditor(editor)) {\n const context = { editor };\n // Restore any view state if this picker was closed\n // without actually going to a line\n const codeEditor = getCodeEditor(editor);\n if (codeEditor) {\n // Remember view state and update it when the cursor position\n // changes even later because it could be that the user has\n // configured quick access to remain open when focus is lost and\n // we always want to restore the current location.\n let lastKnownEditorViewState = withNullAsUndefined(editor.saveViewState());\n disposables.add(codeEditor.onDidChangeCursorPosition(() => {\n lastKnownEditorViewState = withNullAsUndefined(editor.saveViewState());\n }));\n context.restoreViewState = () => {\n if (lastKnownEditorViewState && editor === this.activeTextEditorControl) {\n editor.restoreViewState(lastKnownEditorViewState);\n }\n };\n disposables.add(once(token.onCancellationRequested)(() => { var _a; return (_a = context.restoreViewState) === null || _a === void 0 ? void 0 : _a.call(context); }));\n }\n // Clean up decorations on dispose\n disposables.add(toDisposable(() => this.clearDecorations(editor)));\n // Ask subclass for entries\n disposables.add(this.provideWithTextEditor(context, picker, token));\n }\n // Without text control\n else {\n disposables.add(this.provideWithoutTextEditor(picker, token));\n }\n return disposables;\n }\n /**\n * Subclasses to implement if they can operate on the text editor.\n */\n canProvideWithTextEditor(editor) {\n return true;\n }\n gotoLocation({ editor }, options) {\n editor.setSelection(options.range);\n editor.revealRangeInCenter(options.range, 0 /* Smooth */);\n if (!options.preserveFocus) {\n editor.focus();\n }\n }\n getModel(editor) {\n var _a;\n return isDiffEditor(editor) ?\n (_a = editor.getModel()) === null || _a === void 0 ? void 0 : _a.modified :\n editor.getModel();\n }\n addDecorations(editor, range) {\n editor.changeDecorations(changeAccessor => {\n // Reset old decorations if any\n const deleteDecorations = [];\n if (this.rangeHighlightDecorationId) {\n deleteDecorations.push(this.rangeHighlightDecorationId.overviewRulerDecorationId);\n deleteDecorations.push(this.rangeHighlightDecorationId.rangeHighlightId);\n this.rangeHighlightDecorationId = undefined;\n }\n // Add new decorations for the range\n const newDecorations = [\n // highlight the entire line on the range\n {\n range,\n options: {\n className: 'rangeHighlight',\n isWholeLine: true\n }\n },\n // also add overview ruler highlight\n {\n range,\n options: {\n overviewRuler: {\n color: themeColorFromId(overviewRulerRangeHighlight),\n position: OverviewRulerLane.Full\n }\n }\n }\n ];\n const [rangeHighlightId, overviewRulerDecorationId] = changeAccessor.deltaDecorations(deleteDecorations, newDecorations);\n this.rangeHighlightDecorationId = { rangeHighlightId, overviewRulerDecorationId };\n });\n }\n clearDecorations(editor) {\n const rangeHighlightDecorationId = this.rangeHighlightDecorationId;\n if (rangeHighlightDecorationId) {\n editor.changeDecorations(changeAccessor => {\n changeAccessor.deltaDecorations([\n rangeHighlightDecorationId.overviewRulerDecorationId,\n rangeHighlightDecorationId.rangeHighlightId\n ], []);\n });\n this.rangeHighlightDecorationId = undefined;\n }\n }\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 *--------------------------------------------------------------------------------------------*/\nimport { localize } from '../../../nls.js';\nimport { DisposableStore, Disposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport { AbstractEditorNavigationQuickAccessProvider } from './editorNavigationQuickAccess.js';\nimport { getCodeEditor } from '../../browser/editorBrowser.js';\nexport class AbstractGotoLineQuickAccessProvider extends AbstractEditorNavigationQuickAccessProvider {\n constructor() {\n super({ canAcceptInBackground: true });\n }\n provideWithoutTextEditor(picker) {\n const label = localize('cannotRunGotoLine', \"Open a text editor first to go to a line.\");\n picker.items = [{ label }];\n picker.ariaLabel = label;\n return Disposable.None;\n }\n provideWithTextEditor(context, picker, token) {\n const editor = context.editor;\n const disposables = new DisposableStore();\n // Goto line once picked\n disposables.add(picker.onDidAccept(event => {\n const [item] = picker.selectedItems;\n if (item) {\n if (!this.isValidLineNumber(editor, item.lineNumber)) {\n return;\n }\n this.gotoLocation(context, { range: this.toRange(item.lineNumber, item.column), keyMods: picker.keyMods, preserveFocus: event.inBackground });\n if (!event.inBackground) {\n picker.hide();\n }\n }\n }));\n // React to picker changes\n const updatePickerAndEditor = () => {\n const position = this.parsePosition(editor, picker.value.trim().substr(AbstractGotoLineQuickAccessProvider.PREFIX.length));\n const label = this.getPickLabel(editor, position.lineNumber, position.column);\n // Picker\n picker.items = [{\n lineNumber: position.lineNumber,\n column: position.column,\n label\n }];\n // ARIA Label\n picker.ariaLabel = label;\n // Clear decorations for invalid range\n if (!this.isValidLineNumber(editor, position.lineNumber)) {\n this.clearDecorations(editor);\n return;\n }\n // Reveal\n const range = this.toRange(position.lineNumber, position.column);\n editor.revealRangeInCenter(range, 0 /* Smooth */);\n // Decorate\n this.addDecorations(editor, range);\n };\n updatePickerAndEditor();\n disposables.add(picker.onDidChangeValue(() => updatePickerAndEditor()));\n // Adjust line number visibility as needed\n const codeEditor = getCodeEditor(editor);\n if (codeEditor) {\n const options = codeEditor.getOptions();\n const lineNumbers = options.get(56 /* lineNumbers */);\n if (lineNumbers.renderType === 2 /* Relative */) {\n codeEditor.updateOptions({ lineNumbers: 'on' });\n disposables.add(toDisposable(() => codeEditor.updateOptions({ lineNumbers: 'relative' })));\n }\n }\n return disposables;\n }\n toRange(lineNumber = 1, column = 1) {\n return {\n startLineNumber: lineNumber,\n startColumn: column,\n endLineNumber: lineNumber,\n endColumn: column\n };\n }\n parsePosition(editor, value) {\n // Support line-col formats of `line,col`, `line:col`, `line#col`\n const numbers = value.split(/,|:|#/).map(part => parseInt(part, 10)).filter(part => !isNaN(part));\n const endLine = this.lineCount(editor) + 1;\n return {\n lineNumber: numbers[0] > 0 ? numbers[0] : endLine + numbers[0],\n column: numbers[1]\n };\n }\n getPickLabel(editor, lineNumber, column) {\n // Location valid: indicate this as picker label\n if (this.isValidLineNumber(editor, lineNumber)) {\n if (this.isValidColumn(editor, lineNumber, column)) {\n return localize('gotoLineColumnLabel', \"Go to line {0} and character {1}.\", lineNumber, column);\n }\n return localize('gotoLineLabel', \"Go to line {0}.\", lineNumber);\n }\n // Location invalid: show generic label\n const position = editor.getPosition() || { lineNumber: 1, column: 1 };\n const lineCount = this.lineCount(editor);\n if (lineCount > 1) {\n return localize('gotoLineLabelEmptyWithLimit', \"Current Line: {0}, Character: {1}. Type a line number between 1 and {2} to navigate to.\", position.lineNumber, position.column, lineCount);\n }\n return localize('gotoLineLabelEmpty', \"Current Line: {0}, Character: {1}. Type a line number to navigate to.\", position.lineNumber, position.column);\n }\n isValidLineNumber(editor, lineNumber) {\n if (!lineNumber || typeof lineNumber !== 'number') {\n return false;\n }\n return lineNumber > 0 && lineNumber <= this.lineCount(editor);\n }\n isValidColumn(editor, lineNumber, column) {\n if (!column || typeof column !== 'number') {\n return false;\n }\n const model = this.getModel(editor);\n if (!model) {\n return false;\n }\n const positionCandidate = { lineNumber, column };\n return model.validatePosition(positionCandidate).equals(positionCandidate);\n }\n lineCount(editor) {\n var _a, _b;\n return (_b = (_a = this.getModel(editor)) === null || _a === void 0 ? void 0 : _a.getLineCount()) !== null && _b !== void 0 ? _b : 0;\n }\n}\nAbstractGotoLineQuickAccessProvider.PREFIX = ':';\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { AbstractGotoLineQuickAccessProvider } from '../../../contrib/quickAccess/gotoLineQuickAccess.js';\nimport { Registry } from '../../../../platform/registry/common/platform.js';\nimport { Extensions } from '../../../../platform/quickinput/common/quickAccess.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { withNullAsUndefined } from '../../../../base/common/types.js';\nimport { GoToLineNLS } from '../../../common/standaloneStrings.js';\nimport { Event } from '../../../../base/common/event.js';\nimport { EditorAction, registerEditorAction } from '../../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js';\nlet StandaloneGotoLineQuickAccessProvider = class StandaloneGotoLineQuickAccessProvider extends AbstractGotoLineQuickAccessProvider {\n constructor(editorService) {\n super();\n this.editorService = editorService;\n this.onDidActiveTextEditorControlChange = Event.None;\n }\n get activeTextEditorControl() {\n return withNullAsUndefined(this.editorService.getFocusedCodeEditor());\n }\n};\nStandaloneGotoLineQuickAccessProvider = __decorate([\n __param(0, ICodeEditorService)\n], StandaloneGotoLineQuickAccessProvider);\nexport { StandaloneGotoLineQuickAccessProvider };\nRegistry.as(Extensions.Quickaccess).registerQuickAccessProvider({\n ctor: StandaloneGotoLineQuickAccessProvider,\n prefix: StandaloneGotoLineQuickAccessProvider.PREFIX,\n helpEntries: [{ description: GoToLineNLS.gotoLineActionLabel, needsEditor: true }]\n});\nexport class GotoLineAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.gotoLine',\n label: GoToLineNLS.gotoLineActionLabel,\n alias: 'Go to Line/Column...',\n precondition: undefined,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 37 /* KEY_G */,\n mac: { primary: 256 /* WinCtrl */ | 37 /* KEY_G */ },\n weight: 100 /* EditorContrib */\n }\n });\n }\n run(accessor) {\n accessor.get(IQuickInputService).quickAccess.show(StandaloneGotoLineQuickAccessProvider.PREFIX);\n }\n}\nregisterEditorAction(GotoLineAction);\n","import { fuzzyScore, createMatches as createFuzzyMatches } from './filters.js';\nimport { sep } from './path.js';\nimport { isWindows } from './platform.js';\nimport { stripWildcards } from './strings.js';\nconst NO_SCORE2 = [undefined, []];\nexport function scoreFuzzy2(target, query, patternStart = 0, wordStart = 0) {\n // Score: multiple inputs\n const preparedQuery = query;\n if (preparedQuery.values && preparedQuery.values.length > 1) {\n return doScoreFuzzy2Multiple(target, preparedQuery.values, patternStart, wordStart);\n }\n // Score: single input\n return doScoreFuzzy2Single(target, query, patternStart, wordStart);\n}\nfunction doScoreFuzzy2Multiple(target, query, patternStart, wordStart) {\n let totalScore = 0;\n const totalMatches = [];\n for (const queryPiece of query) {\n const [score, matches] = doScoreFuzzy2Single(target, queryPiece, patternStart, wordStart);\n if (typeof score !== 'number') {\n // if a single query value does not match, return with\n // no score entirely, we require all queries to match\n return NO_SCORE2;\n }\n totalScore += score;\n totalMatches.push(...matches);\n }\n // if we have a score, ensure that the positions are\n // sorted in ascending order and distinct\n return [totalScore, normalizeMatches(totalMatches)];\n}\nfunction doScoreFuzzy2Single(target, query, patternStart, wordStart) {\n const score = fuzzyScore(query.original, query.originalLowercase, patternStart, target, target.toLowerCase(), wordStart, true);\n if (!score) {\n return NO_SCORE2;\n }\n return [score[0], createFuzzyMatches(score)];\n}\nfunction normalizeMatches(matches) {\n // sort matches by start to be able to normalize\n const sortedMatches = matches.sort((matchA, matchB) => {\n return matchA.start - matchB.start;\n });\n // merge matches that overlap\n const normalizedMatches = [];\n let currentMatch = undefined;\n for (const match of sortedMatches) {\n // if we have no current match or the matches\n // do not overlap, we take it as is and remember\n // it for future merging\n if (!currentMatch || !matchOverlaps(currentMatch, match)) {\n currentMatch = match;\n normalizedMatches.push(match);\n }\n // otherwise we merge the matches\n else {\n currentMatch.start = Math.min(currentMatch.start, match.start);\n currentMatch.end = Math.max(currentMatch.end, match.end);\n }\n }\n return normalizedMatches;\n}\nfunction matchOverlaps(matchA, matchB) {\n if (matchA.end < matchB.start) {\n return false; // A ends before B starts\n }\n if (matchB.end < matchA.start) {\n return false; // B ends before A starts\n }\n return true;\n}\n/**\n * Helper function to prepare a search value for scoring by removing unwanted characters\n * and allowing to score on multiple pieces separated by whitespace character.\n */\nconst MULTIPLE_QUERY_VALUES_SEPARATOR = ' ';\nexport function prepareQuery(original) {\n if (typeof original !== 'string') {\n original = '';\n }\n const originalLowercase = original.toLowerCase();\n const { pathNormalized, normalized, normalizedLowercase } = normalizeQuery(original);\n const containsPathSeparator = pathNormalized.indexOf(sep) >= 0;\n let values = undefined;\n const originalSplit = original.split(MULTIPLE_QUERY_VALUES_SEPARATOR);\n if (originalSplit.length > 1) {\n for (const originalPiece of originalSplit) {\n const { pathNormalized: pathNormalizedPiece, normalized: normalizedPiece, normalizedLowercase: normalizedLowercasePiece } = normalizeQuery(originalPiece);\n if (normalizedPiece) {\n if (!values) {\n values = [];\n }\n values.push({\n original: originalPiece,\n originalLowercase: originalPiece.toLowerCase(),\n pathNormalized: pathNormalizedPiece,\n normalized: normalizedPiece,\n normalizedLowercase: normalizedLowercasePiece\n });\n }\n }\n }\n return { original, originalLowercase, pathNormalized, normalized, normalizedLowercase, values, containsPathSeparator };\n}\nfunction normalizeQuery(original) {\n let pathNormalized;\n if (isWindows) {\n pathNormalized = original.replace(/\\//g, sep); // Help Windows users to search for paths when using slash\n }\n else {\n pathNormalized = original.replace(/\\\\/g, sep); // Help macOS/Linux users to search for paths when using backslash\n }\n const normalized = stripWildcards(pathNormalized).replace(/\\s/g, '');\n return {\n pathNormalized,\n normalized,\n normalizedLowercase: normalized.toLowerCase()\n };\n}\nexport function pieceToQuery(arg1) {\n if (Array.isArray(arg1)) {\n return prepareQuery(arg1.map(piece => piece.original).join(MULTIPLE_QUERY_VALUES_SEPARATOR));\n }\n return prepareQuery(arg1.original);\n}\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { localize } from '../../../nls.js';\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { DisposableStore, Disposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport { Range } from '../../common/core/range.js';\nimport { AbstractEditorNavigationQuickAccessProvider } from './editorNavigationQuickAccess.js';\nimport { SymbolKinds, DocumentSymbolProviderRegistry } from '../../common/modes.js';\nimport { OutlineModel } from '../documentSymbols/outlineModel.js';\nimport { trim, format } from '../../../base/common/strings.js';\nimport { prepareQuery, pieceToQuery, scoreFuzzy2 } from '../../../base/common/fuzzyScorer.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nexport class AbstractGotoSymbolQuickAccessProvider extends AbstractEditorNavigationQuickAccessProvider {\n constructor(options = Object.create(null)) {\n super(options);\n this.options = options;\n this.options.canAcceptInBackground = true;\n }\n provideWithoutTextEditor(picker) {\n this.provideLabelPick(picker, localize('cannotRunGotoSymbolWithoutEditor', \"To go to a symbol, first open a text editor with symbol information.\"));\n return Disposable.None;\n }\n provideWithTextEditor(context, picker, token) {\n const editor = context.editor;\n const model = this.getModel(editor);\n if (!model) {\n return Disposable.None;\n }\n // Provide symbols from model if available in registry\n if (DocumentSymbolProviderRegistry.has(model)) {\n return this.doProvideWithEditorSymbols(context, model, picker, token);\n }\n // Otherwise show an entry for a model without registry\n // But give a chance to resolve the symbols at a later\n // point if possible\n return this.doProvideWithoutEditorSymbols(context, model, picker, token);\n }\n doProvideWithoutEditorSymbols(context, model, picker, token) {\n const disposables = new DisposableStore();\n // Generic pick for not having any symbol information\n this.provideLabelPick(picker, localize('cannotRunGotoSymbolWithoutSymbolProvider', \"The active text editor does not provide symbol information.\"));\n // Wait for changes to the registry and see if eventually\n // we do get symbols. This can happen if the picker is opened\n // very early after the model has loaded but before the\n // language registry is ready.\n // https://github.com/microsoft/vscode/issues/70607\n (() => __awaiter(this, void 0, void 0, function* () {\n const result = yield this.waitForLanguageSymbolRegistry(model, disposables);\n if (!result || token.isCancellationRequested) {\n return;\n }\n disposables.add(this.doProvideWithEditorSymbols(context, model, picker, token));\n }))();\n return disposables;\n }\n provideLabelPick(picker, label) {\n picker.items = [{ label, index: 0, kind: 14 /* String */ }];\n picker.ariaLabel = label;\n }\n waitForLanguageSymbolRegistry(model, disposables) {\n return __awaiter(this, void 0, void 0, function* () {\n if (DocumentSymbolProviderRegistry.has(model)) {\n return true;\n }\n let symbolProviderRegistryPromiseResolve;\n const symbolProviderRegistryPromise = new Promise(resolve => symbolProviderRegistryPromiseResolve = resolve);\n // Resolve promise when registry knows model\n const symbolProviderListener = disposables.add(DocumentSymbolProviderRegistry.onDidChange(() => {\n if (DocumentSymbolProviderRegistry.has(model)) {\n symbolProviderListener.dispose();\n symbolProviderRegistryPromiseResolve(true);\n }\n }));\n // Resolve promise when we get disposed too\n disposables.add(toDisposable(() => symbolProviderRegistryPromiseResolve(false)));\n return symbolProviderRegistryPromise;\n });\n }\n doProvideWithEditorSymbols(context, model, picker, token) {\n const editor = context.editor;\n const disposables = new DisposableStore();\n // Goto symbol once picked\n disposables.add(picker.onDidAccept(event => {\n const [item] = picker.selectedItems;\n if (item && item.range) {\n this.gotoLocation(context, { range: item.range.selection, keyMods: picker.keyMods, preserveFocus: event.inBackground });\n if (!event.inBackground) {\n picker.hide();\n }\n }\n }));\n // Goto symbol side by side if enabled\n disposables.add(picker.onDidTriggerItemButton(({ item }) => {\n if (item && item.range) {\n this.gotoLocation(context, { range: item.range.selection, keyMods: picker.keyMods, forceSideBySide: true });\n picker.hide();\n }\n }));\n // Resolve symbols from document once and reuse this\n // request for all filtering and typing then on\n const symbolsPromise = this.getDocumentSymbols(model, token);\n // Set initial picks and update on type\n let picksCts = undefined;\n const updatePickerItems = () => __awaiter(this, void 0, void 0, function* () {\n // Cancel any previous ask for picks and busy\n picksCts === null || picksCts === void 0 ? void 0 : picksCts.dispose(true);\n picker.busy = false;\n // Create new cancellation source for this run\n picksCts = new CancellationTokenSource(token);\n // Collect symbol picks\n picker.busy = true;\n try {\n const query = prepareQuery(picker.value.substr(AbstractGotoSymbolQuickAccessProvider.PREFIX.length).trim());\n const items = yield this.doGetSymbolPicks(symbolsPromise, query, undefined, picksCts.token);\n if (token.isCancellationRequested) {\n return;\n }\n if (items.length > 0) {\n picker.items = items;\n }\n else {\n if (query.original.length > 0) {\n this.provideLabelPick(picker, localize('noMatchingSymbolResults', \"No matching editor symbols\"));\n }\n else {\n this.provideLabelPick(picker, localize('noSymbolResults', \"No editor symbols\"));\n }\n }\n }\n finally {\n if (!token.isCancellationRequested) {\n picker.busy = false;\n }\n }\n });\n disposables.add(picker.onDidChangeValue(() => updatePickerItems()));\n updatePickerItems();\n // Reveal and decorate when active item changes\n // However, ignore the very first event so that\n // opening the picker is not immediately revealing\n // and decorating the first entry.\n let ignoreFirstActiveEvent = true;\n disposables.add(picker.onDidChangeActive(() => {\n const [item] = picker.activeItems;\n if (item && item.range) {\n if (ignoreFirstActiveEvent) {\n ignoreFirstActiveEvent = false;\n return;\n }\n // Reveal\n editor.revealRangeInCenter(item.range.selection, 0 /* Smooth */);\n // Decorate\n this.addDecorations(editor, item.range.decoration);\n }\n }));\n return disposables;\n }\n doGetSymbolPicks(symbolsPromise, query, options, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const symbols = yield symbolsPromise;\n if (token.isCancellationRequested) {\n return [];\n }\n const filterBySymbolKind = query.original.indexOf(AbstractGotoSymbolQuickAccessProvider.SCOPE_PREFIX) === 0;\n const filterPos = filterBySymbolKind ? 1 : 0;\n // Split between symbol and container query\n let symbolQuery;\n let containerQuery;\n if (query.values && query.values.length > 1) {\n symbolQuery = pieceToQuery(query.values[0]); // symbol: only match on first part\n containerQuery = pieceToQuery(query.values.slice(1)); // container: match on all but first parts\n }\n else {\n symbolQuery = query;\n }\n // Convert to symbol picks and apply filtering\n const filteredSymbolPicks = [];\n for (let index = 0; index < symbols.length; index++) {\n const symbol = symbols[index];\n const symbolLabel = trim(symbol.name);\n const symbolLabelWithIcon = `$(symbol-${SymbolKinds.toString(symbol.kind) || 'property'}) ${symbolLabel}`;\n const symbolLabelIconOffset = symbolLabelWithIcon.length - symbolLabel.length;\n let containerLabel = symbol.containerName;\n if (options === null || options === void 0 ? void 0 : options.extraContainerLabel) {\n if (containerLabel) {\n containerLabel = `${options.extraContainerLabel} • ${containerLabel}`;\n }\n else {\n containerLabel = options.extraContainerLabel;\n }\n }\n let symbolScore = undefined;\n let symbolMatches = undefined;\n let containerScore = undefined;\n let containerMatches = undefined;\n if (query.original.length > filterPos) {\n // First: try to score on the entire query, it is possible that\n // the symbol matches perfectly (e.g. searching for \"change log\"\n // can be a match on a markdown symbol \"change log\"). In that\n // case we want to skip the container query altogether.\n let skipContainerQuery = false;\n if (symbolQuery !== query) {\n [symbolScore, symbolMatches] = scoreFuzzy2(symbolLabelWithIcon, Object.assign(Object.assign({}, query), { values: undefined /* disable multi-query support */ }), filterPos, symbolLabelIconOffset);\n if (typeof symbolScore === 'number') {\n skipContainerQuery = true; // since we consumed the query, skip any container matching\n }\n }\n // Otherwise: score on the symbol query and match on the container later\n if (typeof symbolScore !== 'number') {\n [symbolScore, symbolMatches] = scoreFuzzy2(symbolLabelWithIcon, symbolQuery, filterPos, symbolLabelIconOffset);\n if (typeof symbolScore !== 'number') {\n continue;\n }\n }\n // Score by container if specified\n if (!skipContainerQuery && containerQuery) {\n if (containerLabel && containerQuery.original.length > 0) {\n [containerScore, containerMatches] = scoreFuzzy2(containerLabel, containerQuery);\n }\n if (typeof containerScore !== 'number') {\n continue;\n }\n if (typeof symbolScore === 'number') {\n symbolScore += containerScore; // boost symbolScore by containerScore\n }\n }\n }\n const deprecated = symbol.tags && symbol.tags.indexOf(1 /* Deprecated */) >= 0;\n filteredSymbolPicks.push({\n index,\n kind: symbol.kind,\n score: symbolScore,\n label: symbolLabelWithIcon,\n ariaLabel: symbolLabel,\n description: containerLabel,\n highlights: deprecated ? undefined : {\n label: symbolMatches,\n description: containerMatches\n },\n range: {\n selection: Range.collapseToStart(symbol.selectionRange),\n decoration: symbol.range\n },\n strikethrough: deprecated,\n buttons: (() => {\n var _a, _b;\n const openSideBySideDirection = ((_a = this.options) === null || _a === void 0 ? void 0 : _a.openSideBySideDirection) ? (_b = this.options) === null || _b === void 0 ? void 0 : _b.openSideBySideDirection() : undefined;\n if (!openSideBySideDirection) {\n return undefined;\n }\n return [\n {\n iconClass: openSideBySideDirection === 'right' ? Codicon.splitHorizontal.classNames : Codicon.splitVertical.classNames,\n tooltip: openSideBySideDirection === 'right' ? localize('openToSide', \"Open to the Side\") : localize('openToBottom', \"Open to the Bottom\")\n }\n ];\n })()\n });\n }\n // Sort by score\n const sortedFilteredSymbolPicks = filteredSymbolPicks.sort((symbolA, symbolB) => filterBySymbolKind ?\n this.compareByKindAndScore(symbolA, symbolB) :\n this.compareByScore(symbolA, symbolB));\n // Add separator for types\n // - @ only total number of symbols\n // - @: grouped by symbol kind\n let symbolPicks = [];\n if (filterBySymbolKind) {\n let lastSymbolKind = undefined;\n let lastSeparator = undefined;\n let lastSymbolKindCounter = 0;\n function updateLastSeparatorLabel() {\n if (lastSeparator && typeof lastSymbolKind === 'number' && lastSymbolKindCounter > 0) {\n lastSeparator.label = format(NLS_SYMBOL_KIND_CACHE[lastSymbolKind] || FALLBACK_NLS_SYMBOL_KIND, lastSymbolKindCounter);\n }\n }\n for (const symbolPick of sortedFilteredSymbolPicks) {\n // Found new kind\n if (lastSymbolKind !== symbolPick.kind) {\n // Update last separator with number of symbols we found for kind\n updateLastSeparatorLabel();\n lastSymbolKind = symbolPick.kind;\n lastSymbolKindCounter = 1;\n // Add new separator for new kind\n lastSeparator = { type: 'separator' };\n symbolPicks.push(lastSeparator);\n }\n // Existing kind, keep counting\n else {\n lastSymbolKindCounter++;\n }\n // Add to final result\n symbolPicks.push(symbolPick);\n }\n // Update last separator with number of symbols we found for kind\n updateLastSeparatorLabel();\n }\n else if (sortedFilteredSymbolPicks.length > 0) {\n symbolPicks = [\n { label: localize('symbols', \"symbols ({0})\", filteredSymbolPicks.length), type: 'separator' },\n ...sortedFilteredSymbolPicks\n ];\n }\n return symbolPicks;\n });\n }\n compareByScore(symbolA, symbolB) {\n if (typeof symbolA.score !== 'number' && typeof symbolB.score === 'number') {\n return 1;\n }\n else if (typeof symbolA.score === 'number' && typeof symbolB.score !== 'number') {\n return -1;\n }\n if (typeof symbolA.score === 'number' && typeof symbolB.score === 'number') {\n if (symbolA.score > symbolB.score) {\n return -1;\n }\n else if (symbolA.score < symbolB.score) {\n return 1;\n }\n }\n if (symbolA.index < symbolB.index) {\n return -1;\n }\n else if (symbolA.index > symbolB.index) {\n return 1;\n }\n return 0;\n }\n compareByKindAndScore(symbolA, symbolB) {\n const kindA = NLS_SYMBOL_KIND_CACHE[symbolA.kind] || FALLBACK_NLS_SYMBOL_KIND;\n const kindB = NLS_SYMBOL_KIND_CACHE[symbolB.kind] || FALLBACK_NLS_SYMBOL_KIND;\n // Sort by type first if scoped search\n const result = kindA.localeCompare(kindB);\n if (result === 0) {\n return this.compareByScore(symbolA, symbolB);\n }\n return result;\n }\n getDocumentSymbols(document, token) {\n return __awaiter(this, void 0, void 0, function* () {\n const model = yield OutlineModel.create(document, token);\n return token.isCancellationRequested ? [] : model.asListOfDocumentSymbols();\n });\n }\n}\nAbstractGotoSymbolQuickAccessProvider.PREFIX = '@';\nAbstractGotoSymbolQuickAccessProvider.SCOPE_PREFIX = ':';\nAbstractGotoSymbolQuickAccessProvider.PREFIX_BY_CATEGORY = `${AbstractGotoSymbolQuickAccessProvider.PREFIX}${AbstractGotoSymbolQuickAccessProvider.SCOPE_PREFIX}`;\n// #region NLS Helpers\nconst FALLBACK_NLS_SYMBOL_KIND = localize('property', \"properties ({0})\");\nconst NLS_SYMBOL_KIND_CACHE = {\n [5 /* Method */]: localize('method', \"methods ({0})\"),\n [11 /* Function */]: localize('function', \"functions ({0})\"),\n [8 /* Constructor */]: localize('_constructor', \"constructors ({0})\"),\n [12 /* Variable */]: localize('variable', \"variables ({0})\"),\n [4 /* Class */]: localize('class', \"classes ({0})\"),\n [22 /* Struct */]: localize('struct', \"structs ({0})\"),\n [23 /* Event */]: localize('event', \"events ({0})\"),\n [24 /* Operator */]: localize('operator', \"operators ({0})\"),\n [10 /* Interface */]: localize('interface', \"interfaces ({0})\"),\n [2 /* Namespace */]: localize('namespace', \"namespaces ({0})\"),\n [3 /* Package */]: localize('package', \"packages ({0})\"),\n [25 /* TypeParameter */]: localize('typeParameter', \"type parameters ({0})\"),\n [1 /* Module */]: localize('modules', \"modules ({0})\"),\n [6 /* Property */]: localize('property', \"properties ({0})\"),\n [9 /* Enum */]: localize('enum', \"enumerations ({0})\"),\n [21 /* EnumMember */]: localize('enumMember', \"enumeration members ({0})\"),\n [14 /* String */]: localize('string', \"strings ({0})\"),\n [0 /* File */]: localize('file', \"files ({0})\"),\n [17 /* Array */]: localize('array', \"arrays ({0})\"),\n [15 /* Number */]: localize('number', \"numbers ({0})\"),\n [16 /* Boolean */]: localize('boolean', \"booleans ({0})\"),\n [18 /* Object */]: localize('object', \"objects ({0})\"),\n [19 /* Key */]: localize('key', \"keys ({0})\"),\n [7 /* Field */]: localize('field', \"fields ({0})\"),\n [13 /* Constant */]: localize('constant', \"constants ({0})\")\n};\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport '../../../../base/browser/ui/codicons/codiconStyles.js'; // The codicon symbol styles are defined here and must be loaded\nimport '../../../contrib/symbolIcons/symbolIcons.js'; // The codicon symbol colors are defined here and must be loaded to get colors\nimport { AbstractGotoSymbolQuickAccessProvider } from '../../../contrib/quickAccess/gotoSymbolQuickAccess.js';\nimport { Registry } from '../../../../platform/registry/common/platform.js';\nimport { Extensions } from '../../../../platform/quickinput/common/quickAccess.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { withNullAsUndefined } from '../../../../base/common/types.js';\nimport { QuickOutlineNLS } from '../../../common/standaloneStrings.js';\nimport { Event } from '../../../../base/common/event.js';\nimport { EditorAction, registerEditorAction } from '../../../browser/editorExtensions.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { IQuickInputService } from '../../../../platform/quickinput/common/quickInput.js';\nlet StandaloneGotoSymbolQuickAccessProvider = class StandaloneGotoSymbolQuickAccessProvider extends AbstractGotoSymbolQuickAccessProvider {\n constructor(editorService) {\n super();\n this.editorService = editorService;\n this.onDidActiveTextEditorControlChange = Event.None;\n }\n get activeTextEditorControl() {\n return withNullAsUndefined(this.editorService.getFocusedCodeEditor());\n }\n};\nStandaloneGotoSymbolQuickAccessProvider = __decorate([\n __param(0, ICodeEditorService)\n], StandaloneGotoSymbolQuickAccessProvider);\nexport { StandaloneGotoSymbolQuickAccessProvider };\nRegistry.as(Extensions.Quickaccess).registerQuickAccessProvider({\n ctor: StandaloneGotoSymbolQuickAccessProvider,\n prefix: AbstractGotoSymbolQuickAccessProvider.PREFIX,\n helpEntries: [\n { description: QuickOutlineNLS.quickOutlineActionLabel, prefix: AbstractGotoSymbolQuickAccessProvider.PREFIX, needsEditor: true },\n { description: QuickOutlineNLS.quickOutlineByCategoryActionLabel, prefix: AbstractGotoSymbolQuickAccessProvider.PREFIX_BY_CATEGORY, needsEditor: true }\n ]\n});\nexport class GotoLineAction extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.quickOutline',\n label: QuickOutlineNLS.quickOutlineActionLabel,\n alias: 'Go to Symbol...',\n precondition: EditorContextKeys.hasDocumentSymbolProvider,\n kbOpts: {\n kbExpr: EditorContextKeys.focus,\n primary: 2048 /* CtrlCmd */ | 1024 /* Shift */ | 45 /* KEY_O */,\n weight: 100 /* EditorContrib */\n },\n contextMenuOpts: {\n group: 'navigation',\n order: 3\n }\n });\n }\n run(accessor) {\n accessor.get(IQuickInputService).quickAccess.show(AbstractGotoSymbolQuickAccessProvider.PREFIX);\n }\n}\nregisterEditorAction(GotoLineAction);\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { IQuickInputService } from '../common/quickInput.js';\nimport { Extensions } from '../common/quickAccess.js';\nimport { Registry } from '../../registry/common/platform.js';\nimport { localize } from '../../../nls.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nlet HelpQuickAccessProvider = class HelpQuickAccessProvider {\n constructor(quickInputService) {\n this.quickInputService = quickInputService;\n this.registry = Registry.as(Extensions.Quickaccess);\n }\n provide(picker) {\n const disposables = new DisposableStore();\n // Open a picker with the selected value if picked\n disposables.add(picker.onDidAccept(() => {\n const [item] = picker.selectedItems;\n if (item) {\n this.quickInputService.quickAccess.show(item.prefix, { preserveValue: true });\n }\n }));\n // Also open a picker when we detect the user typed the exact\n // name of a provider (e.g. `?term` for terminals)\n disposables.add(picker.onDidChangeValue(value => {\n const providerDescriptor = this.registry.getQuickAccessProvider(value.substr(HelpQuickAccessProvider.PREFIX.length));\n if (providerDescriptor && providerDescriptor.prefix && providerDescriptor.prefix !== HelpQuickAccessProvider.PREFIX) {\n this.quickInputService.quickAccess.show(providerDescriptor.prefix, { preserveValue: true });\n }\n }));\n // Fill in all providers separated by editor/global scope\n const { editorProviders, globalProviders } = this.getQuickAccessProviders();\n picker.items = editorProviders.length === 0 || globalProviders.length === 0 ?\n // Without groups\n [\n ...(editorProviders.length === 0 ? globalProviders : editorProviders)\n ] :\n // With groups\n [\n { label: localize('globalCommands', \"global commands\"), type: 'separator' },\n ...globalProviders,\n { label: localize('editorCommands', \"editor commands\"), type: 'separator' },\n ...editorProviders\n ];\n return disposables;\n }\n getQuickAccessProviders() {\n const globalProviders = [];\n const editorProviders = [];\n for (const provider of this.registry.getQuickAccessProviders().sort((providerA, providerB) => providerA.prefix.localeCompare(providerB.prefix))) {\n if (provider.prefix === HelpQuickAccessProvider.PREFIX) {\n continue; // exclude help which is already active\n }\n for (const helpEntry of provider.helpEntries) {\n const prefix = helpEntry.prefix || provider.prefix;\n const label = prefix || '\\u2026' /* ... */;\n (helpEntry.needsEditor ? editorProviders : globalProviders).push({\n prefix,\n label,\n ariaLabel: localize('helpPickAriaLabel', \"{0}, {1}\", label, helpEntry.description),\n description: helpEntry.description\n });\n }\n }\n return { editorProviders, globalProviders };\n }\n};\nHelpQuickAccessProvider.PREFIX = '?';\nHelpQuickAccessProvider = __decorate([\n __param(0, IQuickInputService)\n], HelpQuickAccessProvider);\nexport { HelpQuickAccessProvider };\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 *--------------------------------------------------------------------------------------------*/\nimport { Registry } from '../../../../platform/registry/common/platform.js';\nimport { Extensions } from '../../../../platform/quickinput/common/quickAccess.js';\nimport { QuickHelpNLS } from '../../../common/standaloneStrings.js';\nimport { HelpQuickAccessProvider } from '../../../../platform/quickinput/browser/helpQuickAccess.js';\nRegistry.as(Extensions.Quickaccess).registerQuickAccessProvider({\n ctor: HelpQuickAccessProvider,\n prefix: '',\n helpEntries: [{ description: QuickHelpNLS.helpQuickAccessActionLabel, needsEditor: true }]\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 *--------------------------------------------------------------------------------------------*/\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nimport { registerEditorContribution } from '../../../browser/editorExtensions.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { ReferencesController } from '../../../contrib/gotoSymbol/peek/referencesController.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { INotificationService } from '../../../../platform/notification/common/notification.js';\nimport { IStorageService } from '../../../../platform/storage/common/storage.js';\nlet StandaloneReferencesController = class StandaloneReferencesController extends ReferencesController {\n constructor(editor, contextKeyService, editorService, notificationService, instantiationService, storageService, configurationService) {\n super(true, editor, contextKeyService, editorService, notificationService, instantiationService, storageService, configurationService);\n }\n};\nStandaloneReferencesController = __decorate([\n __param(1, IContextKeyService),\n __param(2, ICodeEditorService),\n __param(3, INotificationService),\n __param(4, IInstantiationService),\n __param(5, IStorageService),\n __param(6, IConfigurationService)\n], StandaloneReferencesController);\nexport { StandaloneReferencesController };\nregisterEditorContribution(ReferencesController.ID, StandaloneReferencesController);\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 *--------------------------------------------------------------------------------------------*/\nimport { EditorAction, registerEditorAction } from '../../../browser/editorExtensions.js';\nimport { IStandaloneThemeService } from '../../common/standaloneThemeService.js';\nimport { ToggleHighContrastNLS } from '../../../common/standaloneStrings.js';\nclass ToggleHighContrast extends EditorAction {\n constructor() {\n super({\n id: 'editor.action.toggleHighContrast',\n label: ToggleHighContrastNLS.toggleHighContrast,\n alias: 'Toggle High Contrast Theme',\n precondition: undefined\n });\n this._originalThemeName = null;\n }\n run(accessor, editor) {\n const standaloneThemeService = accessor.get(IStandaloneThemeService);\n if (this._originalThemeName) {\n // We must toggle back to the integrator's theme\n standaloneThemeService.setTheme(this._originalThemeName);\n this._originalThemeName = null;\n }\n else {\n this._originalThemeName = standaloneThemeService.getColorTheme().themeName;\n standaloneThemeService.setTheme('hc-black');\n }\n }\n}\nregisterEditorAction(ToggleHighContrast);\n","\n\n class DebugPlugin extends HTMLElement {\n constructor() {\n super();\n }\n\n get name() {\n return 'Debug';\n }\n\n get selectMode() {\n return 'toggle';\n }\n\n update(...args) {\n return this.draw(...args);\n }\n\n async draw(view) {\n this.style.backgroundColor = '#fff';\n let perspective_viewer = this.parentElement;\n const csv = await view.to_csv({config: {delimiter: '|'}});\n const css = `margin:0;overflow:scroll;position:absolute;width:100%;height:100%`;\n this.innerHTML = `<pre style='${css}'>${csv}</pre>`;\n }\n\n async clear() {\n this.innerHtml = '';\n }\n\n async resize() {}\n\n save() {}\n\n restore() {}\n\n delete() {}\n }\n\n export function register_default_plugin_web_component() {\n if (!window.__test_plugin__) {\n window.__test_plugin__ = true;\n customElements.define('perspective-viewer-debug', DebugPlugin);\n }\n }\n \n\n","\nimport worker from \"!!../../../../worker-loader/dist/runtime/inline.js\";\n\nexport default function Worker_fn() {\n return worker(\"(()=>{\\\"use strict\\\";var e={};e.g=function(){if(\\\"object\\\"==typeof globalThis)return globalThis;try{return this||new Function(\\\"return this\\\")()}catch(e){if(\\\"object\\\"==typeof window)return window}}();const t=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout((()=>{if(e.stack)throw new Error(e.message+\\\"\\\\n\\\\n\\\"+e.stack);throw e}),0)}}emit(e){this.listeners.forEach((t=>{t(e)}))}onUnexpectedError(e){this.unexpectedErrorHandler(e),this.emit(e)}onUnexpectedExternalError(e){this.unexpectedErrorHandler(e)}};function n(e){s(e)||t.onUnexpectedError(e)}function i(e){if(e instanceof Error){let{name:t,message:n}=e;return{$isError:!0,name:t,message:n,stack:e.stacktrace||e.stack}}return e}const r=\\\"Canceled\\\";function s(e){return e instanceof Error&&e.name===r&&e.message===r}var o;!function(e){e.is=function(e){return e&&\\\"object\\\"==typeof e&&\\\"function\\\"==typeof e[Symbol.iterator]};const t=Object.freeze([]);e.empty=function(){return t},e.single=function*(e){yield e},e.from=function(e){return e||t},e.isEmpty=function(e){return!e||!0===e[Symbol.iterator]().next().done},e.first=function(e){return e[Symbol.iterator]().next().value},e.some=function(e,t){for(const n of e)if(t(n))return!0;return!1},e.find=function(e,t){for(const n of e)if(t(n))return n},e.filter=function*(e,t){for(const n of e)t(n)&&(yield n)},e.map=function*(e,t){for(const n of e)yield t(n)},e.concat=function*(...e){for(const t of e)for(const e of t)yield e},e.concatNested=function*(e){for(const t of e)for(const e of t)yield e},e.reduce=function(e,t,n){let i=n;for(const n of e)i=t(i,n);return i},e.slice=function*(e,t,n=e.length){for(t<0&&(t+=e.length),n<0?n+=e.length:n>e.length&&(n=e.length);t<n;t++)yield e[t]},e.consume=function(t,n=Number.POSITIVE_INFINITY){const i=[];if(0===n)return[i,t];const r=t[Symbol.iterator]();for(let t=0;t<n;t++){const t=r.next();if(t.done)return[i,e.empty()];i.push(t.value)}return[i,{[Symbol.iterator]:()=>r}]},e.equals=function(e,t,n=((e,t)=>e===t)){const i=e[Symbol.iterator](),r=t[Symbol.iterator]();for(;;){const e=i.next(),t=r.next();if(e.done!==t.done)return!1;if(e.done)return!0;if(!n(e.value,t.value))return!1}}}(o||(o={}));let a=null;function l(e){a&&a.markTracked(e)}function u(e){return a?(a.trackDisposable(e),e):e}class h extends Error{constructor(e){super(`Encountered errors while disposing of store. Errors: [${e.join(\\\", \\\")}]`),this.errors=e}}function d(e){if(o.is(e)){let t=[];for(const n of e)if(n){l(n);try{n.dispose()}catch(e){t.push(e)}}if(1===t.length)throw t[0];if(t.length>1)throw new h(t);return Array.isArray(e)?[]:e}if(e)return l(e),e.dispose(),e}function c(...e){return e.forEach(l),function(e){const t=u({dispose:()=>{l(t),e()}});return t}((()=>d(e)))}class f{constructor(){this._toDispose=new Set,this._isDisposed=!1}dispose(){this._isDisposed||(l(this),this._isDisposed=!0,this.clear())}clear(){try{d(this._toDispose.values())}finally{this._toDispose.clear()}}add(e){if(!e)return e;if(e===this)throw new Error(\\\"Cannot register a disposable on itself!\\\");return l(e),this._isDisposed?f.DISABLE_DISPOSED_WARNING||console.warn(new Error(\\\"Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!\\\").stack):this._toDispose.add(e),e}}f.DISABLE_DISPOSED_WARNING=!1;class m{constructor(){this._store=new f,u(this)}dispose(){l(this),this._store.dispose()}_register(e){if(e===this)throw new Error(\\\"Cannot register a disposable on itself!\\\");return this._store.add(e)}}m.None=Object.freeze({dispose(){}});var g;const _=\\\"en\\\";let p,C,b,L=!1,S=!1,N=!1,E=!1,A=!1,y=!1,v=!1,w=null;const O=\\\"object\\\"==typeof self?self:\\\"object\\\"==typeof e.g?e.g:{};let T;void 0!==O.vscode&&void 0!==O.vscode.process?T=O.vscode.process:\\\"undefined\\\"!=typeof process&&(T=process);const I=\\\"string\\\"==typeof(null===(g=null==T?void 0:T.versions)||void 0===g?void 0:g.electron)&&\\\"renderer\\\"===T.type,x=I&&(null==T?void 0:T.sandboxed);(()=>{if(x)return\\\"bypassHeatCheck\\\";const e=null==T?void 0:T.env.VSCODE_BROWSER_CODE_LOADING})();if(\\\"object\\\"!=typeof navigator||I)if(\\\"object\\\"==typeof T){L=\\\"win32\\\"===T.platform,S=\\\"darwin\\\"===T.platform,N=\\\"linux\\\"===T.platform,E=N&&!!T.env.SNAP&&!!T.env.SNAP_REVISION,p=_,w=_;const e=T.env.VSCODE_NLS_CONFIG;if(e)try{const t=JSON.parse(e),n=t.availableLanguages[\\\"*\\\"];p=t.locale,w=n||_,C=t._translationsConfigFile}catch(e){}A=!0}else console.error(\\\"Unable to resolve platform.\\\");else b=navigator.userAgent,L=b.indexOf(\\\"Windows\\\")>=0,S=b.indexOf(\\\"Macintosh\\\")>=0,v=(b.indexOf(\\\"Macintosh\\\")>=0||b.indexOf(\\\"iPad\\\")>=0||b.indexOf(\\\"iPhone\\\")>=0)&&!!navigator.maxTouchPoints&&navigator.maxTouchPoints>0,N=b.indexOf(\\\"Linux\\\")>=0,y=!0,p=navigator.language,w=p;let M=0;S?M=1:L?M=3:N&&(M=2);const R=L,P=S,k=function(){if(O.setImmediate)return O.setImmediate.bind(O);if(\\\"function\\\"==typeof O.postMessage&&!O.importScripts){let e=[];O.addEventListener(\\\"message\\\",(t=>{if(t.data&&t.data.vscodeSetImmediateId)for(let n=0,i=e.length;n<i;n++){const i=e[n];if(i.id===t.data.vscodeSetImmediateId)return e.splice(n,1),void i.callback()}}));let t=0;return n=>{const i=++t;e.push({id:i,callback:n}),O.postMessage({vscodeSetImmediateId:i},\\\"*\\\")}}if(\\\"function\\\"==typeof(null==T?void 0:T.nextTick))return T.nextTick.bind(T);const e=Promise.resolve();return t=>e.then(t)}();function U(e){const t=[];for(const n of function(e){let t=[],n=Object.getPrototypeOf(e);for(;Object.prototype!==n;)t=t.concat(Object.getOwnPropertyNames(n)),n=Object.getPrototypeOf(n);return t}(e))\\\"function\\\"==typeof e[n]&&t.push(n);return t}function D(e,t){const n=e=>function(){const n=Array.prototype.slice.call(arguments,0);return t(e,n)};let i={};for(const t of e)i[t]=n(t);return i}const F=\\\"$initialize\\\";class K{constructor(e){this._workerId=-1,this._handler=e,this._lastSentReq=0,this._pendingReplies=Object.create(null)}setWorkerId(e){this._workerId=e}sendMessage(e,t){let n=String(++this._lastSentReq);return new Promise(((i,r)=>{this._pendingReplies[n]={resolve:i,reject:r},this._send({vsWorker:this._workerId,req:n,method:e,args:t})}))}handleMessage(e){e&&e.vsWorker&&(-1!==this._workerId&&e.vsWorker!==this._workerId||this._handleMessage(e))}_handleMessage(e){if(e.seq){let t=e;if(!this._pendingReplies[t.seq])return void console.warn(\\\"Got reply to unknown seq\\\");let n=this._pendingReplies[t.seq];if(delete this._pendingReplies[t.seq],t.err){let e=t.err;return t.err.$isError&&(e=new Error,e.name=t.err.name,e.message=t.err.message,e.stack=t.err.stack),void n.reject(e)}return void n.resolve(t.res)}let t=e,n=t.req;this._handler.handleMessage(t.method,t.args).then((e=>{this._send({vsWorker:this._workerId,seq:n,res:e,err:void 0})}),(e=>{e.detail instanceof Error&&(e.detail=i(e.detail)),this._send({vsWorker:this._workerId,seq:n,res:void 0,err:i(e)})}))}_send(e){let t=[];if(e.req){const n=e;for(let e=0;e<n.args.length;e++)n.args[e]instanceof ArrayBuffer&&t.push(n.args[e])}else{const n=e;n.res instanceof ArrayBuffer&&t.push(n.res)}this._handler.sendMessage(e,t)}}class B{constructor(e,t){this._requestHandlerFactory=t,this._requestHandler=null,this._protocol=new K({sendMessage:(t,n)=>{e(t,n)},handleMessage:(e,t)=>this._handleMessage(e,t)})}onmessage(e){this._protocol.handleMessage(e)}_handleMessage(e,t){if(e===F)return this.initialize(t[0],t[1],t[2],t[3]);if(!this._requestHandler||\\\"function\\\"!=typeof this._requestHandler[e])return Promise.reject(new Error(\\\"Missing requestHandler or method: \\\"+e));try{return Promise.resolve(this._requestHandler[e].apply(this._requestHandler,t))}catch(e){return Promise.reject(e)}}initialize(e,t,n,i){this._protocol.setWorkerId(e);const r=D(i,((e,t)=>this._protocol.sendMessage(e,t)));return this._requestHandlerFactory?(this._requestHandler=this._requestHandlerFactory(r),Promise.resolve(U(this._requestHandler))):(t&&(void 0!==t.baseUrl&&delete t.baseUrl,void 0!==t.paths&&void 0!==t.paths.vs&&delete t.paths.vs,void 0!==typeof t.trustedTypesPolicy&&delete t.trustedTypesPolicy,t.catchError=!0,self.require.config(t)),new Promise(((e,t)=>{self.require([n],(n=>{this._requestHandler=n.create(r),this._requestHandler?e(U(this._requestHandler)):t(new Error(\\\"No RequestHandler!\\\"))}),t)})))}}class W{constructor(e,t,n,i){this.originalStart=e,this.originalLength=t,this.modifiedStart=n,this.modifiedLength=i}getOriginalEnd(){return this.originalStart+this.originalLength}getModifiedEnd(){return this.modifiedStart+this.modifiedLength}}function q(e){return 55296<=e&&e<=56319}function H(e){return 56320<=e&&e<=57343}function V(e,t){return t-56320+(e-55296<<10)+65536}String.fromCharCode(65279);class Y{constructor(){this._data=JSON.parse(\\\"[0,0,0,51592,51592,11,44424,44424,11,72251,72254,5,7150,7150,7,48008,48008,11,55176,55176,11,128420,128420,14,3276,3277,5,9979,9980,14,46216,46216,11,49800,49800,11,53384,53384,11,70726,70726,5,122915,122916,5,129320,129327,14,2558,2558,5,5906,5908,5,9762,9763,14,43360,43388,8,45320,45320,11,47112,47112,11,48904,48904,11,50696,50696,11,52488,52488,11,54280,54280,11,70082,70083,1,71350,71350,7,73111,73111,5,127892,127893,14,128726,128727,14,129473,129474,14,2027,2035,5,2901,2902,5,3784,3789,5,6754,6754,5,8418,8420,5,9877,9877,14,11088,11088,14,44008,44008,5,44872,44872,11,45768,45768,11,46664,46664,11,47560,47560,11,48456,48456,11,49352,49352,11,50248,50248,11,51144,51144,11,52040,52040,11,52936,52936,11,53832,53832,11,54728,54728,11,69811,69814,5,70459,70460,5,71096,71099,7,71998,71998,5,72874,72880,5,119149,119149,7,127374,127374,14,128335,128335,14,128482,128482,14,128765,128767,14,129399,129400,14,129680,129685,14,1476,1477,5,2377,2380,7,2759,2760,5,3137,3140,7,3458,3459,7,4153,4154,5,6432,6434,5,6978,6978,5,7675,7679,5,9723,9726,14,9823,9823,14,9919,9923,14,10035,10036,14,42736,42737,5,43596,43596,5,44200,44200,11,44648,44648,11,45096,45096,11,45544,45544,11,45992,45992,11,46440,46440,11,46888,46888,11,47336,47336,11,47784,47784,11,48232,48232,11,48680,48680,11,49128,49128,11,49576,49576,11,50024,50024,11,50472,50472,11,50920,50920,11,51368,51368,11,51816,51816,11,52264,52264,11,52712,52712,11,53160,53160,11,53608,53608,11,54056,54056,11,54504,54504,11,54952,54952,11,68108,68111,5,69933,69940,5,70197,70197,7,70498,70499,7,70845,70845,5,71229,71229,5,71727,71735,5,72154,72155,5,72344,72345,5,73023,73029,5,94095,94098,5,121403,121452,5,126981,127182,14,127538,127546,14,127990,127990,14,128391,128391,14,128445,128449,14,128500,128505,14,128752,128752,14,129160,129167,14,129356,129356,14,129432,129442,14,129648,129651,14,129751,131069,14,173,173,4,1757,1757,1,2274,2274,1,2494,2494,5,2641,2641,5,2876,2876,5,3014,3016,7,3262,3262,7,3393,3396,5,3570,3571,7,3968,3972,5,4228,4228,7,6086,6086,5,6679,6680,5,6912,6915,5,7080,7081,5,7380,7392,5,8252,8252,14,9096,9096,14,9748,9749,14,9784,9786,14,9833,9850,14,9890,9894,14,9938,9938,14,9999,9999,14,10085,10087,14,12349,12349,14,43136,43137,7,43454,43456,7,43755,43755,7,44088,44088,11,44312,44312,11,44536,44536,11,44760,44760,11,44984,44984,11,45208,45208,11,45432,45432,11,45656,45656,11,45880,45880,11,46104,46104,11,46328,46328,11,46552,46552,11,46776,46776,11,47000,47000,11,47224,47224,11,47448,47448,11,47672,47672,11,47896,47896,11,48120,48120,11,48344,48344,11,48568,48568,11,48792,48792,11,49016,49016,11,49240,49240,11,49464,49464,11,49688,49688,11,49912,49912,11,50136,50136,11,50360,50360,11,50584,50584,11,50808,50808,11,51032,51032,11,51256,51256,11,51480,51480,11,51704,51704,11,51928,51928,11,52152,52152,11,52376,52376,11,52600,52600,11,52824,52824,11,53048,53048,11,53272,53272,11,53496,53496,11,53720,53720,11,53944,53944,11,54168,54168,11,54392,54392,11,54616,54616,11,54840,54840,11,55064,55064,11,65438,65439,5,69633,69633,5,69837,69837,1,70018,70018,7,70188,70190,7,70368,70370,7,70465,70468,7,70712,70719,5,70835,70840,5,70850,70851,5,71132,71133,5,71340,71340,7,71458,71461,5,71985,71989,7,72002,72002,7,72193,72202,5,72281,72283,5,72766,72766,7,72885,72886,5,73104,73105,5,92912,92916,5,113824,113827,4,119173,119179,5,121505,121519,5,125136,125142,5,127279,127279,14,127489,127490,14,127570,127743,14,127900,127901,14,128254,128254,14,128369,128370,14,128400,128400,14,128425,128432,14,128468,128475,14,128489,128494,14,128715,128720,14,128745,128745,14,128759,128760,14,129004,129023,14,129296,129304,14,129340,129342,14,129388,129392,14,129404,129407,14,129454,129455,14,129485,129487,14,129659,129663,14,129719,129727,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2363,2363,7,2402,2403,5,2507,2508,7,2622,2624,7,2691,2691,7,2786,2787,5,2881,2884,5,3006,3006,5,3072,3072,5,3170,3171,5,3267,3268,7,3330,3331,7,3406,3406,1,3538,3540,5,3655,3662,5,3897,3897,5,4038,4038,5,4184,4185,5,4352,4447,8,6068,6069,5,6155,6157,5,6448,6449,7,6742,6742,5,6783,6783,5,6966,6970,5,7042,7042,7,7143,7143,7,7212,7219,5,7412,7412,5,8206,8207,4,8294,8303,4,8596,8601,14,9410,9410,14,9742,9742,14,9757,9757,14,9770,9770,14,9794,9794,14,9828,9828,14,9855,9855,14,9882,9882,14,9900,9903,14,9929,9933,14,9963,9967,14,9987,9988,14,10006,10006,14,10062,10062,14,10175,10175,14,11744,11775,5,42607,42607,5,43043,43044,7,43263,43263,5,43444,43445,7,43569,43570,5,43698,43700,5,43766,43766,5,44032,44032,11,44144,44144,11,44256,44256,11,44368,44368,11,44480,44480,11,44592,44592,11,44704,44704,11,44816,44816,11,44928,44928,11,45040,45040,11,45152,45152,11,45264,45264,11,45376,45376,11,45488,45488,11,45600,45600,11,45712,45712,11,45824,45824,11,45936,45936,11,46048,46048,11,46160,46160,11,46272,46272,11,46384,46384,11,46496,46496,11,46608,46608,11,46720,46720,11,46832,46832,11,46944,46944,11,47056,47056,11,47168,47168,11,47280,47280,11,47392,47392,11,47504,47504,11,47616,47616,11,47728,47728,11,47840,47840,11,47952,47952,11,48064,48064,11,48176,48176,11,48288,48288,11,48400,48400,11,48512,48512,11,48624,48624,11,48736,48736,11,48848,48848,11,48960,48960,11,49072,49072,11,49184,49184,11,49296,49296,11,49408,49408,11,49520,49520,11,49632,49632,11,49744,49744,11,49856,49856,11,49968,49968,11,50080,50080,11,50192,50192,11,50304,50304,11,50416,50416,11,50528,50528,11,50640,50640,11,50752,50752,11,50864,50864,11,50976,50976,11,51088,51088,11,51200,51200,11,51312,51312,11,51424,51424,11,51536,51536,11,51648,51648,11,51760,51760,11,51872,51872,11,51984,51984,11,52096,52096,11,52208,52208,11,52320,52320,11,52432,52432,11,52544,52544,11,52656,52656,11,52768,52768,11,52880,52880,11,52992,52992,11,53104,53104,11,53216,53216,11,53328,53328,11,53440,53440,11,53552,53552,11,53664,53664,11,53776,53776,11,53888,53888,11,54000,54000,11,54112,54112,11,54224,54224,11,54336,54336,11,54448,54448,11,54560,54560,11,54672,54672,11,54784,54784,11,54896,54896,11,55008,55008,11,55120,55120,11,64286,64286,5,66272,66272,5,68900,68903,5,69762,69762,7,69817,69818,5,69927,69931,5,70003,70003,5,70070,70078,5,70094,70094,7,70194,70195,7,70206,70206,5,70400,70401,5,70463,70463,7,70475,70477,7,70512,70516,5,70722,70724,5,70832,70832,5,70842,70842,5,70847,70848,5,71088,71089,7,71102,71102,7,71219,71226,5,71231,71232,5,71342,71343,7,71453,71455,5,71463,71467,5,71737,71738,5,71995,71996,5,72000,72000,7,72145,72147,7,72160,72160,5,72249,72249,7,72273,72278,5,72330,72342,5,72752,72758,5,72850,72871,5,72882,72883,5,73018,73018,5,73031,73031,5,73109,73109,5,73461,73462,7,94031,94031,5,94192,94193,7,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,126976,126979,14,127184,127231,14,127344,127345,14,127405,127461,14,127514,127514,14,127561,127567,14,127778,127779,14,127896,127896,14,127985,127986,14,127995,127999,5,128326,128328,14,128360,128366,14,128378,128378,14,128394,128397,14,128405,128406,14,128422,128423,14,128435,128443,14,128453,128464,14,128479,128480,14,128484,128487,14,128496,128498,14,128640,128709,14,128723,128724,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129096,129103,14,129292,129292,14,129311,129311,14,129329,129330,14,129344,129349,14,129360,129374,14,129394,129394,14,129402,129402,14,129413,129425,14,129445,129450,14,129466,129471,14,129483,129483,14,129511,129535,14,129653,129655,14,129667,129670,14,129705,129711,14,129731,129743,14,917505,917505,4,917760,917999,5,10,10,3,127,159,4,768,879,5,1471,1471,5,1536,1541,1,1648,1648,5,1767,1768,5,1840,1866,5,2070,2073,5,2137,2139,5,2307,2307,7,2366,2368,7,2382,2383,7,2434,2435,7,2497,2500,5,2519,2519,5,2563,2563,7,2631,2632,5,2677,2677,5,2750,2752,7,2763,2764,7,2817,2817,5,2879,2879,5,2891,2892,7,2914,2915,5,3008,3008,5,3021,3021,5,3076,3076,5,3146,3149,5,3202,3203,7,3264,3265,7,3271,3272,7,3298,3299,5,3390,3390,5,3402,3404,7,3426,3427,5,3535,3535,5,3544,3550,7,3635,3635,7,3763,3763,7,3893,3893,5,3953,3966,5,3981,3991,5,4145,4145,7,4157,4158,5,4209,4212,5,4237,4237,5,4520,4607,10,5970,5971,5,6071,6077,5,6089,6099,5,6277,6278,5,6439,6440,5,6451,6456,7,6683,6683,5,6744,6750,5,6765,6770,7,6846,6846,5,6964,6964,5,6972,6972,5,7019,7027,5,7074,7077,5,7083,7085,5,7146,7148,7,7154,7155,7,7222,7223,5,7394,7400,5,7416,7417,5,8204,8204,5,8233,8233,4,8288,8292,4,8413,8416,5,8482,8482,14,8986,8987,14,9193,9203,14,9654,9654,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9775,14,9792,9792,14,9800,9811,14,9825,9826,14,9831,9831,14,9852,9853,14,9872,9873,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9936,9936,14,9941,9960,14,9974,9974,14,9982,9985,14,9992,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10145,10145,14,11013,11015,14,11503,11505,5,12334,12335,5,12951,12951,14,42612,42621,5,43014,43014,5,43047,43047,7,43204,43205,5,43335,43345,5,43395,43395,7,43450,43451,7,43561,43566,5,43573,43574,5,43644,43644,5,43710,43711,5,43758,43759,7,44005,44005,5,44012,44012,7,44060,44060,11,44116,44116,11,44172,44172,11,44228,44228,11,44284,44284,11,44340,44340,11,44396,44396,11,44452,44452,11,44508,44508,11,44564,44564,11,44620,44620,11,44676,44676,11,44732,44732,11,44788,44788,11,44844,44844,11,44900,44900,11,44956,44956,11,45012,45012,11,45068,45068,11,45124,45124,11,45180,45180,11,45236,45236,11,45292,45292,11,45348,45348,11,45404,45404,11,45460,45460,11,45516,45516,11,45572,45572,11,45628,45628,11,45684,45684,11,45740,45740,11,45796,45796,11,45852,45852,11,45908,45908,11,45964,45964,11,46020,46020,11,46076,46076,11,46132,46132,11,46188,46188,11,46244,46244,11,46300,46300,11,46356,46356,11,46412,46412,11,46468,46468,11,46524,46524,11,46580,46580,11,46636,46636,11,46692,46692,11,46748,46748,11,46804,46804,11,46860,46860,11,46916,46916,11,46972,46972,11,47028,47028,11,47084,47084,11,47140,47140,11,47196,47196,11,47252,47252,11,47308,47308,11,47364,47364,11,47420,47420,11,47476,47476,11,47532,47532,11,47588,47588,11,47644,47644,11,47700,47700,11,47756,47756,11,47812,47812,11,47868,47868,11,47924,47924,11,47980,47980,11,48036,48036,11,48092,48092,11,48148,48148,11,48204,48204,11,48260,48260,11,48316,48316,11,48372,48372,11,48428,48428,11,48484,48484,11,48540,48540,11,48596,48596,11,48652,48652,11,48708,48708,11,48764,48764,11,48820,48820,11,48876,48876,11,48932,48932,11,48988,48988,11,49044,49044,11,49100,49100,11,49156,49156,11,49212,49212,11,49268,49268,11,49324,49324,11,49380,49380,11,49436,49436,11,49492,49492,11,49548,49548,11,49604,49604,11,49660,49660,11,49716,49716,11,49772,49772,11,49828,49828,11,49884,49884,11,49940,49940,11,49996,49996,11,50052,50052,11,50108,50108,11,50164,50164,11,50220,50220,11,50276,50276,11,50332,50332,11,50388,50388,11,50444,50444,11,50500,50500,11,50556,50556,11,50612,50612,11,50668,50668,11,50724,50724,11,50780,50780,11,50836,50836,11,50892,50892,11,50948,50948,11,51004,51004,11,51060,51060,11,51116,51116,11,51172,51172,11,51228,51228,11,51284,51284,11,51340,51340,11,51396,51396,11,51452,51452,11,51508,51508,11,51564,51564,11,51620,51620,11,51676,51676,11,51732,51732,11,51788,51788,11,51844,51844,11,51900,51900,11,51956,51956,11,52012,52012,11,52068,52068,11,52124,52124,11,52180,52180,11,52236,52236,11,52292,52292,11,52348,52348,11,52404,52404,11,52460,52460,11,52516,52516,11,52572,52572,11,52628,52628,11,52684,52684,11,52740,52740,11,52796,52796,11,52852,52852,11,52908,52908,11,52964,52964,11,53020,53020,11,53076,53076,11,53132,53132,11,53188,53188,11,53244,53244,11,53300,53300,11,53356,53356,11,53412,53412,11,53468,53468,11,53524,53524,11,53580,53580,11,53636,53636,11,53692,53692,11,53748,53748,11,53804,53804,11,53860,53860,11,53916,53916,11,53972,53972,11,54028,54028,11,54084,54084,11,54140,54140,11,54196,54196,11,54252,54252,11,54308,54308,11,54364,54364,11,54420,54420,11,54476,54476,11,54532,54532,11,54588,54588,11,54644,54644,11,54700,54700,11,54756,54756,11,54812,54812,11,54868,54868,11,54924,54924,11,54980,54980,11,55036,55036,11,55092,55092,11,55148,55148,11,55216,55238,9,65056,65071,5,65529,65531,4,68097,68099,5,68159,68159,5,69446,69456,5,69688,69702,5,69808,69810,7,69815,69816,7,69821,69821,1,69888,69890,5,69932,69932,7,69957,69958,7,70016,70017,5,70067,70069,7,70079,70080,7,70089,70092,5,70095,70095,5,70191,70193,5,70196,70196,5,70198,70199,5,70367,70367,5,70371,70378,5,70402,70403,7,70462,70462,5,70464,70464,5,70471,70472,7,70487,70487,5,70502,70508,5,70709,70711,7,70720,70721,7,70725,70725,7,70750,70750,5,70833,70834,7,70841,70841,7,70843,70844,7,70846,70846,7,70849,70849,7,71087,71087,5,71090,71093,5,71100,71101,5,71103,71104,5,71216,71218,7,71227,71228,7,71230,71230,7,71339,71339,5,71341,71341,5,71344,71349,5,71351,71351,5,71456,71457,7,71462,71462,7,71724,71726,7,71736,71736,7,71984,71984,5,71991,71992,7,71997,71997,7,71999,71999,1,72001,72001,1,72003,72003,5,72148,72151,5,72156,72159,7,72164,72164,7,72243,72248,5,72250,72250,1,72263,72263,5,72279,72280,7,72324,72329,1,72343,72343,7,72751,72751,7,72760,72765,5,72767,72767,5,72873,72873,7,72881,72881,7,72884,72884,7,73009,73014,5,73020,73021,5,73030,73030,1,73098,73102,7,73107,73108,7,73110,73110,7,73459,73460,5,78896,78904,4,92976,92982,5,94033,94087,7,94180,94180,5,113821,113822,5,119141,119141,5,119143,119145,5,119150,119154,5,119163,119170,5,119210,119213,5,121344,121398,5,121461,121461,5,121499,121503,5,122880,122886,5,122907,122913,5,122918,122922,5,123628,123631,5,125252,125258,5,126980,126980,14,127183,127183,14,127245,127247,14,127340,127343,14,127358,127359,14,127377,127386,14,127462,127487,6,127491,127503,14,127535,127535,14,127548,127551,14,127568,127569,14,127744,127777,14,127780,127891,14,127894,127895,14,127897,127899,14,127902,127984,14,127987,127989,14,127991,127994,14,128000,128253,14,128255,128317,14,128329,128334,14,128336,128359,14,128367,128368,14,128371,128377,14,128379,128390,14,128392,128393,14,128398,128399,14,128401,128404,14,128407,128419,14,128421,128421,14,128424,128424,14,128433,128434,14,128444,128444,14,128450,128452,14,128465,128467,14,128476,128478,14,128481,128481,14,128483,128483,14,128488,128488,14,128495,128495,14,128499,128499,14,128506,128591,14,128710,128714,14,128721,128722,14,128725,128725,14,128728,128735,14,128742,128744,14,128746,128746,14,128749,128751,14,128753,128754,14,128756,128758,14,128761,128761,14,128763,128764,14,128884,128895,14,128992,129003,14,129036,129039,14,129114,129119,14,129198,129279,14,129293,129295,14,129305,129310,14,129312,129319,14,129328,129328,14,129331,129338,14,129343,129343,14,129351,129355,14,129357,129359,14,129375,129387,14,129393,129393,14,129395,129398,14,129401,129401,14,129403,129403,14,129408,129412,14,129426,129431,14,129443,129444,14,129451,129453,14,129456,129465,14,129472,129472,14,129475,129482,14,129484,129484,14,129488,129510,14,129536,129647,14,129652,129652,14,129656,129658,14,129664,129666,14,129671,129679,14,129686,129704,14,129712,129718,14,129728,129730,14,129744,129750,14,917504,917504,4,917506,917535,4,917632,917759,4,918000,921599,4,0,9,4,11,12,4,14,31,4,169,169,14,174,174,14,1155,1159,5,1425,1469,5,1473,1474,5,1479,1479,5,1552,1562,5,1611,1631,5,1750,1756,5,1759,1764,5,1770,1773,5,1809,1809,5,1958,1968,5,2045,2045,5,2075,2083,5,2089,2093,5,2259,2273,5,2275,2306,5,2362,2362,5,2364,2364,5,2369,2376,5,2381,2381,5,2385,2391,5,2433,2433,5,2492,2492,5,2495,2496,7,2503,2504,7,2509,2509,5,2530,2531,5,2561,2562,5,2620,2620,5,2625,2626,5,2635,2637,5,2672,2673,5,2689,2690,5,2748,2748,5,2753,2757,5,2761,2761,7,2765,2765,5,2810,2815,5,2818,2819,7,2878,2878,5,2880,2880,7,2887,2888,7,2893,2893,5,2903,2903,5,2946,2946,5,3007,3007,7,3009,3010,7,3018,3020,7,3031,3031,5,3073,3075,7,3134,3136,5,3142,3144,5,3157,3158,5,3201,3201,5,3260,3260,5,3263,3263,5,3266,3266,5,3270,3270,5,3274,3275,7,3285,3286,5,3328,3329,5,3387,3388,5,3391,3392,7,3398,3400,7,3405,3405,5,3415,3415,5,3457,3457,5,3530,3530,5,3536,3537,7,3542,3542,5,3551,3551,5,3633,3633,5,3636,3642,5,3761,3761,5,3764,3772,5,3864,3865,5,3895,3895,5,3902,3903,7,3967,3967,7,3974,3975,5,3993,4028,5,4141,4144,5,4146,4151,5,4155,4156,7,4182,4183,7,4190,4192,5,4226,4226,5,4229,4230,5,4253,4253,5,4448,4519,9,4957,4959,5,5938,5940,5,6002,6003,5,6070,6070,7,6078,6085,7,6087,6088,7,6109,6109,5,6158,6158,4,6313,6313,5,6435,6438,7,6441,6443,7,6450,6450,5,6457,6459,5,6681,6682,7,6741,6741,7,6743,6743,7,6752,6752,5,6757,6764,5,6771,6780,5,6832,6845,5,6847,6848,5,6916,6916,7,6965,6965,5,6971,6971,7,6973,6977,7,6979,6980,7,7040,7041,5,7073,7073,7,7078,7079,7,7082,7082,7,7142,7142,5,7144,7145,5,7149,7149,5,7151,7153,5,7204,7211,7,7220,7221,7,7376,7378,5,7393,7393,7,7405,7405,5,7415,7415,7,7616,7673,5,8203,8203,4,8205,8205,13,8232,8232,4,8234,8238,4,8265,8265,14,8293,8293,4,8400,8412,5,8417,8417,5,8421,8432,5,8505,8505,14,8617,8618,14,9000,9000,14,9167,9167,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9732,14,9735,9741,14,9743,9744,14,9746,9746,14,9750,9751,14,9753,9756,14,9758,9759,14,9761,9761,14,9764,9765,14,9767,9769,14,9771,9773,14,9776,9783,14,9787,9791,14,9793,9793,14,9795,9799,14,9812,9822,14,9824,9824,14,9827,9827,14,9829,9830,14,9832,9832,14,9851,9851,14,9854,9854,14,9856,9861,14,9874,9876,14,9878,9879,14,9881,9881,14,9883,9884,14,9888,9889,14,9895,9895,14,9898,9899,14,9904,9905,14,9917,9918,14,9924,9925,14,9928,9928,14,9934,9935,14,9937,9937,14,9939,9940,14,9961,9962,14,9968,9973,14,9975,9978,14,9981,9981,14,9986,9986,14,9989,9989,14,9998,9998,14,10000,10001,14,10004,10004,14,10013,10013,14,10024,10024,14,10052,10052,14,10060,10060,14,10067,10069,14,10083,10084,14,10133,10135,14,10160,10160,14,10548,10549,14,11035,11036,14,11093,11093,14,11647,11647,5,12330,12333,5,12336,12336,14,12441,12442,5,12953,12953,14,42608,42610,5,42654,42655,5,43010,43010,5,43019,43019,5,43045,43046,5,43052,43052,5,43188,43203,7,43232,43249,5,43302,43309,5,43346,43347,7,43392,43394,5,43443,43443,5,43446,43449,5,43452,43453,5,43493,43493,5,43567,43568,7,43571,43572,7,43587,43587,5,43597,43597,7,43696,43696,5,43703,43704,5,43713,43713,5,43756,43757,5,43765,43765,7,44003,44004,7,44006,44007,7,44009,44010,7,44013,44013,5,44033,44059,12,44061,44087,12,44089,44115,12,44117,44143,12,44145,44171,12,44173,44199,12,44201,44227,12,44229,44255,12,44257,44283,12,44285,44311,12,44313,44339,12,44341,44367,12,44369,44395,12,44397,44423,12,44425,44451,12,44453,44479,12,44481,44507,12,44509,44535,12,44537,44563,12,44565,44591,12,44593,44619,12,44621,44647,12,44649,44675,12,44677,44703,12,44705,44731,12,44733,44759,12,44761,44787,12,44789,44815,12,44817,44843,12,44845,44871,12,44873,44899,12,44901,44927,12,44929,44955,12,44957,44983,12,44985,45011,12,45013,45039,12,45041,45067,12,45069,45095,12,45097,45123,12,45125,45151,12,45153,45179,12,45181,45207,12,45209,45235,12,45237,45263,12,45265,45291,12,45293,45319,12,45321,45347,12,45349,45375,12,45377,45403,12,45405,45431,12,45433,45459,12,45461,45487,12,45489,45515,12,45517,45543,12,45545,45571,12,45573,45599,12,45601,45627,12,45629,45655,12,45657,45683,12,45685,45711,12,45713,45739,12,45741,45767,12,45769,45795,12,45797,45823,12,45825,45851,12,45853,45879,12,45881,45907,12,45909,45935,12,45937,45963,12,45965,45991,12,45993,46019,12,46021,46047,12,46049,46075,12,46077,46103,12,46105,46131,12,46133,46159,12,46161,46187,12,46189,46215,12,46217,46243,12,46245,46271,12,46273,46299,12,46301,46327,12,46329,46355,12,46357,46383,12,46385,46411,12,46413,46439,12,46441,46467,12,46469,46495,12,46497,46523,12,46525,46551,12,46553,46579,12,46581,46607,12,46609,46635,12,46637,46663,12,46665,46691,12,46693,46719,12,46721,46747,12,46749,46775,12,46777,46803,12,46805,46831,12,46833,46859,12,46861,46887,12,46889,46915,12,46917,46943,12,46945,46971,12,46973,46999,12,47001,47027,12,47029,47055,12,47057,47083,12,47085,47111,12,47113,47139,12,47141,47167,12,47169,47195,12,47197,47223,12,47225,47251,12,47253,47279,12,47281,47307,12,47309,47335,12,47337,47363,12,47365,47391,12,47393,47419,12,47421,47447,12,47449,47475,12,47477,47503,12,47505,47531,12,47533,47559,12,47561,47587,12,47589,47615,12,47617,47643,12,47645,47671,12,47673,47699,12,47701,47727,12,47729,47755,12,47757,47783,12,47785,47811,12,47813,47839,12,47841,47867,12,47869,47895,12,47897,47923,12,47925,47951,12,47953,47979,12,47981,48007,12,48009,48035,12,48037,48063,12,48065,48091,12,48093,48119,12,48121,48147,12,48149,48175,12,48177,48203,12,48205,48231,12,48233,48259,12,48261,48287,12,48289,48315,12,48317,48343,12,48345,48371,12,48373,48399,12,48401,48427,12,48429,48455,12,48457,48483,12,48485,48511,12,48513,48539,12,48541,48567,12,48569,48595,12,48597,48623,12,48625,48651,12,48653,48679,12,48681,48707,12,48709,48735,12,48737,48763,12,48765,48791,12,48793,48819,12,48821,48847,12,48849,48875,12,48877,48903,12,48905,48931,12,48933,48959,12,48961,48987,12,48989,49015,12,49017,49043,12,49045,49071,12,49073,49099,12,49101,49127,12,49129,49155,12,49157,49183,12,49185,49211,12,49213,49239,12,49241,49267,12,49269,49295,12,49297,49323,12,49325,49351,12,49353,49379,12,49381,49407,12,49409,49435,12,49437,49463,12,49465,49491,12,49493,49519,12,49521,49547,12,49549,49575,12,49577,49603,12,49605,49631,12,49633,49659,12,49661,49687,12,49689,49715,12,49717,49743,12,49745,49771,12,49773,49799,12,49801,49827,12,49829,49855,12,49857,49883,12,49885,49911,12,49913,49939,12,49941,49967,12,49969,49995,12,49997,50023,12,50025,50051,12,50053,50079,12,50081,50107,12,50109,50135,12,50137,50163,12,50165,50191,12,50193,50219,12,50221,50247,12,50249,50275,12,50277,50303,12,50305,50331,12,50333,50359,12,50361,50387,12,50389,50415,12,50417,50443,12,50445,50471,12,50473,50499,12,50501,50527,12,50529,50555,12,50557,50583,12,50585,50611,12,50613,50639,12,50641,50667,12,50669,50695,12,50697,50723,12,50725,50751,12,50753,50779,12,50781,50807,12,50809,50835,12,50837,50863,12,50865,50891,12,50893,50919,12,50921,50947,12,50949,50975,12,50977,51003,12,51005,51031,12,51033,51059,12,51061,51087,12,51089,51115,12,51117,51143,12,51145,51171,12,51173,51199,12,51201,51227,12,51229,51255,12,51257,51283,12,51285,51311,12,51313,51339,12,51341,51367,12,51369,51395,12,51397,51423,12,51425,51451,12,51453,51479,12,51481,51507,12,51509,51535,12,51537,51563,12,51565,51591,12,51593,51619,12,51621,51647,12,51649,51675,12,51677,51703,12,51705,51731,12,51733,51759,12,51761,51787,12,51789,51815,12,51817,51843,12,51845,51871,12,51873,51899,12,51901,51927,12,51929,51955,12,51957,51983,12,51985,52011,12,52013,52039,12,52041,52067,12,52069,52095,12,52097,52123,12,52125,52151,12,52153,52179,12,52181,52207,12,52209,52235,12,52237,52263,12,52265,52291,12,52293,52319,12,52321,52347,12,52349,52375,12,52377,52403,12,52405,52431,12,52433,52459,12,52461,52487,12,52489,52515,12,52517,52543,12,52545,52571,12,52573,52599,12,52601,52627,12,52629,52655,12,52657,52683,12,52685,52711,12,52713,52739,12,52741,52767,12,52769,52795,12,52797,52823,12,52825,52851,12,52853,52879,12,52881,52907,12,52909,52935,12,52937,52963,12,52965,52991,12,52993,53019,12,53021,53047,12,53049,53075,12,53077,53103,12,53105,53131,12,53133,53159,12,53161,53187,12,53189,53215,12,53217,53243,12,53245,53271,12,53273,53299,12,53301,53327,12,53329,53355,12,53357,53383,12,53385,53411,12,53413,53439,12,53441,53467,12,53469,53495,12,53497,53523,12,53525,53551,12,53553,53579,12,53581,53607,12,53609,53635,12,53637,53663,12,53665,53691,12,53693,53719,12,53721,53747,12,53749,53775,12,53777,53803,12,53805,53831,12,53833,53859,12,53861,53887,12,53889,53915,12,53917,53943,12,53945,53971,12,53973,53999,12,54001,54027,12,54029,54055,12,54057,54083,12,54085,54111,12,54113,54139,12,54141,54167,12,54169,54195,12,54197,54223,12,54225,54251,12,54253,54279,12,54281,54307,12,54309,54335,12,54337,54363,12,54365,54391,12,54393,54419,12,54421,54447,12,54449,54475,12,54477,54503,12,54505,54531,12,54533,54559,12,54561,54587,12,54589,54615,12,54617,54643,12,54645,54671,12,54673,54699,12,54701,54727,12,54729,54755,12,54757,54783,12,54785,54811,12,54813,54839,12,54841,54867,12,54869,54895,12,54897,54923,12,54925,54951,12,54953,54979,12,54981,55007,12,55009,55035,12,55037,55063,12,55065,55091,12,55093,55119,12,55121,55147,12,55149,55175,12,55177,55203,12,55243,55291,10,65024,65039,5,65279,65279,4,65520,65528,4,66045,66045,5,66422,66426,5,68101,68102,5,68152,68154,5,68325,68326,5,69291,69292,5,69632,69632,7,69634,69634,7,69759,69761,5]\\\")}static getInstance(){return Y._INSTANCE||(Y._INSTANCE=new Y),Y._INSTANCE}getGraphemeBreakType(e){if(e<32)return 10===e?3:13===e?2:4;if(e<127)return 0;const t=this._data,n=t.length/3;let i=1;for(;i<=n;)if(e<t[3*i])i*=2;else{if(!(e>t[3*i+1]))return t[3*i+2];i=2*i+1}return 0}}function $(e,t){return(t<<5)-t+e|0}function j(e,t){t=$(149417,t);for(let n=0,i=e.length;n<i;n++)t=$(e.charCodeAt(n),t);return t}function G(e,t,n=32){const i=n-t;return(e<<t|(~((1<<i)-1)&e)>>>i)>>>0}function z(e,t=0,n=e.byteLength,i=0){for(let r=0;r<n;r++)e[t+r]=i}function Q(e,t=32){return e instanceof ArrayBuffer?Array.from(new Uint8Array(e)).map((e=>e.toString(16).padStart(2,\\\"0\\\"))).join(\\\"\\\"):function(e,t,n=\\\"0\\\"){for(;e.length<t;)e=n+e;return e}((e>>>0).toString(16),t/4)}Y._INSTANCE=null;class X{constructor(){this._h0=1732584193,this._h1=4023233417,this._h2=2562383102,this._h3=271733878,this._h4=3285377520,this._buff=new Uint8Array(67),this._buffDV=new DataView(this._buff.buffer),this._buffLen=0,this._totalLen=0,this._leftoverHighSurrogate=0,this._finished=!1}update(e){const t=e.length;if(0===t)return;const n=this._buff;let i,r,s=this._buffLen,o=this._leftoverHighSurrogate;for(0!==o?(i=o,r=-1,o=0):(i=e.charCodeAt(0),r=0);;){let a=i;if(q(i)){if(!(r+1<t)){o=i;break}{const t=e.charCodeAt(r+1);H(t)?(r++,a=V(i,t)):a=65533}}else H(i)&&(a=65533);if(s=this._push(n,s,a),r++,!(r<t))break;i=e.charCodeAt(r)}this._buffLen=s,this._leftoverHighSurrogate=o}_push(e,t,n){return n<128?e[t++]=n:n<2048?(e[t++]=192|(1984&n)>>>6,e[t++]=128|(63&n)>>>0):n<65536?(e[t++]=224|(61440&n)>>>12,e[t++]=128|(4032&n)>>>6,e[t++]=128|(63&n)>>>0):(e[t++]=240|(1835008&n)>>>18,e[t++]=128|(258048&n)>>>12,e[t++]=128|(4032&n)>>>6,e[t++]=128|(63&n)>>>0),t>=64&&(this._step(),t-=64,this._totalLen+=64,e[0]=e[64],e[1]=e[65],e[2]=e[66]),t}digest(){return this._finished||(this._finished=!0,this._leftoverHighSurrogate&&(this._leftoverHighSurrogate=0,this._buffLen=this._push(this._buff,this._buffLen,65533)),this._totalLen+=this._buffLen,this._wrapUp()),Q(this._h0)+Q(this._h1)+Q(this._h2)+Q(this._h3)+Q(this._h4)}_wrapUp(){this._buff[this._buffLen++]=128,z(this._buff,this._buffLen),this._buffLen>56&&(this._step(),z(this._buff));const e=8*this._totalLen;this._buffDV.setUint32(56,Math.floor(e/4294967296),!1),this._buffDV.setUint32(60,e%4294967296,!1),this._step()}_step(){const e=X._bigBlock32,t=this._buffDV;for(let n=0;n<64;n+=4)e.setUint32(n,t.getUint32(n,!1),!1);for(let t=64;t<320;t+=4)e.setUint32(t,G(e.getUint32(t-12,!1)^e.getUint32(t-32,!1)^e.getUint32(t-56,!1)^e.getUint32(t-64,!1),1),!1);let n,i,r,s=this._h0,o=this._h1,a=this._h2,l=this._h3,u=this._h4;for(let t=0;t<80;t++)t<20?(n=o&a|~o&l,i=1518500249):t<40?(n=o^a^l,i=1859775393):t<60?(n=o&a|o&l|a&l,i=2400959708):(n=o^a^l,i=3395469782),r=G(s,5)+n+u+i+e.getUint32(4*t,!1)&4294967295,u=l,l=a,a=G(o,30),o=s,s=r;this._h0=this._h0+s&4294967295,this._h1=this._h1+o&4294967295,this._h2=this._h2+a&4294967295,this._h3=this._h3+l&4294967295,this._h4=this._h4+u&4294967295}}X._bigBlock32=new DataView(new ArrayBuffer(320));class Z{constructor(e){this.source=e}getElements(){const e=this.source,t=new Int32Array(e.length);for(let n=0,i=e.length;n<i;n++)t[n]=e.charCodeAt(n);return t}}function J(e,t,n){return new ie(new Z(e),new Z(t)).ComputeDiff(n).changes}class ee{static Assert(e,t){if(!e)throw new Error(t)}}class te{static Copy(e,t,n,i,r){for(let s=0;s<r;s++)n[i+s]=e[t+s]}static Copy2(e,t,n,i,r){for(let s=0;s<r;s++)n[i+s]=e[t+s]}}class ne{constructor(){this.m_changes=[],this.m_originalStart=1073741824,this.m_modifiedStart=1073741824,this.m_originalCount=0,this.m_modifiedCount=0}MarkNextChange(){(this.m_originalCount>0||this.m_modifiedCount>0)&&this.m_changes.push(new W(this.m_originalStart,this.m_originalCount,this.m_modifiedStart,this.m_modifiedCount)),this.m_originalCount=0,this.m_modifiedCount=0,this.m_originalStart=1073741824,this.m_modifiedStart=1073741824}AddOriginalElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_originalCount++}AddModifiedElement(e,t){this.m_originalStart=Math.min(this.m_originalStart,e),this.m_modifiedStart=Math.min(this.m_modifiedStart,t),this.m_modifiedCount++}getChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes}getReverseChanges(){return(this.m_originalCount>0||this.m_modifiedCount>0)&&this.MarkNextChange(),this.m_changes.reverse(),this.m_changes}}class ie{constructor(e,t,n=null){this.ContinueProcessingPredicate=n;const[i,r,s]=ie._getElements(e),[o,a,l]=ie._getElements(t);this._hasStrings=s&&l,this._originalStringElements=i,this._originalElementsOrHash=r,this._modifiedStringElements=o,this._modifiedElementsOrHash=a,this.m_forwardHistory=[],this.m_reverseHistory=[]}static _isStringArray(e){return e.length>0&&\\\"string\\\"==typeof e[0]}static _getElements(e){const t=e.getElements();if(ie._isStringArray(t)){const e=new Int32Array(t.length);for(let n=0,i=t.length;n<i;n++)e[n]=j(t[n],0);return[t,e,!0]}return t instanceof Int32Array?[[],t,!1]:[[],new Int32Array(t),!1]}ElementsAreEqual(e,t){return this._originalElementsOrHash[e]===this._modifiedElementsOrHash[t]&&(!this._hasStrings||this._originalStringElements[e]===this._modifiedStringElements[t])}OriginalElementsAreEqual(e,t){return this._originalElementsOrHash[e]===this._originalElementsOrHash[t]&&(!this._hasStrings||this._originalStringElements[e]===this._originalStringElements[t])}ModifiedElementsAreEqual(e,t){return this._modifiedElementsOrHash[e]===this._modifiedElementsOrHash[t]&&(!this._hasStrings||this._modifiedStringElements[e]===this._modifiedStringElements[t])}ComputeDiff(e){return this._ComputeDiff(0,this._originalElementsOrHash.length-1,0,this._modifiedElementsOrHash.length-1,e)}_ComputeDiff(e,t,n,i,r){const s=[!1];let o=this.ComputeDiffRecursive(e,t,n,i,s);return r&&(o=this.PrettifyChanges(o)),{quitEarly:s[0],changes:o}}ComputeDiffRecursive(e,t,n,i,r){for(r[0]=!1;e<=t&&n<=i&&this.ElementsAreEqual(e,n);)e++,n++;for(;t>=e&&i>=n&&this.ElementsAreEqual(t,i);)t--,i--;if(e>t||n>i){let r;return n<=i?(ee.Assert(e===t+1,\\\"originalStart should only be one more than originalEnd\\\"),r=[new W(e,0,n,i-n+1)]):e<=t?(ee.Assert(n===i+1,\\\"modifiedStart should only be one more than modifiedEnd\\\"),r=[new W(e,t-e+1,n,0)]):(ee.Assert(e===t+1,\\\"originalStart should only be one more than originalEnd\\\"),ee.Assert(n===i+1,\\\"modifiedStart should only be one more than modifiedEnd\\\"),r=[]),r}const s=[0],o=[0],a=this.ComputeRecursionPoint(e,t,n,i,s,o,r),l=s[0],u=o[0];if(null!==a)return a;if(!r[0]){const s=this.ComputeDiffRecursive(e,l,n,u,r);let o=[];return o=r[0]?[new W(l+1,t-(l+1)+1,u+1,i-(u+1)+1)]:this.ComputeDiffRecursive(l+1,t,u+1,i,r),this.ConcatenateChanges(s,o)}return[new W(e,t-e+1,n,i-n+1)]}WALKTRACE(e,t,n,i,r,s,o,a,l,u,h,d,c,f,m,g,_,p){let C=null,b=null,L=new ne,S=t,N=n,E=c[0]-g[0]-i,A=-1073741824,y=this.m_forwardHistory.length-1;do{const t=E+e;t===S||t<N&&l[t-1]<l[t+1]?(f=(h=l[t+1])-E-i,h<A&&L.MarkNextChange(),A=h,L.AddModifiedElement(h+1,f),E=t+1-e):(f=(h=l[t-1]+1)-E-i,h<A&&L.MarkNextChange(),A=h-1,L.AddOriginalElement(h,f+1),E=t-1-e),y>=0&&(e=(l=this.m_forwardHistory[y])[0],S=1,N=l.length-1)}while(--y>=-1);if(C=L.getReverseChanges(),p[0]){let e=c[0]+1,t=g[0]+1;if(null!==C&&C.length>0){const n=C[C.length-1];e=Math.max(e,n.getOriginalEnd()),t=Math.max(t,n.getModifiedEnd())}b=[new W(e,d-e+1,t,m-t+1)]}else{L=new ne,S=s,N=o,E=c[0]-g[0]-a,A=1073741824,y=_?this.m_reverseHistory.length-1:this.m_reverseHistory.length-2;do{const e=E+r;e===S||e<N&&u[e-1]>=u[e+1]?(f=(h=u[e+1]-1)-E-a,h>A&&L.MarkNextChange(),A=h+1,L.AddOriginalElement(h+1,f+1),E=e+1-r):(f=(h=u[e-1])-E-a,h>A&&L.MarkNextChange(),A=h,L.AddModifiedElement(h+1,f+1),E=e-1-r),y>=0&&(r=(u=this.m_reverseHistory[y])[0],S=1,N=u.length-1)}while(--y>=-1);b=L.getChanges()}return this.ConcatenateChanges(C,b)}ComputeRecursionPoint(e,t,n,i,r,s,o){let a=0,l=0,u=0,h=0,d=0,c=0;e--,n--,r[0]=0,s[0]=0,this.m_forwardHistory=[],this.m_reverseHistory=[];const f=t-e+(i-n),m=f+1,g=new Int32Array(m),_=new Int32Array(m),p=i-n,C=t-e,b=e-n,L=t-i,S=(C-p)%2==0;g[p]=e,_[C]=t,o[0]=!1;for(let N=1;N<=f/2+1;N++){let f=0,E=0;u=this.ClipDiagonalBound(p-N,N,p,m),h=this.ClipDiagonalBound(p+N,N,p,m);for(let e=u;e<=h;e+=2){a=e===u||e<h&&g[e-1]<g[e+1]?g[e+1]:g[e-1]+1,l=a-(e-p)-b;const n=a;for(;a<t&&l<i&&this.ElementsAreEqual(a+1,l+1);)a++,l++;if(g[e]=a,a+l>f+E&&(f=a,E=l),!S&&Math.abs(e-C)<=N-1&&a>=_[e])return r[0]=a,s[0]=l,n<=_[e]&&N<=1448?this.WALKTRACE(p,u,h,b,C,d,c,L,g,_,a,t,r,l,i,s,S,o):null}const A=(f-e+(E-n)-N)/2;if(null!==this.ContinueProcessingPredicate&&!this.ContinueProcessingPredicate(f,A))return o[0]=!0,r[0]=f,s[0]=E,A>0&&N<=1448?this.WALKTRACE(p,u,h,b,C,d,c,L,g,_,a,t,r,l,i,s,S,o):(e++,n++,[new W(e,t-e+1,n,i-n+1)]);d=this.ClipDiagonalBound(C-N,N,C,m),c=this.ClipDiagonalBound(C+N,N,C,m);for(let f=d;f<=c;f+=2){a=f===d||f<c&&_[f-1]>=_[f+1]?_[f+1]-1:_[f-1],l=a-(f-C)-L;const m=a;for(;a>e&&l>n&&this.ElementsAreEqual(a,l);)a--,l--;if(_[f]=a,S&&Math.abs(f-p)<=N&&a<=g[f])return r[0]=a,s[0]=l,m>=g[f]&&N<=1448?this.WALKTRACE(p,u,h,b,C,d,c,L,g,_,a,t,r,l,i,s,S,o):null}if(N<=1447){let e=new Int32Array(h-u+2);e[0]=p-u+1,te.Copy2(g,u,e,1,h-u+1),this.m_forwardHistory.push(e),e=new Int32Array(c-d+2),e[0]=C-d+1,te.Copy2(_,d,e,1,c-d+1),this.m_reverseHistory.push(e)}}return this.WALKTRACE(p,u,h,b,C,d,c,L,g,_,a,t,r,l,i,s,S,o)}PrettifyChanges(e){for(let t=0;t<e.length;t++){const n=e[t],i=t<e.length-1?e[t+1].originalStart:this._originalElementsOrHash.length,r=t<e.length-1?e[t+1].modifiedStart:this._modifiedElementsOrHash.length,s=n.originalLength>0,o=n.modifiedLength>0;for(;n.originalStart+n.originalLength<i&&n.modifiedStart+n.modifiedLength<r&&(!s||this.OriginalElementsAreEqual(n.originalStart,n.originalStart+n.originalLength))&&(!o||this.ModifiedElementsAreEqual(n.modifiedStart,n.modifiedStart+n.modifiedLength));)n.originalStart++,n.modifiedStart++;let a=[null];t<e.length-1&&this.ChangesOverlap(e[t],e[t+1],a)&&(e[t]=a[0],e.splice(t+1,1),t--)}for(let t=e.length-1;t>=0;t--){const n=e[t];let i=0,r=0;if(t>0){const n=e[t-1];i=n.originalStart+n.originalLength,r=n.modifiedStart+n.modifiedLength}const s=n.originalLength>0,o=n.modifiedLength>0;let a=0,l=this._boundaryScore(n.originalStart,n.originalLength,n.modifiedStart,n.modifiedLength);for(let e=1;;e++){const t=n.originalStart-e,u=n.modifiedStart-e;if(t<i||u<r)break;if(s&&!this.OriginalElementsAreEqual(t,t+n.originalLength))break;if(o&&!this.ModifiedElementsAreEqual(u,u+n.modifiedLength))break;const h=(t===i&&u===r?5:0)+this._boundaryScore(t,n.originalLength,u,n.modifiedLength);h>l&&(l=h,a=e)}n.originalStart-=a,n.modifiedStart-=a;const u=[null];t>0&&this.ChangesOverlap(e[t-1],e[t],u)&&(e[t-1]=u[0],e.splice(t,1),t++)}if(this._hasStrings)for(let t=1,n=e.length;t<n;t++){const n=e[t-1],i=e[t],r=i.originalStart-n.originalStart-n.originalLength,s=n.originalStart,o=i.originalStart+i.originalLength,a=o-s,l=n.modifiedStart,u=i.modifiedStart+i.modifiedLength,h=u-l;if(r<5&&a<20&&h<20){const e=this._findBetterContiguousSequence(s,a,l,h,r);if(e){const[t,s]=e;t===n.originalStart+n.originalLength&&s===n.modifiedStart+n.modifiedLength||(n.originalLength=t-n.originalStart,n.modifiedLength=s-n.modifiedStart,i.originalStart=t+r,i.modifiedStart=s+r,i.originalLength=o-i.originalStart,i.modifiedLength=u-i.modifiedStart)}}}return e}_findBetterContiguousSequence(e,t,n,i,r){if(t<r||i<r)return null;const s=e+t-r+1,o=n+i-r+1;let a=0,l=0,u=0;for(let t=e;t<s;t++)for(let e=n;e<o;e++){const n=this._contiguousSequenceScore(t,e,r);n>0&&n>a&&(a=n,l=t,u=e)}return a>0?[l,u]:null}_contiguousSequenceScore(e,t,n){let i=0;for(let r=0;r<n;r++){if(!this.ElementsAreEqual(e+r,t+r))return 0;i+=this._originalStringElements[e+r].length}return i}_OriginalIsBoundary(e){return e<=0||e>=this._originalElementsOrHash.length-1||this._hasStrings&&/^\\\\s*$/.test(this._originalStringElements[e])}_OriginalRegionIsBoundary(e,t){if(this._OriginalIsBoundary(e)||this._OriginalIsBoundary(e-1))return!0;if(t>0){const n=e+t;if(this._OriginalIsBoundary(n-1)||this._OriginalIsBoundary(n))return!0}return!1}_ModifiedIsBoundary(e){return e<=0||e>=this._modifiedElementsOrHash.length-1||this._hasStrings&&/^\\\\s*$/.test(this._modifiedStringElements[e])}_ModifiedRegionIsBoundary(e,t){if(this._ModifiedIsBoundary(e)||this._ModifiedIsBoundary(e-1))return!0;if(t>0){const n=e+t;if(this._ModifiedIsBoundary(n-1)||this._ModifiedIsBoundary(n))return!0}return!1}_boundaryScore(e,t,n,i){return(this._OriginalRegionIsBoundary(e,t)?1:0)+(this._ModifiedRegionIsBoundary(n,i)?1:0)}ConcatenateChanges(e,t){let n=[];if(0===e.length||0===t.length)return t.length>0?t:e;if(this.ChangesOverlap(e[e.length-1],t[0],n)){const i=new Array(e.length+t.length-1);return te.Copy(e,0,i,0,e.length-1),i[e.length-1]=n[0],te.Copy(t,1,i,e.length,t.length-1),i}{const n=new Array(e.length+t.length);return te.Copy(e,0,n,0,e.length),te.Copy(t,0,n,e.length,t.length),n}}ChangesOverlap(e,t,n){if(ee.Assert(e.originalStart<=t.originalStart,\\\"Left change is not less than or equal to right change\\\"),ee.Assert(e.modifiedStart<=t.modifiedStart,\\\"Left change is not less than or equal to right change\\\"),e.originalStart+e.originalLength>=t.originalStart||e.modifiedStart+e.modifiedLength>=t.modifiedStart){const i=e.originalStart;let r=e.originalLength;const s=e.modifiedStart;let o=e.modifiedLength;return e.originalStart+e.originalLength>=t.originalStart&&(r=t.originalStart+t.originalLength-e.originalStart),e.modifiedStart+e.modifiedLength>=t.modifiedStart&&(o=t.modifiedStart+t.modifiedLength-e.modifiedStart),n[0]=new W(i,r,s,o),!0}return n[0]=null,!1}ClipDiagonalBound(e,t,n,i){if(e>=0&&e<i)return e;const r=t%2==0;if(e<0){return r===(n%2==0)?0:1}return r===((i-n-1)%2==0)?i-1:i-2}}let re;if(void 0!==O.vscode&&void 0!==O.vscode.process){const e=O.vscode.process;re={get platform(){return e.platform},get env(){return e.env},cwd:()=>e.cwd(),nextTick:e=>k(e)}}else re=\\\"undefined\\\"!=typeof process?{get platform(){return process.platform},get env(){return process.env},cwd:()=>process.env.VSCODE_CWD||process.cwd(),nextTick:e=>process.nextTick(e)}:{get platform(){return R?\\\"win32\\\":P?\\\"darwin\\\":\\\"linux\\\"},nextTick:e=>k(e),get env(){return Object.create(null)},cwd:()=>\\\"/\\\"};const se=re.cwd,oe=re.env,ae=re.platform,le=46,ue=47,he=92,de=58;class ce extends Error{constructor(e,t,n){let i;\\\"string\\\"==typeof t&&0===t.indexOf(\\\"not \\\")?(i=\\\"must not be\\\",t=t.replace(/^not /,\\\"\\\")):i=\\\"must be\\\";const r=-1!==e.indexOf(\\\".\\\")?\\\"property\\\":\\\"argument\\\";let s=`The \\\"${e}\\\" ${r} ${i} of type ${t}`;s+=\\\". Received type \\\"+typeof n,super(s),this.code=\\\"ERR_INVALID_ARG_TYPE\\\"}}function fe(e,t){if(\\\"string\\\"!=typeof e)throw new ce(t,\\\"string\\\",e)}function me(e){return e===ue||e===he}function ge(e){return e===ue}function _e(e){return e>=65&&e<=90||e>=97&&e<=122}function pe(e,t,n,i){let r=\\\"\\\",s=0,o=-1,a=0,l=0;for(let u=0;u<=e.length;++u){if(u<e.length)l=e.charCodeAt(u);else{if(i(l))break;l=ue}if(i(l)){if(o===u-1||1===a);else if(2===a){if(r.length<2||2!==s||r.charCodeAt(r.length-1)!==le||r.charCodeAt(r.length-2)!==le){if(r.length>2){const e=r.lastIndexOf(n);-1===e?(r=\\\"\\\",s=0):(r=r.slice(0,e),s=r.length-1-r.lastIndexOf(n)),o=u,a=0;continue}if(0!==r.length){r=\\\"\\\",s=0,o=u,a=0;continue}}t&&(r+=r.length>0?`${n}..`:\\\"..\\\",s=2)}else r.length>0?r+=`${n}${e.slice(o+1,u)}`:r=e.slice(o+1,u),s=u-o-1;o=u,a=0}else l===le&&-1!==a?++a:a=-1}return r}function Ce(e,t){if(null===t||\\\"object\\\"!=typeof t)throw new ce(\\\"pathObject\\\",\\\"Object\\\",t);const n=t.dir||t.root,i=t.base||`${t.name||\\\"\\\"}${t.ext||\\\"\\\"}`;return n?n===t.root?`${n}${i}`:`${n}${e}${i}`:i}const be={resolve(...e){let t=\\\"\\\",n=\\\"\\\",i=!1;for(let r=e.length-1;r>=-1;r--){let s;if(r>=0){if(s=e[r],fe(s,\\\"path\\\"),0===s.length)continue}else 0===t.length?s=se():(s=oe[`=${t}`]||se(),(void 0===s||s.slice(0,2).toLowerCase()!==t.toLowerCase()&&s.charCodeAt(2)===he)&&(s=`${t}\\\\\\\\`));const o=s.length;let a=0,l=\\\"\\\",u=!1;const h=s.charCodeAt(0);if(1===o)me(h)&&(a=1,u=!0);else if(me(h))if(u=!0,me(s.charCodeAt(1))){let e=2,t=e;for(;e<o&&!me(s.charCodeAt(e));)e++;if(e<o&&e!==t){const n=s.slice(t,e);for(t=e;e<o&&me(s.charCodeAt(e));)e++;if(e<o&&e!==t){for(t=e;e<o&&!me(s.charCodeAt(e));)e++;e!==o&&e===t||(l=`\\\\\\\\\\\\\\\\${n}\\\\\\\\${s.slice(t,e)}`,a=e)}}}else a=1;else _e(h)&&s.charCodeAt(1)===de&&(l=s.slice(0,2),a=2,o>2&&me(s.charCodeAt(2))&&(u=!0,a=3));if(l.length>0)if(t.length>0){if(l.toLowerCase()!==t.toLowerCase())continue}else t=l;if(i){if(t.length>0)break}else if(n=`${s.slice(a)}\\\\\\\\${n}`,i=u,u&&t.length>0)break}return n=pe(n,!i,\\\"\\\\\\\\\\\",me),i?`${t}\\\\\\\\${n}`:`${t}${n}`||\\\".\\\"},normalize(e){fe(e,\\\"path\\\");const t=e.length;if(0===t)return\\\".\\\";let n,i=0,r=!1;const s=e.charCodeAt(0);if(1===t)return ge(s)?\\\"\\\\\\\\\\\":e;if(me(s))if(r=!0,me(e.charCodeAt(1))){let r=2,s=r;for(;r<t&&!me(e.charCodeAt(r));)r++;if(r<t&&r!==s){const o=e.slice(s,r);for(s=r;r<t&&me(e.charCodeAt(r));)r++;if(r<t&&r!==s){for(s=r;r<t&&!me(e.charCodeAt(r));)r++;if(r===t)return`\\\\\\\\\\\\\\\\${o}\\\\\\\\${e.slice(s)}\\\\\\\\`;r!==s&&(n=`\\\\\\\\\\\\\\\\${o}\\\\\\\\${e.slice(s,r)}`,i=r)}}}else i=1;else _e(s)&&e.charCodeAt(1)===de&&(n=e.slice(0,2),i=2,t>2&&me(e.charCodeAt(2))&&(r=!0,i=3));let o=i<t?pe(e.slice(i),!r,\\\"\\\\\\\\\\\",me):\\\"\\\";return 0!==o.length||r||(o=\\\".\\\"),o.length>0&&me(e.charCodeAt(t-1))&&(o+=\\\"\\\\\\\\\\\"),void 0===n?r?`\\\\\\\\${o}`:o:r?`${n}\\\\\\\\${o}`:`${n}${o}`},isAbsolute(e){fe(e,\\\"path\\\");const t=e.length;if(0===t)return!1;const n=e.charCodeAt(0);return me(n)||t>2&&_e(n)&&e.charCodeAt(1)===de&&me(e.charCodeAt(2))},join(...e){if(0===e.length)return\\\".\\\";let t,n;for(let i=0;i<e.length;++i){const r=e[i];fe(r,\\\"path\\\"),r.length>0&&(void 0===t?t=n=r:t+=`\\\\\\\\${r}`)}if(void 0===t)return\\\".\\\";let i=!0,r=0;if(\\\"string\\\"==typeof n&&me(n.charCodeAt(0))){++r;const e=n.length;e>1&&me(n.charCodeAt(1))&&(++r,e>2&&(me(n.charCodeAt(2))?++r:i=!1))}if(i){for(;r<t.length&&me(t.charCodeAt(r));)r++;r>=2&&(t=`\\\\\\\\${t.slice(r)}`)}return be.normalize(t)},relative(e,t){if(fe(e,\\\"from\\\"),fe(t,\\\"to\\\"),e===t)return\\\"\\\";const n=be.resolve(e),i=be.resolve(t);if(n===i)return\\\"\\\";if((e=n.toLowerCase())===(t=i.toLowerCase()))return\\\"\\\";let r=0;for(;r<e.length&&e.charCodeAt(r)===he;)r++;let s=e.length;for(;s-1>r&&e.charCodeAt(s-1)===he;)s--;const o=s-r;let a=0;for(;a<t.length&&t.charCodeAt(a)===he;)a++;let l=t.length;for(;l-1>a&&t.charCodeAt(l-1)===he;)l--;const u=l-a,h=o<u?o:u;let d=-1,c=0;for(;c<h;c++){const n=e.charCodeAt(r+c);if(n!==t.charCodeAt(a+c))break;n===he&&(d=c)}if(c!==h){if(-1===d)return i}else{if(u>h){if(t.charCodeAt(a+c)===he)return i.slice(a+c+1);if(2===c)return i.slice(a+c)}o>h&&(e.charCodeAt(r+c)===he?d=c:2===c&&(d=3)),-1===d&&(d=0)}let f=\\\"\\\";for(c=r+d+1;c<=s;++c)c!==s&&e.charCodeAt(c)!==he||(f+=0===f.length?\\\"..\\\":\\\"\\\\\\\\..\\\");return a+=d,f.length>0?`${f}${i.slice(a,l)}`:(i.charCodeAt(a)===he&&++a,i.slice(a,l))},toNamespacedPath(e){if(\\\"string\\\"!=typeof e)return e;if(0===e.length)return\\\"\\\";const t=be.resolve(e);if(t.length<=2)return e;if(t.charCodeAt(0)===he){if(t.charCodeAt(1)===he){const e=t.charCodeAt(2);if(63!==e&&e!==le)return`\\\\\\\\\\\\\\\\?\\\\\\\\UNC\\\\\\\\${t.slice(2)}`}}else if(_e(t.charCodeAt(0))&&t.charCodeAt(1)===de&&t.charCodeAt(2)===he)return`\\\\\\\\\\\\\\\\?\\\\\\\\${t}`;return e},dirname(e){fe(e,\\\"path\\\");const t=e.length;if(0===t)return\\\".\\\";let n=-1,i=0;const r=e.charCodeAt(0);if(1===t)return me(r)?e:\\\".\\\";if(me(r)){if(n=i=1,me(e.charCodeAt(1))){let r=2,s=r;for(;r<t&&!me(e.charCodeAt(r));)r++;if(r<t&&r!==s){for(s=r;r<t&&me(e.charCodeAt(r));)r++;if(r<t&&r!==s){for(s=r;r<t&&!me(e.charCodeAt(r));)r++;if(r===t)return e;r!==s&&(n=i=r+1)}}}}else _e(r)&&e.charCodeAt(1)===de&&(n=t>2&&me(e.charCodeAt(2))?3:2,i=n);let s=-1,o=!0;for(let n=t-1;n>=i;--n)if(me(e.charCodeAt(n))){if(!o){s=n;break}}else o=!1;if(-1===s){if(-1===n)return\\\".\\\";s=n}return e.slice(0,s)},basename(e,t){void 0!==t&&fe(t,\\\"ext\\\"),fe(e,\\\"path\\\");let n,i=0,r=-1,s=!0;if(e.length>=2&&_e(e.charCodeAt(0))&&e.charCodeAt(1)===de&&(i=2),void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return\\\"\\\";let o=t.length-1,a=-1;for(n=e.length-1;n>=i;--n){const l=e.charCodeAt(n);if(me(l)){if(!s){i=n+1;break}}else-1===a&&(s=!1,a=n+1),o>=0&&(l===t.charCodeAt(o)?-1==--o&&(r=n):(o=-1,r=a))}return i===r?r=a:-1===r&&(r=e.length),e.slice(i,r)}for(n=e.length-1;n>=i;--n)if(me(e.charCodeAt(n))){if(!s){i=n+1;break}}else-1===r&&(s=!1,r=n+1);return-1===r?\\\"\\\":e.slice(i,r)},extname(e){fe(e,\\\"path\\\");let t=0,n=-1,i=0,r=-1,s=!0,o=0;e.length>=2&&e.charCodeAt(1)===de&&_e(e.charCodeAt(0))&&(t=i=2);for(let a=e.length-1;a>=t;--a){const t=e.charCodeAt(a);if(me(t)){if(!s){i=a+1;break}}else-1===r&&(s=!1,r=a+1),t===le?-1===n?n=a:1!==o&&(o=1):-1!==n&&(o=-1)}return-1===n||-1===r||0===o||1===o&&n===r-1&&n===i+1?\\\"\\\":e.slice(n,r)},format:Ce.bind(null,\\\"\\\\\\\\\\\"),parse(e){fe(e,\\\"path\\\");const t={root:\\\"\\\",dir:\\\"\\\",base:\\\"\\\",ext:\\\"\\\",name:\\\"\\\"};if(0===e.length)return t;const n=e.length;let i=0,r=e.charCodeAt(0);if(1===n)return me(r)?(t.root=t.dir=e,t):(t.base=t.name=e,t);if(me(r)){if(i=1,me(e.charCodeAt(1))){let t=2,r=t;for(;t<n&&!me(e.charCodeAt(t));)t++;if(t<n&&t!==r){for(r=t;t<n&&me(e.charCodeAt(t));)t++;if(t<n&&t!==r){for(r=t;t<n&&!me(e.charCodeAt(t));)t++;t===n?i=t:t!==r&&(i=t+1)}}}}else if(_e(r)&&e.charCodeAt(1)===de){if(n<=2)return t.root=t.dir=e,t;if(i=2,me(e.charCodeAt(2))){if(3===n)return t.root=t.dir=e,t;i=3}}i>0&&(t.root=e.slice(0,i));let s=-1,o=i,a=-1,l=!0,u=e.length-1,h=0;for(;u>=i;--u)if(r=e.charCodeAt(u),me(r)){if(!l){o=u+1;break}}else-1===a&&(l=!1,a=u+1),r===le?-1===s?s=u:1!==h&&(h=1):-1!==s&&(h=-1);return-1!==a&&(-1===s||0===h||1===h&&s===a-1&&s===o+1?t.base=t.name=e.slice(o,a):(t.name=e.slice(o,s),t.base=e.slice(o,a),t.ext=e.slice(s,a))),t.dir=o>0&&o!==i?e.slice(0,o-1):t.root,t},sep:\\\"\\\\\\\\\\\",delimiter:\\\";\\\",win32:null,posix:null},Le={resolve(...e){let t=\\\"\\\",n=!1;for(let i=e.length-1;i>=-1&&!n;i--){const r=i>=0?e[i]:se();fe(r,\\\"path\\\"),0!==r.length&&(t=`${r}/${t}`,n=r.charCodeAt(0)===ue)}return t=pe(t,!n,\\\"/\\\",ge),n?`/${t}`:t.length>0?t:\\\".\\\"},normalize(e){if(fe(e,\\\"path\\\"),0===e.length)return\\\".\\\";const t=e.charCodeAt(0)===ue,n=e.charCodeAt(e.length-1)===ue;return 0===(e=pe(e,!t,\\\"/\\\",ge)).length?t?\\\"/\\\":n?\\\"./\\\":\\\".\\\":(n&&(e+=\\\"/\\\"),t?`/${e}`:e)},isAbsolute:e=>(fe(e,\\\"path\\\"),e.length>0&&e.charCodeAt(0)===ue),join(...e){if(0===e.length)return\\\".\\\";let t;for(let n=0;n<e.length;++n){const i=e[n];fe(i,\\\"path\\\"),i.length>0&&(void 0===t?t=i:t+=`/${i}`)}return void 0===t?\\\".\\\":Le.normalize(t)},relative(e,t){if(fe(e,\\\"from\\\"),fe(t,\\\"to\\\"),e===t)return\\\"\\\";if((e=Le.resolve(e))===(t=Le.resolve(t)))return\\\"\\\";const n=e.length,i=n-1,r=t.length-1,s=i<r?i:r;let o=-1,a=0;for(;a<s;a++){const n=e.charCodeAt(1+a);if(n!==t.charCodeAt(1+a))break;n===ue&&(o=a)}if(a===s)if(r>s){if(t.charCodeAt(1+a)===ue)return t.slice(1+a+1);if(0===a)return t.slice(1+a)}else i>s&&(e.charCodeAt(1+a)===ue?o=a:0===a&&(o=0));let l=\\\"\\\";for(a=1+o+1;a<=n;++a)a!==n&&e.charCodeAt(a)!==ue||(l+=0===l.length?\\\"..\\\":\\\"/..\\\");return`${l}${t.slice(1+o)}`},toNamespacedPath:e=>e,dirname(e){if(fe(e,\\\"path\\\"),0===e.length)return\\\".\\\";const t=e.charCodeAt(0)===ue;let n=-1,i=!0;for(let t=e.length-1;t>=1;--t)if(e.charCodeAt(t)===ue){if(!i){n=t;break}}else i=!1;return-1===n?t?\\\"/\\\":\\\".\\\":t&&1===n?\\\"//\\\":e.slice(0,n)},basename(e,t){void 0!==t&&fe(t,\\\"ext\\\"),fe(e,\\\"path\\\");let n,i=0,r=-1,s=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t===e)return\\\"\\\";let o=t.length-1,a=-1;for(n=e.length-1;n>=0;--n){const l=e.charCodeAt(n);if(l===ue){if(!s){i=n+1;break}}else-1===a&&(s=!1,a=n+1),o>=0&&(l===t.charCodeAt(o)?-1==--o&&(r=n):(o=-1,r=a))}return i===r?r=a:-1===r&&(r=e.length),e.slice(i,r)}for(n=e.length-1;n>=0;--n)if(e.charCodeAt(n)===ue){if(!s){i=n+1;break}}else-1===r&&(s=!1,r=n+1);return-1===r?\\\"\\\":e.slice(i,r)},extname(e){fe(e,\\\"path\\\");let t=-1,n=0,i=-1,r=!0,s=0;for(let o=e.length-1;o>=0;--o){const a=e.charCodeAt(o);if(a!==ue)-1===i&&(r=!1,i=o+1),a===le?-1===t?t=o:1!==s&&(s=1):-1!==t&&(s=-1);else if(!r){n=o+1;break}}return-1===t||-1===i||0===s||1===s&&t===i-1&&t===n+1?\\\"\\\":e.slice(t,i)},format:Ce.bind(null,\\\"/\\\"),parse(e){fe(e,\\\"path\\\");const t={root:\\\"\\\",dir:\\\"\\\",base:\\\"\\\",ext:\\\"\\\",name:\\\"\\\"};if(0===e.length)return t;const n=e.charCodeAt(0)===ue;let i;n?(t.root=\\\"/\\\",i=1):i=0;let r=-1,s=0,o=-1,a=!0,l=e.length-1,u=0;for(;l>=i;--l){const t=e.charCodeAt(l);if(t!==ue)-1===o&&(a=!1,o=l+1),t===le?-1===r?r=l:1!==u&&(u=1):-1!==r&&(u=-1);else if(!a){s=l+1;break}}if(-1!==o){const i=0===s&&n?1:s;-1===r||0===u||1===u&&r===o-1&&r===s+1?t.base=t.name=e.slice(i,o):(t.name=e.slice(i,r),t.base=e.slice(i,o),t.ext=e.slice(r,o))}return s>0?t.dir=e.slice(0,s-1):n&&(t.dir=\\\"/\\\"),t},sep:\\\"/\\\",delimiter:\\\":\\\",win32:null,posix:null};Le.win32=be.win32=be,Le.posix=be.posix=Le;\\\"win32\\\"===ae?be.normalize:Le.normalize,\\\"win32\\\"===ae?be.resolve:Le.resolve,\\\"win32\\\"===ae?be.relative:Le.relative,\\\"win32\\\"===ae?be.dirname:Le.dirname,\\\"win32\\\"===ae?be.basename:Le.basename,\\\"win32\\\"===ae?be.extname:Le.extname,\\\"win32\\\"===ae?be.sep:Le.sep;const Se=/^\\\\w[\\\\w\\\\d+.-]*$/,Ne=/^\\\\//,Ee=/^\\\\/\\\\//;const Ae=\\\"\\\",ye=\\\"/\\\",ve=/^(([^:/?#]+?):)?(\\\\/\\\\/([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?/;class we{constructor(e,t,n,i,r,s=!1){\\\"object\\\"==typeof e?(this.scheme=e.scheme||Ae,this.authority=e.authority||Ae,this.path=e.path||Ae,this.query=e.query||Ae,this.fragment=e.fragment||Ae):(this.scheme=function(e,t){return e||t?e:\\\"file\\\"}(e,s),this.authority=t||Ae,this.path=function(e,t){switch(e){case\\\"https\\\":case\\\"http\\\":case\\\"file\\\":t?t[0]!==ye&&(t=ye+t):t=ye}return t}(this.scheme,n||Ae),this.query=i||Ae,this.fragment=r||Ae,function(e,t){if(!e.scheme&&t)throw new Error(`[UriError]: Scheme is missing: {scheme: \\\"\\\", authority: \\\"${e.authority}\\\", path: \\\"${e.path}\\\", query: \\\"${e.query}\\\", fragment: \\\"${e.fragment}\\\"}`);if(e.scheme&&!Se.test(e.scheme))throw new Error(\\\"[UriError]: Scheme contains illegal characters.\\\");if(e.path)if(e.authority){if(!Ne.test(e.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash (\\\"/\\\") character')}else if(Ee.test(e.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters (\\\"//\\\")')}(this,s))}static isUri(e){return e instanceof we||!!e&&(\\\"string\\\"==typeof e.authority&&\\\"string\\\"==typeof e.fragment&&\\\"string\\\"==typeof e.path&&\\\"string\\\"==typeof e.query&&\\\"string\\\"==typeof e.scheme&&\\\"string\\\"==typeof e.fsPath&&\\\"function\\\"==typeof e.with&&\\\"function\\\"==typeof e.toString)}get fsPath(){return Re(this,!1)}with(e){if(!e)return this;let{scheme:t,authority:n,path:i,query:r,fragment:s}=e;return void 0===t?t=this.scheme:null===t&&(t=Ae),void 0===n?n=this.authority:null===n&&(n=Ae),void 0===i?i=this.path:null===i&&(i=Ae),void 0===r?r=this.query:null===r&&(r=Ae),void 0===s?s=this.fragment:null===s&&(s=Ae),t===this.scheme&&n===this.authority&&i===this.path&&r===this.query&&s===this.fragment?this:new Te(t,n,i,r,s)}static parse(e,t=!1){const n=ve.exec(e);return n?new Te(n[2]||Ae,De(n[4]||Ae),De(n[5]||Ae),De(n[7]||Ae),De(n[9]||Ae),t):new Te(Ae,Ae,Ae,Ae,Ae)}static file(e){let t=Ae;if(R&&(e=e.replace(/\\\\\\\\/g,ye)),e[0]===ye&&e[1]===ye){const n=e.indexOf(ye,2);-1===n?(t=e.substring(2),e=ye):(t=e.substring(2,n),e=e.substring(n)||ye)}return new Te(\\\"file\\\",t,e,Ae,Ae)}static from(e){return new Te(e.scheme,e.authority,e.path,e.query,e.fragment)}static joinPath(e,...t){if(!e.path)throw new Error(\\\"[UriError]: cannot call joinPath on URI without path\\\");let n;return n=R&&\\\"file\\\"===e.scheme?we.file(be.join(Re(e,!0),...t)).path:Le.join(e.path,...t),e.with({path:n})}toString(e=!1){return Pe(this,e)}toJSON(){return this}static revive(e){if(e){if(e instanceof we)return e;{const t=new Te(e);return t._formatted=e.external,t._fsPath=e._sep===Oe?e.fsPath:null,t}}return e}}const Oe=R?1:void 0;class Te extends we{constructor(){super(...arguments),this._formatted=null,this._fsPath=null}get fsPath(){return this._fsPath||(this._fsPath=Re(this,!1)),this._fsPath}toString(e=!1){return e?Pe(this,!0):(this._formatted||(this._formatted=Pe(this,!1)),this._formatted)}toJSON(){const e={$mid:1};return this._fsPath&&(e.fsPath=this._fsPath,e._sep=Oe),this._formatted&&(e.external=this._formatted),this.path&&(e.path=this.path),this.scheme&&(e.scheme=this.scheme),this.authority&&(e.authority=this.authority),this.query&&(e.query=this.query),this.fragment&&(e.fragment=this.fragment),e}}const Ie={58:\\\"%3A\\\",47:\\\"%2F\\\",63:\\\"%3F\\\",35:\\\"%23\\\",91:\\\"%5B\\\",93:\\\"%5D\\\",64:\\\"%40\\\",33:\\\"%21\\\",36:\\\"%24\\\",38:\\\"%26\\\",39:\\\"%27\\\",40:\\\"%28\\\",41:\\\"%29\\\",42:\\\"%2A\\\",43:\\\"%2B\\\",44:\\\"%2C\\\",59:\\\"%3B\\\",61:\\\"%3D\\\",32:\\\"%20\\\"};function xe(e,t){let n,i=-1;for(let r=0;r<e.length;r++){const s=e.charCodeAt(r);if(s>=97&&s<=122||s>=65&&s<=90||s>=48&&s<=57||45===s||46===s||95===s||126===s||t&&47===s)-1!==i&&(n+=encodeURIComponent(e.substring(i,r)),i=-1),void 0!==n&&(n+=e.charAt(r));else{void 0===n&&(n=e.substr(0,r));const t=Ie[s];void 0!==t?(-1!==i&&(n+=encodeURIComponent(e.substring(i,r)),i=-1),n+=t):-1===i&&(i=r)}}return-1!==i&&(n+=encodeURIComponent(e.substring(i))),void 0!==n?n:e}function Me(e){let t;for(let n=0;n<e.length;n++){const i=e.charCodeAt(n);35===i||63===i?(void 0===t&&(t=e.substr(0,n)),t+=Ie[i]):void 0!==t&&(t+=e[n])}return void 0!==t?t:e}function Re(e,t){let n;return n=e.authority&&e.path.length>1&&\\\"file\\\"===e.scheme?`//${e.authority}${e.path}`:47===e.path.charCodeAt(0)&&(e.path.charCodeAt(1)>=65&&e.path.charCodeAt(1)<=90||e.path.charCodeAt(1)>=97&&e.path.charCodeAt(1)<=122)&&58===e.path.charCodeAt(2)?t?e.path.substr(1):e.path[1].toLowerCase()+e.path.substr(2):e.path,R&&(n=n.replace(/\\\\//g,\\\"\\\\\\\\\\\")),n}function Pe(e,t){const n=t?Me:xe;let i=\\\"\\\",{scheme:r,authority:s,path:o,query:a,fragment:l}=e;if(r&&(i+=r,i+=\\\":\\\"),(s||\\\"file\\\"===r)&&(i+=ye,i+=ye),s){let e=s.indexOf(\\\"@\\\");if(-1!==e){const t=s.substr(0,e);s=s.substr(e+1),e=t.indexOf(\\\":\\\"),-1===e?i+=n(t,!1):(i+=n(t.substr(0,e),!1),i+=\\\":\\\",i+=n(t.substr(e+1),!1)),i+=\\\"@\\\"}s=s.toLowerCase(),e=s.indexOf(\\\":\\\"),-1===e?i+=n(s,!1):(i+=n(s.substr(0,e),!1),i+=s.substr(e))}if(o){if(o.length>=3&&47===o.charCodeAt(0)&&58===o.charCodeAt(2)){const e=o.charCodeAt(1);e>=65&&e<=90&&(o=`/${String.fromCharCode(e+32)}:${o.substr(3)}`)}else if(o.length>=2&&58===o.charCodeAt(1)){const e=o.charCodeAt(0);e>=65&&e<=90&&(o=`${String.fromCharCode(e+32)}:${o.substr(2)}`)}i+=n(o,!0)}return a&&(i+=\\\"?\\\",i+=n(a,!1)),l&&(i+=\\\"#\\\",i+=t?l:xe(l,!1)),i}function ke(e){try{return decodeURIComponent(e)}catch(t){return e.length>3?e.substr(0,3)+ke(e.substr(3)):e}}const Ue=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function De(e){return e.match(Ue)?e.replace(Ue,(e=>ke(e))):e}class Fe{constructor(e,t){this.lineNumber=e,this.column=t}with(e=this.lineNumber,t=this.column){return e===this.lineNumber&&t===this.column?this:new Fe(e,t)}delta(e=0,t=0){return this.with(this.lineNumber+e,this.column+t)}equals(e){return Fe.equals(this,e)}static equals(e,t){return!e&&!t||!!e&&!!t&&e.lineNumber===t.lineNumber&&e.column===t.column}isBefore(e){return Fe.isBefore(this,e)}static isBefore(e,t){return e.lineNumber<t.lineNumber||!(t.lineNumber<e.lineNumber)&&e.column<t.column}isBeforeOrEqual(e){return Fe.isBeforeOrEqual(this,e)}static isBeforeOrEqual(e,t){return e.lineNumber<t.lineNumber||!(t.lineNumber<e.lineNumber)&&e.column<=t.column}static compare(e,t){let n=0|e.lineNumber,i=0|t.lineNumber;if(n===i){return(0|e.column)-(0|t.column)}return n-i}clone(){return new Fe(this.lineNumber,this.column)}toString(){return\\\"(\\\"+this.lineNumber+\\\",\\\"+this.column+\\\")\\\"}static lift(e){return new Fe(e.lineNumber,e.column)}static isIPosition(e){return e&&\\\"number\\\"==typeof e.lineNumber&&\\\"number\\\"==typeof e.column}}class Ke{constructor(e,t,n,i){e>n||e===n&&t>i?(this.startLineNumber=n,this.startColumn=i,this.endLineNumber=e,this.endColumn=t):(this.startLineNumber=e,this.startColumn=t,this.endLineNumber=n,this.endColumn=i)}isEmpty(){return Ke.isEmpty(this)}static isEmpty(e){return e.startLineNumber===e.endLineNumber&&e.startColumn===e.endColumn}containsPosition(e){return Ke.containsPosition(this,e)}static containsPosition(e,t){return!(t.lineNumber<e.startLineNumber||t.lineNumber>e.endLineNumber)&&(!(t.lineNumber===e.startLineNumber&&t.column<e.startColumn)&&!(t.lineNumber===e.endLineNumber&&t.column>e.endColumn))}containsRange(e){return Ke.containsRange(this,e)}static containsRange(e,t){return!(t.startLineNumber<e.startLineNumber||t.endLineNumber<e.startLineNumber)&&(!(t.startLineNumber>e.endLineNumber||t.endLineNumber>e.endLineNumber)&&(!(t.startLineNumber===e.startLineNumber&&t.startColumn<e.startColumn)&&!(t.endLineNumber===e.endLineNumber&&t.endColumn>e.endColumn)))}strictContainsRange(e){return Ke.strictContainsRange(this,e)}static strictContainsRange(e,t){return!(t.startLineNumber<e.startLineNumber||t.endLineNumber<e.startLineNumber)&&(!(t.startLineNumber>e.endLineNumber||t.endLineNumber>e.endLineNumber)&&(!(t.startLineNumber===e.startLineNumber&&t.startColumn<=e.startColumn)&&!(t.endLineNumber===e.endLineNumber&&t.endColumn>=e.endColumn)))}plusRange(e){return Ke.plusRange(this,e)}static plusRange(e,t){let n,i,r,s;return t.startLineNumber<e.startLineNumber?(n=t.startLineNumber,i=t.startColumn):t.startLineNumber===e.startLineNumber?(n=t.startLineNumber,i=Math.min(t.startColumn,e.startColumn)):(n=e.startLineNumber,i=e.startColumn),t.endLineNumber>e.endLineNumber?(r=t.endLineNumber,s=t.endColumn):t.endLineNumber===e.endLineNumber?(r=t.endLineNumber,s=Math.max(t.endColumn,e.endColumn)):(r=e.endLineNumber,s=e.endColumn),new Ke(n,i,r,s)}intersectRanges(e){return Ke.intersectRanges(this,e)}static intersectRanges(e,t){let n=e.startLineNumber,i=e.startColumn,r=e.endLineNumber,s=e.endColumn,o=t.startLineNumber,a=t.startColumn,l=t.endLineNumber,u=t.endColumn;return n<o?(n=o,i=a):n===o&&(i=Math.max(i,a)),r>l?(r=l,s=u):r===l&&(s=Math.min(s,u)),n>r||n===r&&i>s?null:new Ke(n,i,r,s)}equalsRange(e){return Ke.equalsRange(this,e)}static equalsRange(e,t){return!!e&&!!t&&e.startLineNumber===t.startLineNumber&&e.startColumn===t.startColumn&&e.endLineNumber===t.endLineNumber&&e.endColumn===t.endColumn}getEndPosition(){return Ke.getEndPosition(this)}static getEndPosition(e){return new Fe(e.endLineNumber,e.endColumn)}getStartPosition(){return Ke.getStartPosition(this)}static getStartPosition(e){return new Fe(e.startLineNumber,e.startColumn)}toString(){return\\\"[\\\"+this.startLineNumber+\\\",\\\"+this.startColumn+\\\" -> \\\"+this.endLineNumber+\\\",\\\"+this.endColumn+\\\"]\\\"}setEndPosition(e,t){return new Ke(this.startLineNumber,this.startColumn,e,t)}setStartPosition(e,t){return new Ke(e,t,this.endLineNumber,this.endColumn)}collapseToStart(){return Ke.collapseToStart(this)}static collapseToStart(e){return new Ke(e.startLineNumber,e.startColumn,e.startLineNumber,e.startColumn)}static fromPositions(e,t=e){return new Ke(e.lineNumber,e.column,t.lineNumber,t.column)}static lift(e){return e?new Ke(e.startLineNumber,e.startColumn,e.endLineNumber,e.endColumn):null}static isIRange(e){return e&&\\\"number\\\"==typeof e.startLineNumber&&\\\"number\\\"==typeof e.startColumn&&\\\"number\\\"==typeof e.endLineNumber&&\\\"number\\\"==typeof e.endColumn}static areIntersectingOrTouching(e,t){return!(e.endLineNumber<t.startLineNumber||e.endLineNumber===t.startLineNumber&&e.endColumn<t.startColumn)&&!(t.endLineNumber<e.startLineNumber||t.endLineNumber===e.startLineNumber&&t.endColumn<e.startColumn)}static areIntersecting(e,t){return!(e.endLineNumber<t.startLineNumber||e.endLineNumber===t.startLineNumber&&e.endColumn<=t.startColumn)&&!(t.endLineNumber<e.startLineNumber||t.endLineNumber===e.startLineNumber&&t.endColumn<=e.startColumn)}static compareRangesUsingStarts(e,t){if(e&&t){const n=0|e.startLineNumber,i=0|t.startLineNumber;if(n===i){const n=0|e.startColumn,i=0|t.startColumn;if(n===i){const n=0|e.endLineNumber,i=0|t.endLineNumber;if(n===i){return(0|e.endColumn)-(0|t.endColumn)}return n-i}return n-i}return n-i}return(e?1:0)-(t?1:0)}static compareRangesUsingEnds(e,t){return e.endLineNumber===t.endLineNumber?e.endColumn===t.endColumn?e.startLineNumber===t.startLineNumber?e.startColumn-t.startColumn:e.startLineNumber-t.startLineNumber:e.endColumn-t.endColumn:e.endLineNumber-t.endLineNumber}static spansMultipleLines(e){return e.endLineNumber>e.startLineNumber}}function Be(e,t,n,i){return new ie(e,t,n).ComputeDiff(i)}class We{constructor(e){const t=[],n=[];for(let i=0,r=e.length;i<r;i++)t[i]=$e(e[i],1),n[i]=je(e[i],1);this.lines=e,this._startColumns=t,this._endColumns=n}getElements(){const e=[];for(let t=0,n=this.lines.length;t<n;t++)e[t]=this.lines[t].substring(this._startColumns[t]-1,this._endColumns[t]-1);return e}getStartLineNumber(e){return e+1}getEndLineNumber(e){return e+1}createCharSequence(e,t,n){const i=[],r=[],s=[];let o=0;for(let a=t;a<=n;a++){const t=this.lines[a],n=e?this._startColumns[a]:1,l=e?this._endColumns[a]:t.length+1;for(let e=n;e<l;e++)i[o]=t.charCodeAt(e-1),r[o]=a+1,s[o]=e,o++}return new qe(i,r,s)}}class qe{constructor(e,t,n){this._charCodes=e,this._lineNumbers=t,this._columns=n}getElements(){return this._charCodes}getStartLineNumber(e){return this._lineNumbers[e]}getStartColumn(e){return this._columns[e]}getEndLineNumber(e){return this._lineNumbers[e]}getEndColumn(e){return this._columns[e]+1}}class He{constructor(e,t,n,i,r,s,o,a){this.originalStartLineNumber=e,this.originalStartColumn=t,this.originalEndLineNumber=n,this.originalEndColumn=i,this.modifiedStartLineNumber=r,this.modifiedStartColumn=s,this.modifiedEndLineNumber=o,this.modifiedEndColumn=a}static createFromDiffChange(e,t,n){let i,r,s,o,a,l,u,h;return 0===e.originalLength?(i=0,r=0,s=0,o=0):(i=t.getStartLineNumber(e.originalStart),r=t.getStartColumn(e.originalStart),s=t.getEndLineNumber(e.originalStart+e.originalLength-1),o=t.getEndColumn(e.originalStart+e.originalLength-1)),0===e.modifiedLength?(a=0,l=0,u=0,h=0):(a=n.getStartLineNumber(e.modifiedStart),l=n.getStartColumn(e.modifiedStart),u=n.getEndLineNumber(e.modifiedStart+e.modifiedLength-1),h=n.getEndColumn(e.modifiedStart+e.modifiedLength-1)),new He(i,r,s,o,a,l,u,h)}}class Ve{constructor(e,t,n,i,r){this.originalStartLineNumber=e,this.originalEndLineNumber=t,this.modifiedStartLineNumber=n,this.modifiedEndLineNumber=i,this.charChanges=r}static createFromDiffResult(e,t,n,i,r,s,o){let a,l,u,h,d;if(0===t.originalLength?(a=n.getStartLineNumber(t.originalStart)-1,l=0):(a=n.getStartLineNumber(t.originalStart),l=n.getEndLineNumber(t.originalStart+t.originalLength-1)),0===t.modifiedLength?(u=i.getStartLineNumber(t.modifiedStart)-1,h=0):(u=i.getStartLineNumber(t.modifiedStart),h=i.getEndLineNumber(t.modifiedStart+t.modifiedLength-1)),s&&t.originalLength>0&&t.originalLength<20&&t.modifiedLength>0&&t.modifiedLength<20&&r()){const s=n.createCharSequence(e,t.originalStart,t.originalStart+t.originalLength-1),a=i.createCharSequence(e,t.modifiedStart,t.modifiedStart+t.modifiedLength-1);let l=Be(s,a,r,!0).changes;o&&(l=function(e){if(e.length<=1)return e;const t=[e[0]];let n=t[0];for(let i=1,r=e.length;i<r;i++){const r=e[i],s=r.originalStart-(n.originalStart+n.originalLength),o=r.modifiedStart-(n.modifiedStart+n.modifiedLength);Math.min(s,o)<3?(n.originalLength=r.originalStart+r.originalLength-n.originalStart,n.modifiedLength=r.modifiedStart+r.modifiedLength-n.modifiedStart):(t.push(r),n=r)}return t}(l)),d=[];for(let e=0,t=l.length;e<t;e++)d.push(He.createFromDiffChange(l[e],s,a))}return new Ve(a,l,u,h,d)}}class Ye{constructor(e,t,n){this.shouldComputeCharChanges=n.shouldComputeCharChanges,this.shouldPostProcessCharChanges=n.shouldPostProcessCharChanges,this.shouldIgnoreTrimWhitespace=n.shouldIgnoreTrimWhitespace,this.shouldMakePrettyDiff=n.shouldMakePrettyDiff,this.originalLines=e,this.modifiedLines=t,this.original=new We(e),this.modified=new We(t),this.continueLineDiff=Ge(n.maxComputationTime),this.continueCharDiff=Ge(0===n.maxComputationTime?0:Math.min(n.maxComputationTime,5e3))}computeDiff(){if(1===this.original.lines.length&&0===this.original.lines[0].length)return 1===this.modified.lines.length&&0===this.modified.lines[0].length?{quitEarly:!1,changes:[]}:{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:1,modifiedStartLineNumber:1,modifiedEndLineNumber:this.modified.lines.length,charChanges:[{modifiedEndColumn:0,modifiedEndLineNumber:0,modifiedStartColumn:0,modifiedStartLineNumber:0,originalEndColumn:0,originalEndLineNumber:0,originalStartColumn:0,originalStartLineNumber:0}]}]};if(1===this.modified.lines.length&&0===this.modified.lines[0].length)return{quitEarly:!1,changes:[{originalStartLineNumber:1,originalEndLineNumber:this.original.lines.length,modifiedStartLineNumber:1,modifiedEndLineNumber:1,charChanges:[{modifiedEndColumn:0,modifiedEndLineNumber:0,modifiedStartColumn:0,modifiedStartLineNumber:0,originalEndColumn:0,originalEndLineNumber:0,originalStartColumn:0,originalStartLineNumber:0}]}]};const e=Be(this.original,this.modified,this.continueLineDiff,this.shouldMakePrettyDiff),t=e.changes,n=e.quitEarly;if(this.shouldIgnoreTrimWhitespace){const e=[];for(let n=0,i=t.length;n<i;n++)e.push(Ve.createFromDiffResult(this.shouldIgnoreTrimWhitespace,t[n],this.original,this.modified,this.continueCharDiff,this.shouldComputeCharChanges,this.shouldPostProcessCharChanges));return{quitEarly:n,changes:e}}const i=[];let r=0,s=0;for(let e=-1,n=t.length;e<n;e++){const o=e+1<n?t[e+1]:null,a=o?o.originalStart:this.originalLines.length,l=o?o.modifiedStart:this.modifiedLines.length;for(;r<a&&s<l;){const e=this.originalLines[r],t=this.modifiedLines[s];if(e!==t){{let n=$e(e,1),o=$e(t,1);for(;n>1&&o>1;){if(e.charCodeAt(n-2)!==t.charCodeAt(o-2))break;n--,o--}(n>1||o>1)&&this._pushTrimWhitespaceCharChange(i,r+1,1,n,s+1,1,o)}{let n=je(e,1),o=je(t,1);const a=e.length+1,l=t.length+1;for(;n<a&&o<l;){if(e.charCodeAt(n-1)!==e.charCodeAt(o-1))break;n++,o++}(n<a||o<l)&&this._pushTrimWhitespaceCharChange(i,r+1,n,a,s+1,o,l)}}r++,s++}o&&(i.push(Ve.createFromDiffResult(this.shouldIgnoreTrimWhitespace,o,this.original,this.modified,this.continueCharDiff,this.shouldComputeCharChanges,this.shouldPostProcessCharChanges)),r+=o.originalLength,s+=o.modifiedLength)}return{quitEarly:n,changes:i}}_pushTrimWhitespaceCharChange(e,t,n,i,r,s,o){if(this._mergeTrimWhitespaceCharChange(e,t,n,i,r,s,o))return;let a;this.shouldComputeCharChanges&&(a=[new He(t,n,t,i,r,s,r,o)]),e.push(new Ve(t,t,r,r,a))}_mergeTrimWhitespaceCharChange(e,t,n,i,r,s,o){const a=e.length;if(0===a)return!1;const l=e[a-1];return 0!==l.originalEndLineNumber&&0!==l.modifiedEndLineNumber&&(l.originalEndLineNumber+1===t&&l.modifiedEndLineNumber+1===r&&(l.originalEndLineNumber=t,l.modifiedEndLineNumber=r,this.shouldComputeCharChanges&&l.charChanges&&l.charChanges.push(new He(t,n,t,i,r,s,r,o)),!0))}}function $e(e,t){const n=function(e){for(let t=0,n=e.length;t<n;t++){const n=e.charCodeAt(t);if(32!==n&&9!==n)return t}return-1}(e);return-1===n?t:n+1}function je(e,t){const n=function(e,t=e.length-1){for(let n=t;n>=0;n--){const t=e.charCodeAt(n);if(32!==t&&9!==t)return n}return-1}(e);return-1===n?t:n+2}function Ge(e){if(0===e)return()=>!0;const t=Date.now();return()=>Date.now()-t<e}function ze(e){return e<0?0:e>255?255:0|e}function Qe(e){return e<0?0:e>4294967295?4294967295:0|e}class Xe{constructor(e,t){this.index=e,this.remainder=t}}class Ze{constructor(e){this.values=e,this.prefixSum=new Uint32Array(e.length),this.prefixSumValidIndex=new Int32Array(1),this.prefixSumValidIndex[0]=-1}insertValues(e,t){e=Qe(e);const n=this.values,i=this.prefixSum,r=t.length;return 0!==r&&(this.values=new Uint32Array(n.length+r),this.values.set(n.subarray(0,e),0),this.values.set(n.subarray(e),e+r),this.values.set(t,e),e-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=e-1),this.prefixSum=new Uint32Array(this.values.length),this.prefixSumValidIndex[0]>=0&&this.prefixSum.set(i.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}changeValue(e,t){return e=Qe(e),t=Qe(t),this.values[e]!==t&&(this.values[e]=t,e-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=e-1),!0)}removeValues(e,t){e=Qe(e),t=Qe(t);const n=this.values,i=this.prefixSum;if(e>=n.length)return!1;let r=n.length-e;return t>=r&&(t=r),0!==t&&(this.values=new Uint32Array(n.length-t),this.values.set(n.subarray(0,e),0),this.values.set(n.subarray(e+t),e),this.prefixSum=new Uint32Array(this.values.length),e-1<this.prefixSumValidIndex[0]&&(this.prefixSumValidIndex[0]=e-1),this.prefixSumValidIndex[0]>=0&&this.prefixSum.set(i.subarray(0,this.prefixSumValidIndex[0]+1)),!0)}getTotalValue(){return 0===this.values.length?0:this._getAccumulatedValue(this.values.length-1)}getAccumulatedValue(e){return e<0?0:(e=Qe(e),this._getAccumulatedValue(e))}_getAccumulatedValue(e){if(e<=this.prefixSumValidIndex[0])return this.prefixSum[e];let t=this.prefixSumValidIndex[0]+1;0===t&&(this.prefixSum[0]=this.values[0],t++),e>=this.values.length&&(e=this.values.length-1);for(let n=t;n<=e;n++)this.prefixSum[n]=this.prefixSum[n-1]+this.values[n];return this.prefixSumValidIndex[0]=Math.max(this.prefixSumValidIndex[0],e),this.prefixSum[e]}getIndexOf(e){e=Math.floor(e),this.getTotalValue();let t=0,n=this.values.length-1,i=0,r=0,s=0;for(;t<=n;)if(i=t+(n-t)/2|0,r=this.prefixSum[i],s=r-this.values[i],e<s)n=i-1;else{if(!(e>=r))break;t=i+1}return new Xe(i,e-s)}}const Je=function(e=\\\"\\\"){let t=\\\"(-?\\\\\\\\d*\\\\\\\\.\\\\\\\\d\\\\\\\\w*)|([^\\\";for(const n of\\\"`~!@#$%^&*()-=+[{]}\\\\\\\\|;:'\\\\\\\",.<>/?\\\")e.indexOf(n)>=0||(t+=\\\"\\\\\\\\\\\"+n);return t+=\\\"\\\\\\\\s]+)\\\",new RegExp(t,\\\"g\\\")}();const et={maxLen:1e3,windowSize:15,timeBudget:150};function tt(e,t,n,i,r=et){if(n.length>r.maxLen){let s=e-r.maxLen/2;return s<0?s=0:i+=s,tt(e,t,n=n.substring(s,e+r.maxLen/2),i,r)}const s=Date.now(),o=e-1-i;let a=-1,l=null;for(let e=1;!(Date.now()-s>=r.timeBudget);e++){const i=o-r.windowSize*e;t.lastIndex=Math.max(0,i);const s=nt(t,n,o,a);if(!s&&l)break;if(l=s,i<=0)break;a=i}if(l){let e={word:l[0],startColumn:i+1+l.index,endColumn:i+1+l.index+l[0].length};return t.lastIndex=0,e}return null}function nt(e,t,n,i){let r;for(;r=e.exec(t);){const t=r.index||0;if(t<=n&&e.lastIndex>=n)return r;if(i>0&&t>i)return null}return null}class it{constructor(e){let t=ze(e);this._defaultValue=t,this._asciiMap=it._createAsciiMap(t),this._map=new Map}static _createAsciiMap(e){let t=new Uint8Array(256);for(let n=0;n<256;n++)t[n]=e;return t}set(e,t){let n=ze(t);e>=0&&e<256?this._asciiMap[e]=n:this._map.set(e,n)}get(e){return e>=0&&e<256?this._asciiMap[e]:this._map.get(e)||this._defaultValue}}class rt{constructor(e,t,n){const i=new Uint8Array(e*t);for(let r=0,s=e*t;r<s;r++)i[r]=n;this._data=i,this.rows=e,this.cols=t}get(e,t){return this._data[e*this.cols+t]}set(e,t,n){this._data[e*this.cols+t]=n}}class st{constructor(e){let t=0,n=0;for(let i=0,r=e.length;i<r;i++){let[r,s,o]=e[i];s>t&&(t=s),r>n&&(n=r),o>n&&(n=o)}t++,n++;let i=new rt(n,t,0);for(let t=0,n=e.length;t<n;t++){let[n,r,s]=e[t];i.set(n,r,s)}this._states=i,this._maxCharCode=t}nextState(e,t){return t<0||t>=this._maxCharCode?0:this._states.get(e,t)}}let ot=null;let at=null;class lt{static _createLink(e,t,n,i,r){let s=r-1;do{const n=t.charCodeAt(s);if(2!==e.get(n))break;s--}while(s>i);if(i>0){const e=t.charCodeAt(i-1),n=t.charCodeAt(s);(40===e&&41===n||91===e&&93===n||123===e&&125===n)&&s--}return{range:{startLineNumber:n,startColumn:i+1,endLineNumber:n,endColumn:s+2},url:t.substring(i,s+1)}}static computeLinks(e,t=function(){return null===ot&&(ot=new st([[1,104,2],[1,72,2],[1,102,6],[1,70,6],[2,116,3],[2,84,3],[3,116,4],[3,84,4],[4,112,5],[4,80,5],[5,115,9],[5,83,9],[5,58,10],[6,105,7],[6,73,7],[7,108,8],[7,76,8],[8,101,9],[8,69,9],[9,58,10],[10,47,11],[11,47,12]])),ot}()){const n=function(){if(null===at){at=new it(0);const e=\\\" \\\\t<>'\\\\\\\"\\\\u3001\\\\u3002\\\\uff61\\\\uff64\\\\uff0c\\\\uff0e\\\\uff1a\\\\uff1b\\\\u2018\\\\u201c\\\\u3008\\\\u300a\\\\u300c\\\\u300e\\\\u3010\\\\u3014\\\\uff08\\\\uff3b\\\\uff5b\\\\uff62\\\\uff63\\\\uff5d\\\\uff3d\\\\uff09\\\\u3015\\\\u3011\\\\u300f\\\\u300d\\\\u300b\\\\u3009\\\\u201d\\\\u2019\\\\uff40\\\\uff5e\\\\u2026\\\";for(let t=0;t<e.length;t++)at.set(e.charCodeAt(t),1);const t=\\\".,;\\\";for(let e=0;e<t.length;e++)at.set(t.charCodeAt(e),2)}return at}();let i=[];for(let r=1,s=e.getLineCount();r<=s;r++){const s=e.getLineContent(r),o=s.length;let a=0,l=0,u=0,h=1,d=!1,c=!1,f=!1,m=!1;for(;a<o;){let e=!1;const o=s.charCodeAt(a);if(13===h){let t;switch(o){case 40:d=!0,t=0;break;case 41:t=d?0:1;break;case 91:f=!0,c=!0,t=0;break;case 93:f=!1,t=c?0:1;break;case 123:m=!0,t=0;break;case 125:t=m?0:1;break;case 39:t=34===u||96===u?0:1;break;case 34:t=39===u||96===u?0:1;break;case 96:t=39===u||34===u?0:1;break;case 42:t=42===u?1:0;break;case 124:t=124===u?1:0;break;case 32:t=f?0:1;break;default:t=n.get(o)}1===t&&(i.push(lt._createLink(n,s,r,l,a)),e=!0)}else if(12===h){let t;91===o?(c=!0,t=0):t=n.get(o),1===t?e=!0:h=13}else h=t.nextState(h,o),0===h&&(e=!0);e&&(h=1,d=!1,c=!1,m=!1,l=a+1,u=o),a++}13===h&&i.push(lt._createLink(n,s,r,l,o))}return i}}class ut{constructor(){this._defaultValueSet=[[\\\"true\\\",\\\"false\\\"],[\\\"True\\\",\\\"False\\\"],[\\\"Private\\\",\\\"Public\\\",\\\"Friend\\\",\\\"ReadOnly\\\",\\\"Partial\\\",\\\"Protected\\\",\\\"WriteOnly\\\"],[\\\"public\\\",\\\"protected\\\",\\\"private\\\"]]}navigateValueSet(e,t,n,i,r){if(e&&t){let n=this.doNavigateValueSet(t,r);if(n)return{range:e,value:n}}if(n&&i){let e=this.doNavigateValueSet(i,r);if(e)return{range:n,value:e}}return null}doNavigateValueSet(e,t){let n=this.numberReplace(e,t);return null!==n?n:this.textReplace(e,t)}numberReplace(e,t){let n=Math.pow(10,e.length-(e.lastIndexOf(\\\".\\\")+1)),i=Number(e),r=parseFloat(e);return isNaN(i)||isNaN(r)||i!==r?null:0!==i||t?(i=Math.floor(i*n),i+=t?n:-n,String(i/n)):null}textReplace(e,t){return this.valueSetsReplace(this._defaultValueSet,e,t)}valueSetsReplace(e,t,n){let i=null;for(let r=0,s=e.length;null===i&&r<s;r++)i=this.valueSetReplace(e[r],t,n);return i}valueSetReplace(e,t,n){let i=e.indexOf(t);return i>=0?(i+=n?1:-1,i<0?i=e.length-1:i%=e.length,e[i]):null}}ut.INSTANCE=new ut;class ht{constructor(e){this.element=e,this.next=ht.Undefined,this.prev=ht.Undefined}}ht.Undefined=new ht(void 0);class dt{constructor(){this._first=ht.Undefined,this._last=ht.Undefined,this._size=0}get size(){return this._size}isEmpty(){return this._first===ht.Undefined}clear(){this._first=ht.Undefined,this._last=ht.Undefined,this._size=0}unshift(e){return this._insert(e,!1)}push(e){return this._insert(e,!0)}_insert(e,t){const n=new ht(e);if(this._first===ht.Undefined)this._first=n,this._last=n;else if(t){const e=this._last;this._last=n,n.prev=e,e.next=n}else{const e=this._first;this._first=n,n.next=e,e.prev=n}this._size+=1;let i=!1;return()=>{i||(i=!0,this._remove(n))}}shift(){if(this._first!==ht.Undefined){const e=this._first.element;return this._remove(this._first),e}}pop(){if(this._last!==ht.Undefined){const e=this._last.element;return this._remove(this._last),e}}_remove(e){if(e.prev!==ht.Undefined&&e.next!==ht.Undefined){const t=e.prev;t.next=e.next,e.next.prev=t}else e.prev===ht.Undefined&&e.next===ht.Undefined?(this._first=ht.Undefined,this._last=ht.Undefined):e.next===ht.Undefined?(this._last=this._last.prev,this._last.next=ht.Undefined):e.prev===ht.Undefined&&(this._first=this._first.next,this._first.prev=ht.Undefined);this._size-=1}*[Symbol.iterator](){let e=this._first;for(;e!==ht.Undefined;)yield e.element,e=e.next}}const ct=O.performance&&\\\"function\\\"==typeof O.performance.now;class ft{constructor(e){this._highResolution=ct&&e,this._startTime=this._now(),this._stopTime=-1}static create(e=!0){return new ft(e)}stop(){this._stopTime=this._now()}elapsed(){return-1!==this._stopTime?this._stopTime-this._startTime:this._now()-this._startTime}_now(){return this._highResolution?O.performance.now():Date.now()}}var mt;!function(e){function t(e){return(t,n=null,i)=>{let r,s=!1;return r=e((e=>{if(!s)return r?r.dispose():s=!0,t.call(n,e)}),null,i),s&&r.dispose(),r}}function n(e,t){return o(((n,i=null,r)=>e((e=>n.call(i,t(e))),null,r)))}function i(e,t){return o(((n,i=null,r)=>e((e=>{t(e),n.call(i,e)}),null,r)))}function r(e,t){return o(((n,i=null,r)=>e((e=>t(e)&&n.call(i,e)),null,r)))}function s(e,t,i){let r=i;return n(e,(e=>(r=t(r,e),r)))}function o(e){let t;const n=new _t({onFirstListenerAdd(){t=e(n.fire,n)},onLastListenerRemove(){t.dispose()}});return n.event}function a(e,t,n=100,i=!1,r){let s,o,a,l=0;const u=new _t({leakWarningThreshold:r,onFirstListenerAdd(){s=e((e=>{l++,o=t(o,e),i&&!a&&(u.fire(o),o=void 0),clearTimeout(a),a=setTimeout((()=>{const e=o;o=void 0,a=void 0,(!i||l>1)&&u.fire(e),l=0}),n)}))},onLastListenerRemove(){s.dispose()}});return u.event}function l(e){let t,n=!0;return r(e,(e=>{const i=n||e!==t;return n=!1,t=e,i}))}e.None=()=>m.None,e.once=t,e.map=n,e.forEach=i,e.filter=r,e.signal=function(e){return e},e.any=function(...e){return(t,n=null,i)=>c(...e.map((e=>e((e=>t.call(n,e)),null,i))))},e.reduce=s,e.snapshot=o,e.debounce=a,e.stopwatch=function(e){const i=(new Date).getTime();return n(t(e),(e=>(new Date).getTime()-i))},e.latch=l,e.buffer=function(e,t=!1,n=[]){let i=n.slice(),r=e((e=>{i?i.push(e):o.fire(e)}));const s=()=>{i&&i.forEach((e=>o.fire(e))),i=null},o=new _t({onFirstListenerAdd(){r||(r=e((e=>o.fire(e))))},onFirstListenerDidAdd(){i&&(t?setTimeout(s):s())},onLastListenerRemove(){r&&r.dispose(),r=null}});return o.event};class u{constructor(e){this.event=e}map(e){return new u(n(this.event,e))}forEach(e){return new u(i(this.event,e))}filter(e){return new u(r(this.event,e))}reduce(e,t){return new u(s(this.event,e,t))}latch(){return new u(l(this.event))}debounce(e,t=100,n=!1,i){return new u(a(this.event,e,t,n,i))}on(e,t,n){return this.event(e,t,n)}once(e,n,i){return t(this.event)(e,n,i)}}e.chain=function(e){return new u(e)},e.fromNodeEventEmitter=function(e,t,n=(e=>e)){const i=(...e)=>r.fire(n(...e)),r=new _t({onFirstListenerAdd:()=>e.on(t,i),onLastListenerRemove:()=>e.removeListener(t,i)});return r.event},e.fromDOMEventEmitter=function(e,t,n=(e=>e)){const i=(...e)=>r.fire(n(...e)),r=new _t({onFirstListenerAdd:()=>e.addEventListener(t,i),onLastListenerRemove:()=>e.removeEventListener(t,i)});return r.event},e.fromPromise=function(e){const t=new _t;let n=!1;return e.then(void 0,(()=>null)).then((()=>{n?t.fire(void 0):setTimeout((()=>t.fire(void 0)),0)})),n=!0,t.event},e.toPromise=function(e){return new Promise((n=>t(e)(n)))}}(mt||(mt={}));class gt{constructor(e){this._listenerCount=0,this._invocationCount=0,this._elapsedOverall=0,this._name=`${e}_${gt._idPool++}`}start(e){this._stopWatch=new ft(!0),this._listenerCount=e}stop(){if(this._stopWatch){const e=this._stopWatch.elapsed();this._elapsedOverall+=e,this._invocationCount+=1,console.info(`did FIRE ${this._name}: elapsed_ms: ${e.toFixed(5)}, listener: ${this._listenerCount} (elapsed_overall: ${this._elapsedOverall.toFixed(2)}, invocations: ${this._invocationCount})`),this._stopWatch=void 0}}}gt._idPool=0;class _t{constructor(e){var t;this._disposed=!1,this._options=e,this._leakageMon=void 0,this._perfMon=(null===(t=this._options)||void 0===t?void 0:t._profName)?new gt(this._options._profName):void 0}get event(){return this._event||(this._event=(e,t,n)=>{var i;this._listeners||(this._listeners=new dt);const r=this._listeners.isEmpty();r&&this._options&&this._options.onFirstListenerAdd&&this._options.onFirstListenerAdd(this);const s=this._listeners.push(t?[e,t]:e);r&&this._options&&this._options.onFirstListenerDidAdd&&this._options.onFirstListenerDidAdd(this),this._options&&this._options.onListenerDidAdd&&this._options.onListenerDidAdd(this,e,t);const o=null===(i=this._leakageMon)||void 0===i?void 0:i.check(this._listeners.size);let a;return a={dispose:()=>{if(o&&o(),a.dispose=_t._noop,!this._disposed&&(s(),this._options&&this._options.onLastListenerRemove)){this._listeners&&!this._listeners.isEmpty()||this._options.onLastListenerRemove(this)}}},n instanceof f?n.add(a):Array.isArray(n)&&n.push(a),a}),this._event}fire(e){var t,i;if(this._listeners){this._deliveryQueue||(this._deliveryQueue=new dt);for(let t of this._listeners)this._deliveryQueue.push([t,e]);for(null===(t=this._perfMon)||void 0===t||t.start(this._deliveryQueue.size);this._deliveryQueue.size>0;){const[e,t]=this._deliveryQueue.shift();try{\\\"function\\\"==typeof e?e.call(void 0,t):e[0].call(e[1],t)}catch(e){n(e)}}null===(i=this._perfMon)||void 0===i||i.stop()}}dispose(){var e,t,n;null===(e=this._listeners)||void 0===e||e.clear(),null===(t=this._deliveryQueue)||void 0===t||t.clear(),null===(n=this._leakageMon)||void 0===n||n.dispose(),this._disposed=!0}}_t._noop=function(){};const pt=Object.freeze((function(e,t){const n=setTimeout(e.bind(t),0);return{dispose(){clearTimeout(n)}}}));var Ct;!function(e){e.isCancellationToken=function(t){return t===e.None||t===e.Cancelled||(t instanceof bt||!(!t||\\\"object\\\"!=typeof t)&&(\\\"boolean\\\"==typeof t.isCancellationRequested&&\\\"function\\\"==typeof t.onCancellationRequested))},e.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:mt.None}),e.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:pt})}(Ct||(Ct={}));class bt{constructor(){this._isCancelled=!1,this._emitter=null}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?pt:(this._emitter||(this._emitter=new _t),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=null)}}class Lt{constructor(e){this._token=void 0,this._parentListener=void 0,this._parentListener=e&&e.onCancellationRequested(this.cancel,this)}get token(){return this._token||(this._token=new bt),this._token}cancel(){this._token?this._token instanceof bt&&this._token.cancel():this._token=Ct.Cancelled}dispose(e=!1){e&&this.cancel(),this._parentListener&&this._parentListener.dispose(),this._token?this._token instanceof bt&&this._token.dispose():this._token=Ct.None}}class St{constructor(){this._keyCodeToStr=[],this._strToKeyCode=Object.create(null)}define(e,t){this._keyCodeToStr[e]=t,this._strToKeyCode[t.toLowerCase()]=e}keyCodeToStr(e){return this._keyCodeToStr[e]}strToKeyCode(e){return this._strToKeyCode[e.toLowerCase()]||0}}const Nt=new St,Et=new St,At=new St;var yt,vt,wt,Ot,Tt,It,xt,Mt,Rt,Pt,kt,Ut,Dt,Ft,Kt,Bt,Wt,qt,Ht,Vt,Yt,$t,jt,Gt,zt,Qt,Xt,Zt,Jt,en,tn,nn,rn,sn,on;!function(){function e(e,t,n=t,i=n){Nt.define(e,t),Et.define(e,n),At.define(e,i)}e(0,\\\"unknown\\\"),e(1,\\\"Backspace\\\"),e(2,\\\"Tab\\\"),e(3,\\\"Enter\\\"),e(4,\\\"Shift\\\"),e(5,\\\"Ctrl\\\"),e(6,\\\"Alt\\\"),e(7,\\\"PauseBreak\\\"),e(8,\\\"CapsLock\\\"),e(9,\\\"Escape\\\"),e(10,\\\"Space\\\"),e(11,\\\"PageUp\\\"),e(12,\\\"PageDown\\\"),e(13,\\\"End\\\"),e(14,\\\"Home\\\"),e(15,\\\"LeftArrow\\\",\\\"Left\\\"),e(16,\\\"UpArrow\\\",\\\"Up\\\"),e(17,\\\"RightArrow\\\",\\\"Right\\\"),e(18,\\\"DownArrow\\\",\\\"Down\\\"),e(19,\\\"Insert\\\"),e(20,\\\"Delete\\\"),e(21,\\\"0\\\"),e(22,\\\"1\\\"),e(23,\\\"2\\\"),e(24,\\\"3\\\"),e(25,\\\"4\\\"),e(26,\\\"5\\\"),e(27,\\\"6\\\"),e(28,\\\"7\\\"),e(29,\\\"8\\\"),e(30,\\\"9\\\"),e(31,\\\"A\\\"),e(32,\\\"B\\\"),e(33,\\\"C\\\"),e(34,\\\"D\\\"),e(35,\\\"E\\\"),e(36,\\\"F\\\"),e(37,\\\"G\\\"),e(38,\\\"H\\\"),e(39,\\\"I\\\"),e(40,\\\"J\\\"),e(41,\\\"K\\\"),e(42,\\\"L\\\"),e(43,\\\"M\\\"),e(44,\\\"N\\\"),e(45,\\\"O\\\"),e(46,\\\"P\\\"),e(47,\\\"Q\\\"),e(48,\\\"R\\\"),e(49,\\\"S\\\"),e(50,\\\"T\\\"),e(51,\\\"U\\\"),e(52,\\\"V\\\"),e(53,\\\"W\\\"),e(54,\\\"X\\\"),e(55,\\\"Y\\\"),e(56,\\\"Z\\\"),e(57,\\\"Meta\\\"),e(58,\\\"ContextMenu\\\"),e(59,\\\"F1\\\"),e(60,\\\"F2\\\"),e(61,\\\"F3\\\"),e(62,\\\"F4\\\"),e(63,\\\"F5\\\"),e(64,\\\"F6\\\"),e(65,\\\"F7\\\"),e(66,\\\"F8\\\"),e(67,\\\"F9\\\"),e(68,\\\"F10\\\"),e(69,\\\"F11\\\"),e(70,\\\"F12\\\"),e(71,\\\"F13\\\"),e(72,\\\"F14\\\"),e(73,\\\"F15\\\"),e(74,\\\"F16\\\"),e(75,\\\"F17\\\"),e(76,\\\"F18\\\"),e(77,\\\"F19\\\"),e(78,\\\"NumLock\\\"),e(79,\\\"ScrollLock\\\"),e(80,\\\";\\\",\\\";\\\",\\\"OEM_1\\\"),e(81,\\\"=\\\",\\\"=\\\",\\\"OEM_PLUS\\\"),e(82,\\\",\\\",\\\",\\\",\\\"OEM_COMMA\\\"),e(83,\\\"-\\\",\\\"-\\\",\\\"OEM_MINUS\\\"),e(84,\\\".\\\",\\\".\\\",\\\"OEM_PERIOD\\\"),e(85,\\\"/\\\",\\\"/\\\",\\\"OEM_2\\\"),e(86,\\\"`\\\",\\\"`\\\",\\\"OEM_3\\\"),e(110,\\\"ABNT_C1\\\"),e(111,\\\"ABNT_C2\\\"),e(87,\\\"[\\\",\\\"[\\\",\\\"OEM_4\\\"),e(88,\\\"\\\\\\\\\\\",\\\"\\\\\\\\\\\",\\\"OEM_5\\\"),e(89,\\\"]\\\",\\\"]\\\",\\\"OEM_6\\\"),e(90,\\\"'\\\",\\\"'\\\",\\\"OEM_7\\\"),e(91,\\\"OEM_8\\\"),e(92,\\\"OEM_102\\\"),e(93,\\\"NumPad0\\\"),e(94,\\\"NumPad1\\\"),e(95,\\\"NumPad2\\\"),e(96,\\\"NumPad3\\\"),e(97,\\\"NumPad4\\\"),e(98,\\\"NumPad5\\\"),e(99,\\\"NumPad6\\\"),e(100,\\\"NumPad7\\\"),e(101,\\\"NumPad8\\\"),e(102,\\\"NumPad9\\\"),e(103,\\\"NumPad_Multiply\\\"),e(104,\\\"NumPad_Add\\\"),e(105,\\\"NumPad_Separator\\\"),e(106,\\\"NumPad_Subtract\\\"),e(107,\\\"NumPad_Decimal\\\"),e(108,\\\"NumPad_Divide\\\")}(),function(e){e.toString=function(e){return Nt.keyCodeToStr(e)},e.fromString=function(e){return Nt.strToKeyCode(e)},e.toUserSettingsUS=function(e){return Et.keyCodeToStr(e)},e.toUserSettingsGeneral=function(e){return At.keyCodeToStr(e)},e.fromUserSettings=function(e){return Et.strToKeyCode(e)||At.strToKeyCode(e)}}(yt||(yt={}));class an extends Ke{constructor(e,t,n,i){super(e,t,n,i),this.selectionStartLineNumber=e,this.selectionStartColumn=t,this.positionLineNumber=n,this.positionColumn=i}toString(){return\\\"[\\\"+this.selectionStartLineNumber+\\\",\\\"+this.selectionStartColumn+\\\" -> \\\"+this.positionLineNumber+\\\",\\\"+this.positionColumn+\\\"]\\\"}equalsSelection(e){return an.selectionsEqual(this,e)}static selectionsEqual(e,t){return e.selectionStartLineNumber===t.selectionStartLineNumber&&e.selectionStartColumn===t.selectionStartColumn&&e.positionLineNumber===t.positionLineNumber&&e.positionColumn===t.positionColumn}getDirection(){return this.selectionStartLineNumber===this.startLineNumber&&this.selectionStartColumn===this.startColumn?0:1}setEndPosition(e,t){return 0===this.getDirection()?new an(this.startLineNumber,this.startColumn,e,t):new an(e,t,this.startLineNumber,this.startColumn)}getPosition(){return new Fe(this.positionLineNumber,this.positionColumn)}setStartPosition(e,t){return 0===this.getDirection()?new an(e,t,this.endLineNumber,this.endColumn):new an(this.endLineNumber,this.endColumn,e,t)}static fromPositions(e,t=e){return new an(e.lineNumber,e.column,t.lineNumber,t.column)}static liftSelection(e){return new an(e.selectionStartLineNumber,e.selectionStartColumn,e.positionLineNumber,e.positionColumn)}static selectionsArrEqual(e,t){if(e&&!t||!e&&t)return!1;if(!e&&!t)return!0;if(e.length!==t.length)return!1;for(let n=0,i=e.length;n<i;n++)if(!this.selectionsEqual(e[n],t[n]))return!1;return!0}static isISelection(e){return e&&\\\"number\\\"==typeof e.selectionStartLineNumber&&\\\"number\\\"==typeof e.selectionStartColumn&&\\\"number\\\"==typeof e.positionLineNumber&&\\\"number\\\"==typeof e.positionColumn}static createWithDirection(e,t,n,i,r){return 0===r?new an(e,t,n,i):new an(n,i,e,t)}}class ln{constructor(e,t,n){this.offset=0|e,this.type=t,this.language=n}toString(){return\\\"(\\\"+this.offset+\\\", \\\"+this.type+\\\")\\\"}}!function(e){e[e.Unknown=0]=\\\"Unknown\\\",e[e.Disabled=1]=\\\"Disabled\\\",e[e.Enabled=2]=\\\"Enabled\\\"}(vt||(vt={})),function(e){e[e.KeepWhitespace=1]=\\\"KeepWhitespace\\\",e[e.InsertAsSnippet=4]=\\\"InsertAsSnippet\\\"}(wt||(wt={})),function(e){e[e.Method=0]=\\\"Method\\\",e[e.Function=1]=\\\"Function\\\",e[e.Constructor=2]=\\\"Constructor\\\",e[e.Field=3]=\\\"Field\\\",e[e.Variable=4]=\\\"Variable\\\",e[e.Class=5]=\\\"Class\\\",e[e.Struct=6]=\\\"Struct\\\",e[e.Interface=7]=\\\"Interface\\\",e[e.Module=8]=\\\"Module\\\",e[e.Property=9]=\\\"Property\\\",e[e.Event=10]=\\\"Event\\\",e[e.Operator=11]=\\\"Operator\\\",e[e.Unit=12]=\\\"Unit\\\",e[e.Value=13]=\\\"Value\\\",e[e.Constant=14]=\\\"Constant\\\",e[e.Enum=15]=\\\"Enum\\\",e[e.EnumMember=16]=\\\"EnumMember\\\",e[e.Keyword=17]=\\\"Keyword\\\",e[e.Text=18]=\\\"Text\\\",e[e.Color=19]=\\\"Color\\\",e[e.File=20]=\\\"File\\\",e[e.Reference=21]=\\\"Reference\\\",e[e.Customcolor=22]=\\\"Customcolor\\\",e[e.Folder=23]=\\\"Folder\\\",e[e.TypeParameter=24]=\\\"TypeParameter\\\",e[e.User=25]=\\\"User\\\",e[e.Issue=26]=\\\"Issue\\\",e[e.Snippet=27]=\\\"Snippet\\\"}(Ot||(Ot={})),function(e){e[e.Deprecated=1]=\\\"Deprecated\\\"}(Tt||(Tt={})),function(e){e[e.Invoke=0]=\\\"Invoke\\\",e[e.TriggerCharacter=1]=\\\"TriggerCharacter\\\",e[e.TriggerForIncompleteCompletions=2]=\\\"TriggerForIncompleteCompletions\\\"}(It||(It={})),function(e){e[e.EXACT=0]=\\\"EXACT\\\",e[e.ABOVE=1]=\\\"ABOVE\\\",e[e.BELOW=2]=\\\"BELOW\\\"}(xt||(xt={})),function(e){e[e.NotSet=0]=\\\"NotSet\\\",e[e.ContentFlush=1]=\\\"ContentFlush\\\",e[e.RecoverFromMarkers=2]=\\\"RecoverFromMarkers\\\",e[e.Explicit=3]=\\\"Explicit\\\",e[e.Paste=4]=\\\"Paste\\\",e[e.Undo=5]=\\\"Undo\\\",e[e.Redo=6]=\\\"Redo\\\"}(Mt||(Mt={})),function(e){e[e.LF=1]=\\\"LF\\\",e[e.CRLF=2]=\\\"CRLF\\\"}(Rt||(Rt={})),function(e){e[e.Text=0]=\\\"Text\\\",e[e.Read=1]=\\\"Read\\\",e[e.Write=2]=\\\"Write\\\"}(Pt||(Pt={})),function(e){e[e.None=0]=\\\"None\\\",e[e.Keep=1]=\\\"Keep\\\",e[e.Brackets=2]=\\\"Brackets\\\",e[e.Advanced=3]=\\\"Advanced\\\",e[e.Full=4]=\\\"Full\\\"}(kt||(kt={})),function(e){e[e.acceptSuggestionOnCommitCharacter=0]=\\\"acceptSuggestionOnCommitCharacter\\\",e[e.acceptSuggestionOnEnter=1]=\\\"acceptSuggestionOnEnter\\\",e[e.accessibilitySupport=2]=\\\"accessibilitySupport\\\",e[e.accessibilityPageSize=3]=\\\"accessibilityPageSize\\\",e[e.ariaLabel=4]=\\\"ariaLabel\\\",e[e.autoClosingBrackets=5]=\\\"autoClosingBrackets\\\",e[e.autoClosingDelete=6]=\\\"autoClosingDelete\\\",e[e.autoClosingOvertype=7]=\\\"autoClosingOvertype\\\",e[e.autoClosingQuotes=8]=\\\"autoClosingQuotes\\\",e[e.autoIndent=9]=\\\"autoIndent\\\",e[e.automaticLayout=10]=\\\"automaticLayout\\\",e[e.autoSurround=11]=\\\"autoSurround\\\",e[e.codeLens=12]=\\\"codeLens\\\",e[e.codeLensFontFamily=13]=\\\"codeLensFontFamily\\\",e[e.codeLensFontSize=14]=\\\"codeLensFontSize\\\",e[e.colorDecorators=15]=\\\"colorDecorators\\\",e[e.columnSelection=16]=\\\"columnSelection\\\",e[e.comments=17]=\\\"comments\\\",e[e.contextmenu=18]=\\\"contextmenu\\\",e[e.copyWithSyntaxHighlighting=19]=\\\"copyWithSyntaxHighlighting\\\",e[e.cursorBlinking=20]=\\\"cursorBlinking\\\",e[e.cursorSmoothCaretAnimation=21]=\\\"cursorSmoothCaretAnimation\\\",e[e.cursorStyle=22]=\\\"cursorStyle\\\",e[e.cursorSurroundingLines=23]=\\\"cursorSurroundingLines\\\",e[e.cursorSurroundingLinesStyle=24]=\\\"cursorSurroundingLinesStyle\\\",e[e.cursorWidth=25]=\\\"cursorWidth\\\",e[e.disableLayerHinting=26]=\\\"disableLayerHinting\\\",e[e.disableMonospaceOptimizations=27]=\\\"disableMonospaceOptimizations\\\",e[e.domReadOnly=28]=\\\"domReadOnly\\\",e[e.dragAndDrop=29]=\\\"dragAndDrop\\\",e[e.emptySelectionClipboard=30]=\\\"emptySelectionClipboard\\\",e[e.extraEditorClassName=31]=\\\"extraEditorClassName\\\",e[e.fastScrollSensitivity=32]=\\\"fastScrollSensitivity\\\",e[e.find=33]=\\\"find\\\",e[e.fixedOverflowWidgets=34]=\\\"fixedOverflowWidgets\\\",e[e.folding=35]=\\\"folding\\\",e[e.foldingStrategy=36]=\\\"foldingStrategy\\\",e[e.foldingHighlight=37]=\\\"foldingHighlight\\\",e[e.unfoldOnClickAfterEndOfLine=38]=\\\"unfoldOnClickAfterEndOfLine\\\",e[e.fontFamily=39]=\\\"fontFamily\\\",e[e.fontInfo=40]=\\\"fontInfo\\\",e[e.fontLigatures=41]=\\\"fontLigatures\\\",e[e.fontSize=42]=\\\"fontSize\\\",e[e.fontWeight=43]=\\\"fontWeight\\\",e[e.formatOnPaste=44]=\\\"formatOnPaste\\\",e[e.formatOnType=45]=\\\"formatOnType\\\",e[e.glyphMargin=46]=\\\"glyphMargin\\\",e[e.gotoLocation=47]=\\\"gotoLocation\\\",e[e.hideCursorInOverviewRuler=48]=\\\"hideCursorInOverviewRuler\\\",e[e.highlightActiveIndentGuide=49]=\\\"highlightActiveIndentGuide\\\",e[e.hover=50]=\\\"hover\\\",e[e.inDiffEditor=51]=\\\"inDiffEditor\\\",e[e.letterSpacing=52]=\\\"letterSpacing\\\",e[e.lightbulb=53]=\\\"lightbulb\\\",e[e.lineDecorationsWidth=54]=\\\"lineDecorationsWidth\\\",e[e.lineHeight=55]=\\\"lineHeight\\\",e[e.lineNumbers=56]=\\\"lineNumbers\\\",e[e.lineNumbersMinChars=57]=\\\"lineNumbersMinChars\\\",e[e.linkedEditing=58]=\\\"linkedEditing\\\",e[e.links=59]=\\\"links\\\",e[e.matchBrackets=60]=\\\"matchBrackets\\\",e[e.minimap=61]=\\\"minimap\\\",e[e.mouseStyle=62]=\\\"mouseStyle\\\",e[e.mouseWheelScrollSensitivity=63]=\\\"mouseWheelScrollSensitivity\\\",e[e.mouseWheelZoom=64]=\\\"mouseWheelZoom\\\",e[e.multiCursorMergeOverlapping=65]=\\\"multiCursorMergeOverlapping\\\",e[e.multiCursorModifier=66]=\\\"multiCursorModifier\\\",e[e.multiCursorPaste=67]=\\\"multiCursorPaste\\\",e[e.occurrencesHighlight=68]=\\\"occurrencesHighlight\\\",e[e.overviewRulerBorder=69]=\\\"overviewRulerBorder\\\",e[e.overviewRulerLanes=70]=\\\"overviewRulerLanes\\\",e[e.padding=71]=\\\"padding\\\",e[e.parameterHints=72]=\\\"parameterHints\\\",e[e.peekWidgetDefaultFocus=73]=\\\"peekWidgetDefaultFocus\\\",e[e.definitionLinkOpensInPeek=74]=\\\"definitionLinkOpensInPeek\\\",e[e.quickSuggestions=75]=\\\"quickSuggestions\\\",e[e.quickSuggestionsDelay=76]=\\\"quickSuggestionsDelay\\\",e[e.readOnly=77]=\\\"readOnly\\\",e[e.renameOnType=78]=\\\"renameOnType\\\",e[e.renderControlCharacters=79]=\\\"renderControlCharacters\\\",e[e.renderIndentGuides=80]=\\\"renderIndentGuides\\\",e[e.renderFinalNewline=81]=\\\"renderFinalNewline\\\",e[e.renderLineHighlight=82]=\\\"renderLineHighlight\\\",e[e.renderLineHighlightOnlyWhenFocus=83]=\\\"renderLineHighlightOnlyWhenFocus\\\",e[e.renderValidationDecorations=84]=\\\"renderValidationDecorations\\\",e[e.renderWhitespace=85]=\\\"renderWhitespace\\\",e[e.revealHorizontalRightPadding=86]=\\\"revealHorizontalRightPadding\\\",e[e.roundedSelection=87]=\\\"roundedSelection\\\",e[e.rulers=88]=\\\"rulers\\\",e[e.scrollbar=89]=\\\"scrollbar\\\",e[e.scrollBeyondLastColumn=90]=\\\"scrollBeyondLastColumn\\\",e[e.scrollBeyondLastLine=91]=\\\"scrollBeyondLastLine\\\",e[e.scrollPredominantAxis=92]=\\\"scrollPredominantAxis\\\",e[e.selectionClipboard=93]=\\\"selectionClipboard\\\",e[e.selectionHighlight=94]=\\\"selectionHighlight\\\",e[e.selectOnLineNumbers=95]=\\\"selectOnLineNumbers\\\",e[e.showFoldingControls=96]=\\\"showFoldingControls\\\",e[e.showUnused=97]=\\\"showUnused\\\",e[e.snippetSuggestions=98]=\\\"snippetSuggestions\\\",e[e.smartSelect=99]=\\\"smartSelect\\\",e[e.smoothScrolling=100]=\\\"smoothScrolling\\\",e[e.stickyTabStops=101]=\\\"stickyTabStops\\\",e[e.stopRenderingLineAfter=102]=\\\"stopRenderingLineAfter\\\",e[e.suggest=103]=\\\"suggest\\\",e[e.suggestFontSize=104]=\\\"suggestFontSize\\\",e[e.suggestLineHeight=105]=\\\"suggestLineHeight\\\",e[e.suggestOnTriggerCharacters=106]=\\\"suggestOnTriggerCharacters\\\",e[e.suggestSelection=107]=\\\"suggestSelection\\\",e[e.tabCompletion=108]=\\\"tabCompletion\\\",e[e.tabIndex=109]=\\\"tabIndex\\\",e[e.unusualLineTerminators=110]=\\\"unusualLineTerminators\\\",e[e.useShadowDOM=111]=\\\"useShadowDOM\\\",e[e.useTabStops=112]=\\\"useTabStops\\\",e[e.wordSeparators=113]=\\\"wordSeparators\\\",e[e.wordWrap=114]=\\\"wordWrap\\\",e[e.wordWrapBreakAfterCharacters=115]=\\\"wordWrapBreakAfterCharacters\\\",e[e.wordWrapBreakBeforeCharacters=116]=\\\"wordWrapBreakBeforeCharacters\\\",e[e.wordWrapColumn=117]=\\\"wordWrapColumn\\\",e[e.wordWrapOverride1=118]=\\\"wordWrapOverride1\\\",e[e.wordWrapOverride2=119]=\\\"wordWrapOverride2\\\",e[e.wrappingIndent=120]=\\\"wrappingIndent\\\",e[e.wrappingStrategy=121]=\\\"wrappingStrategy\\\",e[e.showDeprecated=122]=\\\"showDeprecated\\\",e[e.inlineHints=123]=\\\"inlineHints\\\",e[e.editorClassName=124]=\\\"editorClassName\\\",e[e.pixelRatio=125]=\\\"pixelRatio\\\",e[e.tabFocusMode=126]=\\\"tabFocusMode\\\",e[e.layoutInfo=127]=\\\"layoutInfo\\\",e[e.wrappingInfo=128]=\\\"wrappingInfo\\\"}(Ut||(Ut={})),function(e){e[e.TextDefined=0]=\\\"TextDefined\\\",e[e.LF=1]=\\\"LF\\\",e[e.CRLF=2]=\\\"CRLF\\\"}(Dt||(Dt={})),function(e){e[e.LF=0]=\\\"LF\\\",e[e.CRLF=1]=\\\"CRLF\\\"}(Ft||(Ft={})),function(e){e[e.None=0]=\\\"None\\\",e[e.Indent=1]=\\\"Indent\\\",e[e.IndentOutdent=2]=\\\"IndentOutdent\\\",e[e.Outdent=3]=\\\"Outdent\\\"}(Kt||(Kt={})),function(e){e[e.Other=0]=\\\"Other\\\",e[e.Type=1]=\\\"Type\\\",e[e.Parameter=2]=\\\"Parameter\\\"}(Bt||(Bt={})),function(e){e[e.DependsOnKbLayout=-1]=\\\"DependsOnKbLayout\\\",e[e.Unknown=0]=\\\"Unknown\\\",e[e.Backspace=1]=\\\"Backspace\\\",e[e.Tab=2]=\\\"Tab\\\",e[e.Enter=3]=\\\"Enter\\\",e[e.Shift=4]=\\\"Shift\\\",e[e.Ctrl=5]=\\\"Ctrl\\\",e[e.Alt=6]=\\\"Alt\\\",e[e.PauseBreak=7]=\\\"PauseBreak\\\",e[e.CapsLock=8]=\\\"CapsLock\\\",e[e.Escape=9]=\\\"Escape\\\",e[e.Space=10]=\\\"Space\\\",e[e.PageUp=11]=\\\"PageUp\\\",e[e.PageDown=12]=\\\"PageDown\\\",e[e.End=13]=\\\"End\\\",e[e.Home=14]=\\\"Home\\\",e[e.LeftArrow=15]=\\\"LeftArrow\\\",e[e.UpArrow=16]=\\\"UpArrow\\\",e[e.RightArrow=17]=\\\"RightArrow\\\",e[e.DownArrow=18]=\\\"DownArrow\\\",e[e.Insert=19]=\\\"Insert\\\",e[e.Delete=20]=\\\"Delete\\\",e[e.KEY_0=21]=\\\"KEY_0\\\",e[e.KEY_1=22]=\\\"KEY_1\\\",e[e.KEY_2=23]=\\\"KEY_2\\\",e[e.KEY_3=24]=\\\"KEY_3\\\",e[e.KEY_4=25]=\\\"KEY_4\\\",e[e.KEY_5=26]=\\\"KEY_5\\\",e[e.KEY_6=27]=\\\"KEY_6\\\",e[e.KEY_7=28]=\\\"KEY_7\\\",e[e.KEY_8=29]=\\\"KEY_8\\\",e[e.KEY_9=30]=\\\"KEY_9\\\",e[e.KEY_A=31]=\\\"KEY_A\\\",e[e.KEY_B=32]=\\\"KEY_B\\\",e[e.KEY_C=33]=\\\"KEY_C\\\",e[e.KEY_D=34]=\\\"KEY_D\\\",e[e.KEY_E=35]=\\\"KEY_E\\\",e[e.KEY_F=36]=\\\"KEY_F\\\",e[e.KEY_G=37]=\\\"KEY_G\\\",e[e.KEY_H=38]=\\\"KEY_H\\\",e[e.KEY_I=39]=\\\"KEY_I\\\",e[e.KEY_J=40]=\\\"KEY_J\\\",e[e.KEY_K=41]=\\\"KEY_K\\\",e[e.KEY_L=42]=\\\"KEY_L\\\",e[e.KEY_M=43]=\\\"KEY_M\\\",e[e.KEY_N=44]=\\\"KEY_N\\\",e[e.KEY_O=45]=\\\"KEY_O\\\",e[e.KEY_P=46]=\\\"KEY_P\\\",e[e.KEY_Q=47]=\\\"KEY_Q\\\",e[e.KEY_R=48]=\\\"KEY_R\\\",e[e.KEY_S=49]=\\\"KEY_S\\\",e[e.KEY_T=50]=\\\"KEY_T\\\",e[e.KEY_U=51]=\\\"KEY_U\\\",e[e.KEY_V=52]=\\\"KEY_V\\\",e[e.KEY_W=53]=\\\"KEY_W\\\",e[e.KEY_X=54]=\\\"KEY_X\\\",e[e.KEY_Y=55]=\\\"KEY_Y\\\",e[e.KEY_Z=56]=\\\"KEY_Z\\\",e[e.Meta=57]=\\\"Meta\\\",e[e.ContextMenu=58]=\\\"ContextMenu\\\",e[e.F1=59]=\\\"F1\\\",e[e.F2=60]=\\\"F2\\\",e[e.F3=61]=\\\"F3\\\",e[e.F4=62]=\\\"F4\\\",e[e.F5=63]=\\\"F5\\\",e[e.F6=64]=\\\"F6\\\",e[e.F7=65]=\\\"F7\\\",e[e.F8=66]=\\\"F8\\\",e[e.F9=67]=\\\"F9\\\",e[e.F10=68]=\\\"F10\\\",e[e.F11=69]=\\\"F11\\\",e[e.F12=70]=\\\"F12\\\",e[e.F13=71]=\\\"F13\\\",e[e.F14=72]=\\\"F14\\\",e[e.F15=73]=\\\"F15\\\",e[e.F16=74]=\\\"F16\\\",e[e.F17=75]=\\\"F17\\\",e[e.F18=76]=\\\"F18\\\",e[e.F19=77]=\\\"F19\\\",e[e.NumLock=78]=\\\"NumLock\\\",e[e.ScrollLock=79]=\\\"ScrollLock\\\",e[e.US_SEMICOLON=80]=\\\"US_SEMICOLON\\\",e[e.US_EQUAL=81]=\\\"US_EQUAL\\\",e[e.US_COMMA=82]=\\\"US_COMMA\\\",e[e.US_MINUS=83]=\\\"US_MINUS\\\",e[e.US_DOT=84]=\\\"US_DOT\\\",e[e.US_SLASH=85]=\\\"US_SLASH\\\",e[e.US_BACKTICK=86]=\\\"US_BACKTICK\\\",e[e.US_OPEN_SQUARE_BRACKET=87]=\\\"US_OPEN_SQUARE_BRACKET\\\",e[e.US_BACKSLASH=88]=\\\"US_BACKSLASH\\\",e[e.US_CLOSE_SQUARE_BRACKET=89]=\\\"US_CLOSE_SQUARE_BRACKET\\\",e[e.US_QUOTE=90]=\\\"US_QUOTE\\\",e[e.OEM_8=91]=\\\"OEM_8\\\",e[e.OEM_102=92]=\\\"OEM_102\\\",e[e.NUMPAD_0=93]=\\\"NUMPAD_0\\\",e[e.NUMPAD_1=94]=\\\"NUMPAD_1\\\",e[e.NUMPAD_2=95]=\\\"NUMPAD_2\\\",e[e.NUMPAD_3=96]=\\\"NUMPAD_3\\\",e[e.NUMPAD_4=97]=\\\"NUMPAD_4\\\",e[e.NUMPAD_5=98]=\\\"NUMPAD_5\\\",e[e.NUMPAD_6=99]=\\\"NUMPAD_6\\\",e[e.NUMPAD_7=100]=\\\"NUMPAD_7\\\",e[e.NUMPAD_8=101]=\\\"NUMPAD_8\\\",e[e.NUMPAD_9=102]=\\\"NUMPAD_9\\\",e[e.NUMPAD_MULTIPLY=103]=\\\"NUMPAD_MULTIPLY\\\",e[e.NUMPAD_ADD=104]=\\\"NUMPAD_ADD\\\",e[e.NUMPAD_SEPARATOR=105]=\\\"NUMPAD_SEPARATOR\\\",e[e.NUMPAD_SUBTRACT=106]=\\\"NUMPAD_SUBTRACT\\\",e[e.NUMPAD_DECIMAL=107]=\\\"NUMPAD_DECIMAL\\\",e[e.NUMPAD_DIVIDE=108]=\\\"NUMPAD_DIVIDE\\\",e[e.KEY_IN_COMPOSITION=109]=\\\"KEY_IN_COMPOSITION\\\",e[e.ABNT_C1=110]=\\\"ABNT_C1\\\",e[e.ABNT_C2=111]=\\\"ABNT_C2\\\",e[e.MAX_VALUE=112]=\\\"MAX_VALUE\\\"}(Wt||(Wt={})),function(e){e[e.Hint=1]=\\\"Hint\\\",e[e.Info=2]=\\\"Info\\\",e[e.Warning=4]=\\\"Warning\\\",e[e.Error=8]=\\\"Error\\\"}(qt||(qt={})),function(e){e[e.Unnecessary=1]=\\\"Unnecessary\\\",e[e.Deprecated=2]=\\\"Deprecated\\\"}(Ht||(Ht={})),function(e){e[e.Inline=1]=\\\"Inline\\\",e[e.Gutter=2]=\\\"Gutter\\\"}(Vt||(Vt={})),function(e){e[e.UNKNOWN=0]=\\\"UNKNOWN\\\",e[e.TEXTAREA=1]=\\\"TEXTAREA\\\",e[e.GUTTER_GLYPH_MARGIN=2]=\\\"GUTTER_GLYPH_MARGIN\\\",e[e.GUTTER_LINE_NUMBERS=3]=\\\"GUTTER_LINE_NUMBERS\\\",e[e.GUTTER_LINE_DECORATIONS=4]=\\\"GUTTER_LINE_DECORATIONS\\\",e[e.GUTTER_VIEW_ZONE=5]=\\\"GUTTER_VIEW_ZONE\\\",e[e.CONTENT_TEXT=6]=\\\"CONTENT_TEXT\\\",e[e.CONTENT_EMPTY=7]=\\\"CONTENT_EMPTY\\\",e[e.CONTENT_VIEW_ZONE=8]=\\\"CONTENT_VIEW_ZONE\\\",e[e.CONTENT_WIDGET=9]=\\\"CONTENT_WIDGET\\\",e[e.OVERVIEW_RULER=10]=\\\"OVERVIEW_RULER\\\",e[e.SCROLLBAR=11]=\\\"SCROLLBAR\\\",e[e.OVERLAY_WIDGET=12]=\\\"OVERLAY_WIDGET\\\",e[e.OUTSIDE_EDITOR=13]=\\\"OUTSIDE_EDITOR\\\"}(Yt||(Yt={})),function(e){e[e.TOP_RIGHT_CORNER=0]=\\\"TOP_RIGHT_CORNER\\\",e[e.BOTTOM_RIGHT_CORNER=1]=\\\"BOTTOM_RIGHT_CORNER\\\",e[e.TOP_CENTER=2]=\\\"TOP_CENTER\\\"}($t||($t={})),function(e){e[e.Left=1]=\\\"Left\\\",e[e.Center=2]=\\\"Center\\\",e[e.Right=4]=\\\"Right\\\",e[e.Full=7]=\\\"Full\\\"}(jt||(jt={})),function(e){e[e.Off=0]=\\\"Off\\\",e[e.On=1]=\\\"On\\\",e[e.Relative=2]=\\\"Relative\\\",e[e.Interval=3]=\\\"Interval\\\",e[e.Custom=4]=\\\"Custom\\\"}(Gt||(Gt={})),function(e){e[e.None=0]=\\\"None\\\",e[e.Text=1]=\\\"Text\\\",e[e.Blocks=2]=\\\"Blocks\\\"}(zt||(zt={})),function(e){e[e.Smooth=0]=\\\"Smooth\\\",e[e.Immediate=1]=\\\"Immediate\\\"}(Qt||(Qt={})),function(e){e[e.Auto=1]=\\\"Auto\\\",e[e.Hidden=2]=\\\"Hidden\\\",e[e.Visible=3]=\\\"Visible\\\"}(Xt||(Xt={})),function(e){e[e.LTR=0]=\\\"LTR\\\",e[e.RTL=1]=\\\"RTL\\\"}(Zt||(Zt={})),function(e){e[e.Invoke=1]=\\\"Invoke\\\",e[e.TriggerCharacter=2]=\\\"TriggerCharacter\\\",e[e.ContentChange=3]=\\\"ContentChange\\\"}(Jt||(Jt={})),function(e){e[e.File=0]=\\\"File\\\",e[e.Module=1]=\\\"Module\\\",e[e.Namespace=2]=\\\"Namespace\\\",e[e.Package=3]=\\\"Package\\\",e[e.Class=4]=\\\"Class\\\",e[e.Method=5]=\\\"Method\\\",e[e.Property=6]=\\\"Property\\\",e[e.Field=7]=\\\"Field\\\",e[e.Constructor=8]=\\\"Constructor\\\",e[e.Enum=9]=\\\"Enum\\\",e[e.Interface=10]=\\\"Interface\\\",e[e.Function=11]=\\\"Function\\\",e[e.Variable=12]=\\\"Variable\\\",e[e.Constant=13]=\\\"Constant\\\",e[e.String=14]=\\\"String\\\",e[e.Number=15]=\\\"Number\\\",e[e.Boolean=16]=\\\"Boolean\\\",e[e.Array=17]=\\\"Array\\\",e[e.Object=18]=\\\"Object\\\",e[e.Key=19]=\\\"Key\\\",e[e.Null=20]=\\\"Null\\\",e[e.EnumMember=21]=\\\"EnumMember\\\",e[e.Struct=22]=\\\"Struct\\\",e[e.Event=23]=\\\"Event\\\",e[e.Operator=24]=\\\"Operator\\\",e[e.TypeParameter=25]=\\\"TypeParameter\\\"}(en||(en={})),function(e){e[e.Deprecated=1]=\\\"Deprecated\\\"}(tn||(tn={})),function(e){e[e.Hidden=0]=\\\"Hidden\\\",e[e.Blink=1]=\\\"Blink\\\",e[e.Smooth=2]=\\\"Smooth\\\",e[e.Phase=3]=\\\"Phase\\\",e[e.Expand=4]=\\\"Expand\\\",e[e.Solid=5]=\\\"Solid\\\"}(nn||(nn={})),function(e){e[e.Line=1]=\\\"Line\\\",e[e.Block=2]=\\\"Block\\\",e[e.Underline=3]=\\\"Underline\\\",e[e.LineThin=4]=\\\"LineThin\\\",e[e.BlockOutline=5]=\\\"BlockOutline\\\",e[e.UnderlineThin=6]=\\\"UnderlineThin\\\"}(rn||(rn={})),function(e){e[e.AlwaysGrowsWhenTypingAtEdges=0]=\\\"AlwaysGrowsWhenTypingAtEdges\\\",e[e.NeverGrowsWhenTypingAtEdges=1]=\\\"NeverGrowsWhenTypingAtEdges\\\",e[e.GrowsOnlyWhenTypingBefore=2]=\\\"GrowsOnlyWhenTypingBefore\\\",e[e.GrowsOnlyWhenTypingAfter=3]=\\\"GrowsOnlyWhenTypingAfter\\\"}(sn||(sn={})),function(e){e[e.None=0]=\\\"None\\\",e[e.Same=1]=\\\"Same\\\",e[e.Indent=2]=\\\"Indent\\\",e[e.DeepIndent=3]=\\\"DeepIndent\\\"}(on||(on={}));class un{static chord(e,t){return function(e,t){return(e|(65535&t)<<16>>>0)>>>0}(e,t)}}un.CtrlCmd=2048,un.Shift=1024,un.Alt=512,un.WinCtrl=256;var hn=function(e,t,n,i){return new(n||(n=Promise))((function(r,s){function o(e){try{l(i.next(e))}catch(e){s(e)}}function a(e){try{l(i.throw(e))}catch(e){s(e)}}function l(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(o,a)}l((i=i.apply(e,t||[])).next())}))};class dn extends class{constructor(e,t,n,i){this._uri=e,this._lines=t,this._eol=n,this._versionId=i,this._lineStarts=null,this._cachedTextValue=null}dispose(){this._lines.length=0}get version(){return this._versionId}getText(){return null===this._cachedTextValue&&(this._cachedTextValue=this._lines.join(this._eol)),this._cachedTextValue}onEvents(e){e.eol&&e.eol!==this._eol&&(this._eol=e.eol,this._lineStarts=null);const t=e.changes;for(const e of t)this._acceptDeleteRange(e.range),this._acceptInsertText(new Fe(e.range.startLineNumber,e.range.startColumn),e.text);this._versionId=e.versionId,this._cachedTextValue=null}_ensureLineStarts(){if(!this._lineStarts){const e=this._eol.length,t=this._lines.length,n=new Uint32Array(t);for(let i=0;i<t;i++)n[i]=this._lines[i].length+e;this._lineStarts=new Ze(n)}}_setLineText(e,t){this._lines[e]=t,this._lineStarts&&this._lineStarts.changeValue(e,this._lines[e].length+this._eol.length)}_acceptDeleteRange(e){if(e.startLineNumber!==e.endLineNumber)this._setLineText(e.startLineNumber-1,this._lines[e.startLineNumber-1].substring(0,e.startColumn-1)+this._lines[e.endLineNumber-1].substring(e.endColumn-1)),this._lines.splice(e.startLineNumber,e.endLineNumber-e.startLineNumber),this._lineStarts&&this._lineStarts.removeValues(e.startLineNumber,e.endLineNumber-e.startLineNumber);else{if(e.startColumn===e.endColumn)return;this._setLineText(e.startLineNumber-1,this._lines[e.startLineNumber-1].substring(0,e.startColumn-1)+this._lines[e.startLineNumber-1].substring(e.endColumn-1))}}_acceptInsertText(e,t){if(0===t.length)return;let n=t.split(/\\\\r\\\\n|\\\\r|\\\\n/);if(1===n.length)return void this._setLineText(e.lineNumber-1,this._lines[e.lineNumber-1].substring(0,e.column-1)+n[0]+this._lines[e.lineNumber-1].substring(e.column-1));n[n.length-1]+=this._lines[e.lineNumber-1].substring(e.column-1),this._setLineText(e.lineNumber-1,this._lines[e.lineNumber-1].substring(0,e.column-1)+n[0]);let i=new Uint32Array(n.length-1);for(let t=1;t<n.length;t++)this._lines.splice(e.lineNumber+t-1,0,n[t]),i[t-1]=n[t].length+this._eol.length;this._lineStarts&&this._lineStarts.insertValues(e.lineNumber,i)}}{get uri(){return this._uri}get eol(){return this._eol}getValue(){return this.getText()}getLinesContent(){return this._lines.slice(0)}getLineCount(){return this._lines.length}getLineContent(e){return this._lines[e-1]}getWordAtPosition(e,t){let n=tt(e.column,function(e){let t=Je;if(e&&e instanceof RegExp)if(e.global)t=e;else{let n=\\\"g\\\";e.ignoreCase&&(n+=\\\"i\\\"),e.multiline&&(n+=\\\"m\\\"),e.unicode&&(n+=\\\"u\\\"),t=new RegExp(e.source,n)}return t.lastIndex=0,t}(t),this._lines[e.lineNumber-1],0);return n?new Ke(e.lineNumber,n.startColumn,e.lineNumber,n.endColumn):null}words(e){const t=this._lines,n=this._wordenize.bind(this);let i=0,r=\\\"\\\",s=0,o=[];return{*[Symbol.iterator](){for(;;)if(s<o.length){const e=r.substring(o[s].start,o[s].end);s+=1,yield e}else{if(!(i<t.length))break;r=t[i],o=n(r,e),s=0,i+=1}}}}getLineWords(e,t){let n=this._lines[e-1],i=this._wordenize(n,t),r=[];for(const e of i)r.push({word:n.substring(e.start,e.end),startColumn:e.start+1,endColumn:e.end+1});return r}_wordenize(e,t){const n=[];let i;for(t.lastIndex=0;(i=t.exec(e))&&0!==i[0].length;)n.push({start:i.index,end:i.index+i[0].length});return n}getValueInRange(e){if((e=this._validateRange(e)).startLineNumber===e.endLineNumber)return this._lines[e.startLineNumber-1].substring(e.startColumn-1,e.endColumn-1);let t=this._eol,n=e.startLineNumber-1,i=e.endLineNumber-1,r=[];r.push(this._lines[n].substring(e.startColumn-1));for(let e=n+1;e<i;e++)r.push(this._lines[e]);return r.push(this._lines[i].substring(0,e.endColumn-1)),r.join(t)}offsetAt(e){return e=this._validatePosition(e),this._ensureLineStarts(),this._lineStarts.getAccumulatedValue(e.lineNumber-2)+(e.column-1)}positionAt(e){e=Math.floor(e),e=Math.max(0,e),this._ensureLineStarts();let t=this._lineStarts.getIndexOf(e),n=this._lines[t.index].length;return{lineNumber:1+t.index,column:1+Math.min(t.remainder,n)}}_validateRange(e){const t=this._validatePosition({lineNumber:e.startLineNumber,column:e.startColumn}),n=this._validatePosition({lineNumber:e.endLineNumber,column:e.endColumn});return t.lineNumber!==e.startLineNumber||t.column!==e.startColumn||n.lineNumber!==e.endLineNumber||n.column!==e.endColumn?{startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:n.lineNumber,endColumn:n.column}:e}_validatePosition(e){if(!Fe.isIPosition(e))throw new Error(\\\"bad position\\\");let{lineNumber:t,column:n}=e,i=!1;if(t<1)t=1,n=1,i=!0;else if(t>this._lines.length)t=this._lines.length,n=this._lines[t-1].length+1,i=!0;else{let e=this._lines[t-1].length+1;n<1?(n=1,i=!0):n>e&&(n=e,i=!0)}return i?{lineNumber:t,column:n}:e}}class cn{constructor(e,t){this._host=e,this._models=Object.create(null),this._foreignModuleFactory=t,this._foreignModule=null}dispose(){this._models=Object.create(null)}_getModel(e){return this._models[e]}_getModels(){let e=[];return Object.keys(this._models).forEach((t=>e.push(this._models[t]))),e}acceptNewModel(e){this._models[e.url]=new dn(we.parse(e.url),e.lines,e.EOL,e.versionId)}acceptModelChanged(e,t){if(!this._models[e])return;this._models[e].onEvents(t)}acceptRemovedModel(e){this._models[e]&&delete this._models[e]}computeDiff(e,t,n,i){return hn(this,void 0,void 0,(function*(){const r=this._getModel(e),s=this._getModel(t);if(!r||!s)return null;const o=r.getLinesContent(),a=s.getLinesContent(),l=new Ye(o,a,{shouldComputeCharChanges:!0,shouldPostProcessCharChanges:!0,shouldIgnoreTrimWhitespace:n,shouldMakePrettyDiff:!0,maxComputationTime:i}).computeDiff(),u=!(l.changes.length>0)&&this._modelsAreIdentical(r,s);return{quitEarly:l.quitEarly,identical:u,changes:l.changes}}))}_modelsAreIdentical(e,t){const n=e.getLineCount();if(n!==t.getLineCount())return!1;for(let i=1;i<=n;i++){if(e.getLineContent(i)!==t.getLineContent(i))return!1}return!0}computeMoreMinimalEdits(e,t){return hn(this,void 0,void 0,(function*(){const n=this._getModel(e);if(!n)return t;const i=[];let r;t=t.slice(0).sort(((e,t)=>{if(e.range&&t.range)return Ke.compareRangesUsingStarts(e.range,t.range);return(e.range?0:1)-(t.range?0:1)}));for(let{range:e,text:s,eol:o}of t){if(\\\"number\\\"==typeof o&&(r=o),Ke.isEmpty(e)&&!s)continue;const t=n.getValueInRange(e);if(s=s.replace(/\\\\r\\\\n|\\\\n|\\\\r/g,n.eol),t===s)continue;if(Math.max(s.length,t.length)>cn._diffLimit){i.push({range:e,text:s});continue}const a=J(t,s,!1),l=n.offsetAt(Ke.lift(e).getStartPosition());for(const e of a){const t=n.positionAt(l+e.originalStart),r=n.positionAt(l+e.originalStart+e.originalLength),o={text:s.substr(e.modifiedStart,e.modifiedLength),range:{startLineNumber:t.lineNumber,startColumn:t.column,endLineNumber:r.lineNumber,endColumn:r.column}};n.getValueInRange(o.range)!==o.text&&i.push(o)}}return\\\"number\\\"==typeof r&&i.push({eol:r,text:\\\"\\\",range:{startLineNumber:0,startColumn:0,endLineNumber:0,endColumn:0}}),i}))}computeLinks(e){return hn(this,void 0,void 0,(function*(){let t=this._getModel(e);return t?function(e){return e&&\\\"function\\\"==typeof e.getLineCount&&\\\"function\\\"==typeof e.getLineContent?lt.computeLinks(e):[]}(t):null}))}textualSuggest(e,t,n,i){return hn(this,void 0,void 0,(function*(){const r=new ft(!0),s=new RegExp(n,i),o=new Set;e:for(let n of e){const e=this._getModel(n);if(e)for(let n of e.words(s))if(n!==t&&isNaN(Number(n))&&(o.add(n),o.size>cn._suggestionsLimit))break e}return{words:Array.from(o),duration:r.elapsed()}}))}computeWordRanges(e,t,n,i){return hn(this,void 0,void 0,(function*(){let r=this._getModel(e);if(!r)return Object.create(null);const s=new RegExp(n,i),o=Object.create(null);for(let e=t.startLineNumber;e<t.endLineNumber;e++){let t=r.getLineWords(e,s);for(const n of t){if(!isNaN(Number(n.word)))continue;let t=o[n.word];t||(t=[],o[n.word]=t),t.push({startLineNumber:e,startColumn:n.startColumn,endLineNumber:e,endColumn:n.endColumn})}}return o}))}navigateValueSet(e,t,n,i,r){return hn(this,void 0,void 0,(function*(){let s=this._getModel(e);if(!s)return null;let o=new RegExp(i,r);t.startColumn===t.endColumn&&(t={startLineNumber:t.startLineNumber,startColumn:t.startColumn,endLineNumber:t.endLineNumber,endColumn:t.endColumn+1});let a=s.getValueInRange(t),l=s.getWordAtPosition({lineNumber:t.startLineNumber,column:t.startColumn},o);if(!l)return null;let u=s.getValueInRange(l);return ut.INSTANCE.navigateValueSet(t,a,l,u,n)}))}loadForeignModule(e,t,n){let i={host:D(n,((e,t)=>this._host.fhr(e,t))),getMirrorModels:()=>this._getModels()};return this._foreignModuleFactory?(this._foreignModule=this._foreignModuleFactory(i,t),Promise.resolve(U(this._foreignModule))):Promise.reject(new Error(\\\"Unexpected usage\\\"))}fmr(e,t){if(!this._foreignModule||\\\"function\\\"!=typeof this._foreignModule[e])return Promise.reject(new Error(\\\"Missing requestHandler or method: \\\"+e));try{return Promise.resolve(this._foreignModule[e].apply(this._foreignModule,t))}catch(e){return Promise.reject(e)}}}cn._diffLimit=1e5,cn._suggestionsLimit=1e4,\\\"function\\\"==typeof importScripts&&(O.monaco={editor:void 0,languages:void 0,CancellationTokenSource:Lt,Emitter:_t,KeyCode:Wt,KeyMod:un,Position:Fe,Range:Ke,Selection:an,SelectionDirection:Zt,MarkerSeverity:qt,MarkerTag:Ht,Uri:we,Token:ln});let fn=!1;self.onmessage=e=>{fn||function(e){if(fn)return;fn=!0;const t=new B((e=>{self.postMessage(e)}),(t=>new cn(t,e)));self.onmessage=e=>{t.onmessage(e.data)}}(null)}})();\\n\", \"Worker\", undefined, undefined);\n}\n","import { register_default_plugin_web_component } from './snippets/perspective_vieux-1a532b116e65df54/inline0.js';\nimport { monaco_module } from './snippets/perspective_vieux-1a532b116e65df54/inline1.js';\nimport { monaco_module as monaco_module2 } from './snippets/perspective_vieux-1a532b116e65df54/inline2.js';\nimport { default as default1 } from 'monaco-editor/esm/vs/editor/editor.worker';\n\nlet wasm;\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedTextEncoder = new TextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nlet cachegetFloat64Memory0 = null;\nfunction getFloat64Memory0() {\n if (cachegetFloat64Memory0 === null || cachegetFloat64Memory0.buffer !== wasm.memory.buffer) {\n cachegetFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachegetFloat64Memory0;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction makeClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n try {\n return f(state.a, state.b, ...args);\n } finally {\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b);\n state.a = 0;\n\n }\n }\n };\n real.original = state;\n\n return real;\n}\nfunction __wbg_adapter_30(arg0, arg1, arg2, arg3, arg4) {\n var ret = wasm._dyn_core__ops__function__Fn__A_B_C___Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h5cbbf07d5b63bbad(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3), addHeapObject(arg4));\n return takeObject(ret);\n}\n\nfunction makeMutClosure(arg0, arg1, dtor, f) {\n const state = { a: arg0, b: arg1, cnt: 1, dtor };\n const real = (...args) => {\n // First up with a closure we increment the internal reference\n // count. This ensures that the Rust closure environment won't\n // be deallocated while we're invoking it.\n state.cnt++;\n const a = state.a;\n state.a = 0;\n try {\n return f(a, state.b, ...args);\n } finally {\n if (--state.cnt === 0) {\n wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);\n\n } else {\n state.a = a;\n }\n }\n };\n real.original = state;\n\n return real;\n}\nfunction __wbg_adapter_33(arg0, arg1) {\n wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h9bc6bd362dfecb24(arg0, arg1);\n}\n\nfunction __wbg_adapter_36(arg0, arg1, arg2) {\n var ret = wasm._dyn_core__ops__function__Fn__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h3ace638d9be6f1e7(arg0, arg1, addHeapObject(arg2));\n return takeObject(ret);\n}\n\nfunction __wbg_adapter_39(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__Fn__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd4f49224cffb1408(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_42(arg0, arg1) {\n var ret = wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h7a28a94dfe31757e(arg0, arg1);\n return takeObject(ret);\n}\n\nfunction __wbg_adapter_45(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h99145efd0215bac2(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_48(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__Fn__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h35df3591e1b01f4b(arg0, arg1, addHeapObject(arg2));\n}\n\nlet stack_pointer = 32;\n\nfunction addBorrowedObject(obj) {\n if (stack_pointer == 1) throw new Error('out of js stack');\n heap[--stack_pointer] = obj;\n return stack_pointer;\n}\nfunction __wbg_adapter_51(arg0, arg1, arg2) {\n try {\n wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h347cb54122b292c3(arg0, arg1, addBorrowedObject(arg2));\n } finally {\n heap[stack_pointer++] = undefined;\n }\n}\n\nfunction __wbg_adapter_54(arg0, arg1, arg2) {\n wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h0394e2b66a5771fe(arg0, arg1, addHeapObject(arg2));\n}\n\nfunction __wbg_adapter_57(arg0, arg1) {\n wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h540e3a8fcf4f1b89(arg0, arg1);\n}\n\nfunction handleError(f) {\n return function () {\n try {\n return f.apply(this, arguments);\n\n } catch (e) {\n wasm.__wbindgen_exn_store(addHeapObject(e));\n }\n };\n}\n/**\n* @param {string} name\n*/\nexport function register_plugin(name) {\n var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n wasm.register_plugin(ptr0, len0);\n}\n\n/**\n*/\nexport function set_panic_hook() {\n wasm.set_panic_hook();\n}\n\nfunction __wbg_adapter_370(arg0, arg1, arg2, arg3) {\n wasm.wasm_bindgen__convert__closures__invoke2_mut__h5daaaec26eb41140(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));\n}\n\n/**\n*/\nexport class PerspectiveColumnStyleElement {\n\n static __wrap(ptr) {\n const obj = Object.create(PerspectiveColumnStyleElement.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n free() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n wasm.__wbg_perspectivecolumnstyleelement_free(ptr);\n }\n /**\n * @param {HTMLElement} elem\n * @param {any} js_config\n * @param {any} js_def_config\n */\n constructor(elem, js_config, js_def_config) {\n var ret = wasm.perspectivecolumnstyleelement_new(addHeapObject(elem), addHeapObject(js_config), addHeapObject(js_def_config));\n return PerspectiveColumnStyleElement.__wrap(ret);\n }\n /**\n * Reset to a provided JSON config, to be used in place of `new()` when\n * re-using this component.\n *\n * # Arguments\n * * `config` - a `ColumnStyle` config in JSON form.\n * * `default_config` - the default `ColumnStyle` config for this column\n * type, in JSON form.\n * @param {any} config\n * @param {any} default_config\n */\n reset(config, default_config) {\n wasm.perspectivecolumnstyleelement_reset(this.ptr, addHeapObject(config), addHeapObject(default_config));\n }\n /**\n * Dispatches to `ModalElement::open(target)`\n *\n * # Arguments\n * `target` - the relative target to pin this `ModalElement` to.\n * @param {HTMLElement} target\n */\n open(target) {\n wasm.perspectivecolumnstyleelement_open(this.ptr, addHeapObject(target));\n }\n /**\n * Remove this `ModalElement` from the DOM.\n */\n close() {\n wasm.perspectivecolumnstyleelement_close(this.ptr);\n }\n /**\n * DOM lifecycle method when connected. We don't use this, as it can fire during\n * innocuous events like re-parenting.\n */\n connected_callback() {\n wasm.perspectivecolumnstyleelement_connected_callback(this.ptr);\n }\n}\n/**\n*/\nexport class PerspectiveExpressionEditorElement {\n\n free() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n wasm.__wbg_perspectiveexpressioneditorelement_free(ptr);\n }\n}\n/**\n* A `customElements` external API.\n*/\nexport class PerspectiveVieuxElement {\n\n static __wrap(ptr) {\n const obj = Object.create(PerspectiveVieuxElement.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n free() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n wasm.__wbg_perspectivevieuxelement_free(ptr);\n }\n /**\n * @param {HTMLElement} elem\n */\n constructor(elem) {\n var ret = wasm.perspectivevieuxelement_new(addHeapObject(elem));\n return PerspectiveVieuxElement.__wrap(ret);\n }\n /**\n */\n connected_callback() {\n wasm.perspectivevieuxelement_connected_callback(this.ptr);\n }\n /**\n * Loads a promise to a `JsPerspectiveTable` in this viewer.\n * @param {Promise<any>} table\n * @returns {Promise<any>}\n */\n js_load(table) {\n var ret = wasm.perspectivevieuxelement_js_load(this.ptr, addHeapObject(table));\n return takeObject(ret);\n }\n /**\n * @returns {boolean}\n */\n js_delete() {\n var ret = wasm.perspectivevieuxelement_js_delete(this.ptr);\n return ret !== 0;\n }\n /**\n * @returns {any | undefined}\n */\n js_get_table() {\n var ret = wasm.perspectivevieuxelement_js_get_table(this.ptr);\n return takeObject(ret);\n }\n /**\n * Restores this element to a full/partial `JsPerspectiveViewConfig`.\n *\n * # Arguments\n * - `update` The config to restore to, as returned by `.save()`.\n * @param {any} update\n * @returns {Promise<any>}\n */\n js_restore(update) {\n var ret = wasm.perspectivevieuxelement_js_restore(this.ptr, addHeapObject(update));\n return takeObject(ret);\n }\n /**\n * @param {boolean} flat\n * @returns {Promise<any>}\n */\n js_download(flat) {\n var ret = wasm.perspectivevieuxelement_js_download(this.ptr, flat);\n return takeObject(ret);\n }\n /**\n * @param {boolean} flat\n * @returns {Promise<any>}\n */\n js_copy(flat) {\n var ret = wasm.perspectivevieuxelement_js_copy(this.ptr, flat);\n return takeObject(ret);\n }\n /**\n * @returns {Promise<any>}\n */\n js_resize() {\n var ret = wasm.perspectivevieuxelement_js_resize(this.ptr);\n return takeObject(ret);\n }\n /**\n * Determines the render throttling behavior. Can be an integer, for\n * millisecond window to throttle render event; or, if `None`, adaptive throttling\n * will be calculated from the measured render time of the last 5 frames.\n *\n * # Examples\n * // Only draws at most 1 frame/sec.\n * vieux.js_set_throttle(Some(1000_f64));\n *\n * # Arguments\n * `throttle` - The throttle rate - milliseconds (f64), or `None` for adaptive\n * throttling.\n * @param {number | undefined} val\n */\n js_set_throttle(val) {\n wasm.perspectivevieuxelement_js_set_throttle(this.ptr, !isLikeNone(val), isLikeNone(val) ? 0 : val);\n }\n /**\n * Toggle (or force) the config panel open/closed.\n *\n * # Arguments\n * - `force` Force the state of the panel open or closed, or `None` to toggle.\n * @param {boolean | undefined} force\n * @returns {Promise<any>}\n */\n js_toggle_config(force) {\n var ret = wasm.perspectivevieuxelement_js_toggle_config(this.ptr, isLikeNone(force) ? 0xFFFFFF : force ? 1 : 0);\n return takeObject(ret);\n }\n /**\n * Get an `Array` of all of the plugin custom elements registered for this element.\n * This may not include plugins which called `registerPlugin()` after the host has\n * rendered for the first time.\n * @returns {Array<any>}\n */\n js_get_all_plugins() {\n var ret = wasm.perspectivevieuxelement_js_get_all_plugins(this.ptr);\n return takeObject(ret);\n }\n /**\n * Gets a plugin Custom Element with the `name` field, or get the active plugin\n * if no `name` is provided.\n *\n * # Arguments\n * - `name` The `name` property of a perspective plugin Custom Element, or `None`\n * for the active plugin's Custom Element.\n * @param {string | undefined} name\n * @returns {any}\n */\n js_get_plugin(name) {\n var ptr0 = isLikeNone(name) ? 0 : passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.perspectivevieuxelement_js_get_plugin(this.ptr, ptr0, len0);\n return takeObject(ret);\n }\n /**\n * Sets the active plugin to the plugin with the `name` field, or get the default\n * plugin if no `name` is provided.\n *\n * # Arguments\n * - `name` The `name` property of a perspective plugin Custom Element, or `None`\n * for the default plugin.\n * @param {string | undefined} name\n * @returns {boolean}\n */\n js_set_plugin(name) {\n var ptr0 = isLikeNone(name) ? 0 : passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ret = wasm.perspectivevieuxelement_js_set_plugin(this.ptr, ptr0, len0);\n return ret !== 0;\n }\n /**\n * Opens an expression editor at the `target` position, by first creating a\n * `perspective-expression-editor` custom element, then creating the model.\n *\n * # Arguments\n * - `target` The `HtmlElements` in the DOM to pin the floating editor modal to.\n * @param {HTMLElement} target\n */\n _js_open_expression_editor(target) {\n wasm.perspectivevieuxelement__js_open_expression_editor(this.ptr, addHeapObject(target));\n }\n}\n\nasync function load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n if (module.headers.get('Content-Type') != 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nasync function init(input) {\n if (typeof input === 'undefined') {\n input = import.meta.url.replace(/\\.js$/, '_bg.wasm');\n }\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n };\n imports.wbg.__wbindgen_object_clone_ref = function(arg0) {\n var ret = getObject(arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_string_new = function(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_is_undefined = function(arg0) {\n var ret = getObject(arg0) === undefined;\n return ret;\n };\n imports.wbg.__wbg_onupdate_042cc48c4ebe172b = function(arg0, arg1) {\n getObject(arg0).on_update(getObject(arg1));\n };\n imports.wbg.__wbg_removeupdate_7f5ee23cf4cbece4 = function(arg0, arg1) {\n getObject(arg0).remove_update(getObject(arg1));\n };\n imports.wbg.__wbg_errors_a44be7fab3490a0e = function(arg0) {\n var ret = getObject(arg0).errors;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_delete_d6f20e1656bf4727 = function(arg0) {\n getObject(arg0).delete();\n };\n imports.wbg.__wbg_setrenderwarning_ed2562f4267d31e0 = function(arg0, arg1) {\n getObject(arg0).render_warning = arg1 !== 0;\n };\n imports.wbg.__wbg_delete_5dea69add4ef39f8 = handleError(function(arg0) {\n var ret = getObject(arg0).delete();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_validateexpressions_16f3760e79ca0ddb = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).validate_expressions(takeObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_columns_1f565bcf73ec31da = handleError(function(arg0) {\n var ret = getObject(arg0).columns();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_monacomodule_8f6099ded15cc204 = function() {\n var ret = monaco_module2();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_numrows_06c4cefb4e96c254 = handleError(function(arg0) {\n var ret = getObject(arg0).num_rows();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_update_be3e70d2d0e61961 = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n var ret = getObject(arg0).update(getObject(arg1), arg2 === 0 ? undefined : arg3 >>> 0, arg4 === 0 ? undefined : arg5 >>> 0, arg6 !== 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_resize_f8f3032c7c9e4a45 = handleError(function(arg0) {\n var ret = getObject(arg0).resize();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_numcolumns_fd26f07b2b097960 = handleError(function(arg0) {\n var ret = getObject(arg0).num_columns();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_tocsv_45aff6cd4513666d = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).to_csv(takeObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_monacomodule_6c8356868a0f6ce3 = function() {\n var ret = monaco_module();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_schema_4a228844610499fa = handleError(function(arg0) {\n var ret = getObject(arg0).schema();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_draw_02af738a08938691 = handleError(function(arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n var ret = getObject(arg0).draw(getObject(arg1), arg2 === 0 ? undefined : arg3 >>> 0, arg4 === 0 ? undefined : arg5 >>> 0, arg6 !== 0);\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_view_f574aff16dc95e6a = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).view(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_size_dd4146923a1354b2 = handleError(function(arg0) {\n var ret = getObject(arg0).size();\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_lineNumber_6c443045fe15cc90 = function(arg0) {\n var ret = getObject(arg0).lineNumber;\n return ret;\n };\n imports.wbg.__wbg_column_4a4c09ab427a8cad = function(arg0) {\n var ret = getObject(arg0).column;\n return ret;\n };\n imports.wbg.__wbg_findTokenIndexAtOffset_b08bee9955b03203 = function(arg0, arg1) {\n var ret = getObject(arg0).findTokenIndexAtOffset(arg1 >>> 0);\n return ret;\n };\n imports.wbg.__wbg_getClassName_81b41a96013249c5 = function(arg0, arg1) {\n var ret = getObject(arg0).getClassName(arg1 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) {\n var ret = getObject(arg0) === getObject(arg1);\n return ret;\n };\n imports.wbg.__wbg_triggerKind_a10559b773e1fb11 = function(arg0) {\n var ret = getObject(arg0).triggerKind;\n return ret;\n };\n imports.wbg.__wbindgen_cb_drop = function(arg0) {\n const obj = takeObject(arg0).original;\n if (obj.cnt-- == 1) {\n obj.a = 0;\n return true;\n }\n var ret = false;\n return ret;\n };\n imports.wbg.__wbg_registerdefaultpluginwebcomponent_0597df5eae9bf02f = handleError(function() {\n register_default_plugin_web_component();\n });\n imports.wbg.__wbg_name_2b08aebb303ea148 = function(arg0, arg1) {\n var ret = getObject(arg1).name;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_maxcolumns_200489ead164d51e = function(arg0, arg1) {\n var ret = getObject(arg1).max_columns;\n getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbg_maxcells_5c417f5f5ea0261e = function(arg0, arg1) {\n var ret = getObject(arg1).max_cells;\n getInt32Memory0()[arg0 / 4 + 1] = isLikeNone(ret) ? 0 : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbg_renderwarning_cab532b5eefe3c97 = function(arg0) {\n var ret = getObject(arg0).render_warning;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n };\n imports.wbg.__wbg_new_e504cbc830c85429 = function() {\n var ret = new default1();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_editor_79429b1a8b07c53a = function(arg0) {\n var ret = getObject(arg0).editor;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_languages_9f62346f44bd3dc9 = function(arg0) {\n var ret = getObject(arg0).languages;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_create_11727e7ce22e698b = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).create(takeObject(arg1), takeObject(arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_defineTheme_59bfc4be8070ba35 = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).defineTheme(getStringFromWasm0(arg1, arg2), takeObject(arg3));\n };\n imports.wbg.__wbg_setModelMarkers_3ee94d143b5590fb = function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setModelMarkers(getObject(arg1), getStringFromWasm0(arg2, arg3), getObject(arg4));\n };\n imports.wbg.__wbg_register_690822a974223f0a = function(arg0, arg1) {\n getObject(arg0).register(takeObject(arg1));\n };\n imports.wbg.__wbg_setMonarchTokensProvider_0e800d969fdc6c3d = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).setMonarchTokensProvider(getStringFromWasm0(arg1, arg2), takeObject(arg3));\n };\n imports.wbg.__wbg_setLanguageConfiguration_116bb22486bd5a54 = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).setLanguageConfiguration(getStringFromWasm0(arg1, arg2), takeObject(arg3));\n };\n imports.wbg.__wbg_registerCompletionItemProvider_a64d716ad4cfe077 = function(arg0, arg1, arg2, arg3) {\n getObject(arg0).registerCompletionItemProvider(getStringFromWasm0(arg1, arg2), takeObject(arg3));\n };\n imports.wbg.__wbg_getModel_5546acf334533913 = function(arg0) {\n var ret = getObject(arg0).getModel();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getValue_f69f08de41f77d75 = function(arg0) {\n var ret = getObject(arg0).getValue();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_setValue_72c01a4b5c82dee6 = function(arg0, arg1, arg2) {\n getObject(arg0).setValue(getStringFromWasm0(arg1, arg2));\n };\n imports.wbg.__wbg_addCommand_2cb406c7407df33f = function(arg0, arg1, arg2) {\n getObject(arg0).addCommand(arg1 >>> 0, getObject(arg2));\n };\n imports.wbg.__wbg_focus_f340f3ae08442e5b = function(arg0) {\n getObject(arg0).focus();\n };\n imports.wbg.__wbg_onDidChangeContent_2a7e589d3846667a = function(arg0, arg1) {\n getObject(arg0).onDidChangeContent(getObject(arg1));\n };\n imports.wbg.__wbg_getLineTokens_9571b1df694e7b59 = function(arg0, arg1) {\n var ret = getObject(arg0).getLineTokens(arg1 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_json_parse = function(arg0, arg1) {\n var ret = JSON.parse(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_json_serialize = function(arg0, arg1) {\n const obj = getObject(arg1);\n var ret = JSON.stringify(obj === undefined ? null : obj);\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_new_59cb74e423758ede = function() {\n var ret = new Error();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_stack_558ba5917b466edd = function(arg0, arg1) {\n var ret = getObject(arg1).stack;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_error_4bb6c2a97407129a = function(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n };\n imports.wbg.__wbg_instanceof_Window_fbe0320f34c4cd31 = function(arg0) {\n var ret = getObject(arg0) instanceof Window;\n return ret;\n };\n imports.wbg.__wbg_document_2b44f2a86e03665a = function(arg0) {\n var ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_navigator_74ca2cbc2348b985 = function(arg0) {\n var ret = getObject(arg0).navigator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_innerWidth_c4fa0fec0fd477b8 = handleError(function(arg0) {\n var ret = getObject(arg0).innerWidth;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_innerHeight_6344b1c89c013158 = handleError(function(arg0) {\n var ret = getObject(arg0).innerHeight;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_performance_eee010e5e49f08df = function(arg0) {\n var ret = getObject(arg0).performance;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_getComputedStyle_229a290295f66091 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).getComputedStyle(getObject(arg1));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n });\n imports.wbg.__wbg_requestAnimationFrame_65ebf8f2415064e2 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).requestAnimationFrame(getObject(arg1));\n return ret;\n });\n imports.wbg.__wbg_setTimeout_62ddbd1dbc58b759 = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).setTimeout(getObject(arg1), arg2);\n return ret;\n });\n imports.wbg.__wbg_body_08ba7a3043ff8e77 = function(arg0) {\n var ret = getObject(arg0).body;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_createElement_7cbe07ad3289abea = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createElementNS_ae76308e06470c87 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n var ret = getObject(arg0).createElementNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_createTextNode_bbff6f9f6e6b38bf = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).createTextNode(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_getPropertyValue_74b0b2fd345b03c9 = handleError(function(arg0, arg1, arg2, arg3) {\n var ret = getObject(arg1).getPropertyValue(getStringFromWasm0(arg2, arg3));\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n });\n imports.wbg.__wbg_setProperty_e3d42ccff5ebac2f = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setProperty(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n });\n imports.wbg.__wbg_clientX_df24871aabb01061 = function(arg0) {\n var ret = getObject(arg0).clientX;\n return ret;\n };\n imports.wbg.__wbg_shiftKey_31c1bdd985f9be8e = function(arg0) {\n var ret = getObject(arg0).shiftKey;\n return ret;\n };\n imports.wbg.__wbg_item_a479291920c028ec = function(arg0, arg1) {\n var ret = getObject(arg0).item(arg1 >>> 0);\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_instanceof_HtmlSelectElement_9e453923d9cacda8 = function(arg0) {\n var ret = getObject(arg0) instanceof HTMLSelectElement;\n return ret;\n };\n imports.wbg.__wbg_value_b431982196f2362c = function(arg0, arg1) {\n var ret = getObject(arg1).value;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_instanceof_ShadowRoot_0f1ffdfecd50b13b = function(arg0) {\n var ret = getObject(arg0) instanceof ShadowRoot;\n return ret;\n };\n imports.wbg.__wbg_host_176eeb3f3cb78943 = function(arg0) {\n var ret = getObject(arg0).host;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_createObjectURL_e46eb3ca9fdf20c5 = handleError(function(arg0, arg1) {\n var ret = URL.createObjectURL(getObject(arg1));\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n });\n imports.wbg.__wbg_instanceof_HtmlTextAreaElement_ceec64505a6bc087 = function(arg0) {\n var ret = getObject(arg0) instanceof HTMLTextAreaElement;\n return ret;\n };\n imports.wbg.__wbg_value_41a8d072fc94a8a4 = function(arg0, arg1) {\n var ret = getObject(arg1).value;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_setvalue_e3b8a9c5a4ad0114 = function(arg0, arg1, arg2) {\n getObject(arg0).value = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_new_9907abcf6ec2b9a0 = handleError(function(arg0, arg1) {\n var ret = new CustomEvent(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_newwitheventinitdict_db06a760c6f3e418 = handleError(function(arg0, arg1, arg2) {\n var ret = new CustomEvent(getStringFromWasm0(arg0, arg1), getObject(arg2));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_instanceof_HtmlButtonElement_56d6508cc80478bf = function(arg0) {\n var ret = getObject(arg0) instanceof HTMLButtonElement;\n return ret;\n };\n imports.wbg.__wbg_settype_ad8678a602cc664d = function(arg0, arg1, arg2) {\n getObject(arg0).type = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_namespaceURI_5ab9ad8edd6b745e = function(arg0, arg1) {\n var ret = getObject(arg1).namespaceURI;\n var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_scrollTop_1524dbda93a052af = function(arg0) {\n var ret = getObject(arg0).scrollTop;\n return ret;\n };\n imports.wbg.__wbg_scrollLeft_6c939d107e94c65e = function(arg0) {\n var ret = getObject(arg0).scrollLeft;\n return ret;\n };\n imports.wbg.__wbg_clientWidth_725008becfa6f008 = function(arg0) {\n var ret = getObject(arg0).clientWidth;\n return ret;\n };\n imports.wbg.__wbg_clientHeight_cd4d7e2d713d4b5f = function(arg0) {\n var ret = getObject(arg0).clientHeight;\n return ret;\n };\n imports.wbg.__wbg_children_5570264a02a5348a = function(arg0) {\n var ret = getObject(arg0).children;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_attachShadow_121aeff0e52af368 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).attachShadow(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_getAttribute_5d45357036c3ad3d = function(arg0, arg1, arg2, arg3) {\n var ret = getObject(arg1).getAttribute(getStringFromWasm0(arg2, arg3));\n var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_getBoundingClientRect_813f74e2f4f344e2 = function(arg0) {\n var ret = getObject(arg0).getBoundingClientRect();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_querySelector_f684a5b8a5f0e762 = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n });\n imports.wbg.__wbg_removeAttribute_43b052e0560d223b = handleError(function(arg0, arg1, arg2) {\n getObject(arg0).removeAttribute(getStringFromWasm0(arg1, arg2));\n });\n imports.wbg.__wbg_setAttribute_b638fce95071fff6 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));\n });\n imports.wbg.__wbg_toggleAttribute_611dae8d928bf34f = handleError(function(arg0, arg1, arg2, arg3) {\n var ret = getObject(arg0).toggleAttribute(getStringFromWasm0(arg1, arg2), arg3 !== 0);\n return ret;\n });\n imports.wbg.__wbg_style_854f82bcc16efd28 = function(arg0) {\n var ret = getObject(arg0).style;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_offsetParent_8de5608b9b91f0c9 = function(arg0) {\n var ret = getObject(arg0).offsetParent;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_offsetTop_480db8118d615359 = function(arg0) {\n var ret = getObject(arg0).offsetTop;\n return ret;\n };\n imports.wbg.__wbg_offsetLeft_14d54d85e3caae6f = function(arg0) {\n var ret = getObject(arg0).offsetLeft;\n return ret;\n };\n imports.wbg.__wbg_offsetWidth_fcd49defe585c688 = function(arg0) {\n var ret = getObject(arg0).offsetWidth;\n return ret;\n };\n imports.wbg.__wbg_offsetHeight_bb51b47c9f03728a = function(arg0) {\n var ret = getObject(arg0).offsetHeight;\n return ret;\n };\n imports.wbg.__wbg_blur_11fab903447f8be6 = handleError(function(arg0) {\n getObject(arg0).blur();\n });\n imports.wbg.__wbg_click_5bcdaa3dfcd006fb = function(arg0) {\n getObject(arg0).click();\n };\n imports.wbg.__wbg_focus_a3a607c2c1081818 = handleError(function(arg0) {\n getObject(arg0).focus();\n });\n imports.wbg.__wbg_instanceof_HtmlInputElement_bd1ce15e756a8ae2 = function(arg0) {\n var ret = getObject(arg0) instanceof HTMLInputElement;\n return ret;\n };\n imports.wbg.__wbg_checked_3edadcb55226cc83 = function(arg0) {\n var ret = getObject(arg0).checked;\n return ret;\n };\n imports.wbg.__wbg_setchecked_1fe693236b4c24f3 = function(arg0, arg1) {\n getObject(arg0).checked = arg1 !== 0;\n };\n imports.wbg.__wbg_files_942fbf6943996106 = function(arg0) {\n var ret = getObject(arg0).files;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_settype_2628aa2562917c8e = function(arg0, arg1, arg2) {\n getObject(arg0).type = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_value_e27a74c3db49694f = function(arg0, arg1) {\n var ret = getObject(arg1).value;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_setvalue_4f1af4fbd0b9942b = function(arg0, arg1, arg2) {\n getObject(arg0).value = getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_newwithu8arraysequence_717878549d30e47f = handleError(function(arg0) {\n var ret = new Blob(getObject(arg0));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_writeText_cacf5a0e39e301cf = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).writeText(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_now_5ae3d18d57dd226f = function(arg0) {\n var ret = getObject(arg0).now();\n return ret;\n };\n imports.wbg.__wbg_top_759d072a3a15fd13 = function(arg0) {\n var ret = getObject(arg0).top;\n return ret;\n };\n imports.wbg.__wbg_left_515d30ed4e76f921 = function(arg0) {\n var ret = getObject(arg0).left;\n return ret;\n };\n imports.wbg.__wbg_target_62e7aaed452a6541 = function(arg0) {\n var ret = getObject(arg0).target;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_preventDefault_4eb36ec8e5563ad6 = function(arg0) {\n getObject(arg0).preventDefault();\n };\n imports.wbg.__wbg_stopPropagation_a8397a950849e3f6 = function(arg0) {\n getObject(arg0).stopPropagation();\n };\n imports.wbg.__wbg_clipboard_06b3f6375fedd3b7 = function(arg0) {\n var ret = getObject(arg0).clipboard;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_width_5c7aabd2a7489c51 = function(arg0) {\n var ret = getObject(arg0).width;\n return ret;\n };\n imports.wbg.__wbg_height_b3f5ccd4af20f47f = function(arg0) {\n var ret = getObject(arg0).height;\n return ret;\n };\n imports.wbg.__wbg_addEventListener_63378230aa6735d7 = handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n });\n imports.wbg.__wbg_addEventListener_e8fdfac380f9ea25 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));\n });\n imports.wbg.__wbg_dispatchEvent_ff22c95b95c5d04d = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).dispatchEvent(getObject(arg1));\n return ret;\n });\n imports.wbg.__wbg_removeEventListener_19da1e4551104118 = handleError(function(arg0, arg1, arg2, arg3) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3));\n });\n imports.wbg.__wbg_removeEventListener_0007cd1449f82876 = handleError(function(arg0, arg1, arg2, arg3, arg4) {\n getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);\n });\n imports.wbg.__wbg_nodeName_36e9b947eea43be6 = function(arg0, arg1) {\n var ret = getObject(arg1).nodeName;\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_parentNode_be5a24e2fde5b638 = function(arg0) {\n var ret = getObject(arg0).parentNode;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_lastChild_5fc52139f307fbaa = function(arg0) {\n var ret = getObject(arg0).lastChild;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n };\n imports.wbg.__wbg_setnodeValue_7404ea475784eb1c = function(arg0, arg1, arg2) {\n getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2);\n };\n imports.wbg.__wbg_textContent_8c1def1e3477ec2e = function(arg0, arg1) {\n var ret = getObject(arg1).textContent;\n var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbg_appendChild_98dedaeac24501f2 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).appendChild(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_getRootNode_5bff1f99db838954 = function(arg0) {\n var ret = getObject(arg0).getRootNode();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_insertBefore_5886cc01dc0233e3 = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_removeChild_51369e223cb8a779 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).removeChild(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_new_1abc33d4f9ba3e80 = function() {\n var ret = new Array();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_a8b9619536c590d4 = function(arg0, arg1) {\n var ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_length_4c7aec6f35774e3d = function(arg0) {\n var ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_push_44968dcdf4cfbb43 = function(arg0, arg1) {\n var ret = getObject(arg0).push(getObject(arg1));\n return ret;\n };\n imports.wbg.__wbg_instanceof_Error_ee0400be53261d48 = function(arg0) {\n var ret = getObject(arg0) instanceof Error;\n return ret;\n };\n imports.wbg.__wbg_message_def3f4d0edb6218f = function(arg0) {\n var ret = getObject(arg0).message;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newnoargs_ab5e899738c0eff4 = function(arg0, arg1) {\n var ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_call_ab183a630df3a257 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_call_7a2b5e98ac536644 = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).call(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_is_e8ad5aa6da4b8c83 = function(arg0, arg1) {\n var ret = Object.is(getObject(arg0), getObject(arg1));\n return ret;\n };\n imports.wbg.__wbg_keys_127b01ec83516fee = function(arg0) {\n var ret = Object.keys(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_dc5b27cfd2149b8f = function() {\n var ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_bae826039151b559 = function(arg0, arg1) {\n try {\n var state0 = {a: arg0, b: arg1};\n var cb0 = (arg0, arg1) => {\n const a = state0.a;\n state0.a = 0;\n try {\n return __wbg_adapter_370(a, state0.b, arg0, arg1);\n } finally {\n state0.a = a;\n }\n };\n var ret = new Promise(cb0);\n return addHeapObject(ret);\n } finally {\n state0.a = state0.b = 0;\n }\n };\n imports.wbg.__wbg_resolve_9b0f9ddf5f89cb1e = function(arg0) {\n var ret = Promise.resolve(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_then_b4358f6ec1ee6657 = function(arg0, arg1) {\n var ret = getObject(arg0).then(getObject(arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_then_3d9a54b0affdf26d = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).then(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_self_77eca7b42660e1bb = handleError(function() {\n var ret = self.self;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_window_51dac01569f1ba70 = handleError(function() {\n var ret = window.window;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_globalThis_34bac2d08ebb9b58 = handleError(function() {\n var ret = globalThis.globalThis;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_global_1c436164a66c9c22 = handleError(function() {\n var ret = global.global;\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_buffer_bc64154385c04ac4 = function(arg0) {\n var ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_newwithbyteoffsetandlength_3c8748473807c7cf = function(arg0, arg1, arg2) {\n var ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_4bab9404e99a1f85 = handleError(function(arg0, arg1) {\n var ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n });\n imports.wbg.__wbg_has_09f0cde2d542e767 = handleError(function(arg0, arg1) {\n var ret = Reflect.has(getObject(arg0), getObject(arg1));\n return ret;\n });\n imports.wbg.__wbg_set_3afd31f38e771338 = handleError(function(arg0, arg1, arg2) {\n var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));\n return ret;\n });\n imports.wbg.__wbindgen_number_get = function(arg0, arg1) {\n const obj = getObject(arg1);\n var ret = typeof(obj) === 'number' ? obj : undefined;\n getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n };\n imports.wbg.__wbindgen_string_get = function(arg0, arg1) {\n const obj = getObject(arg1);\n var ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {\n var ret = debugString(getObject(arg1));\n var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n };\n imports.wbg.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbindgen_rethrow = function(arg0) {\n throw takeObject(arg0);\n };\n imports.wbg.__wbindgen_memory = function() {\n var ret = wasm.memory;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper2440 = function(arg0, arg1, arg2) {\n var ret = makeClosure(arg0, arg1, 196, __wbg_adapter_30);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper2442 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 188, __wbg_adapter_33);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper2444 = function(arg0, arg1, arg2) {\n var ret = makeClosure(arg0, arg1, 192, __wbg_adapter_36);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper2446 = function(arg0, arg1, arg2) {\n var ret = makeClosure(arg0, arg1, 190, __wbg_adapter_39);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper2448 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 186, __wbg_adapter_42);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper2450 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 194, __wbg_adapter_45);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper3836 = function(arg0, arg1, arg2) {\n var ret = makeClosure(arg0, arg1, 550, __wbg_adapter_48);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper3838 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 552, __wbg_adapter_51);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper3940 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 613, __wbg_adapter_54);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_closure_wrapper4015 = function(arg0, arg1, arg2) {\n var ret = makeMutClosure(arg0, arg1, 622, __wbg_adapter_57);\n return addHeapObject(ret);\n };\n\n if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {\n input = fetch(input);\n }\n\n const { instance, module } = await load(await input, imports);\n\n wasm = instance.exports;\n init.__wbindgen_wasm_module = module;\n\n return wasm;\n}\n\nexport default init;\n\n","\n export async function monaco_module() { \n return import(\n /* webpackChunkName: \"perspective-viewer.monaco\" */\n /* webpackMode: \"eager\" */\n 'monaco-editor/esm/vs/editor/editor.api'\n ); \n }\n","\n export async function monaco_module() {\n return import(\n /* webpackChunkName: \"perspective-viewer.monaco-exts\" */\n /* webpackMode: \"eager\" */\n '../../../src/js/monaco.js'\n ); \n }\n","export default __webpack_public_path__ + \"perspective_vieux_bg.wasm\";","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nexport const DATA_TYPES = {\n integer: \"integer\",\n float: \"float\",\n string: \"string\",\n boolean: \"boolean\",\n date: \"date\",\n datetime: \"datetime\",\n object: \"object\"\n};\n\nexport const CONFIG_ALIASES = {\n row_pivot: \"row_pivots\",\n \"row-pivot\": \"row_pivots\",\n \"row-pivots\": \"row_pivots\",\n col_pivot: \"column_pivots\",\n col_pivots: \"column_pivots\",\n column_pivot: \"column_pivots\",\n \"column-pivot\": \"column_pivots\",\n \"column-pivots\": \"column_pivots\",\n filters: \"filter\",\n sorts: \"sort\"\n};\n\nexport const CONFIG_VALID_KEYS = [\"viewport\", \"row_pivots\", \"column_pivots\", \"aggregates\", \"columns\", \"filter\", \"sort\", \"computed_columns\", \"expressions\", \"row_pivot_depth\", \"filter_op\"];\n\nconst NUMBER_AGGREGATES = [\n \"any\",\n \"avg\",\n \"abs sum\",\n \"count\",\n \"distinct count\",\n \"dominant\",\n \"first by index\",\n \"last by index\",\n \"last\",\n \"high\",\n \"join\",\n \"low\",\n \"mean\",\n \"median\",\n \"pct sum parent\",\n \"pct sum grand total\",\n \"stddev\",\n \"sum\",\n \"sum abs\",\n \"sum not null\",\n \"unique\",\n \"var\"\n];\n\nconst STRING_AGGREGATES = [\"any\", \"count\", \"distinct count\", \"distinct leaf\", \"dominant\", \"first by index\", \"join\", \"last by index\", \"last\", \"unique\"];\n\nconst BOOLEAN_AGGREGATES = [\"any\", \"count\", \"distinct count\", \"distinct leaf\", \"dominant\", \"first by index\", \"last by index\", \"last\", \"unique\"];\n\nexport const SORT_ORDERS = [\"none\", \"asc\", \"desc\", \"col asc\", \"col desc\", \"asc abs\", \"desc abs\", \"col asc abs\", \"col desc abs\"];\n\nexport const SORT_ORDER_IDS = [2, 0, 1, 0, 1, 3, 4, 3, 4];\n\nexport const TYPE_AGGREGATES = {\n string: STRING_AGGREGATES,\n float: NUMBER_AGGREGATES,\n integer: NUMBER_AGGREGATES,\n boolean: BOOLEAN_AGGREGATES,\n datetime: STRING_AGGREGATES,\n date: STRING_AGGREGATES\n};\n\nexport const FILTER_OPERATORS = {\n lessThan: \"<\",\n greaterThan: \">\",\n equals: \"==\",\n lessThanOrEquals: \"<=\",\n greaterThanOrEquals: \">=\",\n doesNotEqual: \"!=\",\n isNull: \"is null\",\n isNotNull: \"is not null\",\n isIn: \"in\",\n isNotIn: \"not in\",\n contains: \"contains\",\n bitwiseAnd: \"&\",\n bitwiseOr: \"|\",\n and: \"and\",\n or: \"or\",\n beginsWith: \"begins with\",\n endsWith: \"ends with\"\n};\n\nconst BOOLEAN_FILTERS = [\n FILTER_OPERATORS.bitwiseAnd,\n FILTER_OPERATORS.bitwiseOr,\n FILTER_OPERATORS.equals,\n FILTER_OPERATORS.doesNotEqual,\n FILTER_OPERATORS.or,\n FILTER_OPERATORS.and,\n FILTER_OPERATORS.isNull,\n FILTER_OPERATORS.isNotNull\n];\n\nconst NUMBER_FILTERS = [\n FILTER_OPERATORS.lessThan,\n FILTER_OPERATORS.greaterThan,\n FILTER_OPERATORS.equals,\n FILTER_OPERATORS.lessThanOrEquals,\n FILTER_OPERATORS.greaterThanOrEquals,\n FILTER_OPERATORS.doesNotEqual,\n FILTER_OPERATORS.isNull,\n FILTER_OPERATORS.isNotNull\n];\n\nconst STRING_FILTERS = [\n FILTER_OPERATORS.equals,\n FILTER_OPERATORS.contains,\n FILTER_OPERATORS.doesNotEqual,\n FILTER_OPERATORS.isIn,\n FILTER_OPERATORS.isNotIn,\n FILTER_OPERATORS.beginsWith,\n FILTER_OPERATORS.endsWith,\n FILTER_OPERATORS.isNull,\n FILTER_OPERATORS.isNotNull\n];\n\nconst DATETIME_FILTERS = [\n FILTER_OPERATORS.lessThan,\n FILTER_OPERATORS.greaterThan,\n FILTER_OPERATORS.equals,\n FILTER_OPERATORS.lessThanOrEquals,\n FILTER_OPERATORS.greaterThanOrEquals,\n FILTER_OPERATORS.doesNotEqual,\n FILTER_OPERATORS.isNull,\n FILTER_OPERATORS.isNotNull\n];\n\nexport const COLUMN_SEPARATOR_STRING = \"|\";\n\nexport const TYPE_FILTERS = {\n string: STRING_FILTERS,\n float: NUMBER_FILTERS,\n integer: NUMBER_FILTERS,\n boolean: BOOLEAN_FILTERS,\n datetime: DATETIME_FILTERS,\n date: DATETIME_FILTERS\n};\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst directives = new WeakMap();\n/**\n * Brands a function as a directive factory function so that lit-html will call\n * the function during template rendering, rather than passing as a value.\n *\n * A _directive_ is a function that takes a Part as an argument. It has the\n * signature: `(part: Part) => void`.\n *\n * A directive _factory_ is a function that takes arguments for data and\n * configuration and returns a directive. Users of directive usually refer to\n * the directive factory as the directive. For example, \"The repeat directive\".\n *\n * Usually a template author will invoke a directive factory in their template\n * with relevant arguments, which will then return a directive function.\n *\n * Here's an example of using the `repeat()` directive factory that takes an\n * array and a function to render an item:\n *\n * ```js\n * html`<ul><${repeat(items, (item) => html`<li>${item}</li>`)}</ul>`\n * ```\n *\n * When `repeat` is invoked, it returns a directive function that closes over\n * `items` and the template function. When the outer template is rendered, the\n * return directive function is called with the Part for the expression.\n * `repeat` then performs it's custom logic to render multiple items.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object.\n *\n * @example\n *\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n * if (part.value !== v) {\n * part.setValue(v)\n * }\n * });\n */\nexport const directive = (f) => ((...args) => {\n const d = f(...args);\n directives.set(d, true);\n return d;\n});\nexport const isDirective = (o) => {\n return typeof o === 'function' && directives.has(o);\n};\n//# sourceMappingURL=directive.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * True if the custom elements polyfill is in use.\n */\nexport const isCEPolyfill = typeof window !== 'undefined' &&\n window.customElements != null &&\n window.customElements.polyfillWrapFlushCallback !==\n undefined;\n/**\n * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive),\n * into another container (could be the same container), before `before`. If\n * `before` is null, it appends the nodes to the container.\n */\nexport const reparentNodes = (container, start, end = null, before = null) => {\n while (start !== end) {\n const n = start.nextSibling;\n container.insertBefore(start, before);\n start = n;\n }\n};\n/**\n * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from\n * `container`.\n */\nexport const removeNodes = (container, start, end = null) => {\n while (start !== end) {\n const n = start.nextSibling;\n container.removeChild(start);\n start = n;\n }\n};\n//# sourceMappingURL=dom.js.map","/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = {};\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nexport const nothing = {};\n//# sourceMappingURL=part.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nexport const marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nexport const nodeMarker = `<!--${marker}-->`;\nexport const markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n/**\n * Suffix appended to all bound attribute names.\n */\nexport const boundAttributeSuffix = '$lit$';\n/**\n * An updatable Template that tracks the location of dynamic parts.\n */\nexport class Template {\n constructor(result, element) {\n this.parts = [];\n this.element = element;\n const nodesToRemove = [];\n const stack = [];\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(element.content, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n // Keeps track of the last index associated with a part. We try to delete\n // unnecessary nodes, but we never want to associate two different parts\n // to the same index. They must have a constant node between.\n let lastPartIndex = 0;\n let index = -1;\n let partIndex = 0;\n const { strings, values: { length } } = result;\n while (partIndex < length) {\n const node = walker.nextNode();\n if (node === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop();\n continue;\n }\n index++;\n if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n if (node.hasAttributes()) {\n const attributes = node.attributes;\n const { length } = attributes;\n // Per\n // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n // attributes are not guaranteed to be returned in document order.\n // In particular, Edge/IE can return them out of order, so we cannot\n // assume a correspondence between part index and attribute index.\n let count = 0;\n for (let i = 0; i < length; i++) {\n if (endsWith(attributes[i].name, boundAttributeSuffix)) {\n count++;\n }\n }\n while (count-- > 0) {\n // Get the template literal section leading up to the first\n // expression in this attribute\n const stringForPart = strings[partIndex];\n // Find the attribute name\n const name = lastAttributeNameRegex.exec(stringForPart)[2];\n // Find the corresponding attribute\n // All bound attributes have had a suffix added in\n // TemplateResult#getHTML to opt out of special attribute\n // handling. To look up the attribute value we also need to add\n // the suffix.\n const attributeLookupName = name.toLowerCase() + boundAttributeSuffix;\n const attributeValue = node.getAttribute(attributeLookupName);\n node.removeAttribute(attributeLookupName);\n const statics = attributeValue.split(markerRegex);\n this.parts.push({ type: 'attribute', index, name, strings: statics });\n partIndex += statics.length - 1;\n }\n }\n if (node.tagName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = node.content;\n }\n }\n else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n const data = node.data;\n if (data.indexOf(marker) >= 0) {\n const parent = node.parentNode;\n const strings = data.split(markerRegex);\n const lastIndex = strings.length - 1;\n // Generate a new text node for each literal section\n // These nodes are also used as the markers for node parts\n for (let i = 0; i < lastIndex; i++) {\n let insert;\n let s = strings[i];\n if (s === '') {\n insert = createMarker();\n }\n else {\n const match = lastAttributeNameRegex.exec(s);\n if (match !== null && endsWith(match[2], boundAttributeSuffix)) {\n s = s.slice(0, match.index) + match[1] +\n match[2].slice(0, -boundAttributeSuffix.length) + match[3];\n }\n insert = document.createTextNode(s);\n }\n parent.insertBefore(insert, node);\n this.parts.push({ type: 'node', index: ++index });\n }\n // If there's no text, we must insert a comment to mark our place.\n // Else, we can trust it will stick around after cloning.\n if (strings[lastIndex] === '') {\n parent.insertBefore(createMarker(), node);\n nodesToRemove.push(node);\n }\n else {\n node.data = strings[lastIndex];\n }\n // We have a part for each match found\n partIndex += lastIndex;\n }\n }\n else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n if (node.data === marker) {\n const parent = node.parentNode;\n // Add a new marker node to be the startNode of the Part if any of\n // the following are true:\n // * We don't have a previousSibling\n // * The previousSibling is already the start of a previous part\n if (node.previousSibling === null || index === lastPartIndex) {\n index++;\n parent.insertBefore(createMarker(), node);\n }\n lastPartIndex = index;\n this.parts.push({ type: 'node', index });\n // If we don't have a nextSibling, keep this node so we have an end.\n // Else, we can remove it to save future costs.\n if (node.nextSibling === null) {\n node.data = '';\n }\n else {\n nodesToRemove.push(node);\n index--;\n }\n partIndex++;\n }\n else {\n let i = -1;\n while ((i = node.data.indexOf(marker, i + 1)) !== -1) {\n // Comment node has a binding marker inside, make an inactive part\n // The binding won't work, but subsequent bindings will\n // TODO (justinfagnani): consider whether it's even worth it to\n // make bindings in comments work\n this.parts.push({ type: 'node', index: -1 });\n partIndex++;\n }\n }\n }\n }\n // Remove text binding nodes after the walk to not disturb the TreeWalker\n for (const n of nodesToRemove) {\n n.parentNode.removeChild(n);\n }\n }\n}\nconst endsWith = (str, suffix) => {\n const index = str.length - suffix.length;\n return index >= 0 && str.slice(index) === suffix;\n};\nexport const isTemplatePartActive = (part) => part.index !== -1;\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nexport const createMarker = () => document.createComment('');\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-characters\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters, which includes every\n * space character except \" \".\n *\n * So an attribute is:\n * * The name: any character except a control character, space character, ('),\n * (\"), \">\", \"=\", or \"/\"\n * * Followed by zero or more space characters\n * * Followed by \"=\"\n * * Followed by zero or more space characters\n * * Followed by:\n * * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n * * (\") then any non-(\"), or\n * * (') then any non-(')\n */\nexport const lastAttributeNameRegex = \n// eslint-disable-next-line no-control-regex\n/([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n//# sourceMappingURL=template.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isCEPolyfill } from './dom.js';\nimport { isTemplatePartActive } from './template.js';\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nexport class TemplateInstance {\n constructor(template, processor, options) {\n this.__parts = [];\n this.template = template;\n this.processor = processor;\n this.options = options;\n }\n update(values) {\n let i = 0;\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.setValue(values[i]);\n }\n i++;\n }\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.commit();\n }\n }\n }\n _clone() {\n // There are a number of steps in the lifecycle of a template instance's\n // DOM fragment:\n // 1. Clone - create the instance fragment\n // 2. Adopt - adopt into the main document\n // 3. Process - find part markers and create parts\n // 4. Upgrade - upgrade custom elements\n // 5. Update - set node, attribute, property, etc., values\n // 6. Connect - connect to the document. Optional and outside of this\n // method.\n //\n // We have a few constraints on the ordering of these steps:\n // * We need to upgrade before updating, so that property values will pass\n // through any property setters.\n // * We would like to process before upgrading so that we're sure that the\n // cloned fragment is inert and not disturbed by self-modifying DOM.\n // * We want custom elements to upgrade even in disconnected fragments.\n //\n // Given these constraints, with full custom elements support we would\n // prefer the order: Clone, Process, Adopt, Upgrade, Update, Connect\n //\n // But Safari does not implement CustomElementRegistry#upgrade, so we\n // can not implement that order and still have upgrade-before-update and\n // upgrade disconnected fragments. So we instead sacrifice the\n // process-before-upgrade constraint, since in Custom Elements v1 elements\n // must not modify their light DOM in the constructor. We still have issues\n // when co-existing with CEv0 elements like Polymer 1, and with polyfills\n // that don't strictly adhere to the no-modification rule because shadow\n // DOM, which may be created in the constructor, is emulated by being placed\n // in the light DOM.\n //\n // The resulting order is on native is: Clone, Adopt, Upgrade, Process,\n // Update, Connect. document.importNode() performs Clone, Adopt, and Upgrade\n // in one step.\n //\n // The Custom Elements v1 polyfill supports upgrade(), so the order when\n // polyfilled is the more ideal: Clone, Process, Adopt, Upgrade, Update,\n // Connect.\n const fragment = isCEPolyfill ?\n this.template.element.content.cloneNode(true) :\n document.importNode(this.template.element.content, true);\n const stack = [];\n const parts = this.template.parts;\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(fragment, 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */, null, false);\n let partIndex = 0;\n let nodeIndex = 0;\n let part;\n let node = walker.nextNode();\n // Loop through all the nodes and parts of a template\n while (partIndex < parts.length) {\n part = parts[partIndex];\n if (!isTemplatePartActive(part)) {\n this.__parts.push(undefined);\n partIndex++;\n continue;\n }\n // Progress the tree walker until we find our next part's node.\n // Note that multiple parts may share the same node (attribute parts\n // on a single element), so this loop may not run at all.\n while (nodeIndex < part.index) {\n nodeIndex++;\n if (node.nodeName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = node.content;\n }\n if ((node = walker.nextNode()) === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop();\n node = walker.nextNode();\n }\n }\n // We've arrived at our part's node.\n if (part.type === 'node') {\n const part = this.processor.handleTextExpression(this.options);\n part.insertAfterNode(node.previousSibling);\n this.__parts.push(part);\n }\n else {\n this.__parts.push(...this.processor.handleAttributeExpressions(node, part.name, part.strings, this.options));\n }\n partIndex++;\n }\n if (isCEPolyfill) {\n document.adoptNode(fragment);\n customElements.upgrade(fragment);\n }\n return fragment;\n }\n}\n//# sourceMappingURL=template-instance.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n * @module lit-html\n */\nimport { reparentNodes } from './dom.js';\nimport { boundAttributeSuffix, lastAttributeNameRegex, marker, nodeMarker } from './template.js';\n/**\n * Our TrustedTypePolicy for HTML which is declared using the html template\n * tag function.\n *\n * That HTML is a developer-authored constant, and is parsed with innerHTML\n * before any untrusted expressions have been mixed in. Therefor it is\n * considered safe by construction.\n */\nconst policy = window.trustedTypes &&\n trustedTypes.createPolicy('lit-html', { createHTML: (s) => s });\nconst commentMarker = ` ${marker} `;\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nexport class TemplateResult {\n constructor(strings, values, type, processor) {\n this.strings = strings;\n this.values = values;\n this.type = type;\n this.processor = processor;\n }\n /**\n * Returns a string of HTML used to create a `<template>` element.\n */\n getHTML() {\n const l = this.strings.length - 1;\n let html = '';\n let isCommentBinding = false;\n for (let i = 0; i < l; i++) {\n const s = this.strings[i];\n // For each binding we want to determine the kind of marker to insert\n // into the template source before it's parsed by the browser's HTML\n // parser. The marker type is based on whether the expression is in an\n // attribute, text, or comment position.\n // * For node-position bindings we insert a comment with the marker\n // sentinel as its text content, like <!--{{lit-guid}}-->.\n // * For attribute bindings we insert just the marker sentinel for the\n // first binding, so that we support unquoted attribute bindings.\n // Subsequent bindings can use a comment marker because multi-binding\n // attributes must be quoted.\n // * For comment bindings we insert just the marker sentinel so we don't\n // close the comment.\n //\n // The following code scans the template source, but is *not* an HTML\n // parser. We don't need to track the tree structure of the HTML, only\n // whether a binding is inside a comment, and if not, if it appears to be\n // the first binding in an attribute.\n const commentOpen = s.lastIndexOf('<!--');\n // We're in comment position if we have a comment open with no following\n // comment close. Because <-- can appear in an attribute value there can\n // be false positives.\n isCommentBinding = (commentOpen > -1 || isCommentBinding) &&\n s.indexOf('-->', commentOpen + 1) === -1;\n // Check to see if we have an attribute-like sequence preceding the\n // expression. This can match \"name=value\" like structures in text,\n // comments, and attribute values, so there can be false-positives.\n const attributeMatch = lastAttributeNameRegex.exec(s);\n if (attributeMatch === null) {\n // We're only in this branch if we don't have a attribute-like\n // preceding sequence. For comments, this guards against unusual\n // attribute values like <div foo=\"<!--${'bar'}\">. Cases like\n // <!-- foo=${'bar'}--> are handled correctly in the attribute branch\n // below.\n html += s + (isCommentBinding ? commentMarker : nodeMarker);\n }\n else {\n // For attributes we use just a marker sentinel, and also append a\n // $lit$ suffix to the name to opt-out of attribute-specific parsing\n // that IE and Edge do for style and certain SVG attributes.\n html += s.substr(0, attributeMatch.index) + attributeMatch[1] +\n attributeMatch[2] + boundAttributeSuffix + attributeMatch[3] +\n marker;\n }\n }\n html += this.strings[l];\n return html;\n }\n getTemplateElement() {\n const template = document.createElement('template');\n let value = this.getHTML();\n if (policy !== undefined) {\n // this is secure because `this.strings` is a TemplateStringsArray.\n // TODO: validate this when\n // https://github.com/tc39/proposal-array-is-template-object is\n // implemented.\n value = policy.createHTML(value);\n }\n template.innerHTML = value;\n return template;\n }\n}\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTML in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nexport class SVGTemplateResult extends TemplateResult {\n getHTML() {\n return `<svg>${super.getHTML()}</svg>`;\n }\n getTemplateElement() {\n const template = super.getTemplateElement();\n const content = template.content;\n const svgElement = content.firstChild;\n content.removeChild(svgElement);\n reparentNodes(content, svgElement.firstChild);\n return template;\n }\n}\n//# sourceMappingURL=template-result.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { isDirective } from './directive.js';\nimport { removeNodes } from './dom.js';\nimport { noChange, nothing } from './part.js';\nimport { TemplateInstance } from './template-instance.js';\nimport { TemplateResult } from './template-result.js';\nimport { createMarker } from './template.js';\nexport const isPrimitive = (value) => {\n return (value === null ||\n !(typeof value === 'object' || typeof value === 'function'));\n};\nexport const isIterable = (value) => {\n return Array.isArray(value) ||\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !!(value && value[Symbol.iterator]);\n};\n/**\n * Writes attribute values to the DOM for a group of AttributeParts bound to a\n * single attribute. The value is only set once even if there are multiple parts\n * for an attribute.\n */\nexport class AttributeCommitter {\n constructor(element, name, strings) {\n this.dirty = true;\n this.element = element;\n this.name = name;\n this.strings = strings;\n this.parts = [];\n for (let i = 0; i < strings.length - 1; i++) {\n this.parts[i] = this._createPart();\n }\n }\n /**\n * Creates a single part. Override this to create a differnt type of part.\n */\n _createPart() {\n return new AttributePart(this);\n }\n _getValue() {\n const strings = this.strings;\n const l = strings.length - 1;\n const parts = this.parts;\n // If we're assigning an attribute via syntax like:\n // attr=\"${foo}\" or attr=${foo}\n // but not\n // attr=\"${foo} ${bar}\" or attr=\"${foo} baz\"\n // then we don't want to coerce the attribute value into one long\n // string. Instead we want to just return the value itself directly,\n // so that sanitizeDOMValue can get the actual value rather than\n // String(value)\n // The exception is if v is an array, in which case we do want to smash\n // it together into a string without calling String() on the array.\n //\n // This also allows trusted values (when using TrustedTypes) being\n // assigned to DOM sinks without being stringified in the process.\n if (l === 1 && strings[0] === '' && strings[1] === '') {\n const v = parts[0].value;\n if (typeof v === 'symbol') {\n return String(v);\n }\n if (typeof v === 'string' || !isIterable(v)) {\n return v;\n }\n }\n let text = '';\n for (let i = 0; i < l; i++) {\n text += strings[i];\n const part = parts[i];\n if (part !== undefined) {\n const v = part.value;\n if (isPrimitive(v) || !isIterable(v)) {\n text += typeof v === 'string' ? v : String(v);\n }\n else {\n for (const t of v) {\n text += typeof t === 'string' ? t : String(t);\n }\n }\n }\n }\n text += strings[l];\n return text;\n }\n commit() {\n if (this.dirty) {\n this.dirty = false;\n this.element.setAttribute(this.name, this._getValue());\n }\n }\n}\n/**\n * A Part that controls all or part of an attribute value.\n */\nexport class AttributePart {\n constructor(committer) {\n this.value = undefined;\n this.committer = committer;\n }\n setValue(value) {\n if (value !== noChange && (!isPrimitive(value) || value !== this.value)) {\n this.value = value;\n // If the value is a not a directive, dirty the committer so that it'll\n // call setAttribute. If the value is a directive, it'll dirty the\n // committer if it calls setValue().\n if (!isDirective(value)) {\n this.committer.dirty = true;\n }\n }\n }\n commit() {\n while (isDirective(this.value)) {\n const directive = this.value;\n this.value = noChange;\n directive(this);\n }\n if (this.value === noChange) {\n return;\n }\n this.committer.commit();\n }\n}\n/**\n * A Part that controls a location within a Node tree. Like a Range, NodePart\n * has start and end locations and can set and update the Nodes between those\n * locations.\n *\n * NodeParts support several value types: primitives, Nodes, TemplateResults,\n * as well as arrays and iterables of those types.\n */\nexport class NodePart {\n constructor(options) {\n this.value = undefined;\n this.__pendingValue = undefined;\n this.options = options;\n }\n /**\n * Appends this part into a container.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendInto(container) {\n this.startNode = container.appendChild(createMarker());\n this.endNode = container.appendChild(createMarker());\n }\n /**\n * Inserts this part after the `ref` node (between `ref` and `ref`'s next\n * sibling). Both `ref` and its next sibling must be static, unchanging nodes\n * such as those that appear in a literal section of a template.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterNode(ref) {\n this.startNode = ref;\n this.endNode = ref.nextSibling;\n }\n /**\n * Appends this part into a parent part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendIntoPart(part) {\n part.__insert(this.startNode = createMarker());\n part.__insert(this.endNode = createMarker());\n }\n /**\n * Inserts this part after the `ref` part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterPart(ref) {\n ref.__insert(this.startNode = createMarker());\n this.endNode = ref.endNode;\n ref.endNode = this.startNode;\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n if (this.startNode.parentNode === null) {\n return;\n }\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n const value = this.__pendingValue;\n if (value === noChange) {\n return;\n }\n if (isPrimitive(value)) {\n if (value !== this.value) {\n this.__commitText(value);\n }\n }\n else if (value instanceof TemplateResult) {\n this.__commitTemplateResult(value);\n }\n else if (value instanceof Node) {\n this.__commitNode(value);\n }\n else if (isIterable(value)) {\n this.__commitIterable(value);\n }\n else if (value === nothing) {\n this.value = nothing;\n this.clear();\n }\n else {\n // Fallback, will render the string representation\n this.__commitText(value);\n }\n }\n __insert(node) {\n this.endNode.parentNode.insertBefore(node, this.endNode);\n }\n __commitNode(value) {\n if (this.value === value) {\n return;\n }\n this.clear();\n this.__insert(value);\n this.value = value;\n }\n __commitText(value) {\n const node = this.startNode.nextSibling;\n value = value == null ? '' : value;\n // If `value` isn't already a string, we explicitly convert it here in case\n // it can't be implicitly converted - i.e. it's a symbol.\n const valueAsString = typeof value === 'string' ? value : String(value);\n if (node === this.endNode.previousSibling &&\n node.nodeType === 3 /* Node.TEXT_NODE */) {\n // If we only have a single text node between the markers, we can just\n // set its value, rather than replacing it.\n // TODO(justinfagnani): Can we just check if this.value is primitive?\n node.data = valueAsString;\n }\n else {\n this.__commitNode(document.createTextNode(valueAsString));\n }\n this.value = value;\n }\n __commitTemplateResult(value) {\n const template = this.options.templateFactory(value);\n if (this.value instanceof TemplateInstance &&\n this.value.template === template) {\n this.value.update(value.values);\n }\n else {\n // Make sure we propagate the template processor from the TemplateResult\n // so that we use its syntax extension, etc. The template factory comes\n // from the render function options so that it can control template\n // caching and preprocessing.\n const instance = new TemplateInstance(template, value.processor, this.options);\n const fragment = instance._clone();\n instance.update(value.values);\n this.__commitNode(fragment);\n this.value = instance;\n }\n }\n __commitIterable(value) {\n // For an Iterable, we create a new InstancePart per item, then set its\n // value to the item. This is a little bit of overhead for every item in\n // an Iterable, but it lets us recurse easily and efficiently update Arrays\n // of TemplateResults that will be commonly returned from expressions like:\n // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n // If _value is an array, then the previous render was of an\n // iterable and _value will contain the NodeParts from the previous\n // render. If _value is not an array, clear this part and make a new\n // array for NodeParts.\n if (!Array.isArray(this.value)) {\n this.value = [];\n this.clear();\n }\n // Lets us keep track of how many items we stamped so we can clear leftover\n // items from a previous render\n const itemParts = this.value;\n let partIndex = 0;\n let itemPart;\n for (const item of value) {\n // Try to reuse an existing part\n itemPart = itemParts[partIndex];\n // If no existing part, create a new one\n if (itemPart === undefined) {\n itemPart = new NodePart(this.options);\n itemParts.push(itemPart);\n if (partIndex === 0) {\n itemPart.appendIntoPart(this);\n }\n else {\n itemPart.insertAfterPart(itemParts[partIndex - 1]);\n }\n }\n itemPart.setValue(item);\n itemPart.commit();\n partIndex++;\n }\n if (partIndex < itemParts.length) {\n // Truncate the parts array so _value reflects the current state\n itemParts.length = partIndex;\n this.clear(itemPart && itemPart.endNode);\n }\n }\n clear(startNode = this.startNode) {\n removeNodes(this.startNode.parentNode, startNode.nextSibling, this.endNode);\n }\n}\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nexport class BooleanAttributePart {\n constructor(element, name, strings) {\n this.value = undefined;\n this.__pendingValue = undefined;\n if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n throw new Error('Boolean attributes can only contain a single expression');\n }\n this.element = element;\n this.name = name;\n this.strings = strings;\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const value = !!this.__pendingValue;\n if (this.value !== value) {\n if (value) {\n this.element.setAttribute(this.name, '');\n }\n else {\n this.element.removeAttribute(this.name);\n }\n this.value = value;\n }\n this.__pendingValue = noChange;\n }\n}\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nexport class PropertyCommitter extends AttributeCommitter {\n constructor(element, name, strings) {\n super(element, name, strings);\n this.single =\n (strings.length === 2 && strings[0] === '' && strings[1] === '');\n }\n _createPart() {\n return new PropertyPart(this);\n }\n _getValue() {\n if (this.single) {\n return this.parts[0].value;\n }\n return super._getValue();\n }\n commit() {\n if (this.dirty) {\n this.dirty = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.element[this.name] = this._getValue();\n }\n }\n}\nexport class PropertyPart extends AttributePart {\n}\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the third\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\n// Wrap into an IIFE because MS Edge <= v41 does not support having try/catch\n// blocks right into the body of a module\n(() => {\n try {\n const options = {\n get capture() {\n eventOptionsSupported = true;\n return false;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.addEventListener('test', options, options);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n window.removeEventListener('test', options, options);\n }\n catch (_e) {\n // event options not supported\n }\n})();\nexport class EventPart {\n constructor(element, eventName, eventContext) {\n this.value = undefined;\n this.__pendingValue = undefined;\n this.element = element;\n this.eventName = eventName;\n this.eventContext = eventContext;\n this.__boundHandleEvent = (e) => this.handleEvent(e);\n }\n setValue(value) {\n this.__pendingValue = value;\n }\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const newListener = this.__pendingValue;\n const oldListener = this.value;\n const shouldRemoveListener = newListener == null ||\n oldListener != null &&\n (newListener.capture !== oldListener.capture ||\n newListener.once !== oldListener.once ||\n newListener.passive !== oldListener.passive);\n const shouldAddListener = newListener != null && (oldListener == null || shouldRemoveListener);\n if (shouldRemoveListener) {\n this.element.removeEventListener(this.eventName, this.__boundHandleEvent, this.__options);\n }\n if (shouldAddListener) {\n this.__options = getOptions(newListener);\n this.element.addEventListener(this.eventName, this.__boundHandleEvent, this.__options);\n }\n this.value = newListener;\n this.__pendingValue = noChange;\n }\n handleEvent(event) {\n if (typeof this.value === 'function') {\n this.value.call(this.eventContext || this.element, event);\n }\n else {\n this.value.handleEvent(event);\n }\n }\n}\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o) => o &&\n (eventOptionsSupported ?\n { capture: o.capture, passive: o.passive, once: o.once } :\n o.capture);\n//# sourceMappingURL=parts.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { AttributeCommitter, BooleanAttributePart, EventPart, NodePart, PropertyCommitter } from './parts.js';\n/**\n * Creates Parts when a template is instantiated.\n */\nexport class DefaultTemplateProcessor {\n /**\n * Create parts for an attribute-position binding, given the event, attribute\n * name, and string literals.\n *\n * @param element The element containing the binding\n * @param name The attribute name\n * @param strings The string literals. There are always at least two strings,\n * event for fully-controlled bindings with a single expression.\n */\n handleAttributeExpressions(element, name, strings, options) {\n const prefix = name[0];\n if (prefix === '.') {\n const committer = new PropertyCommitter(element, name.slice(1), strings);\n return committer.parts;\n }\n if (prefix === '@') {\n return [new EventPart(element, name.slice(1), options.eventContext)];\n }\n if (prefix === '?') {\n return [new BooleanAttributePart(element, name.slice(1), strings)];\n }\n const committer = new AttributeCommitter(element, name, strings);\n return committer.parts;\n }\n /**\n * Create parts for a text-position binding.\n * @param templateFactory\n */\n handleTextExpression(options) {\n return new NodePart(options);\n }\n}\nexport const defaultTemplateProcessor = new DefaultTemplateProcessor();\n//# sourceMappingURL=default-template-processor.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { marker, Template } from './template.js';\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nexport function templateFactory(result) {\n let templateCache = templateCaches.get(result.type);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap(),\n keyString: new Map()\n };\n templateCaches.set(result.type, templateCache);\n }\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n // If the TemplateStringsArray is new, generate a key from the strings\n // This key is shared between all templates with identical content\n const key = result.strings.join(marker);\n // Check if we already have a Template for this key\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n // If we have not seen this key before, create a new Template\n template = new Template(result, result.getTemplateElement());\n // Cache the Template for this key\n templateCache.keyString.set(key, template);\n }\n // Cache all future queries for this TemplateStringsArray\n templateCache.stringsArray.set(result.strings, template);\n return template;\n}\nexport const templateCaches = new Map();\n//# sourceMappingURL=template-factory.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nimport { removeNodes } from './dom.js';\nimport { NodePart } from './parts.js';\nimport { templateFactory } from './template-factory.js';\nexport const parts = new WeakMap();\n/**\n * Renders a template result or other value to a container.\n *\n * To update a container with new values, reevaluate the template literal and\n * call `render` with the new result.\n *\n * @param result Any value renderable by NodePart - typically a TemplateResult\n * created by evaluating a template tag like `html` or `svg`.\n * @param container A DOM parent to render to. The entire contents are either\n * replaced, or efficiently updated if the same result type was previous\n * rendered there.\n * @param options RenderOptions for the entire render tree rendered to this\n * container. Render options must *not* change between renders to the same\n * container, as those changes will not effect previously rendered DOM.\n */\nexport const render = (result, container, options) => {\n let part = parts.get(container);\n if (part === undefined) {\n removeNodes(container, container.firstChild);\n parts.set(container, part = new NodePart(Object.assign({ templateFactory }, options)));\n part.appendInto(container);\n }\n part.setValue(result);\n part.commit();\n};\n//# sourceMappingURL=render.js.map","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * - [[html]]\n * - [[svg]]\n * - [[render]]\n *\n * @packageDocumentation\n */\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport { defaultTemplateProcessor } from './lib/default-template-processor.js';\nimport { SVGTemplateResult, TemplateResult } from './lib/template-result.js';\nexport { DefaultTemplateProcessor, defaultTemplateProcessor } from './lib/default-template-processor.js';\nexport { directive, isDirective } from './lib/directive.js';\n// TODO(justinfagnani): remove line when we get NodePart moving methods\nexport { removeNodes, reparentNodes } from './lib/dom.js';\nexport { noChange, nothing } from './lib/part.js';\nexport { AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isIterable, isPrimitive, NodePart, PropertyCommitter, PropertyPart } from './lib/parts.js';\nexport { parts, render } from './lib/render.js';\nexport { templateCaches, templateFactory } from './lib/template-factory.js';\nexport { TemplateInstance } from './lib/template-instance.js';\nexport { SVGTemplateResult, TemplateResult } from './lib/template-result.js';\nexport { createMarker, isTemplatePartActive, Template } from './lib/template.js';\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\nif (typeof window !== 'undefined') {\n (window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.3.0');\n}\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nexport const html = (strings, ...values) => new TemplateResult(strings, values, 'html', defaultTemplateProcessor);\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nexport const svg = (strings, ...values) => new SVGTemplateResult(strings, values, 'svg', defaultTemplateProcessor);\n//# sourceMappingURL=lit-html.js.map","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms\n * of the Apache License 2.0. The full license can be found in the LICENSE\n * file.\n *\n */\n\nimport init, * as internal from \"../../pkg/perspective_vieux.js\";\nimport wasm_internal from \"../../pkg/perspective_vieux_bg.wasm\";\n\nexport const wasm = init(wasm_internal).then(() => {\n internal.set_panic_hook();\n return internal;\n});\n\nlet _index = undefined;\nasync function _await_index(f) {\n await new Promise(setTimeout);\n if (!_index) {\n _index = await wasm;\n }\n return f();\n}\n\n// function handle_view_errors(e) {\n// if (e.message !== \"View is not initialized\") {\n// throw e;\n// }\n// }\n\nclass PerspectiveVieuxElement extends HTMLElement {\n constructor() {\n super();\n _await_index(() => {\n this._instance = new _index.PerspectiveVieuxElement(this);\n });\n }\n\n connectedCallback() {\n _await_index(() => {\n this._instance.connected_callback();\n });\n }\n\n load(table) {\n _await_index(() => this._instance.js_load(table));\n }\n\n resize() {\n return _await_index(() => this._instance.js_resize());\n }\n\n getTable() {\n return _await_index(() => this._instance.js_get_table());\n }\n\n restore(...args) {\n return _await_index(() => this._instance.js_restore(...args));\n }\n\n delete() {\n return _await_index(() => this._instance.js_delete());\n }\n\n download(...args) {\n return _await_index(() => this._instance.js_download(...args));\n }\n\n copy(...args) {\n return _await_index(() => this._instance.js_copy(...args));\n }\n\n setThrottle(...args) {\n return _await_index(() => this._instance.js_set_throttle(...args));\n }\n\n toggleConfig(force) {\n return _await_index(() => this._instance.js_toggle_config(force));\n }\n\n get_plugin(name) {\n return _await_index(() => this._instance.js_get_plugin(name));\n }\n\n get_all_plugins() {\n return _await_index(() => this._instance.js_get_all_plugins());\n }\n\n js_set_plugin(name) {\n return _await_index(() => this._instance.js_set_plugin(name));\n }\n\n _open_expression_editor(target) {\n return _await_index(() => this._instance._js_open_expression_editor(target));\n }\n}\n\nif (document.createElement(\"perspective-vieux\").constructor === HTMLElement) {\n window.customElements.define(\"perspective-vieux\", PerspectiveVieuxElement);\n}\n\nclass PerspectiveColumnStyleElement extends HTMLElement {\n constructor() {\n super();\n }\n\n open(target, config, default_config) {\n _await_index(() => {\n if (this._instance) {\n this._instance.reset(config, default_config);\n } else {\n this._instance = new _index.PerspectiveColumnStyleElement(this, config, default_config);\n }\n\n this._instance.open(target);\n });\n }\n}\n\nif (document.createElement(\"perspective-column-style\").constructor === HTMLElement) {\n window.customElements.define(\"perspective-column-style\", PerspectiveColumnStyleElement);\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {wasm} from \"../../dist/esm/@finos/perspective-vieux\";\n\n/**\n *\n * @param {string} name a tag name for a Custom Element perspective plugin.\n * @returns\n */\nglobal.registerPlugin = function registerPlugin(name) {\n return wasm.then(wasm => wasm.register_plugin(name));\n};\n\nif (global.__perspective_plugins__) {\n global.__perspective_plugins__.forEach(([name, plugin]) => global.registerPlugin(name, plugin));\n}\n","/*\n\nForked from https://github.com/timruffles/mobile-drag-drop/ v2.3.0-rc.2\n\nCopyright (c) 2013 Tim Ruffles\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nconst CLASS_PREFIX = \"dnd-poly-\";\nconst CLASS_DRAG_IMAGE = CLASS_PREFIX + \"drag-image\";\nconst CLASS_DRAG_IMAGE_SNAPBACK = CLASS_PREFIX + \"snapback\";\nconst CLASS_DRAG_OPERATION_ICON = CLASS_PREFIX + \"icon\";\nconst EVENT_PREFIX = \"dnd-poly-\";\nconst EVENT_DRAG_DRAGSTART_PENDING = EVENT_PREFIX + \"dragstart-pending\";\nconst EVENT_DRAG_DRAGSTART_CANCEL = EVENT_PREFIX + \"dragstart-cancel\";\nconst ALLOWED_EFFECTS = [\"none\", \"copy\", \"copyLink\", \"copyMove\", \"link\", \"linkMove\", \"move\", \"all\"];\nconst DROP_EFFECTS = [\"none\", \"copy\", \"move\", \"link\"];\n\nfunction detectFeatures() {\n const features = {\n dragEvents: \"ondragstart\" in document.documentElement,\n draggable: \"draggable\" in document.documentElement,\n userAgentSupportingNativeDnD: undefined\n };\n const isBlinkEngine = !!window.chrome || /chrome/i.test(navigator.userAgent);\n features.userAgentSupportingNativeDnD = !(/iPad|iPhone|iPod|Android/.test(navigator.userAgent) || (isBlinkEngine && \"ontouchstart\" in document.documentElement));\n return features;\n}\nfunction supportsPassiveEventListener() {\n let supportsPassiveEventListeners = false;\n try {\n const opts = Object.defineProperty({}, \"passive\", {\n get: function() {\n supportsPassiveEventListeners = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n } catch (e) {}\n return supportsPassiveEventListeners;\n}\n\nconst supportsPassive = supportsPassiveEventListener();\nfunction isDOMElement(object) {\n return object && object.tagName;\n}\nfunction addDocumentListener(ev, handler, passive) {\n if (passive === void 0) {\n passive = true;\n }\n document.addEventListener(ev, handler, supportsPassive ? {passive: passive} : false);\n}\nfunction removeDocumentListener(ev, handler) {\n document.removeEventListener(ev, handler);\n}\nfunction onEvt(el, event, handler, capture) {\n if (capture === void 0) {\n capture = false;\n }\n const options = supportsPassive ? {passive: true, capture: capture} : capture;\n el.addEventListener(event, handler, options);\n return {\n off: function() {\n el.removeEventListener(event, handler, options);\n }\n };\n}\nfunction prepareNodeCopyAsDragImage(srcNode, dstNode) {\n if (srcNode.nodeType === 1) {\n const cs = getComputedStyle(srcNode);\n for (let i = 0; i < cs.length; i++) {\n const csName = cs[i];\n dstNode.style.setProperty(csName, cs.getPropertyValue(csName), cs.getPropertyPriority(csName));\n }\n dstNode.style.pointerEvents = \"none\";\n dstNode.removeAttribute(\"id\");\n dstNode.removeAttribute(\"class\");\n dstNode.removeAttribute(\"draggable\");\n if (dstNode.nodeName === \"CANVAS\") {\n const canvasSrc = srcNode;\n const canvasDst = dstNode;\n const canvasSrcImgData = canvasSrc.getContext(\"2d\").getImageData(0, 0, canvasSrc.width, canvasSrc.height);\n canvasDst.getContext(\"2d\").putImageData(canvasSrcImgData, 0, 0);\n }\n }\n if (srcNode.hasChildNodes()) {\n for (let i = 0; i < srcNode.childNodes.length; i++) {\n prepareNodeCopyAsDragImage(srcNode.childNodes[i], dstNode.childNodes[i]);\n }\n }\n}\nfunction createDragImage(sourceNode) {\n const dragImage = sourceNode.cloneNode(true);\n prepareNodeCopyAsDragImage(sourceNode, dragImage);\n return dragImage;\n}\nfunction average(array) {\n if (array.length === 0) {\n return 0;\n }\n return (\n array.reduce(function(s, v) {\n return v + s;\n }, 0) / array.length\n );\n}\nfunction isTouchIdentifierContainedInTouchEvent(touchEvent, touchIdentifier) {\n for (let i = 0; i < touchEvent.changedTouches.length; i++) {\n const touch = touchEvent.changedTouches[i];\n if (touch.identifier === touchIdentifier) {\n return true;\n }\n }\n return false;\n}\nfunction updateCentroidCoordinatesOfTouchesIn(coordinateProp, event, outPoint) {\n const pageXs = [],\n pageYs = [];\n for (let i = 0; i < event.touches.length; i++) {\n const touch = event.touches[i];\n pageXs.push(touch[coordinateProp + \"X\"]);\n pageYs.push(touch[coordinateProp + \"Y\"]);\n }\n outPoint.x = average(pageXs);\n outPoint.y = average(pageYs);\n}\nconst TRANSFORM_CSS_VENDOR_PREFIXES = [\"\", \"-webkit-\"];\nfunction extractTransformStyles(sourceNode) {\n return TRANSFORM_CSS_VENDOR_PREFIXES.map(function(prefix) {\n const transform = sourceNode.style[prefix + \"transform\"];\n if (!transform || transform === \"none\") {\n return \"\";\n }\n return transform.replace(/translate\\(\\D*\\d+[^,]*,\\D*\\d+[^,]*\\)\\s*/g, \"\");\n });\n}\nfunction translateElementToPoint(element, pnt, originalTransforms, offset, centerOnCoordinates) {\n if (centerOnCoordinates === void 0) {\n centerOnCoordinates = true;\n }\n let x = pnt.x,\n y = pnt.y;\n if (offset) {\n x += offset.x;\n y += offset.y;\n }\n if (centerOnCoordinates) {\n x -= parseInt(element.offsetWidth, 10) / 2;\n y -= parseInt(element.offsetHeight, 10) / 2;\n }\n const translate = \"translate3d(\" + x + \"px,\" + y + \"px, 0)\";\n for (let i = 0; i < TRANSFORM_CSS_VENDOR_PREFIXES.length; i++) {\n const transformProp = TRANSFORM_CSS_VENDOR_PREFIXES[i] + \"transform\";\n element.style[transformProp] = translate + \" \" + originalTransforms[i];\n }\n}\nfunction applyDragImageSnapback(sourceEl, dragImage, dragImageTransforms, transitionEndCb) {\n const cs = getComputedStyle(sourceEl);\n if (cs.visibility === \"hidden\" || cs.display === \"none\") {\n console.log(\"dnd-poly: source node is not visible. skipping snapback transition.\");\n transitionEndCb();\n return;\n }\n dragImage.classList.add(CLASS_DRAG_IMAGE_SNAPBACK);\n const csDragImage = getComputedStyle(dragImage);\n const durationInS = parseFloat(csDragImage.transitionDuration);\n if (isNaN(durationInS) || durationInS === 0) {\n console.log(\"dnd-poly: no transition used - skipping snapback\");\n transitionEndCb();\n return;\n }\n console.log(\"dnd-poly: starting dragimage snap back\");\n const rect = sourceEl.getBoundingClientRect();\n const pnt = {\n x: rect.left,\n y: rect.top\n };\n pnt.x += document.body.scrollLeft || document.documentElement.scrollLeft;\n pnt.y += document.body.scrollTop || document.documentElement.scrollTop;\n pnt.x -= parseInt(cs.marginLeft, 10);\n pnt.y -= parseInt(cs.marginTop, 10);\n const delayInS = parseFloat(csDragImage.transitionDelay);\n const durationInMs = Math.round((durationInS + delayInS) * 1000);\n translateElementToPoint(dragImage, pnt, dragImageTransforms, undefined, false);\n setTimeout(transitionEndCb, durationInMs);\n}\n\nconst DataTransfer = (function() {\n function DataTransfer(_dataStore, _setDragImageHandler) {\n this._dataStore = _dataStore;\n this._setDragImageHandler = _setDragImageHandler;\n this._dropEffect = DROP_EFFECTS[0];\n }\n Object.defineProperty(DataTransfer.prototype, \"dropEffect\", {\n get: function() {\n return this._dropEffect;\n },\n set: function(value) {\n if (this._dataStore.mode !== 0 && ALLOWED_EFFECTS.indexOf(value) > -1) {\n this._dropEffect = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTransfer.prototype, \"types\", {\n get: function() {\n if (this._dataStore.mode !== 0) {\n return Object.freeze(this._dataStore.types);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTransfer.prototype, \"effectAllowed\", {\n get: function() {\n return this._dataStore.effectAllowed;\n },\n set: function(value) {\n if (this._dataStore.mode === 2 && ALLOWED_EFFECTS.indexOf(value) > -1) {\n this._dataStore.effectAllowed = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n DataTransfer.prototype.setData = function(type, data) {\n if (this._dataStore.mode === 2) {\n if (type.indexOf(\" \") > -1) {\n throw new Error(\"illegal arg: type contains space\");\n }\n this._dataStore.data[type] = data;\n if (this._dataStore.types.indexOf(type) === -1) {\n this._dataStore.types.push(type);\n }\n }\n };\n DataTransfer.prototype.getData = function(type) {\n if (this._dataStore.mode === 1 || this._dataStore.mode === 2) {\n return this._dataStore.data[type] || \"\";\n }\n };\n DataTransfer.prototype.clearData = function(format) {\n if (this._dataStore.mode === 2) {\n if (format && this._dataStore.data[format]) {\n delete this._dataStore.data[format];\n const index = this._dataStore.types.indexOf(format);\n if (index > -1) {\n this._dataStore.types.splice(index, 1);\n }\n return;\n }\n this._dataStore.data = {};\n this._dataStore.types = [];\n }\n };\n DataTransfer.prototype.setDragImage = function(image, x, y) {\n if (this._dataStore.mode === 2) {\n this._setDragImageHandler(image, x, y);\n }\n };\n return DataTransfer;\n})();\n\nfunction tryFindDraggableTarget(event) {\n let el = event.target;\n do {\n if (el.draggable === false) {\n continue;\n }\n if (el.draggable === true) {\n return el;\n }\n if (el.getAttribute && el.getAttribute(\"draggable\") === \"true\") {\n return el;\n }\n } while ((el = el.parentNode) && el !== document.body);\n}\nfunction determineDropEffect(effectAllowed, sourceNode) {\n if (!effectAllowed) {\n if (sourceNode.nodeType === 3 && sourceNode.tagName === \"A\") {\n return DROP_EFFECTS[3];\n }\n return DROP_EFFECTS[1];\n }\n if (effectAllowed === ALLOWED_EFFECTS[0]) {\n return DROP_EFFECTS[0];\n }\n if (effectAllowed.indexOf(ALLOWED_EFFECTS[1]) === 0 || effectAllowed === ALLOWED_EFFECTS[7]) {\n return DROP_EFFECTS[1];\n }\n if (effectAllowed.indexOf(ALLOWED_EFFECTS[4]) === 0) {\n return DROP_EFFECTS[3];\n }\n if (effectAllowed === ALLOWED_EFFECTS[6]) {\n return DROP_EFFECTS[2];\n }\n return DROP_EFFECTS[1];\n}\nfunction createDragEventFromTouch(targetElement, e, type, cancelable, window, dataTransfer, relatedTarget) {\n if (relatedTarget === void 0) {\n relatedTarget = null;\n }\n const touch = e.changedTouches[0];\n const dndEvent = new Event(type, {\n bubbles: true,\n cancelable: cancelable\n });\n dndEvent.dataTransfer = dataTransfer;\n dndEvent.relatedTarget = relatedTarget;\n dndEvent.screenX = touch.screenX;\n dndEvent.screenY = touch.screenY;\n dndEvent.clientX = touch.clientX;\n dndEvent.clientY = touch.clientY;\n dndEvent.pageX = touch.pageX;\n dndEvent.pageY = touch.pageY;\n const targetRect = targetElement.getBoundingClientRect();\n dndEvent.offsetX = dndEvent.clientX - targetRect.left;\n dndEvent.offsetY = dndEvent.clientY - targetRect.top;\n return dndEvent;\n}\nfunction dispatchDragEvent(dragEvent, targetElement, touchEvent, dataStore, dataTransfer, cancelable, relatedTarget) {\n if (cancelable === void 0) {\n cancelable = true;\n }\n if (relatedTarget === void 0) {\n relatedTarget = null;\n }\n console.log(\"dnd-poly: dispatching \" + dragEvent);\n const leaveEvt = createDragEventFromTouch(targetElement, touchEvent, dragEvent, cancelable, document.defaultView, dataTransfer, relatedTarget);\n const cancelled = !targetElement.dispatchEvent(leaveEvt);\n dataStore.mode = 0;\n return cancelled;\n}\nfunction determineDragOperation(effectAllowed, dropEffect) {\n if (!effectAllowed || effectAllowed === ALLOWED_EFFECTS[7]) {\n return dropEffect;\n }\n if (dropEffect === DROP_EFFECTS[1]) {\n if (effectAllowed.indexOf(DROP_EFFECTS[1]) === 0) {\n return DROP_EFFECTS[1];\n }\n } else if (dropEffect === DROP_EFFECTS[3]) {\n if (effectAllowed.indexOf(DROP_EFFECTS[3]) === 0 || effectAllowed.indexOf(\"Link\") > -1) {\n return DROP_EFFECTS[3];\n }\n } else if (dropEffect === DROP_EFFECTS[2]) {\n if (effectAllowed.indexOf(DROP_EFFECTS[2]) === 0 || effectAllowed.indexOf(\"Move\") > -1) {\n return DROP_EFFECTS[2];\n }\n }\n return DROP_EFFECTS[0];\n}\n\nconst DragOperationController = (function() {\n function DragOperationController(_initialEvent, _config, _sourceNode, _dragOperationEndedCb) {\n this._initialEvent = _initialEvent;\n this._config = _config;\n this._sourceNode = _sourceNode;\n this._dragOperationEndedCb = _dragOperationEndedCb;\n this._dragOperationState = 0;\n this._immediateUserSelection = null;\n this._currentDropTarget = null;\n console.log(\"dnd-poly: setting up potential drag operation..\");\n this._lastTouchEvent = _initialEvent;\n this._initialTouch = _initialEvent.changedTouches[0];\n this._touchMoveHandler = this._onTouchMove.bind(this);\n this._touchEndOrCancelHandler = this._onTouchEndOrCancel.bind(this);\n addDocumentListener(\"touchmove\", this._touchMoveHandler, false);\n addDocumentListener(\"touchend\", this._touchEndOrCancelHandler, false);\n addDocumentListener(\"touchcancel\", this._touchEndOrCancelHandler, false);\n }\n DragOperationController.prototype._setup = function() {\n const _this = this;\n console.log(\"dnd-poly: starting drag and drop operation\");\n this._dragOperationState = 1;\n this._currentDragOperation = DROP_EFFECTS[0];\n this._dragDataStore = {\n data: {},\n effectAllowed: undefined,\n mode: 3,\n types: []\n };\n this._currentHotspotCoordinates = {\n x: null,\n y: null\n };\n this._dragImagePageCoordinates = {\n x: null,\n y: null\n };\n let dragImageSrc = this._sourceNode;\n this._dataTransfer = new DataTransfer(this._dragDataStore, function(element, x, y) {\n dragImageSrc = element;\n if (typeof x === \"number\" || typeof y === \"number\") {\n _this._dragImageOffset = {\n x: x || 0,\n y: y || 0\n };\n }\n });\n this._dragDataStore.mode = 2;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n if (dispatchDragEvent(\"dragstart\", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer)) {\n console.log(\"dnd-poly: dragstart cancelled\");\n this._dragOperationState = 3;\n this._cleanup();\n return false;\n }\n updateCentroidCoordinatesOfTouchesIn(\"page\", this._lastTouchEvent, this._dragImagePageCoordinates);\n const dragImage = this._config.dragImageSetup(dragImageSrc);\n this._dragImageTransforms = extractTransformStyles(dragImage);\n dragImage.style.position = \"absolute\";\n dragImage.style.left = \"0px\";\n dragImage.style.top = \"0px\";\n dragImage.style.zIndex = \"999999\";\n dragImage.classList.add(CLASS_DRAG_IMAGE);\n dragImage.classList.add(CLASS_DRAG_OPERATION_ICON);\n this._dragImage = dragImage;\n if (!this._dragImageOffset) {\n if (this._config.dragImageOffset) {\n this._dragImageOffset = {\n x: this._config.dragImageOffset.x,\n y: this._config.dragImageOffset.y\n };\n } else if (this._config.dragImageCenterOnTouch) {\n const cs = getComputedStyle(dragImageSrc);\n this._dragImageOffset = {\n x: 0 - parseInt(cs.marginLeft, 10),\n y: 0 - parseInt(cs.marginTop, 10)\n };\n } else {\n const targetRect = dragImageSrc.getBoundingClientRect();\n const cs = getComputedStyle(dragImageSrc);\n this._dragImageOffset = {\n x: targetRect.left - this._initialTouch.clientX - parseInt(cs.marginLeft, 10) + targetRect.width / 2,\n y: targetRect.top - this._initialTouch.clientY - parseInt(cs.marginTop, 10) + targetRect.height / 2\n };\n }\n }\n translateElementToPoint(this._dragImage, this._dragImagePageCoordinates, this._dragImageTransforms, this._dragImageOffset, this._config.dragImageCenterOnTouch);\n document.body.appendChild(this._dragImage);\n this._iterationIntervalId = window.setInterval(function() {\n if (_this._iterationLock) {\n console.log(\"dnd-poly: iteration skipped because previous iteration hast not yet finished.\");\n return;\n }\n _this._iterationLock = true;\n _this._dragAndDropProcessModelIteration();\n _this._iterationLock = false;\n }, this._config.iterationInterval);\n return true;\n };\n DragOperationController.prototype._cleanup = function() {\n console.log(\"dnd-poly: cleanup\");\n if (this._iterationIntervalId) {\n clearInterval(this._iterationIntervalId);\n this._iterationIntervalId = null;\n }\n removeDocumentListener(\"touchmove\", this._touchMoveHandler);\n removeDocumentListener(\"touchend\", this._touchEndOrCancelHandler);\n removeDocumentListener(\"touchcancel\", this._touchEndOrCancelHandler);\n if (this._dragImage) {\n this._dragImage.parentNode.removeChild(this._dragImage);\n this._dragImage = null;\n }\n this._dragOperationEndedCb(this._config, this._lastTouchEvent, this._dragOperationState);\n };\n DragOperationController.prototype._onTouchMove = function(event) {\n const _this = this;\n if (isTouchIdentifierContainedInTouchEvent(event, this._initialTouch.identifier) === false) {\n return;\n }\n this._lastTouchEvent = event;\n if (this._dragOperationState === 0) {\n let startDrag = void 0;\n if (this._config.dragStartConditionOverride) {\n try {\n startDrag = this._config.dragStartConditionOverride(event);\n } catch (e) {\n console.error(\"dnd-poly: error in dragStartConditionOverride hook: \" + e);\n startDrag = false;\n }\n } else {\n startDrag = event.touches.length === 1;\n }\n if (!startDrag) {\n this._cleanup();\n return;\n }\n if (this._setup() === true) {\n this._initialEvent.preventDefault();\n event.preventDefault();\n }\n return;\n }\n console.log(\"dnd-poly: moving draggable..\");\n event.preventDefault();\n updateCentroidCoordinatesOfTouchesIn(\"client\", event, this._currentHotspotCoordinates);\n updateCentroidCoordinatesOfTouchesIn(\"page\", event, this._dragImagePageCoordinates);\n if (this._config.dragImageTranslateOverride) {\n try {\n let handledDragImageTranslate_1 = false;\n this._config.dragImageTranslateOverride(\n event,\n {\n x: this._currentHotspotCoordinates.x,\n y: this._currentHotspotCoordinates.y\n },\n this._immediateUserSelection,\n function(offsetX, offsetY) {\n if (!_this._dragImage) {\n return;\n }\n handledDragImageTranslate_1 = true;\n _this._currentHotspotCoordinates.x += offsetX;\n _this._currentHotspotCoordinates.y += offsetY;\n _this._dragImagePageCoordinates.x += offsetX;\n _this._dragImagePageCoordinates.y += offsetY;\n translateElementToPoint(_this._dragImage, _this._dragImagePageCoordinates, _this._dragImageTransforms, _this._dragImageOffset, _this._config.dragImageCenterOnTouch);\n }\n );\n if (handledDragImageTranslate_1) {\n return;\n }\n } catch (e) {\n console.log(\"dnd-poly: error in dragImageTranslateOverride hook: \" + e);\n }\n }\n translateElementToPoint(this._dragImage, this._dragImagePageCoordinates, this._dragImageTransforms, this._dragImageOffset, this._config.dragImageCenterOnTouch);\n };\n DragOperationController.prototype._onTouchEndOrCancel = function(event) {\n if (isTouchIdentifierContainedInTouchEvent(event, this._initialTouch.identifier) === false) {\n return;\n }\n if (this._config.dragImageTranslateOverride) {\n try {\n this._config.dragImageTranslateOverride(undefined, undefined, undefined, function() {});\n } catch (e) {\n console.log(\"dnd-poly: error in dragImageTranslateOverride hook: \" + e);\n }\n }\n if (this._dragOperationState === 0) {\n this._cleanup();\n return;\n }\n event.preventDefault();\n this._dragOperationState = event.type === \"touchcancel\" ? 3 : 2;\n };\n DragOperationController.prototype._dragAndDropProcessModelIteration = function() {\n const _this = this;\n const previousDragOperation = this._currentDragOperation;\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n const dragCancelled = dispatchDragEvent(\"drag\", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer);\n if (dragCancelled) {\n console.log(\"dnd-poly: drag event cancelled.\");\n this._currentDragOperation = DROP_EFFECTS[0];\n }\n if (dragCancelled || this._dragOperationState === 2 || this._dragOperationState === 3) {\n const dragFailed = this._dragOperationEnded(this._dragOperationState);\n if (dragFailed) {\n applyDragImageSnapback(this._sourceNode, this._dragImage, this._dragImageTransforms, function() {\n _this._finishDragOperation();\n });\n return;\n }\n this._finishDragOperation();\n return;\n }\n const newUserSelection = this._config.elementFromPoint(this._currentHotspotCoordinates.x, this._currentHotspotCoordinates.y);\n console.log(\"dnd-poly: new immediate user selection is: \" + newUserSelection);\n const previousTargetElement = this._currentDropTarget;\n if (newUserSelection !== this._immediateUserSelection && newUserSelection !== this._currentDropTarget) {\n this._immediateUserSelection = newUserSelection;\n if (this._currentDropTarget !== null) {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n dispatchDragEvent(\"dragexit\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);\n }\n if (this._immediateUserSelection === null) {\n this._currentDropTarget = this._immediateUserSelection;\n console.log(\"dnd-poly: current drop target changed to null\");\n } else {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = determineDropEffect(this._dragDataStore.effectAllowed, this._sourceNode);\n if (dispatchDragEvent(\"dragenter\", this._immediateUserSelection, this._lastTouchEvent, this._dragDataStore, this._dataTransfer)) {\n console.log(\"dnd-poly: dragenter default prevented\");\n this._currentDropTarget = this._immediateUserSelection;\n this._currentDragOperation = determineDragOperation(this._dataTransfer.effectAllowed, this._dataTransfer.dropEffect);\n } else {\n if (this._immediateUserSelection !== document.body) {\n this._currentDropTarget = document.body;\n }\n }\n }\n }\n if (previousTargetElement !== this._currentDropTarget && isDOMElement(previousTargetElement)) {\n console.log(\"dnd-poly: current drop target changed.\");\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n dispatchDragEvent(\"dragleave\", previousTargetElement, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false, this._currentDropTarget);\n }\n if (isDOMElement(this._currentDropTarget)) {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = determineDropEffect(this._dragDataStore.effectAllowed, this._sourceNode);\n if (dispatchDragEvent(\"dragover\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer) === false) {\n console.log(\"dnd-poly: dragover not prevented on possible drop-target.\");\n this._currentDragOperation = DROP_EFFECTS[0];\n } else {\n console.log(\"dnd-poly: dragover prevented.\");\n this._currentDragOperation = determineDragOperation(this._dataTransfer.effectAllowed, this._dataTransfer.dropEffect);\n }\n }\n console.log(\"dnd-poly: d'n'd iteration ended. current drag operation: \" + this._currentDragOperation);\n if (previousDragOperation !== this._currentDragOperation) {\n this._dragImage.classList.remove(CLASS_PREFIX + previousDragOperation);\n }\n const currentDragOperationClass = CLASS_PREFIX + this._currentDragOperation;\n this._dragImage.classList.add(currentDragOperationClass);\n };\n DragOperationController.prototype._dragOperationEnded = function(state) {\n console.log(\"dnd-poly: drag operation end detected with \" + this._currentDragOperation);\n const dragFailed = this._currentDragOperation === DROP_EFFECTS[0] || this._currentDropTarget === null || state === 3;\n if (dragFailed) {\n if (isDOMElement(this._currentDropTarget)) {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n dispatchDragEvent(\"dragleave\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);\n }\n } else {\n if (isDOMElement(this._currentDropTarget)) {\n this._dragDataStore.mode = 1;\n this._dataTransfer.dropEffect = this._currentDragOperation;\n if (dispatchDragEvent(\"drop\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer) === true) {\n this._currentDragOperation = this._dataTransfer.dropEffect;\n } else {\n this._currentDragOperation = DROP_EFFECTS[0];\n }\n }\n }\n return dragFailed;\n };\n DragOperationController.prototype._finishDragOperation = function() {\n console.log(\"dnd-poly: dragimage snap back transition ended\");\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = this._currentDragOperation;\n dispatchDragEvent(\"dragend\", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);\n this._dragOperationState = 2;\n this._cleanup();\n };\n return DragOperationController;\n})();\n\nconst config = {\n iterationInterval: 150,\n tryFindDraggableTarget: tryFindDraggableTarget,\n dragImageSetup: createDragImage,\n elementFromPoint: function(x, y) {\n return document.elementFromPoint(x, y);\n }\n};\nlet activeDragOperation;\nfunction onTouchstart(e, composePath) {\n console.log(\"dnd-poly: global touchstart\");\n if (activeDragOperation) {\n console.log(\"dnd-poly: drag operation already active\");\n return;\n }\n const dragTarget = config.tryFindDraggableTarget(e, composePath);\n if (!dragTarget) {\n console.log(\"dnd-poly: no draggable at touchstart coordinates\");\n return;\n }\n try {\n activeDragOperation = new DragOperationController(e, config, dragTarget, dragOperationEnded);\n } catch (err) {\n dragOperationEnded(config, e, 3);\n throw err;\n }\n}\nfunction onDelayTouchstart(evt) {\n console.log(\"dnd-poly: setup delayed dragstart..\");\n const el = evt.target;\n const composePath = evt.composedPath();\n const heldItem = function() {\n console.log(\"dnd-poly: starting delayed drag..\");\n end.off();\n cancel.off();\n move.off();\n scroll.off();\n onTouchstart(evt, composePath);\n };\n const onReleasedItem = function(event) {\n console.log(\"dnd-poly: aborting delayed drag because of \" + event.type);\n end.off();\n cancel.off();\n move.off();\n scroll.off();\n if (el) {\n el.dispatchEvent(new CustomEvent(EVENT_DRAG_DRAGSTART_CANCEL, {bubbles: true, cancelable: true}));\n }\n clearTimeout(timer);\n };\n if (el) {\n el.dispatchEvent(new CustomEvent(EVENT_DRAG_DRAGSTART_PENDING, {bubbles: true, cancelable: true}));\n }\n const timer = window.setTimeout(heldItem, config.holdToDrag);\n const end = onEvt(el, \"touchend\", onReleasedItem);\n const cancel = onEvt(el, \"touchcancel\", onReleasedItem);\n const move = onEvt(el, \"touchmove\", onReleasedItem);\n const scroll = onEvt(window, \"scroll\", onReleasedItem, true);\n}\n\nfunction dragOperationEnded(_config, event, state) {\n if (state === 0) {\n console.log(\"dnd-poly: Drag never started. Last event was \" + event.type);\n if (_config.defaultActionOverride) {\n try {\n _config.defaultActionOverride(event);\n if (event.defaultPrevented) {\n console.log(\"dnd-poly: defaultActionOverride has taken care of triggering the default action. preventing default on original event\");\n }\n } catch (e) {\n console.log(\"dnd-poly: error in defaultActionOverride: \" + e);\n }\n }\n }\n activeDragOperation = null;\n}\n\nfunction polyfill(override) {\n if (override) {\n Object.keys(override).forEach(function(key) {\n config[key] = override[key];\n });\n }\n if (!config.forceApply) {\n const detectedFeatures = detectFeatures();\n if (detectedFeatures.userAgentSupportingNativeDnD && detectedFeatures.draggable && detectedFeatures.dragEvents) {\n return false;\n }\n }\n console.log(\"dnd-poly: Applying mobile drag and drop polyfill.\");\n if (config.holdToDrag) {\n console.log(\"dnd-poly: holdToDrag set to \" + config.holdToDrag);\n addDocumentListener(\"touchstart\", onDelayTouchstart, false);\n } else {\n addDocumentListener(\"touchstart\", onTouchstart, false);\n }\n return true;\n}\n\nfunction tryFindDraggableTarget_override(event, composePath) {\n const cp = composePath || event.composedPath();\n for (let o of cp) {\n let el = o;\n do {\n if (el.draggable === false) {\n continue;\n }\n if (el.getAttribute && el.getAttribute(\"draggable\") === \"true\") {\n return el;\n }\n } while ((el = el.parentNode) && el !== document.body);\n }\n}\n\nfunction elementFromPoint(x, y) {\n for (let o of this._path) {\n if (o.elementFromPoint) {\n let el = o.elementFromPoint(x, y);\n if (el) {\n while (el.shadowRoot) {\n el = el.shadowRoot.elementFromPoint(x, y);\n }\n return el;\n }\n }\n }\n}\n\nfunction dragStartConditionOverride(event) {\n this._path = event.composedPath();\n return true;\n}\n\npolyfill({\n tryFindDraggableTarget: tryFindDraggableTarget_override,\n elementFromPoint: elementFromPoint,\n dragStartConditionOverride: dragStartConditionOverride,\n holdToDrag: 500\n});\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\n/**\n * Instantiate a Template DOM object from an HTML text string.\n *\n * Params\n * ------\n * template : An HTML string representing a template.\n *\n * Returns\n * -------\n * A Template DOM object.\n */\n\nfunction importTemplate(template) {\n const div = document.createElement(\"div\");\n div.innerHTML = template;\n return Array.prototype.slice.call(div.children)[0];\n}\n\nfunction setTemplateContent(template) {\n // return early in browsers that have template tag support\n if (template.content) {\n return;\n }\n template.content = document.createDocumentFragment();\n let child;\n while ((child = template.firstChild)) {\n Node.prototype.appendChild.call(template.content, child);\n }\n}\n\n/**\n * A simple tool for creating Web Components v0.\n *\n * Params\n * ------\n * template : An HTML string representing a template. Should have an 'id'\n * attribute which will become the new Web Component's tag name.\n * proto : The new Web Component's prototype object, as per spec.\n */\nexport function registerElement(templateString, styleString, proto) {\n const template = importTemplate(templateString);\n setTemplateContent(template);\n if (styleString) {\n template.innerHTML = `<style>${styleString.toString()}</style>` + template.innerHTML;\n }\n template.innerHTML = `<style id=\"psp_styles\" scope=\"${template.getAttribute(\"id\")}\">test{}</style>` + template.innerHTML;\n\n let is_locked = 0;\n const _perspective_element = class extends proto {\n attributeChangedCallback(name, old, value) {\n if (is_locked > 0) {\n return;\n }\n\n if (value === null) {\n value = \"null\";\n }\n\n if (name[0] !== \"_\" && old != value && !!Object.getOwnPropertyDescriptor(proto.prototype, name).set) {\n this[name] = value;\n }\n }\n\n _setAttributeSafe(key, val) {\n is_locked++;\n try {\n this.setAttribute(key, val);\n } finally {\n is_locked--;\n }\n }\n\n connectedCallback() {\n if (this._initialized) {\n return;\n }\n this._initializing = true;\n var node = document.importNode(template.content, true);\n this.attachShadow({mode: \"open\"});\n if (this._vieux) {\n this._vieux.appendChild(node);\n node = this._vieux;\n }\n\n this.shadowRoot.appendChild(node);\n\n if (super.connectedCallback) {\n super.connectedCallback();\n }\n\n // Call all attributes bound to setters on the proto\n for (let key of Object.getOwnPropertyNames(proto.prototype)) {\n if (key !== \"connectedCallback\") {\n if (this.hasAttribute(key) && key[0] !== \"_\" && !!Object.getOwnPropertyDescriptor(proto.prototype, key).set) {\n this[key] = this.getAttribute(key);\n }\n }\n }\n this._initializing = false;\n this._initialized = true;\n }\n\n static get observedAttributes() {\n return Object.getOwnPropertyNames(proto.prototype);\n }\n };\n\n for (let key of Object.getOwnPropertyNames(proto.prototype)) {\n let descriptor = Object.getOwnPropertyDescriptor(proto.prototype, key);\n if (descriptor && descriptor.set) {\n let old = descriptor.set;\n descriptor.set = function(val) {\n if (!this.hasAttribute(key) || this.getAttribute(key) !== val) {\n this.setAttribute(key, val);\n return;\n }\n if (!this._initializing && !this._initialized) {\n return;\n }\n old.call(this, val);\n };\n Object.defineProperty(proto.prototype, key, descriptor);\n }\n }\n\n let name = template.getAttribute(\"id\");\n console.log(`Registered ${name}`);\n\n window.customElements.define(name, _perspective_element);\n}\n\nexport function bindTemplate(template, ...styleStrings) {\n const style = styleStrings.map(x => x.toString()).join(\"\\n\");\n return function(cls) {\n return registerElement(template, {toString: () => style}, cls);\n };\n}\n\n/**\n * A decorator for declaring a setter property of an HTMLElement descendent\n * class as serialized JSON. Handles converting these types before invoking\n * the underlying function/\n *\n * @param {object} _default the default value to supply the setter when\n * undefined, removed or invalid.\n */\nfunction _attribute(_default) {\n return function(cls, name, desc) {\n const old_set = desc.value;\n desc.set = function(x) {\n let attr = this.getAttribute(name);\n try {\n if (x === null || x === undefined || x === \"\") {\n x = _default();\n }\n if (typeof x !== \"string\") {\n x = JSON.stringify(x);\n }\n if (x !== attr) {\n attr = x;\n }\n attr = JSON.parse(attr);\n } catch (e) {\n console.warn(`Invalid value for attribute \"${name}\": ${x}`);\n attr = _default();\n }\n old_set.call(this, attr);\n };\n desc.get = function() {\n if (this.hasAttribute(name)) {\n return JSON.parse(this.getAttribute(name));\n } else {\n return _default();\n }\n };\n delete desc[\"value\"];\n delete desc[\"writable\"];\n return desc;\n };\n}\n\n/**\n * Just like `setTimeout` except it returns a promise which resolves after the\n * callback has (also resolved).\n *\n * @param {func} cb\n * @param {*} timeout\n */\nexport async function setPromise(cb = async () => {}, timeout = 0) {\n await new Promise(x => setTimeout(x, timeout));\n return await cb();\n}\n\nexport const invertPromise = () => {\n let _resolve;\n const promise = new Promise(resolve => {\n _resolve = resolve;\n });\n\n promise.resolve = _resolve;\n return promise;\n};\n\nexport function throttlePromise(target, property, descriptor, clear = false) {\n if (typeof target === \"boolean\") {\n return function(target, property, descriptor) {\n return throttlePromise(target, property, descriptor, true);\n };\n }\n\n // Each call to `throttlePromise` has a unique `lock`\n const lock = Symbol(\"private lock\");\n const _super = descriptor.value;\n\n async function throttleOnce(id) {\n if (id !== this[lock].gen) {\n // This invocation got de-duped with a later one, but it will\n // wake up first, so if there is not a lock acquired here, push\n // it to the back of the event queue.\n if (!this[lock].lock) {\n await new Promise(requestAnimationFrame);\n }\n\n // Now await the currently-processing invocation (which\n // occurred after than this one) and return.\n await this[lock].lock;\n return true;\n }\n }\n\n // Wrap the underlying function\n descriptor.value = async function(...args) {\n // Initialize the lock for this Object instance, if it has never been\n // initialized.\n this[lock] = this[lock] || {gen: 0};\n\n // Assign this invocation a unique ID.\n let id = ++this[lock].gen;\n\n if (clear) {\n await new Promise(requestAnimationFrame);\n }\n\n // If the `lock` property is defined, a previous invocation is still\n // processing.\n if (this[lock].lock) {\n // `await` the previous call; afterwards, the drawn state will be\n // updated but we need to draw again to incorporate this\n // invocation's state changes.\n await this[lock].lock;\n\n // We only want to execute the _last_ invocation, since each call\n // precludes the previous ones if they are still queue-ed.\n if (await throttleOnce.call(this, id)) {\n return;\n }\n } else if (clear) {\n // Even if the lock is clear, we need to debounce the queue-ed.\n const debounced = await throttleOnce.call(this, id);\n if (debounced) {\n return;\n }\n }\n\n // This invocation has made it to the render process, so \"acquire\" the\n // lock.\n this[lock].lock = invertPromise();\n\n // Call the decorated function itself\n let result;\n try {\n result = await _super.call(this, ...args);\n } finally {\n // Errors can leave promises which depend on this behavior\n // dangling.\n const l = this[lock].lock;\n delete this[lock][\"lock\"];\n\n // If this invocation is still the latest, clear the attribute\n // state.\n // TODO this is likely not he behavior we want for this event ..\n if (id === this[lock].gen && clear) {\n this.removeAttribute(\"updating\");\n this.dispatchEvent(new Event(\"perspective-update-complete\"));\n }\n\n l.resolve();\n }\n\n return result;\n };\n\n // A function which clears the lock just like the main wrapper, but then\n // does nothing.\n descriptor.value.flush = async function(obj) {\n if (obj[lock]?.lock) {\n await obj[lock].lock;\n await new Promise(requestAnimationFrame);\n if (obj[lock]?.lock) {\n await obj[lock].lock;\n }\n }\n };\n\n return descriptor;\n}\n\n/**\n * Swap 2 HTMLElements in a container.\n * @param {HTMLElement} container\n * @param {HTMLElement} elem1\n * @param {HTMLElement} elem2\n */\nexport function swap(container, ...elems) {\n if (elems[0] === elems[1]) return;\n if (elems.every(x => x.classList.contains(\"null-column\"))) return;\n let [i, j] = elems.map(x => Array.prototype.slice.call(container.children).indexOf(x));\n if (j < i) {\n [i, j] = [j, i];\n elems = elems.reverse();\n }\n container.insertBefore(elems[1], elems[0]);\n if (j + 1 === container.children.length) {\n container.appendChild(elems[0]);\n } else {\n container.insertBefore(elems[0], container.children[j + 1]);\n }\n}\n\nexport const json_attribute = _attribute(() => ({}));\nexport const array_attribute = _attribute(() => []);\n\nexport const registerPlugin = (name, plugin) => {\n if (global.registerPlugin) {\n global.registerPlugin(name, plugin);\n } else {\n global.__perspective_plugins__ = global.__perspective_plugins__ || [];\n global.__perspective_plugins__.push([name, plugin]);\n }\n};\n\n/**\n * Given an expression, return its alias.\n *\n * @param {*} expression\n * @returns String\n */\nexport function getExpressionAlias(expression) {\n const matches = expression.match(/\\/\\/(.+?)$/m);\n let alias;\n\n // Has an alias - use that to type check.\n if (matches && matches.length == 2) {\n alias = matches[1].trim();\n return alias;\n } else {\n return expression;\n }\n}\n\n/**\n * Adds an alias to the given expression and returns it.\n *\n * @param {*} expression\n * @returns String\n */\n// export function addExpressionAlias(expression) {\n// let alias;\n// expression.length > 20\n// ? (alias =\n// expression\n// .replace(\"\\n\", \" \")\n// .substr(0, 20)\n// .trim() + \"...\")\n// : (alias = expression);\n// return `//${alias}\\n${expression}`;\n// }\n\n/**\n * Given an alias and an array of string expressions, find the alias inside\n * the expressions array. This is important so we can map aliases back to\n * expressions inside _new_row.\n *\n * @param {String} alias\n * @param {Array<String>} expressions\n * @returns String\n */\nexport function findExpressionByAlias(alias, expressions) {\n for (const expr of expressions) {\n const expr_alias = getExpressionAlias(expr);\n if (alias === expr_alias) {\n return expr;\n }\n }\n}\n\n/**\n * Given an expression, strips the alias and returns the expression.\n *\n * @param {String} expression\n * @returns String\n */\nexport function getRawExpression(expression) {\n return expression.replace(/\\/\\/(.+)\\n/, \"\");\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport debounce from \"lodash/debounce\";\n\nimport Awesomplete from \"awesomplete\";\nimport awesomplete_style from \"awesomplete/awesomplete.css\";\n\nimport {bindTemplate} from \"./utils.js\";\n\nimport * as perspective from \"@finos/perspective/dist/esm/config/constants.js\";\nimport {get_type_config} from \"@finos/perspective/dist/esm/config\";\nimport template from \"../html/row.html\";\n\nimport style from \"../less/row.less\";\nimport {html, render, nothing} from \"lit-html\";\n\nconst SPAN = document.createElement(\"span\");\nSPAN.style.visibility = \"hidden\";\nSPAN.style.fontFamily = \"monospace\";\nSPAN.style.fontSize = \"12px\";\nSPAN.style.position = \"absolute\";\n\nfunction get_text_width(text, max = 0) {\n // FIXME get these values form the stylesheet\n SPAN.innerHTML = text;\n document.body.appendChild(SPAN);\n const width = `${Math.max(max, SPAN.offsetWidth) + 10}px`;\n document.body.removeChild(SPAN);\n return width;\n}\n\n// Eslint complains here because we don't do anything, but actually we globally\n// register this class as a CustomElement\n@bindTemplate(template, {toString: () => style + \"\\n\" + awesomplete_style}) // eslint-disable-next-line no-unused-vars\nclass Row extends HTMLElement {\n set name(n) {\n const elem = this.shadowRoot.querySelector(\"#name\");\n elem.innerHTML = this.getAttribute(\"name\");\n }\n\n _option_template(agg, name) {\n return html`\n <option value=\"${agg}\" data-desc=\"${name}\">${name || agg}</option>\n `;\n }\n\n _select_template(category, type) {\n const items = perspective[category][type] || [];\n const weighted_options = html`\n <optgroup label=\"weighted mean\">\n ${this._weights.map(x => this._option_template(JSON.stringify([\"weighted mean\", x]), x))}\n </optgroup>\n `;\n const has_weighted_mean = category === \"TYPE_AGGREGATES\" && (type === \"integer\" || type === \"float\");\n return html`\n ${items.map(x => this._option_template(x))} ${has_weighted_mean ? weighted_options : nothing}\n `;\n }\n\n set_weights(xs) {\n this._weights = xs;\n }\n\n set type(t) {\n const elem = this.shadowRoot.querySelector(\"#name\");\n const type = this.getAttribute(\"type\");\n if (!type) return;\n const type_config = get_type_config(type);\n if (type_config.type) {\n elem.classList.add(type_config.type);\n }\n elem.classList.add(type);\n const agg_dropdown = this.shadowRoot.querySelector(\"#column_aggregate\");\n const filter_dropdown = this.shadowRoot.querySelector(\"#filter_operator\");\n\n render(this._select_template(\"TYPE_AGGREGATES\", type_config.type || type), agg_dropdown);\n render(this._select_template(\"TYPE_FILTERS\", type_config.type || type), filter_dropdown);\n\n if (!this.hasAttribute(\"aggregate\")) {\n this.aggregate = type_config.aggregate;\n } else {\n this.aggregate = this.getAttribute(\"aggregate\");\n }\n if (this.hasAttribute(\"filter\")) {\n this.filter = this.getAttribute(\"filter\");\n }\n\n const filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\n this._callback = event => this._update_filter(event);\n filter_operand.addEventListener(\"keyup\", this._callback.bind(this));\n }\n\n choices(choices) {\n const filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\n const filter_operator = this.shadowRoot.querySelector(\"#filter_operator\");\n const selector = new Awesomplete(filter_operand, {\n label: this.getAttribute(\"name\"),\n list: choices,\n minChars: 0,\n autoFirst: true,\n filter: function(text, input) {\n return Awesomplete.FILTER_CONTAINS(text, input.match(/[^,]*$/)[0]);\n },\n item: function(text, input) {\n return Awesomplete.ITEM(text, input.match(/[^,]*$/)[0]);\n },\n replace: function(text) {\n const before = this.input.value.match(/^.+,\\s*|/)[0];\n if (filter_operator.value === \"in\" || filter_operator.value === \"not in\") {\n this.input.value = before + text + \", \";\n } else {\n this.input.value = before + text;\n }\n }\n });\n if (filter_operand.value === \"\") {\n selector.evaluate();\n }\n filter_operand.focus();\n this._filter_operand.addEventListener(\"focus\", () => {\n if (filter_operand.value.trim().length === 0) {\n selector.evaluate();\n }\n });\n filter_operand.addEventListener(\"awesomplete-selectcomplete\", this._callback);\n }\n\n set filter(f) {\n const filter_dropdown = this.shadowRoot.querySelector(\"#filter_operator\");\n const filter = JSON.parse(this.getAttribute(\"filter\"));\n if (filter_dropdown.value !== filter.operator) {\n filter_dropdown.value = filter.operator || get_type_config(this.getAttribute(\"type\")).filter_operator;\n }\n filter_dropdown.style.width = get_text_width(filter_dropdown.value);\n const filter_input = this.shadowRoot.querySelector(\"#filter_operand\");\n const operand = filter.operand ? filter.operand.toString() : \"\";\n if (!this._initialized) {\n filter_input.value = operand;\n }\n if (filter_dropdown.value === perspective.FILTER_OPERATORS.isNull || filter_dropdown.value === perspective.FILTER_OPERATORS.isNotNull) {\n filter_input.style.display = \"none\";\n } else {\n filter_input.style.display = \"inline-block\";\n filter_input.style.width = get_text_width(operand, 30);\n }\n }\n\n _set_default_aggregate() {\n if (this.hasAttribute(\"type\")) {\n const aggregate = this.getAttribute(\"aggregate\");\n const type = this.getAttribute(\"type\");\n const def_aggregate = get_type_config(type).aggregate;\n if (aggregate !== def_aggregate) {\n this.setAttribute(\"aggregate\", def_aggregate);\n }\n }\n }\n\n set aggregate(a) {\n const agg_dropdown = this.shadowRoot.querySelector(\"#column_aggregate\");\n const aggregate = this.getAttribute(\"aggregate\");\n if (agg_dropdown.value !== aggregate && this.hasAttribute(\"type\")) {\n const type = this.getAttribute(\"type\");\n agg_dropdown.value = aggregate || get_type_config(type).aggregate;\n }\n this._blur_agg_dropdown();\n }\n\n _update_filter(event) {\n const filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\n const filter_operator = this.shadowRoot.querySelector(\"#filter_operator\");\n let val = filter_operand.value;\n const type = this.getAttribute(\"type\");\n switch (type) {\n case \"float\":\n val = parseFloat(val);\n break;\n case \"integer\":\n val = parseInt(val);\n break;\n case \"boolean\":\n val = val.toLowerCase().indexOf(\"true\") > -1;\n break;\n case \"string\":\n default:\n }\n if (filter_operator.value === perspective.FILTER_OPERATORS.isIn || filter_operator.value === perspective.FILTER_OPERATORS.isNotIn) {\n val = val.split(\",\").map(x => x.trim());\n }\n this.setAttribute(\"filter\", JSON.stringify({operator: filter_operator.value, operand: val}));\n this.dispatchEvent(new CustomEvent(\"filter-selected\", {detail: event}));\n }\n\n _set_data_transfer(event) {\n let data;\n if (this.hasAttribute(\"filter\")) {\n const {operator, operand} = JSON.parse(this.getAttribute(\"filter\"));\n data = [this.getAttribute(\"name\"), operator, operand, this.getAttribute(\"type\"), this.getAttribute(\"aggregate\")];\n } else {\n data = [this.getAttribute(\"name\"), get_type_config(this.getAttribute(\"type\")).filter_operator, undefined, this.getAttribute(\"type\"), this.getAttribute(\"aggregate\")];\n }\n if (this.hasAttribute(\"expression\") && this.hasAttribute(\"title\")) {\n // Add the expression to drag-data so it automatically\n // resolves inside the expression editor.\n data.push(this.getAttribute(\"title\"));\n }\n event.dataTransfer.setData(\"text/plain\", JSON.stringify(data));\n this.dispatchEvent(new CustomEvent(\"row-drag\"));\n }\n\n _register_ids() {\n this._li = this.shadowRoot.querySelector(\".row_draggable\");\n this._visible = this.shadowRoot.querySelector(\".is_visible\");\n this._row_close = this.shadowRoot.querySelector(\"#row_close\");\n this._agg_dropdown = this.shadowRoot.querySelector(\"#column_aggregate\");\n this._sort_order = this.shadowRoot.querySelector(\"#sort_order\");\n this._filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\n this._filter_operator = this.shadowRoot.querySelector(\"#filter_operator\");\n this._column_aggregate_category = this.shadowRoot.querySelector(\"#column_aggregate_category\");\n }\n\n _blur_agg_dropdown() {\n this._agg_dropdown.blur();\n if (this._agg_dropdown.value[0] === \"[\") {\n for (const option of this._agg_dropdown.querySelectorAll(\"optgroup option\")) {\n const name = option.getAttribute(\"data-desc\");\n option.innerHTML = `mean by ${name}`;\n }\n }\n }\n\n _focus_agg_dropdown() {\n for (const option of this._agg_dropdown.querySelectorAll(\"optgroup option\")) {\n const name = option.getAttribute(\"data-desc\");\n option.innerHTML = `by ${name}`;\n }\n }\n\n _register_callbacks() {\n this._li.addEventListener(\"dragstart\", this._set_data_transfer.bind(this));\n this._li.addEventListener(\"dragend\", () => {\n this.dispatchEvent(new CustomEvent(\"row-dragend\"));\n });\n this._visible.addEventListener(\"mousedown\", event => this.dispatchEvent(new CustomEvent(\"visibility-clicked\", {detail: event})));\n this._row_close.addEventListener(\"mousedown\", event => this.dispatchEvent(new CustomEvent(\"close-clicked\", {detail: event})));\n this._agg_dropdown.addEventListener(\"focus\", this._focus_agg_dropdown.bind(this));\n\n this._agg_dropdown.addEventListener(\"change\", event => {\n this._blur_agg_dropdown();\n const value = this._agg_dropdown.value;\n this.setAttribute(\"aggregate\", value);\n this.dispatchEvent(new CustomEvent(\"aggregate-selected\", {detail: event}));\n });\n this._sort_order.addEventListener(\"click\", event => {\n this.dispatchEvent(new CustomEvent(\"sort-order\", {detail: event}));\n });\n\n const debounced_filter = debounce(event => this._update_filter(event), 50);\n this._filter_operator.addEventListener(\"change\", () => {\n this._filter_operand.focus();\n this._filter_operator.style.width = get_text_width(this._filter_operator.value);\n const filter_input = this.shadowRoot.querySelector(\"#filter_operand\");\n filter_input.style.width = get_text_width(\"\" + this._filter_operand.value, 30);\n debounced_filter();\n });\n }\n\n connectedCallback() {\n this._register_ids();\n this._register_callbacks();\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {swap} from \"../utils.js\";\n\nfunction calc_index(event) {\n if (this._active_columns.children.length == 0) {\n return 0;\n } else {\n let is_last_null = false;\n for (let cidx in this._active_columns.children) {\n let child = this._active_columns.children[cidx];\n is_last_null = is_last_null || child?.classList?.contains(\"null-column\");\n if (child.offsetTop + child.offsetHeight > event.offsetY + this._active_columns.scrollTop) {\n return parseInt(cidx);\n }\n }\n let last_index = this._active_columns.children.length;\n if (is_last_null) {\n last_index--;\n }\n return last_index;\n }\n}\n\nexport function dragend(event) {\n let div = event.target.getRootNode().host;\n let parent = div;\n if (parent.tagName === \"PERSPECTIVE-VIEWER\") {\n parent = event.target.parentElement;\n } else {\n parent = div.parentElement;\n }\n let idx = Array.prototype.slice.call(parent.children).indexOf(div.tagName === \"PERSPECTIVE-ROW\" ? div : event.target);\n let attr_name = parent.getAttribute(\"for\");\n if (this.hasAttribute(attr_name)) {\n let attr_value = JSON.parse(this.getAttribute(attr_name));\n attr_value.splice(idx, 1);\n if (attr_value.length === 0) {\n this.removeAttribute(attr_name);\n } else {\n this.setAttribute(attr_name, JSON.stringify(attr_value));\n }\n }\n}\n\nexport function drop(ev) {\n ev.preventDefault();\n ev.currentTarget.classList.remove(\"dropping\");\n DRAG_COUNT_MAP = new WeakMap();\n if (this._drop_target_hover) {\n this._drop_target_hover.removeAttribute(\"drop-target\");\n }\n let data = ev.dataTransfer.getData(\"text\");\n if (!data) return;\n data = JSON.parse(data);\n\n // Update the columns attribute\n let name = ev.currentTarget.querySelector(\"ul\").getAttribute(\"for\") || ev.currentTarget.getAttribute(\"id\").replace(\"_\", \"-\");\n let columns = JSON.parse(this.getAttribute(name) || \"[]\");\n let data_index = columns.indexOf(data[0]);\n if (data_index !== -1) {\n columns.splice(data_index, 1);\n }\n\n const filtering = name.indexOf(\"filter\") > -1;\n\n // Deselect/select the dropped column.\n (async () => {\n let plugin = await this._vieux.get_plugin();\n if (filtering) {\n this.setAttribute(name, JSON.stringify(columns.concat([data])));\n } else if (name.indexOf(\"sort\") > -1) {\n this.setAttribute(name, JSON.stringify(columns.concat([[data[0], \"asc\"]])));\n } else {\n this.setAttribute(name, JSON.stringify(columns.concat([data[0]])));\n }\n\n if (plugin.deselectMode === \"pivots\" && this._get_visible_column_count() > 1 && name !== \"sort\" && !filtering) {\n for (let x of this.shadowRoot.querySelectorAll(\"#active_columns perspective-row\")) {\n if (x.getAttribute(\"name\") === data[0]) {\n this._active_columns.removeChild(x);\n break;\n }\n }\n this._update_column_view();\n }\n\n this._debounce_update();\n })();\n}\n\nexport function column_dragend(event) {\n let data = event.target.parentElement.parentElement;\n if (Array.prototype.slice(this._active_columns.children).indexOf(data) > -1 && this._get_visible_column_count() > 1 && event.dataTransfer.dropEffect !== \"move\") {\n this._active_columns.removeChild(data);\n this._update_column_view();\n }\n this._active_columns.classList.remove(\"dropping\");\n}\n\nexport function column_dragleave(event) {\n let src = event.relatedTarget;\n while (src && src !== this._active_columns) {\n src = src.parentElement;\n }\n if (src === null) {\n this._vieux.get_plugin().then(() => {\n this._active_columns.classList.remove(\"dropping\");\n if (this._drop_target_null) {\n this._active_columns.replaceChild(this._drop_target_null, this._drop_target_hover);\n delete this._drop_target_null;\n }\n if (this._drop_target_hover.parentElement === this._active_columns) {\n this._active_columns.removeChild(this._drop_target_hover);\n }\n if (this._original_index !== -1) {\n this._active_columns.insertBefore(this._drop_target_hover, this._active_columns.children[this._original_index]);\n }\n this._drop_target_hover.removeAttribute(\"drop-target\");\n });\n }\n}\n\nfunction _unset_drop_target_null() {\n if (this._drop_target_null) {\n if (this._drop_target_null.parentElement === this._active_columns) {\n swap(this._active_columns, this._drop_target_hover, this._drop_target_null);\n } else {\n this._active_columns.replaceChild(this._drop_target_null, this._drop_target_hover);\n }\n delete this._drop_target_null;\n }\n}\n\nfunction column_swap(new_index) {\n _unset_drop_target_null.call(this);\n if (this._active_columns.children[new_index]) {\n if (this._drop_target_hover !== this._active_columns.children[new_index]) {\n this._drop_target_null = this._active_columns.children[new_index];\n swap(this._active_columns, this._active_columns.children[new_index], this._drop_target_hover);\n }\n }\n}\n\nfunction column_replace(new_index) {\n _unset_drop_target_null.call(this);\n if (this._active_columns.children[new_index]) {\n this._drop_target_null = this._active_columns.children[new_index];\n this._active_columns.replaceChild(this._drop_target_hover, this._active_columns.children[new_index]);\n }\n}\n\nexport function column_dragover(event) {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n if (!this._drop_target_hover.hasAttribute(\"drop-target\")) {\n this._drop_target_hover.toggleAttribute(\"drop-target\", true);\n }\n let new_index = calc_index.call(this, event);\n const current_index = Array.prototype.slice.call(this._active_columns.children).indexOf(this._drop_target_hover);\n const over_elem = this._active_columns.children[new_index];\n (async () => {\n let plugin = await this._vieux.get_plugin();\n const to_replace = new_index < plugin.initial?.names?.length - 1;\n const is_diff = this._drop_target_hover !== this._active_columns.children[new_index];\n const from_active = this._original_index !== -1;\n const from_replace = from_active && this._original_index < plugin.initial?.names?.length - 1;\n const from_append = from_active && this._original_index >= plugin.initial?.names?.length - 1;\n const from_required = from_active && this._original_index < plugin.initial?.count;\n const to_required = new_index < plugin.initial?.count;\n const to_null = !to_required && over_elem?.classList.contains(\"null-column\");\n if (from_required && to_null) {\n _unset_drop_target_null.call(this);\n } else if (to_replace && from_append && is_diff) {\n _unset_drop_target_null.call(this);\n const from_last =\n this._original_index === plugin.initial?.names?.length - 1 &&\n this._drop_target_hover === this._active_columns.children[this._original_index] &&\n this._active_columns.children.length === plugin.initial?.names?.length;\n if (from_last) {\n this._drop_target_null = this._active_columns.children[new_index];\n swap(this._active_columns, this._active_columns.children[new_index], this._drop_target_hover);\n } else if (!this._active_columns.children[new_index]?.classList.contains(\"null-column\")) {\n this._drop_target_null = this._active_columns.children[new_index];\n this._active_columns.replaceChild(this._drop_target_hover, this._active_columns.children[new_index]);\n this._active_columns.insertBefore(this._drop_target_null, this._active_columns.children[this._original_index]);\n } else {\n if (this._drop_target_hover !== this._active_columns.children[new_index]) {\n this._drop_target_null = this._active_columns.children[new_index];\n this._active_columns.replaceChild(this._drop_target_hover, this._active_columns.children[new_index]);\n }\n }\n } else if (to_replace && from_active && is_diff) {\n column_swap.call(this, new_index);\n } else if (to_replace && !from_active && is_diff) {\n column_replace.call(this, new_index);\n } else if (!to_replace && from_replace && is_diff) {\n column_swap.call(this, new_index);\n } else if (to_null && from_active) {\n column_swap.call(this, new_index);\n } else if (to_null && !from_active) {\n column_replace.call(this, new_index);\n } else if (current_index < new_index) {\n if (new_index + 1 < this._active_columns.children.length) {\n if (!this._active_columns.children[new_index + 1].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.insertBefore(this._drop_target_hover, this._active_columns.children[new_index + 1]);\n }\n } else {\n if (!this._active_columns.children[this._active_columns.children.length - 1].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.appendChild(this._drop_target_hover);\n }\n }\n } else if (new_index < this._active_columns.children.length) {\n if (!this._active_columns.children[new_index].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.insertBefore(this._drop_target_hover, this._active_columns.children[new_index]);\n }\n } else {\n if (!this._active_columns.children[this._active_columns.children.length - 1].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.appendChild(this._drop_target_hover);\n }\n }\n })();\n}\n\nexport function column_drop(ev) {\n ev.preventDefault();\n delete this._drop_target_null;\n ev.currentTarget.classList.remove(\"dropping\");\n DRAG_COUNT_MAP = new WeakMap();\n if (this._drop_target_hover.parentElement === this._active_columns) {\n this._drop_target_hover.removeAttribute(\"drop-target\");\n }\n let data = ev.dataTransfer.getData(\"text\");\n if (!data) return;\n\n this._update_column_view();\n}\n\nexport function dragover(ev) {\n ev.stopPropagation();\n ev.preventDefault();\n ev.dataTransfer.dropEffect = \"move\";\n}\n\nlet DRAG_COUNT_MAP = new WeakMap();\n\nfunction dragenterleave(event) {\n let dragHoverCount = DRAG_COUNT_MAP.get(event.currentTarget) || 0;\n event.type === \"dragenter\" ? dragHoverCount++ : dragHoverCount--;\n DRAG_COUNT_MAP.set(event.currentTarget, dragHoverCount);\n event.currentTarget.classList.toggle(\"dropping\", dragHoverCount > 0);\n event.preventDefault();\n}\n\nexport const dragenter = dragenterleave;\nexport const dragleave = dragenterleave;\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nexport class StateElement extends HTMLElement {\n get _plugin() {\n return this._vieux.get_plugin();\n }\n\n // deprecate\n _get_view_dom_columns(selector, callback) {\n selector = selector || \"#active_columns perspective-row\";\n let columns = Array.prototype.slice.call(this.shadowRoot.querySelectorAll(selector));\n if (!callback) {\n return columns;\n }\n return columns.map(callback).filter(x => x);\n }\n\n _get_view_active_columns() {\n return Array.prototype.slice.call(this.shadowRoot.querySelectorAll(\"#active_columns perspective-row\"));\n }\n\n _get_view_active_valid_columns() {\n return Array.prototype.slice.call(this.shadowRoot.querySelectorAll(\"#active_columns perspective-row\")).filter(x => !x.classList.contains(\"null-column\"));\n }\n\n _get_view_inactive_columns() {\n return Array.prototype.slice.call(this.shadowRoot.querySelectorAll(\"#inactive_columns perspective-row\"));\n }\n\n _get_view_all_column_names() {\n return this._get_view_inactive_columns().map(x => x.getAttribute(\"name\"));\n }\n\n _get_view_active_column_names() {\n return this._get_view_active_columns().map(x => x.getAttribute(\"name\"));\n }\n\n _get_view_all_valid_column_names() {\n return this._get_view_all_column_names().filter(x => x);\n }\n\n _get_view_active_valid_column_names() {\n return this._get_view_active_column_names().filter(x => x);\n }\n\n _get_view_active_valid_column_count() {\n return this._get_view_active_valid_column_names().length;\n }\n\n // deprecate\n _get_view_columns({active = true} = {}) {\n let selector;\n if (active) {\n selector = \"#active_columns perspective-row\";\n } else {\n selector = \"#inactive_columns perspective-row\";\n }\n return this._get_view_dom_columns(selector, col => {\n return col.getAttribute(\"name\");\n });\n }\n\n _get_view_aggregates(selector) {\n selector = selector || \"#active_columns perspective-row\";\n return this._get_view_dom_columns(selector, s => {\n let op = s.getAttribute(\"aggregate\");\n if (op[0] === \"[\") {\n try {\n op = JSON.parse(op);\n } catch (e) {\n console.error(e);\n }\n }\n const column = s.getAttribute(\"name\");\n return column && {op, column};\n });\n }\n\n _get_view_row_pivots() {\n return this._get_view_dom_columns(\"#row_pivots perspective-row\", col => {\n return col.getAttribute(\"name\");\n });\n }\n\n _get_view_column_pivots() {\n return this._get_view_dom_columns(\"#column_pivots perspective-row\", col => {\n return col.getAttribute(\"name\");\n });\n }\n\n _get_view_filter_nodes() {\n return this._get_view_dom_columns(\"#filters perspective-row\");\n }\n\n _get_view_filters() {\n return this._get_view_dom_columns(\"#filters perspective-row\", col => {\n let {operator, operand} = JSON.parse(col.getAttribute(\"filter\"));\n return [col.getAttribute(\"name\"), operator, operand];\n });\n }\n\n _get_view_sorts() {\n return this._get_view_dom_columns(\"#sort perspective-row\", col => {\n let order = col.getAttribute(\"sort-order\") || \"asc\";\n return [col.getAttribute(\"name\"), order];\n });\n }\n\n _get_view_expressions() {\n return JSON.parse(this.getAttribute(\"expressions\")) || [];\n }\n\n _get_visible_column_count() {\n return this._get_view_active_columns().length;\n }\n\n get_aggregate_attribute() {\n const aggs = JSON.parse(this.getAttribute(\"aggregates\")) || {};\n const found = new Set();\n const new_aggs = Object.keys(aggs).map(col => {\n found.add(col);\n return {column: col, op: aggs[col]};\n });\n if (this._aggregate_defaults) {\n for (const column of Object.keys(this._aggregate_defaults)) {\n if (!found.has(column)) {\n new_aggs.push({\n column,\n op: this._aggregate_defaults[column]\n });\n }\n }\n }\n return new_aggs;\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {throttlePromise} from \"../utils.js\";\nimport * as perspective from \"@finos/perspective/dist/esm/config/constants.js\";\nimport {get_type_config} from \"@finos/perspective/dist/esm/config\";\n\nimport {StateElement} from \"./state_element.js\";\nimport {findExpressionByAlias, getExpressionAlias} from \"../utils.js\";\n\n/******************************************************************************\n *\n * Helpers\n *\n */\n\nlet TYPE_ORDER = {integer: 2, string: 0, float: 3, boolean: 4, datetime: 1, date: 1};\n\nconst column_sorter = schema => (a, b) => {\n const s1 = TYPE_ORDER[schema[a]];\n const s2 = TYPE_ORDER[schema[b]];\n let r = 0;\n if (s1 == s2) {\n r = a.toLowerCase() < b.toLowerCase() ? -1 : 1;\n } else {\n r = s1 < s2 ? -1 : 1;\n }\n return r;\n};\n\nfunction get_aggregate_defaults(columns, schema, expression_schema) {\n const aggregates = {};\n for (const col of columns) {\n let type = schema[col];\n if (!type) {\n type = expression_schema[col];\n }\n aggregates[col] = get_type_config(type).aggregate;\n }\n return aggregates;\n}\n\nfunction get_aggregates_with_defaults(aggregate_attribute, columns, schema, expression_schema) {\n const found = new Set();\n const aggregates = [];\n for (const col of aggregate_attribute) {\n let type = schema[col.column];\n if (!type) {\n type = expression_schema[col.column];\n }\n const type_config = get_type_config(type);\n found.add(col.column);\n if (type_config.type || type) {\n if (col.op === \"\" || perspective.TYPE_AGGREGATES[type_config.type || type].indexOf(col.op) === -1) {\n col.op = type_config.aggregate;\n }\n aggregates.push(col);\n } else {\n console.warn(`No column \"${col.column}\" found (specified in aggregates attribute).`);\n }\n }\n\n // Add columns detected from dataset.\n for (const col of columns) {\n if (!found.has(col)) {\n let type = schema[col];\n if (!type) {\n type = expression_schema[col.column];\n }\n aggregates.push({\n column: col,\n op: get_type_config(type).aggregate\n });\n }\n }\n\n return aggregates;\n}\n\n/******************************************************************************\n *\n * PerspectiveElement\n *\n */\n\nexport class PerspectiveElement extends StateElement {\n /**\n * Given a {@link module:perspective~table}, load it into the\n * {@link module:perspective_viewer~PerspectiveViewer} and set the viewer's\n * state. If the `expressions` attribute is set on the viewer, this\n * method attempts to validate the expressions with the `Table` and\n * reconcile state.\n *\n * @param {*} table\n */\n async _load_table(table, resolve) {\n let plugin = await this._vieux.get_plugin();\n this.shadowRoot.querySelector(\"#app\").classList.add(\"hide_message\");\n\n this._table = table;\n\n let [cols, schema] = await Promise.all([table.columns(), table.schema(true)]);\n\n // Initial col order never contains expressions\n this._initial_col_order = cols.slice();\n\n // Grab expressions from the viewer and validate them so that\n // expressions do not crash the viewer/table.\n const expressions = this._get_view_expressions();\n const valid_expressions = [];\n\n let expression_schema = {};\n\n if (expressions.length > 0) {\n const valid_expression_alias = [];\n const validate_results = await table.validate_expressions(expressions);\n expression_schema = validate_results.expression_schema;\n\n for (const expression of expressions) {\n const alias = getExpressionAlias(expression);\n\n if (alias === undefined) {\n console.warn(`Not applying expression ${expression} as it does not have an alias set.`);\n continue;\n }\n\n if (expression_schema[alias]) {\n valid_expressions.push(expression);\n valid_expression_alias.push(alias);\n } else {\n console.error(`Could not validate expression \"${alias}\": ${validate_results.errors[alias]}`);\n }\n }\n\n cols = cols.concat(valid_expression_alias);\n }\n\n if (!this.hasAttribute(\"columns\")) {\n this.setAttribute(\"columns\", JSON.stringify(this._initial_col_order));\n }\n\n cols.sort(column_sorter(schema));\n\n // Update aggregates\n const aggregate_attribute = this.get_aggregate_attribute();\n const aggregates = get_aggregates_with_defaults(aggregate_attribute, cols, schema, expression_schema);\n\n let shown = JSON.parse(this.getAttribute(\"columns\")); //.filter(x => all_cols.indexOf(x) > -1);\n\n // At this point, cols contains both the table columns and the\n // validated expressions, so this should only filter on columns\n // that don't exist in either.\n const shown_is_invalid = shown.filter(x => cols.indexOf(x) > -1).length === 0;\n\n if (shown_is_invalid) {\n shown = this._initial_col_order;\n }\n\n this._aggregate_defaults = get_aggregate_defaults(cols, schema, expression_schema);\n\n // Clear the columns in the DOM before adding new ones\n this._clear_columns();\n\n for (const name of cols) {\n let aggregate = aggregates.find(a => a.column === name).op;\n let type = schema[name];\n if (!type) {\n type = expression_schema[name];\n }\n const expression = findExpressionByAlias(name, valid_expressions);\n const row = this._new_row(name, type, aggregate, null, null, expression);\n this._inactive_columns.appendChild(row);\n if (shown.includes(name)) {\n row.classList.add(\"active\");\n }\n }\n\n while (shown.length < plugin.initial?.names?.length) {\n shown.push(null);\n }\n\n for (const x of shown) {\n let type = schema[x];\n if (!type) {\n type = expression_schema[x];\n }\n const expression = findExpressionByAlias(x, valid_expressions);\n const active_row = this._new_row(x, type, undefined, undefined, undefined, expression);\n this._active_columns.appendChild(active_row);\n }\n\n if (cols.length === shown.filter(x => cols.indexOf(x) > -1).length) {\n this._columns_container.classList.add(\"collapse\");\n } else {\n this._columns_container.classList.remove(\"collapse\");\n }\n\n this._show_column_container();\n this._show_top_panel();\n this._show_side_panel_actions();\n\n // Filters need type information to populate e.g. the operator dropdown,\n // so reset them.\n if (this.hasAttribute(\"filters\")) {\n this.filters = this.getAttribute(\"filters\");\n }\n\n // Get an edit port from the table, and set it on the viewer so that\n // all grid edits use the specified port.\n this._edit_port = await table.make_port();\n\n // Resolve the edit port lock, which allows for `get_edit_port` to be\n // called in arbitary order without ever returning a null value.\n this._edit_port_lock.resolve(this._edit_port);\n\n try {\n await this._debounce_update({force_update: true});\n } catch (e) {\n console.warn(\"Initial view failed, resetting UI state\");\n await this.reset();\n throw e;\n }\n\n resolve();\n }\n\n async _validate_filters() {\n const filters = [];\n for (const node of this._get_view_filter_nodes()) {\n const operandNode = node.shadowRoot.getElementById(\"filter_operand\");\n const exclamation = node.shadowRoot.getElementById(\"row_exclamation\");\n const {operator, operand} = JSON.parse(node.getAttribute(\"filter\"));\n const filter = [node.getAttribute(\"name\"), operator, operand];\n if (await this._table.is_valid_filter(filter)) {\n filters.push(filter);\n operandNode.style.borderColor = \"\";\n exclamation.hidden = true;\n } else {\n operandNode.style.borderColor = \"red\";\n exclamation.hidden = false;\n }\n }\n\n return filters;\n }\n\n async _new_view({force_update = false} = {}) {\n if (!this._table) return;\n this._check_responsive_layout();\n const row_pivots = this._get_view_row_pivots();\n const column_pivots = this._get_view_column_pivots();\n const filters = await this._validate_filters();\n const view_aggregates = this._get_view_aggregates();\n if (view_aggregates.length === 0) return;\n const sort = this._get_view_sorts();\n\n let columns = view_aggregates.map(x => x.column);\n let aggregates = {};\n for (const a of view_aggregates) {\n aggregates[a.column] = a.op;\n }\n\n for (const s of sort) {\n const name = s[0];\n if (columns.indexOf(name) === -1 && !(column_pivots.indexOf(s) > -1 || row_pivots.indexOf(s) > -1)) {\n const all = this.get_aggregate_attribute();\n const {column, op} = all.reduce((obj, y) => (y.column === name ? y : obj));\n aggregates[column] = op;\n }\n }\n\n const expressions = this._get_view_expressions();\n\n const config = {\n filter: filters,\n row_pivots: row_pivots,\n column_pivots: column_pivots,\n aggregates: aggregates,\n columns: columns,\n sort: sort,\n expressions: expressions\n };\n\n try {\n this._view = await this._vieux.restore(config, force_update);\n } catch (err) {\n console.warn(err);\n } finally {\n this.dispatchEvent(new Event(\"perspective-view-update\"));\n }\n }\n\n _check_loaded_table() {\n if (this._table && this._table_resolver) {\n const table = this._table;\n const resolve = this._table_resolver;\n delete this._table;\n delete this._table_resolver;\n this._load_table(table, resolve);\n }\n }\n\n async _restyle_plugin() {\n const plugins = await this._vieux.get_all_plugins();\n for (const plugin of plugins) {\n if (plugin.restyleElement) {\n await plugin.restyleElement(this._view);\n }\n }\n }\n\n _set_updating() {\n this.toggleAttribute(\"updating\", true);\n let resolve;\n this._updating_promise = new Promise(_resolve => {\n resolve = () => {\n _resolve();\n };\n });\n return resolve;\n }\n\n @throttlePromise(true)\n async _update(force_update) {\n await new Promise(setTimeout);\n await this._new_view({force_update});\n }\n\n async _debounce_update({force_update = false} = {}) {\n if (this._table) {\n let resolve = this._set_updating();\n await this._update(force_update);\n resolve();\n }\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {get_type_config} from \"@finos/perspective/dist/esm/config\";\nimport {dragend} from \"./dragdrop.js\";\n\nimport {PerspectiveElement} from \"./perspective_element.js\";\nimport {findExpressionByAlias, getExpressionAlias, getRawExpression} from \"../utils.js\";\n\nexport class DomElement extends PerspectiveElement {\n _clear_columns() {\n this._inactive_columns.innerHTML = \"\";\n this._active_columns.innerHTML = \"\";\n }\n\n set_aggregate_attribute(aggs) {\n let is_set = false;\n let aggregates = aggs.reduce((obj, agg) => {\n if (this._aggregate_defaults[agg.column] !== agg.op) {\n obj[agg.column] = agg.op;\n is_set = true;\n }\n return obj;\n }, {});\n if (is_set) {\n this.setAttribute(\"aggregates\", JSON.stringify(aggregates));\n } else {\n this.removeAttribute(\"aggregates\");\n }\n }\n\n _get_type(name) {\n let all = this._get_view_inactive_columns();\n if (all.length > 0) {\n const type = all.find(x => x.getAttribute(\"name\") === name);\n if (type) {\n return type.getAttribute(\"type\");\n } else {\n return \"integer\";\n }\n } else {\n return \"\";\n }\n }\n\n _set_row_type(row) {\n const weights = this._get_view_inactive_columns()\n .filter(x => x.getAttribute(\"type\") === \"integer\" || x.getAttribute(\"type\") === \"float\")\n .map(x => x.getAttribute(\"name\"));\n row.set_weights(weights);\n row.setAttribute(\"type\", this._get_type(row.getAttribute(\"name\")));\n }\n\n // Generates a new row in state + DOM\n _new_row(name, type, aggregate, filter, sort, expression) {\n let row = document.createElement(\"perspective-row\");\n type = type || this._get_type(name);\n\n if (!aggregate) {\n let aggregates = this.get_aggregate_attribute();\n if (aggregates) {\n aggregate = aggregates.find(x => x.column === name);\n if (aggregate) {\n aggregate = aggregate.op;\n } else {\n aggregate = get_type_config(type).aggregate;\n }\n } else {\n aggregate = get_type_config(type).aggregate;\n }\n }\n\n if (filter) {\n row.setAttribute(\"filter\", filter);\n\n if (type === \"string\" || type === \"date\" || type === \"datetime\") {\n // Get all unique values for the column - because all options\n // must be valid column names, recreate expressions if the\n // expression is in the filter.\n const expressions = this._get_view_expressions();\n // either the expression string or undefined\n let expression = findExpressionByAlias(name, expressions);\n\n // If the filter is an expression, we need to recreate the\n // expression column.\n this._table\n .view({\n row_pivots: [name],\n columns: [],\n expressions: expression ? [expression] : []\n })\n .then(async view => {\n // set as a property so we can delete it after the\n // autocomplete choices are set.\n this._filter_view = view;\n let nrows = await view.num_rows();\n\n if (nrows < 100000) {\n // Autocomplete\n const json = await view.to_json();\n row.choices(this._autocomplete_choices(json, type));\n } else {\n console.warn(`perspective-viewer did not generate autocompletion results - ${nrows} is greater than limit of 100,000 rows.`);\n }\n })\n .finally(() => {\n // Clean up the View on the Emscripten heap.\n this._filter_view?.delete();\n delete this._filter_view;\n });\n }\n }\n\n if (sort) {\n row.setAttribute(\"sort-order\", sort);\n } else {\n if (this._get_view_column_pivots().indexOf(name) > -1) {\n row.setAttribute(\"sort-order\", \"col asc\");\n } else {\n row.setAttribute(\"sort-order\", \"asc\");\n }\n }\n\n const weights = this._get_view_inactive_columns()\n .filter(x => x.getAttribute(\"type\") === \"integer\" || x.getAttribute(\"type\") === \"float\")\n .map(x => x.getAttribute(\"name\"));\n row.set_weights(weights);\n\n if (name === null) {\n row.classList.add(\"null-column\");\n } else {\n row.setAttribute(\"type\", type);\n row.setAttribute(\"name\", name);\n }\n\n row.setAttribute(\"aggregate\", Array.isArray(aggregate) ? JSON.stringify(aggregate) : aggregate);\n\n row.addEventListener(\"visibility-clicked\", this._column_visibility_clicked.bind(this));\n row.addEventListener(\"aggregate-selected\", this._column_aggregate_clicked.bind(this));\n row.addEventListener(\"filter-selected\", this._column_filter_clicked.bind(this));\n row.addEventListener(\"close-clicked\", event => dragend.call(this, event.detail));\n row.addEventListener(\"sort-order\", this._sort_order_clicked.bind(this));\n\n row.addEventListener(\"row-drag\", () => {\n this.classList.add(\"dragging\");\n this._original_index = Array.prototype.slice.call(this._active_columns.children).findIndex(x => x.getAttribute(\"name\") === name);\n if (this._original_index !== -1) {\n this._drop_target_hover = this._active_columns.children[this._original_index];\n setTimeout(() => row.setAttribute(\"drop-target\", true));\n } else {\n this._drop_target_hover = this._new_row(name, type, undefined);\n }\n });\n row.addEventListener(\"row-dragend\", () => {\n this.classList.remove(\"dragging\");\n });\n\n if (expression) {\n row.classList.add(\"expression\");\n\n // used by the viewer to diff expression columns\n row.setAttribute(\"expression\", expression);\n\n // expression without the newline alias - allows us to hover\n // and see the expression as typed by the user.\n const raw_expr = getRawExpression(expression);\n row.setAttribute(\"title\", raw_expr);\n }\n\n return row;\n }\n\n /**\n * Add expression columns to the DOM.\n *\n * @param {*} expressions\n * @param {*} expression_schema\n */\n _update_expressions_view(expressions, expression_schema) {\n const columns = this._get_view_all_column_names();\n const active = this._get_view_active_column_names();\n\n if (expressions.length === 0) {\n return;\n }\n\n let added_count = 0;\n\n const attr = JSON.parse(this.getAttribute(\"columns\")) || [];\n let reset_columns_attr = false;\n\n for (const expr of expressions) {\n // All expressions are guaranteed to have alias at this point. If\n // it does not, then skip the expression.\n const alias = getExpressionAlias(expr);\n\n if (alias === undefined) {\n console.warn(`Not applying expression ${expr} as it does not have an alias set.`);\n continue;\n }\n\n //\n // Check for whether the expression is in the attribute but\n // NOT in the DOM - occurs when restore is called and a race\n // condition between `expressions` and `columns` occurs.\n const should_reset = !columns.includes(alias) && attr.includes(alias);\n\n if (should_reset) {\n reset_columns_attr = true;\n }\n\n // If the column already exists or is already in the active DOM,\n // don't add it to the inactive DOM\n const should_add = !columns.includes(alias) && !active.includes(alias);\n\n if (!should_add) {\n continue;\n }\n\n let type = expression_schema[alias];\n\n const row = this._new_row(alias, type, null, null, null, expr);\n this._inactive_columns.insertBefore(row, this._inactive_columns.childNodes[0] || null);\n added_count++;\n }\n\n if (reset_columns_attr) {\n this._update_column_view(attr, true);\n } else {\n // Remove collapse so that new inactive columns show up\n if (added_count > 0 && this._inactive_columns.parentElement.classList.contains(\"collapse\")) {\n this._inactive_columns.parentElement.classList.remove(\"collapse\");\n }\n }\n }\n\n /**\n * Given two arrays of expressions, return an array of expressions that\n * are in the old set but not the new set, i.e. they should be removed\n * because they do not need to be included or re-calculated.\n *\n * @param {Array<String>} old_expressions\n * @param {Array<String>} old_expressions\n */\n _diff_expressions(old_expressions, new_expressions) {\n const to_remove = [];\n for (const expr of old_expressions) {\n if (!new_expressions.includes(expr)) {\n to_remove.push(expr);\n }\n }\n return to_remove;\n }\n\n /**\n * When the `expressions` attribute is set to null, undefined, or [] or\n * is unset, or when required, remove expression columns from the\n * viewer. If `expressions` is undefined, all expressions are removed,\n * otherwise the specified expressions will be removed.\n *\n * @param {Array<String>} expressions\n */\n _reset_expressions_view(expressions) {\n if (expressions) {\n // Only remove columns specified in `expressions`\n const columns = this._get_view_active_column_names().filter(x => !expressions.includes(x));\n const aggregates = this._get_view_aggregates().filter(x => !expressions.includes(x.column));\n const rp = this._get_view_row_pivots().filter(x => !expressions.includes(x));\n const cp = this._get_view_column_pivots().filter(x => !expressions.includes(x));\n const sort = this._get_view_sorts().filter(x => !expressions.includes(x[0]));\n const filters = this._get_view_filters().filter(x => !expressions.includes(x[0]));\n\n // Aggregates as an array is from the attribute API\n this.set_aggregate_attribute(aggregates);\n\n this.setAttribute(\"columns\", JSON.stringify(columns));\n this.setAttribute(\"row-pivots\", JSON.stringify(rp));\n this.setAttribute(\"column-pivots\", JSON.stringify(cp));\n this.setAttribute(\"sort\", JSON.stringify(sort));\n this.setAttribute(\"filters\", JSON.stringify(filters));\n } else {\n // `expressions` is empty, so remove all columns that do not\n // exist on the underlying table.\n if (this._table) {\n this._table.columns().then(table_columns => {\n const columns = this._get_view_active_column_names().filter(x => table_columns.includes(x));\n const aggregates = this._get_view_aggregates().filter(x => table_columns.includes(x.column));\n const rp = this._get_view_row_pivots().filter(x => table_columns.includes(x));\n const cp = this._get_view_column_pivots().filter(x => table_columns.includes(x));\n const sort = this._get_view_sorts().filter(x => table_columns.includes(x[0]));\n const filters = this._get_view_filters().filter(x => table_columns.includes(x[0]));\n\n // Aggregates as an array is from the attribute API\n this.set_aggregate_attribute(aggregates);\n\n this.setAttribute(\"columns\", JSON.stringify(columns));\n this.setAttribute(\"row-pivots\", JSON.stringify(rp));\n this.setAttribute(\"column-pivots\", JSON.stringify(cp));\n this.setAttribute(\"sort\", JSON.stringify(sort));\n this.setAttribute(\"filters\", JSON.stringify(filters));\n });\n } else {\n // this would happen if you tried to set expressions without\n // a table, and then restored/removed expressions/tried to apply\n // an invalid expression. In this case just reset the viewer.\n this.removeAttribute(\"columns\");\n this.removeAttribute(\"row-pivots\");\n this.removeAttribute(\"column-pivots\");\n this.removeAttribute(\"sort\");\n this.removeAttribute(\"filters\");\n this.removeAttribute(\"aggregates\");\n }\n }\n\n // Remove inactive expression columns from the DOM\n const inactive_expressions = this._get_view_inactive_columns().filter(x => x.classList.contains(\"expression\"));\n\n for (const expr of inactive_expressions) {\n this._inactive_columns.removeChild(expr);\n }\n\n // Re-check on whether to collapse inactive columns\n const pop_cols = this._get_view_active_columns().filter(x => typeof x !== \"undefined\" && x !== null);\n const lis = this._get_view_inactive_columns();\n\n if (pop_cols.length === lis.length) {\n this._columns_container.classList.add(\"collapse\");\n } else {\n this._columns_container.classList.remove(\"collapse\");\n }\n }\n\n _update_column_view(columns, reset = false) {\n if (this._cached_plugin) {\n return this._update_column_view_sync(this._cached_plugin, columns, reset);\n } else {\n this._vieux.get_plugin().then(plugin => {\n this._update_column_view_sync(plugin, columns, reset);\n });\n }\n }\n\n _update_column_view_sync(plugin, columns, reset) {\n if (!columns) {\n columns = this._get_view_active_column_names();\n }\n\n if (plugin.initial && plugin.initial.names) {\n while (columns.length < plugin.initial.names.length) {\n columns.push(null);\n }\n }\n\n // If columns were not passed in, this is needed to keep the attribute\n // API in sync with DOM state.\n const json_cols = JSON.stringify(columns);\n if ((this.getAttribute(\"columns\") || \"[]\") !== json_cols) {\n this.setAttribute(\"columns\", json_cols);\n return;\n }\n\n const pop_cols = columns.filter(x => typeof x !== \"undefined\" && x !== null);\n const lis = this._get_view_inactive_columns();\n if (pop_cols.length === lis.length) {\n this._columns_container.classList.add(\"collapse\");\n } else {\n this._columns_container.classList.remove(\"collapse\");\n }\n lis.forEach(x => {\n const index = pop_cols.indexOf(x.getAttribute(\"name\"));\n if (index === -1) {\n x.classList.remove(\"active\");\n } else {\n x.classList.add(\"active\");\n }\n });\n if (reset) {\n this._update_column_list(columns, this._active_columns, (name, expressions) => {\n if (name === null) {\n return this._new_row(null);\n } else {\n const ref = lis.find(x => x.getAttribute(\"name\") === name);\n if (ref) {\n const name = ref.getAttribute(\"name\");\n // either the expression string or undefined\n let expression = findExpressionByAlias(name, expressions);\n return this._new_row(name, ref.getAttribute(\"type\"), undefined, undefined, undefined, expression);\n }\n }\n });\n }\n }\n\n _update_column_list(columns, container, callback, accessor) {\n accessor = accessor || ((x, y) => y.getAttribute(\"name\") === x);\n const active_columns = Array.prototype.slice.call(container.children);\n\n // Make sure the `expression` class and attribute is set on expressions\n const expressions = this._get_view_expressions();\n\n for (let i = 0, j = 0; i < active_columns.length || j < columns.length; i++, j++) {\n const name = columns[j];\n const col = active_columns[i];\n const next_col = active_columns[i + 1];\n if (!col) {\n const node = callback(name, expressions);\n if (node) {\n container.appendChild(node);\n }\n } else if (typeof name === \"undefined\") {\n container.removeChild(col);\n } else if (accessor(name, col)) {\n this._set_row_type(col);\n } else {\n if (col.classList.contains(\"null-column\")) {\n const node = callback(name, expressions);\n if (node) {\n container.replaceChild(node, col);\n }\n } else if (next_col && accessor(name, next_col)) {\n container.removeChild(col);\n i++;\n // j--;\n } else {\n const node = callback(name, expressions);\n if (node) {\n container.insertBefore(node, col);\n i--;\n }\n }\n }\n }\n }\n\n _set_row_styles(plugin) {\n let style = \"\";\n if (plugin.initial && plugin.initial.names) {\n for (const nidx in plugin.initial.names) {\n const name = plugin.initial.names[nidx];\n style += `#active_columns perspective-row:nth-child(${parseInt(nidx) + 1}){margin-top:23px;}`;\n style += `#active_columns perspective-row:nth-child(${parseInt(nidx) + 1}):before{content:\"${name}\";}`;\n }\n }\n this.shadowRoot.querySelector(\"#psp_styles\").innerHTML = style;\n }\n\n _show_column_container() {\n this.shadowRoot.querySelector(\"#columns_container\").style.visibility = \"visible\";\n }\n\n _show_top_panel() {\n this.shadowRoot.querySelector(\"#top_panel\").style.visibility = \"visible\";\n }\n\n _show_side_panel_actions() {\n this.shadowRoot.querySelector(\"#side_panel__actions\").style.visibility = \"visible\";\n }\n\n _remove_null_columns(since_index = 0) {\n const elems = this._get_view_active_columns();\n while (++since_index < elems.length) {\n const elem = elems[since_index];\n if (elem.classList.contains(\"null-column\")) {\n this.shadowRoot.querySelector(\"#active_columns\").removeChild(elem);\n }\n }\n }\n\n _set_column_defaults(plugin) {\n const cols = this._get_view_inactive_columns();\n const active_cols = this._get_view_active_valid_columns();\n const valid_active_cols = this._get_view_active_valid_column_names();\n if (cols.length > 0) {\n if (plugin.initial) {\n let pref = [];\n let count = plugin.initial.count || 2;\n this._fill_numeric(active_cols, pref);\n this._fill_numeric(cols, pref);\n this._fill_numeric(cols, pref, true);\n pref = pref.slice(0, count);\n const labels = plugin.initial.names;\n while (labels && pref.length < labels.length) {\n pref.push(null);\n }\n this.setAttribute(\"columns\", JSON.stringify(pref));\n } else if (plugin.selectMode === \"select\") {\n this.setAttribute(\"columns\", JSON.stringify([cols[0].getAttribute(\"name\")]));\n } else {\n this.setAttribute(\"columns\", JSON.stringify(valid_active_cols));\n this._remove_null_columns();\n }\n }\n }\n\n _fill_numeric(cols, pref, bypass = false) {\n for (let col of cols) {\n let type = col.getAttribute(\"type\");\n let name = col.getAttribute(\"name\");\n if (bypass || ([\"float\", \"integer\"].indexOf(type) > -1 && pref.indexOf(name) === -1)) {\n pref.push(name);\n }\n }\n }\n\n async _check_responsive_layout() {\n const side_panel = this._side_panel();\n if (this.shadowRoot && side_panel) {\n const app = this.shadowRoot.querySelector(\"#app\");\n if (this.clientHeight < 500 && this.clientWidth > 600 && this._get_view_columns({active: false}).length > this._get_view_columns().length) {\n if (!app.classList.contains(\"columns_horizontal\")) {\n const old = this._persisted_side_panel_width;\n this._persisted_side_panel_width = side_panel.style.width;\n side_panel.style.width = old || \"\";\n app.classList.add(\"columns_horizontal\");\n }\n } else if (app.classList.contains(\"columns_horizontal\")) {\n const panel = this.shadowRoot.querySelector(\"#pivot_chart_container\");\n panel.clientWidth + side_panel.clientWidth;\n const width = this._persisted_side_panel_width || panel.clientWidth + side_panel.clientWidth / 2;\n const height = panel.clientHeight + 50;\n await this._pre_resize(width, height, () => {\n const old = this._persisted_side_panel_width;\n this._persisted_side_panel_width = side_panel.style.width;\n side_panel.style.width = old || \"\";\n app.classList.remove(\"columns_horizontal\");\n });\n return true;\n }\n\n // else if (this.clientWidth < 600 && this.clientHeight < 500) {\n // if (!app.classList.contains(\"responsive_collapse_2\")) {\n // app.classList.add(\"responsive_collapse_2\");\n // }\n // } else if (app.classList.contains(\"responsive_collapse_2\")) {\n // app.classList.remove(\"responsive_collapse_2\");\n // }\n return false;\n }\n return false;\n }\n\n // setup functions\n _register_ids() {\n this._app = this.shadowRoot.querySelector(\"#app\");\n this._aggregate_selector = this.shadowRoot.querySelector(\"#aggregate_selector\");\n this._vis_selector = this.shadowRoot.querySelector(\"#vis_selector\");\n this._filters = this.shadowRoot.querySelector(\"#filters\");\n this._row_pivots = this.shadowRoot.querySelector(\"#row_pivots\");\n this._column_pivots = this.shadowRoot.querySelector(\"#column_pivots\");\n this._datavis = this.shadowRoot.querySelector(\"#pivot_chart\");\n this._active_columns = this.shadowRoot.querySelector(\"#active_columns\");\n this._inactive_columns = this.shadowRoot.querySelector(\"#inactive_columns\");\n this._side_panel_actions = this.shadowRoot.querySelector(\"#side_panel__actions\");\n this._add_expression_button = this.shadowRoot.querySelector(\"#add-expression\");\n this._side_panel = () => this._vieux?.shadowRoot?.querySelector(\"#side_panel\");\n this._top_panel = this.shadowRoot.querySelector(\"#top_panel\");\n this._sort = this.shadowRoot.querySelector(\"#sort\");\n this._transpose_button = this.shadowRoot.querySelector(\"#transpose_button\");\n this._columns_container = this.shadowRoot.querySelector(\"#columns_container\");\n }\n\n _autocomplete_choices(json, type) {\n const choices = [];\n const type_config = get_type_config(type);\n\n for (let i = 1; i < json.length; i++) {\n const row_path = json[i].__ROW_PATH__;\n if (Array.isArray(row_path) && row_path.length > 0 && row_path[0]) {\n let choice = row_path[0];\n\n if (type === \"date\" || type === \"datetime\") {\n choice = new Date(choice);\n choice = choice.toLocaleString(\"en-US\", type_config.format);\n }\n\n choices.push(choice);\n }\n }\n return choices;\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {dragend, column_dragend, column_dragleave, column_dragover, column_drop, drop, dragenter, dragover, dragleave} from \"./dragdrop.js\";\nimport {DomElement} from \"./dom_element.js\";\nimport {findExpressionByAlias, throttlePromise} from \"../utils.js\";\n\nexport class ActionElement extends DomElement {\n /**\n * Given a targe `width` and `height`, pre-size the plugin before modifying\n * the HTML to reduce visual tearing.\n *\n * @private\n * @param {*} width\n * @param {*} height\n * @param {*} post Function to run once action is complete\n * @param {*} [pre=undefined] Function to run once visual effects have been\n * applied. This may be before `post`, as pre-sizing will be delayed when\n * the target size is a sub-window of the current view.\n * @memberof ActionElement\n */\n async _pre_resize(width, height, post, pre = undefined) {\n this._datavis.style.width = `${width}px`;\n this._datavis.style.height = `${height}px`;\n try {\n if (!document.hidden && this.offsetParent) {\n await this._vieux.resize();\n }\n } finally {\n pre?.();\n this._datavis.style.width = \"100%\";\n this._datavis.style.height = \"100%\";\n post();\n }\n }\n\n /**\n * Display the expressions editor.\n *\n * @param {*} event\n */\n _open_expression_editor(event) {\n event.stopImmediatePropagation();\n this._vieux._open_expression_editor(this._add_expression_button);\n this._add_expression_button.classList.toggle(\"expr_editor_open\", true);\n }\n\n _close_expression_editor(event) {\n event.stopImmediatePropagation();\n this._add_expression_button.classList.toggle(\"expr_editor_open\", false);\n }\n\n _save_expression(expression) {\n const expressions = this._get_view_expressions();\n expressions.push(expression);\n this.setAttribute(\"expressions\", JSON.stringify(expressions));\n }\n\n async _type_check_expression(event) {\n const {expression, alias} = event.detail;\n const expressions = this._get_view_expressions();\n const is_duplicate = findExpressionByAlias(alias, expressions);\n\n if (expressions.includes(expression) || is_duplicate) {\n console.warn(`Cannot apply duplicate expression: \"${expression}\"`);\n const result = {\n expression_schema: {},\n errors: {}\n };\n result.errors[alias] = \"Value Error - Cannot apply duplicate expression.\";\n this._expression_editor.type_check_expression(result);\n return;\n }\n\n if (!expression || expression.length === 0) {\n this._expression_editor.type_check_expression({});\n return;\n }\n\n this._expression_editor.type_check_expression(await this._table.validate_expressions([expression]));\n }\n\n @throttlePromise\n async _column_visibility_clicked(_ev) {\n const parent = _ev.currentTarget;\n const shiftKey = _ev.detail.shiftKey;\n let plugin = await this._vieux.get_plugin();\n if (!parent || !parent.parentElement) {\n return;\n }\n\n const is_active = parent.parentElement.getAttribute(\"id\") === \"active_columns\";\n\n if (is_active) {\n const min_columns = plugin.initial?.count || 1;\n if (this._get_view_active_valid_column_count() === min_columns) {\n return;\n }\n if (shiftKey) {\n for (let child of Array.prototype.slice.call(this._active_columns.children)) {\n if (child !== parent) {\n this._active_columns.removeChild(child);\n }\n }\n } else {\n const index = Array.prototype.slice.call(this._active_columns.children).indexOf(parent);\n if (index < plugin.initial?.count) {\n return;\n } else if (index < plugin.initial?.names?.length - 1) {\n this._active_columns.insertBefore(this._new_row(null), parent);\n }\n this._active_columns.removeChild(parent);\n }\n } else {\n if ((shiftKey && plugin.selectMode === \"toggle\") || (!shiftKey && plugin.selectMode === \"select\")) {\n for (let child of Array.prototype.slice.call(this._active_columns.children)) {\n this._active_columns.removeChild(child);\n }\n }\n let row = this._new_row(parent.getAttribute(\"name\"), parent.getAttribute(\"type\"), undefined, undefined, undefined, parent.getAttribute(\"expression\"));\n const cols = this._get_view_active_columns();\n let i = cols.length - 1;\n if (!cols[i] || !cols[i]?.classList.contains(\"null-column\")) {\n this._active_columns.appendChild(row);\n } else\n while (i-- > 0) {\n if (!cols[i].classList.contains(\"null-column\")) {\n this._active_columns.replaceChild(row, cols[i + 1]);\n break;\n }\n }\n }\n this._check_responsive_layout();\n this._update_column_view();\n }\n\n _column_aggregate_clicked() {\n let aggregates = this.get_aggregate_attribute();\n let new_aggregates = this._get_view_aggregates();\n for (let aggregate of aggregates) {\n let updated_agg = new_aggregates.find(x => x.column === aggregate.column);\n if (updated_agg) {\n aggregate.op = updated_agg.op;\n }\n }\n this.set_aggregate_attribute(aggregates);\n this._update_column_view();\n this._debounce_update();\n }\n\n _column_filter_clicked() {\n let new_filters = this._get_view_filters();\n this._updating_filter = true;\n this.setAttribute(\"filters\", JSON.stringify(new_filters));\n this._updating_filter = false;\n this._debounce_update();\n }\n\n _increment_sort(sort, column_sorting, abs_sorting) {\n let sort_orders = [\"asc\", \"desc\"];\n if (column_sorting) {\n sort_orders.push(\"col asc\", \"col desc\");\n }\n if (abs_sorting) {\n sort_orders = sort_orders.map(x => `${x} abs`);\n }\n sort_orders.push(\"none\");\n return sort_orders[(sort_orders.indexOf(sort) + 1) % sort_orders.length];\n }\n\n _sort_order_clicked(event) {\n const row = event.target;\n const abs_sorting = event.detail.shiftKey && row.getAttribute(\"type\") !== \"string\";\n const new_sort_order = this._increment_sort(row.getAttribute(\"sort-order\"), this._get_view_column_pivots().length > 0, abs_sorting);\n row.setAttribute(\"sort-order\", new_sort_order);\n\n const sort = this._get_view_sorts();\n this.setAttribute(\"sort\", JSON.stringify(sort));\n }\n\n // edits state\n _transpose() {\n const has_row = this.hasAttribute(\"row-pivots\");\n const has_col = this.hasAttribute(\"column-pivots\");\n if (has_row && has_col) {\n let row_pivots = this.getAttribute(\"row-pivots\");\n this.setAttribute(\"row-pivots\", this.getAttribute(\"column-pivots\"));\n this.setAttribute(\"column-pivots\", row_pivots);\n } else if (has_row) {\n let row_pivots = this.getAttribute(\"row-pivots\");\n this.removeAttribute(\"row-pivots\");\n this.setAttribute(\"column-pivots\", row_pivots);\n } else if (has_col) {\n let column_pivots = this.getAttribute(\"column-pivots\");\n this.removeAttribute(\"column-pivots\");\n this.setAttribute(\"row-pivots\", column_pivots);\n } else {\n this.removeAttribute(\"column-pivots\");\n this.removeAttribute(\"row-pivots\");\n }\n }\n\n _vis_selector_changed(plugin) {\n this._cached_plugin = plugin;\n let plugin_name = this.getAttribute(\"plugin\");\n if (plugin_name !== plugin.name) {\n this._setAttributeSafe(\"plugin\", plugin.name);\n }\n\n this._active_columns.classList.remove(\"one_lock\", \"two_lock\");\n const classname = [\"one_lock\", \"two_lock\"][plugin.initial?.count - 1];\n if (classname) {\n this._active_columns.classList.add(classname);\n }\n\n this._set_row_styles(plugin);\n this._set_column_defaults(plugin);\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n // most of these are drag and drop handlers - how to clean up?\n _register_callbacks() {\n this._sort.addEventListener(\"drop\", drop.bind(this));\n this._sort.addEventListener(\"dragend\", dragend.bind(this));\n this._sort.addEventListener(\"dragenter\", dragenter.bind(this));\n this._sort.addEventListener(\"dragover\", dragover.bind(this));\n this._sort.addEventListener(\"dragleave\", dragleave.bind(this));\n this._row_pivots.addEventListener(\"drop\", drop.bind(this));\n this._row_pivots.addEventListener(\"dragend\", dragend.bind(this));\n this._row_pivots.addEventListener(\"dragenter\", dragenter.bind(this));\n this._row_pivots.addEventListener(\"dragover\", dragover.bind(this));\n this._row_pivots.addEventListener(\"dragleave\", dragleave.bind(this));\n this._column_pivots.addEventListener(\"drop\", drop.bind(this));\n this._column_pivots.addEventListener(\"dragend\", dragend.bind(this));\n this._column_pivots.addEventListener(\"dragenter\", dragenter.bind(this));\n this._column_pivots.addEventListener(\"dragover\", dragover.bind(this));\n this._column_pivots.addEventListener(\"dragleave\", dragleave.bind(this));\n this._filters.addEventListener(\"drop\", drop.bind(this));\n this._filters.addEventListener(\"dragend\", dragend.bind(this));\n this._filters.addEventListener(\"dragenter\", dragenter.bind(this));\n this._filters.addEventListener(\"dragover\", dragover.bind(this));\n this._filters.addEventListener(\"dragleave\", dragleave.bind(this));\n this._active_columns.addEventListener(\"drop\", column_drop.bind(this));\n this._active_columns.addEventListener(\"dragenter\", dragenter.bind(this));\n this._active_columns.addEventListener(\"dragend\", column_dragend.bind(this));\n this._active_columns.addEventListener(\"dragover\", column_dragover.bind(this));\n this._active_columns.addEventListener(\"dragleave\", column_dragleave.bind(this));\n this._add_expression_button.addEventListener(\"click\", this._open_expression_editor.bind(this));\n this._add_expression_button.addEventListener(\"-perspective-close-expression\", this._close_expression_editor.bind(this));\n this._transpose_button.addEventListener(\"click\", this._transpose.bind(this));\n this._vieux.addEventListener(\"perspective-vieux-reset\", () => this.reset());\n this._vieux.addEventListener(\"-perspective-plugin-changed\", ({detail}) => this._vis_selector_changed(detail));\n this._vieux.addEventListener(\"-perspective-add-expression\", ({detail}) => this._save_expression(detail));\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport \"./plugins.js\";\nimport \"./polyfill.js\";\n\nimport {bindTemplate, json_attribute, array_attribute, invertPromise, throttlePromise, getExpressionAlias, findExpressionByAlias} from \"./utils.js\";\nimport \"./row.js\";\n\nimport template from \"../html/viewer.html\";\n\nimport view_style from \"../less/viewer.less\";\nimport default_style from \"../less/default.less\";\n\nimport {ActionElement} from \"./viewer/action_element.js\";\n\n/**\n * Module for the `<perspective-viewer>` custom element.\n *\n * This module has no exports, but importing it has a side\n * effect: the {@link module:perspective_viewer~PerspectiveViewer} class is\n * registered as a custom element, after which it can be used as a standard DOM\n * element.\n *\n * The documentation in this module defines the instance structure of a\n * `<perspective-viewer>` DOM object instantiated typically, through HTML or any\n * relevent DOM method e.g. `document.createElement(\"perspective-viewer\")` or\n * `document.getElementsByTagName(\"perspective-viewer\")`.\n *\n * @module perspective-viewer\n */\n\nconst PERSISTENT_ATTRIBUTES = [\"selectable\", \"editable\", \"plugin\", \"expressions\", \"row-pivots\", \"column-pivots\", \"aggregates\", \"filters\", \"sort\", \"columns\"];\n\n// There is no way to provide a default rejection handler within a promise and\n// also not lock the await-er, so this module attaches a global handler to\n// filter out cancelled query messages.\nwindow.addEventListener(\"unhandledrejection\", event => {\n if (event.reason?.message === \"View method cancelled\") {\n event.preventDefault();\n }\n});\n\n/**\n * The HTMLElement class for `<perspective-viewer>` custom element.\n *\n * This class is not exported, so this constructor cannot be invoked in the\n * typical manner; instead, instances of the class are created through the\n * Custom Elements DOM API.\n *\n * Properties of an instance of this class, such as\n * {@link module:perspective_viewer~PerspectiveViewer#columns}, are reflected on\n * the DOM element as Attributes, and should be accessed as such - e.g.\n * `instance.setAttribute(\"columns\", JSON.stringify([\"a\", \"b\"]))`.\n *\n * @class PerspectiveViewer\n * @extends {HTMLElement}\n * @example\n * // Create a new `<perspective-viewer>`\n * const elem = document.createElement(\"perspective-viewer\");\n * elem.setAttribute(\"columns\", JSON.stringify([\"a\", \"b\"]));\n * document.body.appendChild(elem);\n *\n */\n@bindTemplate(template, view_style, default_style) // eslint-disable-next-line no-unused-vars\nclass PerspectiveViewer extends ActionElement {\n constructor() {\n super();\n this._show_config = true;\n this._show_warnings = true;\n this._resize_handler = this.notifyResize.bind(this);\n this._edit_port = null;\n this._edit_port_lock = invertPromise();\n this._vieux = document.createElement(\"perspective-vieux\");\n this._vieux.setAttribute(\"id\", \"app\");\n window.addEventListener(\"resize\", this._resize_handler);\n }\n\n connectedCallback() {\n this.toggleAttribute(\"settings\", false);\n this._register_ids();\n this._register_callbacks();\n this._check_loaded_table();\n }\n\n /**\n * Sets this `perspective.table.view`'s `sort` property, an Array of column\n * names.\n *\n * @kind member\n * @type {Array<String>} Array of arrays tuples of column name and\n * direction, where the possible values are \"asc\", \"desc\", \"asc abs\", \"desc\n * abs\" and \"none\".\n * @fires PerspectiveViewer#perspective-config-update\n * @example <caption>via Javascript DOM</caption>\n * let elem = document.getElementById('my_viewer');\n * elem.setAttribute('sort', JSON.stringify([[\"x\",\"desc\"]));\n * @example <caption>via HTML</caption>\n * <perspective-viewer sort='[[\"x\",\"desc\"]]'></perspective-viewer>\n */\n @array_attribute\n sort(sort) {\n if (sort === null || sort === undefined || sort.length === 0) {\n if (this.hasAttribute(\"sort\")) {\n this.removeAttribute(\"sort\");\n }\n sort = [];\n }\n var inner = this._sort.querySelector(\"ul\");\n this._update_column_list(\n sort,\n inner,\n (s, expressions) => {\n let dir = \"asc\";\n if (Array.isArray(s)) {\n dir = s[1];\n s = s[0];\n }\n // either the whole expression string or undefined\n let expression = findExpressionByAlias(s, expressions);\n return this._new_row(s, false, false, false, dir, expression);\n },\n (sort, node) => {\n if (Array.isArray(sort)) {\n return node.getAttribute(\"name\") === sort[0] && node.getAttribute(\"sort-order\") === sort[1];\n }\n return node.getAttribute(\"name\") === sort;\n }\n );\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * The set of visible columns.\n *\n * @kind member\n * @type {Array<String>}\n * @param {Array} columns An Array of strings, the names of visible columns.\n * @fires PerspectiveViewer#perspective-config-update\n * @example <caption>via Javascript DOM</caption>\n * let elem = document.getElementById('my_viewer');\n * elem.setAttribute('columns', JSON.stringify([\"x\", \"y'\"]));\n * @example <caption>via HTML</caption>\n * <perspective-viewer columns='[\"x\", \"y\"]'></perspective-viewer>\n */\n @array_attribute\n columns(show) {\n if (show === null || show === undefined || show.length === 0) {\n if (this.hasAttribute(\"columns\")) {\n if (this._initial_col_order) {\n this.setAttribute(\"columns\", JSON.stringify(this._initial_col_order));\n } else {\n this.removeAttribute(\"columns\");\n }\n }\n show = (this._initial_col_order || []).slice();\n }\n this._update_column_view(show, true);\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * DEPRECATED: use the expressions API instead.\n *\n * @kind member\n * @type {Array<Object>}\n * @param {Array<Object>} computed-columns DEPRECATED - use the\n * \"expressions\" API instead.\n * @deprecated\n */\n @array_attribute\n \"computed-columns\"() {\n console.error(\"[PerspectiveViewer] the `computed-columns` attribute is deprecated - use the `expressions` attribute instead.\");\n }\n\n /**\n * Sets this `perspective.table.view`'s `expressions` property, which will\n * output new columns from the given expressions.\n *\n * @kind member\n * @type {Array<String>}\n * @param {Array<String>} expressions An array of string expressions to\n * be calculated by Perspective.\n * @fires PerspectiveViewer#perspective-config-update\n *\n * @example <caption>via Javascript DOM</caption>\n * let elem = document.getElementById('my_viewer');\n * elem.setAttribute('expressions', JSON.stringify(['\"x\" + (\"y\" + 20)']));\n * @example <caption>via HTML</caption>\n * <perspective-viewer expressions='[\\'\"x\" + 10\\']'></perspective-viewer>\n */\n @array_attribute\n expressions(expressions) {\n const resolve = this._set_updating();\n\n (async () => {\n if (expressions === null || expressions === undefined || expressions.length === 0) {\n // Remove expression columns from the DOM, and reset the config\n // to exclude all expression columns.\n if (this.hasAttribute(\"expressions\")) {\n this.removeAttribute(\"expressions\");\n this._reset_expressions_view();\n return;\n }\n\n resolve();\n }\n\n let expression_schema = {};\n\n if (this.table) {\n const validation_results = await this.table.validate_expressions(expressions);\n expression_schema = validation_results.expression_schema;\n const errors = validation_results.errors;\n const validated_expressions = {};\n\n /**\n * Clear the expressions attribute if the validation fails at\n * any point. This validation gets triggered in two scenarios:\n *\n * 1. When a user types an expression and clicks save,\n * where the expression has already been checked. In\n * this case, there should be no failure of the\n * validation as the expression has already been\n * checked and validated.\n *\n * 2. When a user calls setAttribute() or restore()\n * with a config that contains expressions, in which case\n * the existing expressions are cleared already, and so\n * there is no need to preserve the array.\n */\n let clear_expressions = false;\n\n for (const expression of expressions) {\n let alias = getExpressionAlias(expression);\n\n // Each expression from the editor should already have\n // an alias set. While we can auto-generate aliases, we\n // would need to setAttribute again and risk entering an\n // infinite recursion, so just let it fall into the error\n // state and clear the expressions.\n if (expression_schema[alias]) {\n validated_expressions[alias] = expression;\n } else {\n if (alias === undefined) {\n console.warn(`Failed to set \"expressions\" attribute: \"${expression}\" does not have an alias, i.e: // Expression Alias \\n \"x\" + \"y\"`);\n } else {\n // alias is guaranteed to be in the errors map\n console.warn(`Error in expression \"${alias}\": ${errors[alias]}\\nFailed to set \"expressions\" attribute: expression \"${expression}\" is invalid.`);\n }\n clear_expressions = true;\n }\n }\n\n if (clear_expressions) {\n // recurses one level down but will not make any calls\n // to Perspective.\n this.setAttribute(\"expressions\", null);\n }\n\n // Need to remove old expressions from the viewer DOM and\n // config so they don't mess up state. To do this, we need\n // to get the expression columns that are currently in the DOM,\n // as this callback runs after the attribute is already set\n // with the new value.\n const active_expressions = this._get_view_active_columns()\n .filter(x => x.classList.contains(\"expression\"))\n .map(x => x.getAttribute(\"expression\"));\n const inactive_expressions = this._get_view_inactive_columns()\n .filter(x => x.classList.contains(\"expression\"))\n .map(x => x.getAttribute(\"expression\"));\n\n const old_expressions = active_expressions.concat(inactive_expressions);\n const to_remove = this._diff_expressions(old_expressions, expressions);\n\n if (to_remove.length > 0) {\n this._reset_expressions_view(to_remove);\n }\n\n expressions = Object.values(validated_expressions);\n this.setAttribute(\"expressions\", JSON.stringify(expressions));\n } else {\n console.warn(`Applying unvalidated expressions: ${expressions} because the viewer does not have a Table attached!`);\n }\n\n this._update_expressions_view(expressions, expression_schema);\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n await this._debounce_update();\n resolve();\n })();\n }\n\n /* eslint-enable max-len */\n\n /**\n * The set of column aggregate configurations.\n *\n * @kind member\n * @type {Object}\n * @param {Object} aggregates A dictionary whose keys are column names, and\n * values are valid aggregations. The `aggregates` attribute works as an\n * override; in lieu of a key for a column supplied by the developers, a\n * default will be selected and reflected to the attribute based on the\n * column's type. See {@link perspective/src/js/defaults.js}\n * @fires PerspectiveViewer#perspective-config-update\n * @example <caption>via Javascript DOM</caption>\n * let elem = document.getElementById('my_viewer');\n * elem.setAttribute('aggregates', JSON.stringify({x: \"distinct count\"}));\n * @example <caption>via HTML</caption>\n * <perspective-viewer aggregates='{\"x\": \"distinct count\"}'>\n * </perspective-viewer>\n */\n @json_attribute\n aggregates(show) {\n if (show === null || show === undefined || Object.keys(show).length === 0) {\n if (this.hasAttribute(\"aggregates\")) {\n this.removeAttribute(\"aggregates\");\n }\n show = {};\n }\n\n let lis = this._get_view_dom_columns();\n lis.map(x => {\n let agg = show[x.getAttribute(\"name\")];\n if (agg) {\n x.setAttribute(\"aggregate\", Array.isArray(agg) ? JSON.stringify(agg) : agg);\n } else {\n x._set_default_aggregate();\n }\n });\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * The set of column filter configurations.\n *\n * @kind member\n * @type {Array<Array>} filters An Array of filter configs. A filter\n * config is an Array of three elements: * The column name. * The filter\n * operation as a String. See\n * {@link perspective/src/js/config/constants.js} * The filter argument, as\n * a String, float or Array<String> as the filter operation demands.\n * @fires PerspectiveViewer#perspective-config-update\n * @example <caption>via Javascript DOM</caption>\n * let filters = [\n * [\"x\", \"<\", 3],\n * [\"y\", \"contains\", \"abc\"]\n * ];\n * let elem = document.getElementById('my_viewer');\n * elem.setAttribute('filters', JSON.stringify(filters));\n * @example <caption>via HTML</caption>\n * <perspective-viewer filters='[[\"x\", \"<\", 3], [\"y\", \"contains\", \"abc\"]]'>\n * </perspective-viewer>\n */\n @array_attribute\n filters(filters) {\n if (filters === null || filters === undefined || filters.length === 0) {\n if (this.hasAttribute(\"filters\")) {\n this.removeAttribute(\"filters\");\n }\n filters = [];\n }\n if (!this._updating_filter) {\n var inner = this._filters.querySelector(\"ul\");\n this._update_column_list(\n filters,\n inner,\n (filter, expressions) => {\n const fterms = JSON.stringify({\n operator: filter[1],\n operand: filter[2]\n });\n const name = filter[0];\n // either the whole expression string or undefined\n let expression = findExpressionByAlias(name, expressions);\n return this._new_row(name, undefined, undefined, fterms, undefined, expression);\n },\n (filter, node) =>\n node.getAttribute(\"name\") === filter[0] &&\n node.getAttribute(\"filter\") ===\n JSON.stringify({\n operator: filter[1],\n operand: filter[2]\n })\n );\n }\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * Sets the currently selected plugin, via its `name` field, and removes\n * any children the previous plugin may have left behind in the light DOM.\n *\n * @type {String}\n * @fires PerspectiveViewer#perspective-config-update\n */\n set plugin(v) {\n if (v === \"null\" || v === null || v === undefined) {\n (this._vieux._instance || this._vieux).js_set_plugin();\n return;\n }\n\n if (this.hasAttribute(\"plugin\")) {\n let plugin = this.getAttribute(\"plugin\");\n (this._vieux._instance || this._vieux).js_set_plugin(plugin);\n } else {\n (this._vieux._instance || this._vieux).js_set_plugin();\n return;\n }\n }\n\n /**\n * Sets this `perspective.table.view`'s `column_pivots` property.\n *\n * @kind member\n * @type {Array<String>} Array of column names\n * @fires PerspectiveViewer#perspective-config-update\n */\n @array_attribute\n \"column-pivots\"(pivots) {\n if (pivots === null || pivots === undefined || pivots.length === 0) {\n if (this.hasAttribute(\"column-pivots\")) {\n this.removeAttribute(\"column-pivots\");\n }\n pivots = [];\n }\n\n const inner = this._column_pivots.querySelector(\"ul\");\n this._update_column_list(pivots, inner, (pivot, expressions) => {\n // either the whole expression string or undefined\n let expression = findExpressionByAlias(pivot, expressions);\n return this._new_row(pivot, undefined, undefined, undefined, undefined, expression);\n });\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * Sets this `perspective.table.view`'s `row_pivots` property.\n *\n * @kind member\n * @type {Array<String>} Array of column names\n * @fires PerspectiveViewer#perspective-config-update\n */\n @array_attribute\n \"row-pivots\"(pivots) {\n if (pivots === null || pivots === undefined || pivots.length === 0) {\n if (this.hasAttribute(\"row-pivots\")) {\n this.removeAttribute(\"row-pivots\");\n }\n pivots = [];\n }\n\n const inner = this._row_pivots.querySelector(\"ul\");\n this._update_column_list(pivots, inner, (pivot, expressions) => {\n // either the whole expression string or undefined\n let expression = findExpressionByAlias(pivot, expressions);\n return this._new_row(pivot, undefined, undefined, undefined, undefined, expression);\n });\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * Determines whether this viewer is editable or not (though it is\n * ultimately up to the plugin as to whether editing is implemented).\n *\n * @kind member\n * @type {Boolean} Is this viewer editable?\n * @fires PerspectiveViewer#perspective-config-update\n */\n set editable(x) {\n if (x === \"null\") {\n if (this.hasAttribute(\"editable\")) {\n this.removeAttribute(\"editable\");\n }\n } else {\n this.toggleAttribute(\"editable\", true);\n }\n this._debounce_update({force_update: true});\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n }\n\n /**\n * Determines the render throttling behavior. Can be an integer, for\n * millisecond window to throttle render event; or, if `undefined`,\n * will try to determine the optimal throttle time from this component's\n * render framerate.\n *\n * @kind member\n * @type {Number|String} The throttle rate - milliseconds (integer), or the\n * enum \"adaptive\" for a dynamic throttle based on render time.\n * @example\n * <!-- Only draws at most 1 frame/sec. -->\n * <perspective-viewer throttle=\"1000\"></perspective-viewer>\n */\n set throttle(x) {\n if (x === \"null\") {\n if (this.hasAttribute(\"throttle\")) {\n this.removeAttribute(\"throttle\");\n }\n }\n\n this._vieux.setThrottle(this.getAttribute(\"throttle\"));\n }\n\n /*\n * Determines whether row selections is enabled on this viewer (though it is\n * ultimately up to the plugin as to whether selectable is implemented).\n *\n * @kind member\n * @type {Boolean} Is this viewer editable?\n * @fires PerspectiveViewer#perspective-config-update\n */\n set selectable(x) {\n if (x === \"null\") {\n if (this.hasAttribute(\"selectable\")) {\n this.removeAttribute(\"selectable\");\n }\n } else {\n this.toggleAttribute(\"selectable\", true);\n }\n this._debounce_update({force_update: true});\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n }\n\n /**\n * This element's `perspective.table` instance.\n *\n * @readonly\n */\n get table() {\n return this._table;\n }\n\n /**\n * This element's `perspective.table.view` instance. The instance itself\n * will change after every `PerspectiveViewer#perspective-config-update`\n * event.\n *\n * @readonly\n */\n get view() {\n return this._view;\n }\n\n /**\n * Load data. If `load` or `update` have already been called on this\n * element, its internal `perspective.table` will also be deleted.\n *\n * @async\n * @param {any} data The data to load, as a `perspective.Table` or\n * `Promise<perspective.Table>`.\n * @returns {Promise<void>} A promise which resolves once the data is loaded\n * and a `perspective.view` has been created.\n * @fires module:perspective_viewer~PerspectiveViewer#perspective-click\n * PerspectiveViewer#perspective-view-update\n * ]);\n * @example <caption>Load perspective.table</caption>\n * const my_viewer = document.getElementById('#my_viewer');\n * const tbl = await perspective.table(\"x,y\\n1,a\\n2,b\");\n * my_viewer.load(tbl);\n * @example <caption>Load Promise<perspective.table></caption>\n * const my_viewer = document.getElementById('#my_viewer');\n * const tbl = async () => perspective.table(\"x,y\\n1,a\\n2,b\");\n * my_viewer.load(tbl);\n */\n async load(data) {\n let table;\n const resolve = this._set_updating();\n\n if (data instanceof Promise) {\n this._vieux.load(data);\n table = await data;\n } else {\n if (data.type === \"table\") {\n this._vieux.load(Promise.resolve(data));\n table = data;\n } else {\n resolve();\n throw new Error(`Unrecognized input type ${typeof data}. Please use a \\`perspective.Table()\\``);\n }\n }\n if (this.isConnected) {\n await this._load_table(table, resolve);\n } else {\n this._table = table;\n this._table_resolve = resolve;\n }\n }\n\n /**\n * Determine whether to reflow the viewer and redraw.\n *\n */\n @throttlePromise\n async notifyResize() {\n const resized = await this._check_responsive_layout();\n if (!resized && !document.hidden && this.offsetParent) {\n await this._vieux.resize();\n }\n }\n\n /**\n * Duplicate an existing `<perspective-element>`, including data and view\n * settings. The underlying `perspective.table` will be shared between both\n * elements\n *\n * @param {any} widget A `<perspective-viewer>` instance to clone.\n */\n async clone(widget) {\n const resolve = this._set_updating();\n this._load_table(widget.table, resolve);\n this.restore(await widget.save());\n }\n\n /**\n * Deletes this element and clears it's internal state (but not its\n * user state). This (or the underlying `perspective.view`'s equivalent\n * method) must be called in order for its memory to be reclaimed, as well\n * as the reciprocal method on the `perspective.table` which this viewer is\n * bound to.\n *\n * @returns {Promise<Boolean>} Whether or not this call resulted in the\n * underlying `perspective.table` actually being deleted.\n */\n delete() {\n let deleted = this._vieux.delete();\n window.removeEventListener(\"resize\", this._resize_handler);\n return deleted;\n }\n\n /**\n * Restyles the elements and to pick up any style changes\n */\n async restyleElement() {\n await this._restyle_plugin();\n }\n\n /**\n * Serialize this element's attribute/interaction state.\n *\n * @returns {object} a serialized element.\n */\n async save() {\n let obj = {};\n const cols = new Set(PERSISTENT_ATTRIBUTES);\n for (let key = 0; key < this.attributes.length; key++) {\n let attr = this.attributes[key];\n if (cols.has(attr.name)) {\n if (attr.value === \"\") {\n obj[attr.name] = true;\n } else if (attr.name !== \"plugin\" && attr.value !== undefined && attr.value !== null) {\n obj[attr.name] = JSON.parse(attr.value);\n } else {\n obj[attr.name] = attr.value;\n }\n cols.delete(attr.name);\n }\n }\n for (const col of cols) {\n obj[col] = null;\n }\n let plugin = await this._vieux.get_plugin();\n if (plugin.save) {\n obj.plugin_config = plugin.save();\n }\n return obj;\n }\n\n /**\n * Restore this element to a state as generated by a reciprocal call to\n * `save` or `serialize`.\n *\n * @param {Object|String} config returned by `save` or `serialize`.\n * @returns {Promise<void>} A promise which resolves when the changes have\n * been applied.\n */\n async restore(config) {\n if (typeof config === \"string\") {\n config = JSON.parse(config);\n }\n\n for (const key of PERSISTENT_ATTRIBUTES) {\n if (config.hasOwnProperty(key)) {\n let val = config[key];\n if (val === true) {\n this.toggleAttribute(key, true);\n } else if (val !== undefined && val !== null && val !== false) {\n if (typeof val !== \"string\") {\n val = JSON.stringify(val);\n }\n this.setAttribute(key, val);\n } else {\n this.removeAttribute(key);\n }\n }\n }\n\n const plugin_promise = this._vieux.get_plugin();\n const update_promise = this._debounce_update();\n const plugin = await plugin_promise;\n if (plugin.restore && config.plugin_config) {\n plugin.restore(config.plugin_config);\n }\n\n await update_promise;\n }\n\n /**\n * Flush any pending attribute modifications to this element.\n *\n * @returns {Promise<void>} A promise which resolves when the current\n * attribute state has been applied.\n */\n async flush() {\n await Promise.all([this._updating_promise || Promise.resolve(), this.notifyResize.flush(this)]);\n }\n\n /**\n * Reset's this element's view state and attributes to default. Does not\n * delete this element's `perspective.table` or otherwise modify the data\n * state.\n */\n reset() {\n this.removeAttribute(\"row-pivots\");\n this.removeAttribute(\"column-pivots\");\n this.removeAttribute(\"filters\");\n this.removeAttribute(\"sort\");\n this.removeAttribute(\"aggregates\");\n if (this._initial_col_order) {\n this.setAttribute(\"columns\", JSON.stringify(this._initial_col_order));\n } else {\n this.removeAttribute(\"columns\");\n }\n\n this.removeAttribute(\"expressions\");\n this.removeAttribute(\"plugin\");\n this._vieux.get_plugin().then(plugin => {\n plugin.restore({});\n });\n\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n }\n\n /**\n * Download this element's data as a CSV file.\n *\n * @param {Boolean} [flat=false] Whether to use the element's current view\n * config, or to use a default \"flat\" view.\n * @memberof PerspectiveViewer\n */\n async download(flat = false) {\n await this._vieux.download(flat);\n }\n\n /**\n * Copies this element's view data (as a CSV) to the clipboard. This method\n * must be called from an event handler, subject to the browser's\n * restrictions on clipboard access. See\n * {@link https://www.w3.org/TR/clipboard-apis/#allow-read-clipboard}.\n */\n async copy(flat = false) {\n await this._vieux.copy(flat);\n }\n\n /**\n * Opens/closes the element's config menu.\n *\n * @async\n */\n async toggleConfig(force) {\n await this._vieux.toggleConfig(force);\n }\n\n /**\n * Returns a promise that resolves to the element's edit port ID, used\n * internally when edits are made using DataGrid.\n *\n * @async\n */\n async getEditPort() {\n return this._edit_port_lock;\n }\n}\n\n/**\n * `perspective-click` is fired whenever underlying `view`'s grid or chart are\n * clicked providing a detail that includes a `config`, `column_names` and\n * `row`.\n *\n * @event module:perspective_viewer~PerspectiveViewer#perspective-click\n * @type {object}\n * @property {Array} column_names - Includes a list of column names.\n * @property {object} config - Contains a property `filters` that can be applied\n * to a `<perspective-viewer>` through the use of `restore()` updating it to\n * show the filtered subset of data..\n * @property {Array} row - Includes the data row.\n */\n\n/**\n * `perspective-config-update` is fired whenever an configuration attribute has\n * been modified, by the user or otherwise.\n *\n * @event module:perspective_viewer~PerspectiveViewer#perspective-config-update\n * @type {String}\n */\n\n/**\n * `perspective-view-update` is fired whenever underlying `view`'s data has\n * updated, including every invocation of `load` and `update`.\n *\n * @event module:perspective_viewer~PerspectiveViewer#perspective-view-update\n * @type {String}\n */\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nconst DEFAULT_CONFIG = require(\"./settings.js\").default;\n\nmodule.exports.get_types = function() {\n return Object.keys(module.exports.get_config().types);\n};\n\nmodule.exports.get_type_config = function(type) {\n const config = {};\n if (module.exports.get_config().types[type]) {\n Object.assign(config, module.exports.get_config().types[type]);\n }\n if (config.type) {\n const props = module.exports.get_type_config(config.type);\n Object.assign(props, config);\n return props;\n } else {\n return config;\n }\n};\n\nfunction isObject(item) {\n return item && typeof item === \"object\" && !Array.isArray(item);\n}\n\nfunction mergeDeep(target, ...sources) {\n if (!sources.length) return target;\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, {[key]: {}});\n mergeDeep(target[key], source[key]);\n } else {\n Object.assign(target, {[key]: source[key]});\n }\n }\n }\n\n return mergeDeep(target, ...sources);\n}\n\nglobal.__PERSPECTIVE_CONFIG__ = undefined;\n\nmodule.exports.override_config = function(config) {\n if (global.__PERSPECTIVE_CONFIG__) {\n console.warn(\"Config already initialized!\");\n }\n global.__PERSPECTIVE_CONFIG__ = mergeDeep(DEFAULT_CONFIG, config);\n};\n\nmodule.exports.get_config = function get_config() {\n if (!global.__PERSPECTIVE_CONFIG__) {\n global.__PERSPECTIVE_CONFIG__ = mergeDeep(DEFAULT_CONFIG, global.__TEMPLATE_CONFIG__ || {});\n }\n return global.__PERSPECTIVE_CONFIG__;\n};\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\n/**\n * The default settings which populate `perspective.config.js`.\n */\nmodule.exports.default = {\n /**\n * `types` are the type-specific configuration options. Each key is the\n * name of a perspective type; their values are configuration objects for\n * that type.\n */\n types: {\n float: {\n /**\n * Which filter operator should be the default when a column of this\n * type is pivotted.\n */\n filter_operator: \"==\",\n\n /**\n * Which aggregate should be the default when a column of this type\n * is pivotted.\n */\n aggregate: \"sum\",\n\n /**\n * The format object for this type. Can be either an\n * `toLocaleString()` `options` object for this type (or supertype),\n * or a function which returns the formatted string for this type.\n */\n format: {\n style: \"decimal\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }\n },\n string: {\n filter_operator: \"==\",\n aggregate: \"count\"\n },\n integer: {\n filter_operator: \"==\",\n aggregate: \"sum\",\n format: {}\n },\n boolean: {\n filter_operator: \"==\",\n aggregate: \"count\"\n },\n datetime: {\n filter_operator: \"==\",\n aggregate: \"count\",\n format: {\n week: \"numeric\",\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\"\n },\n null_value: -1\n },\n date: {\n filter_operator: \"==\",\n aggregate: \"count\",\n format: {\n week: \"numeric\",\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\"\n },\n null_value: -1\n }\n }\n};\n","\"use strict\";\n\n/* eslint-env browser */\n\n/* eslint-disable no-undef, no-use-before-define, new-cap */\nmodule.exports = function (content, workerConstructor, workerOptions, url) {\n try {\n try {\n var blob;\n\n try {\n // New API\n blob = new window.Blob([content]);\n } catch (e) {\n // BlobBuilder = Deprecated, but widely implemented\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n blob = new BlobBuilder();\n blob.append(content);\n blob = blob.getBlob();\n }\n\n var URL = window.URL || window.webkitURL;\n var objectURL = URL.createObjectURL(blob);\n var worker = new window[workerConstructor](objectURL, workerOptions);\n URL.revokeObjectURL(objectURL);\n return worker;\n } catch (e) {\n return new window[workerConstructor](\"data:application/javascript,\".concat(encodeURIComponent(content)), workerOptions);\n }\n } catch (e) {\n if (!url) {\n throw Error(\"Inline worker is not supported\");\n }\n\n return new window[workerConstructor](url, workerOptions);\n }\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(6058);\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => module['default'] :\n\t\t() => module;\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop)","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;"],"sourceRoot":""}
\No newline at end of file